多表查询:
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
多表查询——子查询——表子查询