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 

 

table:course

 

table:legends

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

13#B303开发社区

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值