MySQL笔记DQL语言-分组查询and连接查询and子查询and分页查询and联合查询

分组查询and连接查询and子查询and分页查询and联合查询

  • 分组查询
    • 一、语法
    • 二、特点
  • 连接查询
    • 一、含义
    • 二、分类
    • 三、SQL92语法
      • 1、等值连接
      • 2、非等值连接
      • 3、自连接
    • 四、SQL99语法
      • 1、内连接
      • 2、外连接
      • 3、交叉连接
  • 子查询
    • 一、含义
    • 二、分类
    • 三、示例
  • 分页查询
    • 一、应用场景
    • 二、语法
  • 联合查询
    • 一、含义
    • 二、语法
    • 三、意义
    • 四、特点

分组查询

一、语法

select 分组函数,分组后的字段 ⑤
from 表 ①
【where 筛选条件】 ②
group by 分组的字段 ③
【having 分组后的筛选】 ④
【order by 排序列表】 ⑥

二、特点

             	使用关键字         筛选的表       位置
分组前筛选		where			  原始表			group by的前面
分组前筛选		having			  分组后的结果	group by的后面         

连接查询

一、含义

当查询中涉及到了多个表的字段,需要使用多个表连接
select 字段1,字段2
from 表1, 表2,…;
笛卡尔乘积:当查询多个表时,没有添加有效的连接条件,导致多个表所有行实现完全连接
如何解决:添加有效的连接条件

二、分类

按年代分类
sql92:

	等值
	非等值
	自连接
	也支持一部分外连接(用于Oracle、SQL server)

sql99:
内连接

                等值
				非等值
				自连接						

外连接

				左外
				右外
				全外(MySQL不支持)

交叉连接

三、SQL92语法

1、等值连接

语法:
select 查询列表
from 表1 别名,表2 别名
where 表1.key=表2.key
【and 筛选条件】
【group by 分组字段】
【having 分组后的筛选】
【order by 排序字段】
特点:
①一般为表起别名
②多表的顺序可以调换
③n表连接至少需要n-1个连接条件
④等值连接的结果时多表的交接部分

2、非等值连接

语法:
select 查询列表
from 表1 别名,表2 别名
where 非等值连接条件
【and 筛选条件】
【group by 分组字段】
【having 分组后的筛选】
【order by 排序字段】

3、自连接

语法:
select 查询列表
from 表 别名1,表 别名2
where 等值连接条件
【and 筛选条件】
【group by 分组字段】
【having 分组后的筛选】
【order by 排序字段】

四、SQL99语法

1、内连接

2、外连接

3、交叉连接

子查询

一、含义

嵌套在其他语句内部的select语句称为子查询或内查询
外面的语句可以是insert、update、delete、select等,一般select作为外面语句较多
外面如果为select语句,则此语句称为外查询或主查查询

二、分类

1、按出现位置
select后面:

仅仅支持标量子查询

from后面:

表子查询

where或having后面:

标量子查询
列子查询
行子查询

exists后面:

标量子查询
列子查询
行子查询
表子查询

2、按结果集的行列
标量子查询(单行子查询):结果集为一行一列
列子查询(多行子查询):结果集为多行一列
行子查询:结果集为多行多列
表子查询:结果集为多行多列

三、示例

where或having
1、标量子查询
案例:查询最低工资的员工姓名和工资
①最低工资

select min(salary) 
from employees

②查询员工的姓名和工资,要求工资=①

select last_name,salary
from employees
where salary=(
	select min(salary) from employees
);

2、列子查询
案例:查询所有是领导的员工姓名
①查询所有员工的manager_id

select manager_id 
from employees;

②查询姓名,employee_id属于①列表的一个

select last_name
from employees
where employee_id in (
	select manager_id
	from employees
);

分页查询

一、应用场景

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

二、语法

select 查询列表
from 表
limit 【offset,】size;
注意:
offset代表的是起始的条目索引,默认从0开始
size代表的是显示的条目数
公式:
假如要显示的页数为page,每一页条目数为size
select 查询列表
from 表
limit (page-1)*size,size;

联合查询

一、含义

union:合并、联合,将多次查询结果合并成一个结果

二、语法

查询语句1
union 【all】
查询语句2
union 【all】

三、意义

1、将一条比较复杂的查询语句拆分成多条语句
2、适应于查询多个表的时候,查询的列基本是一致

四、特点

1、要求多条查询语句的查询列数必须一致
2、要求多条查询语句的查询的各类类型、顺序最后一致
3、union 去重,union all 包含重复项

语法:
select 查询列表 ⑦
from 表1 别名 ①
连接类型 join 表2 ②
on 连接条件 ③
where 筛选 ④
group by 分组列表 ⑤
having 筛选 ⑥
order by 排序列表 ⑧
limit 起始条目索引,条目数 ⑨

你可能感兴趣的:(mysql,数据库,sql)