七、查询语句-语法
select [distinct] *|列名
from 表名 … on 连接条件
where 条件
group by 分组字段…
having 条件
order by 排序字段,排序方向
limit 起始位置,长度;
八、单表查询
8.1 from子句
可以是一张表,也可以查多张表
select * from 表名
select * from 表名1,表名2 …
8.2 where子句
筛选表中满足条件的行。
条件的写法:
(1)使用比较运算符
(2)多条件使用 and 和 or 连接
(3)连续范围:between … and …
(4)不连续范围:in(…)
(5)模糊匹配:like % _
(6)null判断:is null
8.3 select子句
筛选列。
*代表所有列。
也可以只选择部分列。
select * from 表名;
select 所有列名 from 表名
select 部分部分列名 from 表名
distinct作用:将结果集中重复的行合并为一条。
8.4 order by 子句
对查询结果进行排序。
排序有两种方向:默认升序,asc;降序,desc。
语法:order by 字段名 方向
8.5 limit子句
限制。
从结果集中取出一部分数据。
主要用于分页查询
*每页的起始位置 = (页码-1)每页长度
语法:limit 结果集种的起始位置,长度
8.6 group by分组查询
(1)分组查询
前面不分组查询,查询结果是表中的数据。
分组查询查的不是表中数据,而是查询到的是表中数据的统计信息。
一组对应一条统计信息。
分组的目的是为了统计每组的信息!!!!
统计:使用聚合函数。
count(列名)统计每组的数量。
sum(列名)统计每组该列总和。
avg(列名)统计每组该列的平均值。
max(列名)统计每组该列的最大值。
min(列名)统计每组该列的最小值。
(2)别名
可以给结果集中的列起别名,也可以给表名起别名。
表:是物理硬盘中的一个存储空间。永久存储。
结果集:是物理内存中的一个存储空间。临时存储。
(3)筛选满足条件的组
having 条件;
where和having区别:
where是分组之前,选择的是表中的行;
having是分组之后,选择满足条件的组。
九、查询执行顺序
9.1 书写语法顺序
select [distinct] *|列名
from 表名 …
where 条件
group by 分组字段…
having 条件
order by 排序字段,排序方向
limit 起始位置,长度;
9.2 查询执行顺序
from
where
group by
select 【distinct】
【having】
order by
limit
十、多表查询
10.1 笛卡尔积
查询两张表。
查询结果是:依次拿a表的每一行和b的所有行进行数据的拼接。
假如:a表中有8行,b表中有4行,笛卡尔积是8*4=32行。
course表的每一行分别与teacher的每一行拼接 3 3 =9*
10.2 多表查询本质
本质:其实就是单表查询,把笛卡尔积作为查询的目标。
查询两张表,和查询笛卡尔积是一样的。
笛卡尔积中的列,是两张表的列的总和。
笛卡尔中的行数,就是两张表的行数相乘。
10.3 多表查询
(1)内连接查询
从笛卡尔积中,查询满足连接条件的数据行。
写法1:
select *
from 表1 , 表2
where 连接条件;
写法2:
select *
from 表1 inner join 表2 on 连接条件;
(2)外连接查询
从笛卡尔积中,查询满足连接条件的数据行。
以及,两张表中不满足的行。
外连接分为:outer join
左外连接left [outer] join:从笛卡尔积中,查询满足连接条件的数据行。以及,左表中不满足条件的行。
右外连接right [outer] join:从笛卡尔积中,查询满足连接条件的数据行。以及,右表中不满足条件的行。
十一、子查询
一条查询语句作为另一条查询语句的一部分,这样的查询我们称为子查询。
(1)单行单列
子语句查询结果是单行单列的,也就是只有一个值。
我们一般使用比较运算符来连接子语句。
案例:查询‘张三’教的课程
(2)多行单列
子语句的查询结果是多行单列的。
一般我们使用in来连接子语句。
案例:查询张三和李四教的课程
(3)单行多列
子语句查询结果是单行多列的。
使用比较运算符来连接子语句。
案例:查询张三的工号和教的课程
(4)多行多列
子语句查询结果是多行多列的。
使用in连接子语句。
案例:查询张三和李四的工号和教授的课程
十二、union合并查询
12.1 union用途
将两个查询结果合并到一起。
12.2 语法
select 1 union select 2
合并的前提条件是:
两个查询语句的结果集中,列数相同,对应顺序的列的数据类型相同。