第八章:连接查询

一、连接查询

基本概念

  • 当查询结果来源于多张表时,需要将多张表连成一个大的数据集,在筛选合适的结果
  • 连接查询可以通过连接运算符(连接条件)可以实现多个表查询

内连接

  • 查询的结果把两张表中相同的地方连接起来

左链接

  • 查询结果包括内连接,同时查询左表特有的数据,对于右表中不存在的数据使用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

 总结内连接和左右连接区别:

内连接只显示满足条件

左右连接,只显示满足条件+原来表中的字段

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值