文章目录
- 🍉1.联合查询
- 🥝笛卡尔积
- 🍉2.内连接
- 🥝查询单个数据
- 🥝查询多个数据
- 🍉3.外连接
- 🍉4.自连接
- 🍉5.合并查询
🍉1.联合查询
🥝笛卡尔积
实际开发中往往数据来自不同的表,所以需要多表联合查询。多表查询是对多张表的数据取笛卡尔积:
笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员 [1]
🍉2.内连接
select 字段 from 表1 别名1 [inner] join 表2 别名2 on 连接条件 and 其他条件;
select 字段 from 表1 别名1,表2 别名2 where 连接条件 and 其他条件;
现有如下一个student表和classes表以及score表
🥝查询单个数据
我们要在这个表中查询菩提老祖的成绩,该如何做呢?
select sco.score from student stu inner join score sco on stu.id=sco.student_id and stu.name=‘菩提老祖’;
或者
select sco.score from student stu, score sco where stu.id=sco.student_id and stu.name=‘菩提老祖’;
🥝查询多个数据
查询所有同学的总成绩,及同学的个人信息:
select stu.sn, stu.name, stu.qq_name, sum( sco.score ) from student stu join score sco on stu.id = sco.student_id froup by sco.student_id;
🍉3.外连接
外连接分为左外连接和右外连接。如果联合查询,左侧的表完全显示我们就说是左外连接;右侧的表完全显示我们就说是右外连接。
– 左外连接,表1完全显示
select 字段名 from 表名1 left join 表名2 on 连接条件;
– 右外连接,表2完全显示
select 字段 from 表名1 right join 表名2 on 连接条件;
查询所有同学的成绩,及同学的个人信息,如果该同学没有成绩,也需要显示
其中’老外学中文’没有考试成绩,但也显示了出来。
🍉4.自连接
自连接是指在同一张表连接自身进行查询。
显示所有“计算机原理”成绩比“Java”成绩高的成绩信息
SELECT
s1.*
FROM
score s1
JOIN score s2 ON s1.student_id = s2.student_id
AND s1.score < s2.score
AND s1.course_id = 1
AND s2.course_id = 3;
🍉5.合并查询
在实际应用中,为了合并多个select的执行结果,可以使用集合操作符 union,union all。使用UNION
和UNION ALL时,前后查询的结果集中,字段需要一致。
- union
该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行。
查询id小于3,或者名字为“英文”的课程:
select * from course where id<3
union
select * from course where name=‘英文’;
- union all
该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行。
select * from course where id<3
union all
select * from course where name=‘英文’;
以上就是本文所有内容,如果对你有帮助的话,点赞收藏支持一下吧!