一、表连接
在实际工作中,很多时候获取的数据来源于多张表,一个表没法满足需求,就需要进行多表查询工作,而多表查询的实现需要借助于表连接的操作。
表连接的方式:
1)内连接,让多个表进行关联,然后只有表与表之间能匹配到的情况下,才会有查询结果
2)外连接,至少会返回一个表的所有行,先写的时左表,后写的时右表
1. 内连接
1.1 where进行表间关联
格式:
select 表名1.列名1,表名2.列名2,... from 表名1,表名2 where 表名1.列名1=表名2.列名2;
1.2 inner join on进行表间关联
格式:
select 表名1.列名1,表名2.列名2,... from 表名1 [inner] join 表名2 on 表名1.列名1=表名2.列名2;
注意:
多表查询,最关键的一点是表与表之间有能够关联的列,对于关联的列的要求:列名可以不一样,但是这个列的数据类型必须一样。
1.3 额外条件
格式一:
select 表名1.列名1,表名2.列名2,... from 表名1,表名2 where 表名1.列名1=表名2.列名2 and 其他条件;
格式二:
select 表名1.列名1,表名2.列名2,... from 表名1 [inner] join 表名2 on 表名1.列名1=表名2.列名2 and 其他条件;
注:两个表的单独列可以不写列名,相同列要写:表名.列名
1.4 针对多张表查询
表数量大于2,两两结合
格式一:
select 表名1.列名1,表名2.列名2,... from 表名1,表名2,表名3 where 表名1.列名1=表名2.列名1 and 表名2.列名2=表名3.列名2;
格式二:
select 表名1.列名1,表名2.列名2,...
from 表名1 [inner] join 表名2
on 表名1.列名1=表名2.列名2 inner join 表名3
on 表名2.列名2=表名3.列名2
and 其它条件;
2.外连接
2.1 左外部连接
对左边的表不加限制,返回的是左表所有行
格式:
select 表名1.列名1,表名2.列名2,...
from 表名1 left [outer] join 表名2
on 表名1.列名1=表名2.列名2 and 其他条件;
如果左表中数据在右表中没找到匹配信息,对应位置为Null
2.2 右外部连接
对右边的表不加限制,返回的是右表所有行
格式:
select 表名1.列名1,表名2.列名2,...
from 表名1 right [outer] join 表名2
on 表名1.列名1=表名2.列名2 and 其他条件;
如果右表中数据在左表中没找到匹配信息,对应位置为Null
二、子查询
1. 查询语句中嵌套查询语句
格式一(in):
select 列名 from 表名 where 列名 in (select子查询语句);
遵循原则:条件要什么,子查询就查什么
格式二(=):
select 列名 from 表名 where 列名 = (select子查询语句);
对于子查询结果有且只有一个
2. 适合子查询的情况
1)给的条件没有明确说明
如:查询和王五同学所在一个系的学生信息
2)因为where后不能直接写聚合函数,那么可以借助于子查询,直接把聚合函数结果查询出来,通过结果来进行操作
3. 嵌套子查询
指的是子查询中还包含另一个子查询
4. 相关子查询
也叫胆汁子查询,子查询结果有且只有一个
insert和select结合:把查询结果插入到某张表中
格式:
insert into 表名 select子查询语句;
update和select结合:
update 表名 set 更新语句 where 列名 in (select子查询语句);
delete和select结合:
delete from 表名 where 列名 in (select子查询语句);
看完点个赞呗!