数据库多表查询

发布于:2024-05-30 ⋅ 阅读:(141) ⋅ 点赞:(0)

多表查询:

SELECT *FROM stu_table,class WHERE stu_table.c_id=class.c_id;

多表查询——内连接

查询两张表交集部分。

隐式内连接:

#查询学生姓名,和班级名称,隐式调用
SELECT stu_table.s_name,class.c_name FROM stu_table,class WHERE stu_table.c_id=class.c_id;

显式内连接:

#查询学生姓名,年龄和班级名称,隐式调用
SELECT stu_table.s_name,stu_table.s_age,class.c_name FROM stu_table JOIN class ON stu_table.c_id=class.c_id;

多表查询——外连接

左外连接:相当于查询表1(左表)的所有数据,包含表1和表2交集部分的数据。

#查询学生所有信息,及班级,用左连接
SELECT stu_table.*,class.c_name FROM stu_table LEFT JOIN class ON stu_table.c_id=class.c_id;

右外连接:相当于查询表2(右表)的所有数据,包含表1和表2交集的部分数据。

#查询所有的班级信息,和班级对应的学生姓名,用右连接
SELECT class.*,stu_table.s_name FROM stu_table RIGHT JOIN class ON stu_table.c_id=class.c_id;

多表查询——联合查询(UNION、union all)

union:可以去重

把多次查询的结果合并起来,形成一个新的查询。

#查询年纪大于等于18的所有信息,和性别为男的所有信息
SELECT * FROM stu_table WHERE s_age>=18
UNION 
SELECT * FROM stu_table WHERE s_sex="男";

多表查询——子查询——标量子查询

#查询在一班的所有同学信息
SELECT c_id FROM class WHERE c_name="xg1901";

SELECT * FROM stu_table WHERE c_id=(SELECT c_id FROM class WHERE c_name="xg1901");

 

多表查询——子查询——列子查询

#查询在一和三班的所有同学信息
SELECT c_id FROM class WHERE c_name="xg1901" OR c_name="xg1903";
SELECT *FROM stu_table WHERE c_id IN (1,3);

SELECT * FROM stu_table WHERE c_id IN (SELECT c_id FROM class WHERE c_name="xg1901" OR c_name="xg1903");

多表查询——子查询——行子查询

常用操作符:=,<>,in ,not in

多表查询——子查询——表子查询 


网站公告

今日签到

点亮在社区的每一天
去签到