内连接
链接查询可以实现多个表的查询,当查询的字段数据来自不同的表就可以使用链接查询。
连接查询可分为
- 内连接查询
- 左连接查询
- 右连接查询
- 自连接查询
内连接查询
语法
select 字段 from 表1 inner join 表2 on 表1.字段1=表2.字段2;
- inner join就是内连接查询关键字
- on就是链接查询条件
例:使用内链接查询学生表与班级表
select * from students inner join class on students.id=class.id;
总结
- 内连接使用inner join..on..,on表示两个表的链接查询条件
- 内连接根据链接查询条件取出两个表的”交集“
左连接
以左表为主根据条件查询右表数据,如果根据条件查询右表数据不存在使用null值填充
语法
select 字段 from 表1 left join 表2 on 表1.字段1=表2.字段2;
- left join就是左连接查询关键字
- on就是链接查询条件
- 表1是左表
- 表2是右表
例:使用左连接查询学生表与班级表
select * from students as s left join class as c on s.cls_id=c.id;
总结
- 左连接使用left join .. on ..,on表示两个表的链接查询条件
- 左连接以左表为主根据条件查询游标数据,右表数据不存在使用null值填充
右连接
以右表为主根据条件查询左表数据,如果根据条件查询坐标数据不存在使用null值填充
语法
select 字段 from 表1 right join 表2 on 表1.字段1=表2.字段2;
- right join就是右连接查询关键字
- on就是链接查询条件
- 表1是左表
- 表2是右表
使用右连接查询学生表与班级表
select * from students as s right join class as c on s.id=c.id;
总结
- 右连接使用right join .. on..., on表示两个表的链接查询条件
- 右连接以右表为主根据条件查询左表数据,坐标数据不存在使用null值填充。
自链接
坐标和右表是同一个表,根据链接查询条件查询两个表中的数据。
创建areas表
create table areas{
id varchar(30) not null primary key,
title varchar(30);
pid varchar(30)
};
执行sql文件给areas表导入数据
source areas.sql;
自链接查询的用法
select c.id,c.title,c.pid,p.title from areas as c inner join areas as p on c.pid=p.id where p.title='山西省';
- 自联结查询必须对表起别名
总结
- 自链接查询就是把一张表模拟成左右两张表,然后进行连表查询
- 自链接就是一种特殊的链接方式,链接的表还是本身这张表。
子查询
在一个select语句中,嵌入了另一个select语句,那么被嵌入的select语句就成为子查询语句,外部那个select语句被称为著=主查询
主查询与子查询的关系
- 子查询是嵌入到主查询中
- 子查询是辅助主查询的,要么充当条件,要么充当数据源
- 子查询是可以独立存在的语句,是一条完整的select语句
列:查询大于平均年龄的学生
select * from students where age>(select avg(age) from students);
查询年龄最大,身高最高的学生
select * from students where (age,height)=(select max(age),max(height) from students);
总结
- 子查询是一个完整的SQL语句,子查询被嵌入到一对小括号里