连接查询
-
连接查询
也叫做多表查询,需要关联多个表进行查询
笛卡尔乘积:由于没有使用连接条件,或者连接条件无效 -
SQL99语法
通过使用join关键字实现连接 -
内连接、外连接
select
字段名1,字段名2
from
表1 (inner|left outer|right outer|cross) join 表2 on 关联条件
(inner|left outer|right outer|cross) join 表3 on 关联条件
where
筛选条件
group by
分组字段
having
分组后的筛选条件
order by
排序的字段或表达式
案例:查询员工名和他的上级名
SQL92语法:
select
e.last_name,m.last_name
from
employees e,employees m
where
e.manager_id = m.employee_id;
SQL99语法:
select
e.last_name,m.last_name
from
employees e
join
employees m
on
e.manager_id = m.employee_id;
子查询
含义:一条查询语句中又嵌套了另一条完整的select语句,其中被嵌套的select语句,称为子查询或内查询
特点:
1.子查询都放在小括号内
2.子查询可以放在from后面、select后面、where后面、having后面但是一边放在条件的右侧
3.子查询优先于主查询执行,主查询使用了子查询的执行结果
4.子查询根据查询结果的行数不同分为
- 单行子查询
结果集只有一行
一般搭配单行操作符使用:< > = <= >= <> - 多行子查询
结果集有多行
一般搭配多操作符使用:any、all、in、not in
in:处于子查询结果中的任意一个就行
any、all往往可以用其他查询代替
在where语句中使用子查询
案例:查询哪些人的薪水高于员工的平均薪水,需要显示员工编号,员工姓名,薪水
实现思路
1.取得平均薪水
2.取得大于平均薪水的员工
1.select
avg(salary)
from
employees;
2.select
employee_id
from
employees
where
select(
salary>avg(salary)
from employees
);
在from语句中使用子查询,可以将该子查询看做是一张表
在select语句中使用子查询
union
可以合并集合(相加)
案例:查询job包含manager和salesman的员工
select
*
from
emp
where
job ='manager'
union
select
*
from
emp
where
job = 'salesman'
limit 分页查询
主要用于提取前几条或者中间某几行数据
select * from table limit m,n
其中m是指记录开始的index,从0开始表示第一条记录
n是指从第m+1条开始取n条
select * from table limit 2,4
从第三条开始取4条记录
取得前5条数据select * from emp limit 5
公式select * from 表 limit (page-1*sizePerPage,sizePerPage
每页显示条目数sizePerPage
要显示的页数 page