(数据库四)左右连接及内外连接

内连接

内连接:当进行内连接时,系统会自动忽略两个表中对应不起来的数据,结果包含两个表中有联系的所有数据

自然连接

自然连接:自然连接只考虑两个关系中在共同属性上取值相同的元组对。结果中无null,不需要使用修饰词限制连接属性。
关键字:natural join

SELECT * FROM person NATURAL JOIN address;

内连接

关键字:inner join / join
必须使用 using 或 on指定连接属性/条件,否则产生的结果与交叉连接相同

SELECT * FROM students st INNER JOIN score sc using(id);

SELECT * FROM students st INNER JOIN score sc ON st.sid=sc.stu_id;

外连接

外连接:结果包含符合条件的数据,同时包含不符合条件的数据(分为左外连接、右外连接和全外连接)

左外连接

左外连接(left join):左表全部行+右表匹配的行,如果左表中某行在右表中没有匹配的行,则在相关联的结果集行中右表的所有选择列表列均为空值。
关键字:left join on / left outer join on

SELECT * FROM students st LEFT JOIN score sc ON st.sid=sc.stu_id;

使用场景:可以保持左表完整加入另一表中的数据。

右外连接

右外连接(right join):与左外连接恰恰相反,以右表为参照显示数据

right join on / right outer join on

SELECT * FROM students st RIGHT JOIN score sc ON st.sid=sc.stu_id;

使用场景:可以保持右表完整加入另一表中的数据。

全外连接

全外连接(full outer join,MySQL不支持):可通过Union左外连接和右外连接来实现,不管匹配不匹配,全部显示出来,左表在右边没有的显示NULL,右表在左边没有的显示NULL。

SELECT * FROM students st LEFT JOIN score sc ON st.sid=sc.stu_id;
UNION
SELECT * FROM students st RIGHT JOIN score sc ON st.sid=sc.stu_id;

MySQL中存在交叉连接(cross join):返回左表中所有行与右表中所有行的组合,也称笛卡尔积。它有两种表述方式:

SELECT * FROM students CROSS JOIN score;
SELECT * FROM students,score;
### 数据库连接与外连接的区别及使用场景 #### 内连接 (Inner Join)连接返回两个表中满足连接条件的匹配行。这意味着只有当两个表中的记录存在对应关系时,才会出现在结果集中。 ```sql SELECT students.name, grades.score FROM students INNER JOIN grades ON students.id = grades.student_id; ``` 这段SQL语句展示了如何通过`id`字段将`students`表和`grades`表进行内连接,只获取那些既有学生信息又有成绩记录的数据[^5]。 #### 外连接 (Outer Join)连接不仅返回两个表中匹配的行,还会保留不匹配的行。根据保留哪一侧的非匹配行,外连接可分为: - **左连接 (Left Join)**:即使右侧表中不存在对应的记录,也会返回左侧表中的所有记录。 ```sql SELECT students.name, grades.score FROM students LEFT JOIN grades ON students.id = grades.student_id; ``` - **右连接 (Right Join)**:即使左侧表中不存在对应的记录,也会返回右侧表中的所有记录。 ```sql SELECT students.name, grades.score FROM students RIGHT JOIN grades ON students.id = grades.student_id; ``` - **全连接 (Full Join)**:无论两侧是否有匹配项,都会返回两表的所有记录;对于无匹配的情况,在相应位置填充NULL值。 在外连接的情况下,如果某个学生的成绩为空,则该生的名字仍然会显示出来,并且其分数一栏将是NULL[^1]。 #### 使用场景 - 当仅关心共同存在的数据时,应选用**内连接**; - 如果希望查看某一方全部的信息而不局限于双方都有的部分,则适合采用相应的**外连接**形式; - 对于统计分析类需求,比如计算有多少名学生尚未录入成绩等情况,往往需要用到带有NULL处理机制的外连接来实现完整的数据分析功能[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值