MySQL基础(多表关联查寻)

关联查询  多张表关联在一起查询

学号 姓名 性别 电话 专业名称        -- 信息来自于两张表中

关联时没有任何的限制,会产生笛卡尔乘积现象,这是我们不想要的结果

关联查询    内关联    左外关联  右外关联

子查询        多行多列        一行一列        一列多行

-- 把满足条件的关联在一起
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 

MySQL基础(多表关联查寻)_第1张图片 

table:course

MySQL基础(多表关联查寻)_第2张图片 

table:legends

 

你可能感兴趣的:(mysql,数据库)