第八章:连接查询
一、连接查询
基本概念
- 当查询结果来源于多张表时,需要将多张表连成一个大的数据集,在筛选合适的结果
- 连接查询可以通过连接运算符(连接条件)可以实现多个表查询
内连接
- 查询的结果把两张表中相同的地方连接起来
左链接
- 查询结果包括内连接,同时查询左表特有的数据,对于右表中不存在的数据使用null填充
右连接
- 查询结果包括内连接,同时查询右表特有的数据,对于左表中不存在的数据使用null填充
二、连接语法
内连接语法
1.内连接标准语法推荐
主要找2张表中关联(相同)字段
-- 语法一: select * from 表1 inner join 表2 on 表1.字段=表2.字段
/*根据表中相同字段id来进查找*/ select * from a inner join b on a.id = b.id;
错误示例
强行关联,导致错误
1.2内连接隐式连接
用where连接,但是一般使用第一种方法
select * from 表1,表2 where 表1.字段 = 表2.字段 -- 例子 select * from students , score where students.name = score.name;
1.3内连接查询,显示指定的字段
-- 学生表与分数表内连接,只显示爱好和分数 select score,aihao from students inner join score on students.name = score.name;
错误示例:
学生表与分数表内连接,只显示班级、分数、爱好
正确示例
-- 学生表与分数表内连接,只显示爱好和分数 select students.class,score,aihao from students inner join score on students.name = score.name;
1.4表的别名在查询中使用
作用:有的表名太长不太好记录,所以用别名来代替
as 可省略不写
/*语法*/ select * from 表名1 别名1 inner join 表名2 别名2 on 别名1.字段名 = 别名2.字段名
例子:
/* 把students 表起名为st score表起名为sc,所以下面关联字段就变为 */ select score,aihao from students st inner join score sc on st.name = sc.name; -- 用where语句查询 /*查询学生叫杨洋,同时显示成绩对应的课程*/ select score,coursename cname from score sc inner join course co on sc.courseid = co.courseid where SC.name = '杨洋'; -- 用where & and语句查询 /*查询许问问,分数大于50的成绩和课程*/ select score,coursename from score sc inner join course co on sc.courseid = co.courseid where SC.name = '许问问' and sc.score > 60;
1.5多表联查
- 查询语句需要多张关联
- 两表中有相同字段,查询中要加上表名称,不加会报错
多表联查
/*内连接多表联查语法*/ select * from 表名1 inner join 表名2 on 表1.字段=表2.字段 inner join 表名3 on 表2.字段 = 表3.字段 where 条件;
-- 例子 -- 查询学生信息、成绩、以及成绩对应的课程表 SELECT * from students st inner join score sc on st.name = sc.name inner join course co on sc.courseid = co.courseid; -- 多表联查带where条件 -- 查询所有学生数学成绩,只显示姓名、成绩、课程 SELECT st.name,sc.score,co.coursename from students st inner join score sc on st.name = sc.name inner join course co on sc.courseid = co.courseid where co.coursename = '数学'; -- 多表联查带order by、limit字段 /* 查询女同学的分数*,显示成绩、课程、名字只显示前3行*/ select sc.score,co.courseid,st.name from students st inner join score sc on st.name = sc.name inner join course co on sc.courseid = co.courseid where st.sex = '女' ORDER BY sc.score limit 3;
左连接语法
/*语法*/ select * from 表名1 left join 表名2 on 表名1.字段名1 = 表名2.字段名2
-- 例子 /*用左连接查看表中学生成绩,名字*/ select sc.score,st.name from students st left join score sc on st.name = sc.name;
显示表中全部名字,没有成绩显示null
右连接语法
/*语法*/ select * from 表名1 right join 表名2 on 表名1.字段名1 = 表名2.字段名2
/*用右连接查询学生为女同学的爱好*/ select sc.like from students st right join score sc on st.name = sc.name where sex = '女'; order by&limit练习 /*用右连接查询学生为女同学的爱好,成绩从高到低,显示2,6行直接的数据*/ select sc.like,sc.score from students st right join score sc on st.name = sc.name where sex = '女' order by sc.score desc limit 1,3;
显示表中全部like字段,没有like显示null
总结内连接和左右连接区别:
内连接只显示满足条件
左右连接,只显示满足条件+原来表中的字段
- 查询结果包括内连接,同时查询右表特有的数据,对于左表中不存在的数据使用null填充
- 查询结果包括内连接,同时查询左表特有的数据,对于右表中不存在的数据使用null填充
- 查询的结果把两张表中相同的地方连接起来
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!









