连接查询

内连接

select 查询列表
from 表名1 as 别名1
【inner】 join 表名2 as 别名2 on 连接条件
where 分组去过滤条件
gourp by 分组语句
having 分组后过滤
order by 排序语句
limit 分页语句;

特点:

Ⅰ 表的顺序可以调换
Ⅱ 内连接的结果=多表的交集
Ⅲ n表连接至少需要n-1个连接条件

分类:

等值连接
非等值连接
自链接

外连接

select 查询列表
from 表名1 as 别名1
left|right|full 【outer】 join 表名2 as 别名2 on 连接条件
where 分组去过滤条件
gourp by 分组语句
having 分组后过滤
order by 排序语句
limit 分页语句;

特点:

Ⅰ 查询的结果=主表中所有的行,如果从表和它匹配的将显示匹配行,如果从表没有匹配的则显示null。
Ⅱ left join 左边的就是主表,right join 右边的就是主表。
Ⅲ 一般用于查询除了交际部分的剩余的不匹配的行。

交叉连接

语法:
select 查询列表
from 表1 别名1
cross join 表2 别名2;

特点:

类似于笛卡尔乘积

子查询

子查询的意义:

  1. 嵌套再其它语句内部的select语句称为子查询或内查询,<br /> 外面的语句可以是insertupdatedeleteselect等,一般select作为外面语句较多,<br /> 外面如果为select语句,则此语句称为外查询或主查询。<br />

分类:

Ⅰ 按出现位置

select 后面:
仅仅支持标量子查询
from 后面:
表子查询
where或having 后面:
标量子查询
列子查询
行子查询
exists 后面:
标量子查询
列子查询
行子查询
表子查询

Ⅱ 按结果集的行列

标量子查询(单行子查询):结果集为一行一列。<br />    列子查询(多行子查询):结果集为多行一列。<br />    行字查询:结果为多行多列。<br />    表子查询(嵌套子查询):结果集为多行多列。<br />   

示例:

where 或 having 后面

1、标量子查询

案例:查询一下最低工资的员工姓名和工资
① 查询最低工资
select min(salary) from employees

②查询员工的姓名和工资、要求工资=①
select last_name,salary from employees
where salary =(select min(salary) from employees)

2、列子查询
案例:查询所有是领导的员工姓名<br />    ①查询所有的员工的 manager_id<br />    select manager_id from employees  <br />   <br />    ②查询姓名,employee_id属于①列表的一个<br />    select last_name  <br />    from employees<br />    where employee_id in(<br />    select manager_id<br />    from employees<br />    )<br /> <br /> 

分页子查询

应用场景:

当要查询的条目数太多,一页显示不全

语法:

select 查询列表<br />    from    表<br />    limit    【offset,】size;

注意:offset代表的是起始的条目索引,默认从0开始。

size表示的是显示条目数

公式:

假如要显示的页数为page,每页条目数为size<br />    select 查询列表<br />    from    表<br />    limit (page-1)*size,size;<br />