1.子查询:
子查询就是查询中的查询,常用的操作符有in
和all
in
表示在某一个范围内
all
所有的目的均要满足设定条件
select <待查字段> from <表名> where <条件字段> =(select <条件字段> from .......)
2.外键约束:
外键约束是确保数据正确性的一种手段,经常与主键一起使用
通常用来约束两个表中数据的一致性
<constraint 约束名称> foreign key <子表要设置为外键的列名> references <父表名称(父表主键)>[on delete cascade] [on update cascade]
eg:
constraint fk_student foreign key(school_id) references school(id)
3.多表查询之等值连接:
就是将多个表之间的相同的字段作为条件查询数据的,通常多个表之间相同的字段都指的是标语表之间的主外键
select <字段列表> from <表A,表B> where <连接条件>;
eg:
select student.name as 学生姓名, student.score as 学生成绩,
school.name as 学校名称 from student,school
where student.school_id=school.id;
4.多表查询之内连接:
查询都是符合条件的结果
select <字段列表> from <表A> inner join <表B> on <连接条件>;
eg:
select student.name as 学生姓, student.score as 学生成绩,
school.name as 学校名称 from student inner join school
on student.school_id=school.id;
5.多表查询之外连接:
- 左外连接:
除了返回表中符合条件的记录外还要加上左表中剩下的全部记录
select <字段列表> from <表A> left join <表B> <连接条件>;
eg:
select student.name as 学生姓名,student.score as 学生成绩,
school.name as 学校名称 from school left join student
on student.school_id=school.id;
- 右外连接
除了返回表中符合条件的记录外还要加上右表中剩下的全部记录
select 字段列表 from 表A right join 表B on 连接条件;
eg:
select student.name as 学生姓名,student.score as 学生成绩,
school.name as 学校名称 from student right join school
on student.school_id=school.id;
6.合并查询:
- union关键字用来连接两个查询结果,但是查询结果中的列数和数据类型必须要一致
union在连接查询结果时,会去掉相同的行;
union all不会去掉重复行
select 字段名 from 表名称1
union[all]
select 字段名 from 表名称2
- 对合并后的查询结果排序
(select 字段名 from 表名称1)
union[all]
(select 字段名 from 表名称2)
order by 第一个表中的列名;
- 限制组合查询结果的列数
(select 字段名 from 表名称1)
union[all]
(select 字段名 from 表名称2)
limit 行数;