1.3 内连接的类型
传统连接 where
自连接
join uing ☆☆
join on ☆☆☆☆☆
1.4 join on 的语法
表A和表B横向拼成 一行
查询张三的家庭住址
SELECT A.name,B.address FROM
A JOIN B
ON A.id=B.id
WHERE A.name='zhangsan'
#语法
select xxx
from A
join B
on A.xxx= B.yyy
where
group by
having
order
limit
- 查询一下世界上人口数量小于100人的城市名和国家名
SELECT b.name ,a.name ,a.population
FROM city AS a
JOIN country AS b
ON b.code=a.countrycode
WHERE a.Population<100
多表连接的套路:
1.根据需求找到关联表
2.找到表与表的关联列
2. 多表连接案例
#进入world库练习
use world;
2.1查询一下世界上人口数量小于100人的城市名,国家名,国土面积和人口数
SELECT country.name,country.SurfaceArea,city.name,city.Population
FROM city
JOIN country
ON city.CountryCode=country.code
WHERE city.Population<100;
2.2 打开school表
2.2.1 查询zhangs学习了几门课程
SELECT student.sname,COUNT(sc.cno)
FROM student
JOIN sc
ON student.sno=sc.sno
WHERE student.sname='zhang3';
2.2.2 统计zhang3学习课程名称
SELECT student.sname,GROUP_CONCAT(course.cname)
FROM student
JOIN sc
ON student.sno=sc.sno
JOIN course
ON sc.cno=course.cno
WHERE student.sname='zhang3'
GROUP BY student.sno;
2.2.3 oldguo老师教了学生的个数
SELECT teacher.tname,GROUP_CONCAT(student.sname),COUNT(student.sname)
FROM student
JOIN sc
ON student.sno=sc.sno
JOIN course
ON sc.cno=course.cno
JOIN teacher
ON course.tno=teacher.tno
WHERE teacher.tname='oldguo'
GROUP BY teacher.tno;
2.2.4 每位老师所教课程的平均分,并按平均分排序
SELECT teacher.tname,AVG(sc.score)
FROM teacher
JOIN course
ON teacher.tno=course.tno
JOIN sc
ON course.cno=sc.cno
GROUP BY teacher.tno
ORDER BY AVG(sc.score) DESC;
2.2.5 查询oldguo所教的不及格的学生姓名
SELECT teacher.tname,student.sname,sc.score
FROM teacher
JOIN course
ON teacher.tno=course.tno
JOIN sc
ON course.cno=sc.cno
JOIN student
ON sc.sno=student.sno
WHERE teacher.tname='oldguo' AND sc.score<60;
2.2.6 查询所有老师所教学生不及格的信息
SELECT teacher.tname,GROUP_CONCAT(student.sname)
FROM teacher
JOIN course
ON teacher.tno=course.tno
JOIN sc
ON course.cno=sc.cno
JOIN student
ON sc.sno=student.sno
WHERE sc.score<60
GROUP BY teacher.tname
3.别名的使用
SELECT 别名.列
FROM 表 表别名
WHERE 别名.列
GROUP BY 别名.列
HAVING 列别名
ORDER BY 列别名
3.1 表别名
SELECT a.tname,GROUP_CONCAT(d.sname)
FROM teacher AS a
JOIN course AS b
ON a.tno=b.tno
JOIN sc AS c
ON b.cno=c.cno
JOIN student AS d
ON c.sno=d.sno
WHERE c.score<60
GROUP BY a.tname
说明:表别名一般是在FROM的表的表名,或者join后的表的别名
在 WHERE,GROUP BY,select后的列,having,ORDER BY
3.2 列别名
SELECT a.tname AS 讲师 ,GROUP_CONCAT(d.sname) AS 学生
FROM teacher AS a
JOIN course AS b
ON a.tno=b.tno
JOIN sc AS c
ON b.cno=c.cno
JOIN student AS d
ON c.sno=d.sno
WHERE c.score<60
GROUP BY a.tname
说明:列别名一般是在select后的列,定义的别名
– 作用:
– 1.结果集显示会以别名形式展示
– 2.在having 和order by 中可以调用列别名
-- 例子:每位老师所教课程的平均分,并按平均分排序
SELECT a.tname AS 讲师,AVG(c.score) AS 平均分
FROM teacher AS a
JOIN course AS b
ON a.tno=b.tno
JOIN sc AS c
ON b.cno=c.cno
GROUP BY a.tno
ORDER BY 平均分;
4.外链接简介☆☆☆
left join 左链接
right join 右链接
A left join B
on A.x=B.y
where
A left join B
on A.x=B.y
and
结论:
- 多表连接中,小标驱动大表
- 通过left join 强制选定驱动表
=================================
工作中还需要学习的内容:
1.内置函数
2.存储过程
3.函数
4.触发器
5.事件
6.视图
7.JSON语法
最后的话
最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!
资料预览
给大家整理的视频资料:
给大家整理的电子书资料:
如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
大家!
资料预览
给大家整理的视频资料:
[外链图片转存中…(img-d2Qlu8HJ-1714530083717)]
给大家整理的电子书资料:
[外链图片转存中…(img-aytaAvG4-1714530083718)]
如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!