关联查询 多张表关联在一起查询
学号 姓名 性别 电话 专业名称 -- 信息来自于两张表中
关联时没有任何的限制,会产生笛卡尔乘积现象,这是我们不想要的结果
关联查询 内关联 左外关联 右外关联
子查询 多行多列 一行一列 一列多行
-- 把满足条件的关联在一起
SELECT l.name,l.number,l.height,m.name FROM legends l INNER JOIN major m ON l.majorid=m.id
-- 先笛卡尔乘积然后再条件筛选
SELECT l.name,l.number,l.height,m.name FROM legends l,major m WHERE l.majorid=m.id
-- 左外连接 特点 即使不满足连接条件,也会把左边表中的数据查询出来
SELECT
l.number,
l.name,
l.height,
m.name
FROM
legends l LEFT JOIN major m ON l.majorid=m.id
-- 右外连接
SELECT
COUNT(l.number),
m.name
FROM
legends l RIGHT JOIN major m ON l.majorid =m.id
GROUP BY m.name
SELECT
l.number,
l.name,
m.name mname,
GROUP_CONCAT(c.name) cname
FROM
legends l LEFT JOIN student_course sc ON l.number=sc.number
LEFT JOIN course c ON sc.courseid=c.id
LEFT JOIN major m ON l.majorid=m.id
GROUP BY l.number,l.name,m.name
-- 子查询可以出现在from后面和where后面
-- 在from后面 使用了表子查询(多行多列)
SELECT * FROM (SELECT COUNT(*) c,pos FROM legends GROUP BY pos) t WHERE t.c>2
-- 在where后面 使用标量子查询(一行一列)把子查询结果当做另一个表的数据来源
SELECT * FROM legends WHERE height=(SELECT MAX(height) FROM legends)
-- 在where后面 使用列子查询(一列多行)
SELECT * FROM legends WHERE height IN(SELECT height FROM legends WHERE height IN(200,210))
table:major
table:course
table:legends