一、连接查询
1.1、内连接
概念:当查询结果的列来源于多张表时,需要将多张表连接成一个大的数据集,再选择合适的列返回
语法:
select * from 表1 inner join 表2 on 表1.列=表2.列
例子:
select * from students stu
inner join scores sc on stu.studentNo = sc.studentNo
1.2、左连接
语法:
select * from 表1 left join 表2 on 表1.列=表2.列
例子:
select * from students stu
left join scores sc on stu.studentNo = sc.studentNo
1.3、右连接
语法:
select * from 表1 right join 表2 on 表1.列=表2.列
例子:
select * from students stu
right join scores sc on stu.studentNo = sc.studentNo
二、自关联
自关联顾名思义就是自己关联自己,一张表用不同的别名表示。
例子:查询河南省的所有的市区
select * from areas as a1
inner join areas as a2 on a1.aid=a2.pid
inner join areas as a3 on a2.aid=a3.pid where a1.atitle=‘湖南省’
三、子查询
3.1、子查询介绍
子查询:在一个 select 语句中,嵌入了另外一个 select 语句,那么嵌入的 select 语句称之为子查询语句。一般有“的”这个字的时候都会用到子查询。
例子:查询大于平均年龄的学生
查询班级学生平均年龄 select avg(age) from students
查询大于平均年龄的学生 select * from students where age > 21.4167
select * from students where age > (select avg(age) from students);
3.2、子查询充当数据源
例5:查询数据库和系统测试的课程成绩(多列多行)
select * from scores s inner join (select * from courses where name in (‘数据库’,‘系统测试’)) c on s.courseNo = c.courseNo
3.3、子查询和内连接配合使用案例
例子:列出工资比王昭君高的员工
select * from employees e
inner join salary s on e.empid=s.empid where s.salary> (select s.salary from employees e inner join salary s on e.empid=s.empid where e.empname=‘王昭君’)