五、多表连接查询——内连接
1.什么是内连接
根据相同的某列把多个表合并。
2.等值连接【最常用】
使用等于号(=)运算符比较被连接列的列值。
(1)等值连接语法
<1>格式一:
select 表名.列名
from 表名1 [inner] join 表名2
on 表名1.列名=表名2.列名 [...n]
<2>格式二:
select 表名.列名
from 表名1,表名2 [,...]
where 表名1.列名=表名2.列名 [and...]
(2)将学生表(student)和成绩表(student_score)通过学号(student_id)连接起来。【选择全部数据】
<1>使用inner join的方法
select * from student inner join student_score on student.student_id=student_score.student_id;
<2>使用where
select * from student,student_score where student.student_id=student_score.student_id;
(2)将学生表(student)和成绩表(student_score)通过学号(student_id)连接起来。【选择学号、姓名、成绩三列】
select student.student_id,student.name,student_score.score from student join student_score on student.student_id=student_score.student_id;
3.不等值连接
在连接条件使用除了等于号(=)之外的其它比较运算符比较被连接的列的列值。
比如:>、>=、<、<=、!=、<>、!>、!<。
(1)示例:将学生表(student)和成绩表(student_score)通过学号(student_id)使用>连接起来。【选择全部数据】
select * from student join student_score on student.student_id>student_score.student_id;
4.自然连接
自动去除重复的属性列,仅保留所有不重复的属性列。
自然连接中无需指定连接条件,自动匹配列值相同的字段。
(1)示例:将学生表(student)和成绩表(student_score)通过学号(student_id)使用自然连接。【选择全部数据】
select * from student natural join student_score;
(2)示例:将学生表(student)和成绩表(student_score)通过学号(student_id)使用自然连接。【选择部分数据】
select student.student_id,student.name,student_score.student_id,student_score.score
from student natural join student_score;
为什么会有重复值?
虽然说select先写,但是select的操作在这个sql语句中最后执行,首先执行自然连接,然后执行选择数据。在自然连接时得到了一张表,但是这张表的结果被select的操作给覆盖掉了。
来源:CSDN
作者:Python伊甸园
链接:https://blog.csdn.net/weixin_42830697/article/details/103568790