文章目录
常用语句
增
删
查
select
- 检索数据
- select * from table_name
distinct
- 检索时只返回不同的行
- 应用于所有列而不仅仅是所有列
- select distinct attr_name1, attr_name2 from table_name
limit
- 限制返回的行数
- select * from table_name limit 5 : 返回不多余五行,取结果前五行
- select * from table_name limit 2,5 : 从第二行开始,取结果的五行
- sql5中新的语法中增加了offset
- select * from table_name limit 5 offset 2 : 从第行开始,取结果的五行
order by (desc 降序,asc 升序默认)
- 对检索列进行排序
- select * from table_name order by attr_name:对attr_name列进行升序排序
- 增加 desc 进行降序排列
- select * from table_name order by attr_name1 desc, attr_name2:对attr_name1列进行降序排序对attr_name2升序排序,以attr_name1为主,attr_name2为辅
where
- 过滤数据,基于行,对分组进行过滤使用having
- select * from table_name where attr_name = “”
- 常用操作符
操作符 | 说明 |
---|---|
= | |
!= | 不等于 |
<> | 不等于 |
<= | |
> | |
>= | |
between and | 在指定的两个值之间 |
IS NULL | 空值查询 |
and,or,not,in
like
- 通配符
regexp
- 正则
子查询
as
- 重命名
数据处理函数
group by
- 分组允许把数据分为多个逻辑组,以便能对每个组进行聚集计算
- select attr_name, count(*) as nums from table_name group by attr_name: 统计每个attr_name 存在多少
having
- 用于过滤分组,where过滤行而不是分组,having用于过滤分组
- HAVING支持所有WHERE操作符
- HAVING和WHERE的差别 这里有另一种理解方法,WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤。这是一个重要的区别,WHERE排除的行不包括在分组中。这可能会改变计算值,从而影响HAVING子句中基于这些值过滤掉的分组
- select attr_name, count(*) as nums from table_name group by attr_name attr_name = 1000
- order by , group by
order by | group by |
---|---|
排序产生的输出 | 分组行。但输出可能不是分组的顺序 |
任意列都可以使用(甚至非选择的列也可以使用) | 只可能使用选择列或表达式列,而且必须使用每个选择列表达式 |
不一定需要 | 如果与聚集函数一起使用列(或表达式),则必须使用 |
- 不要忘记ORDER BY 一般在使用GROUP BY子句时,应该也给出ORDER BY子句。这是保证数据正确排序的唯一方法。千万不要仅依赖GROUP BY排序数据
select 子句顺序
子句 | 说明 | 是否必须使用 |
---|---|---|
select | 要返回的列或表达式 | Y |
from | 从中检索数据的表 | 仅在从表中选择数据时使用 |
where | 行级过滤 | N |
group by | 分组说明 | 仅在按组计算聚集时使用 |
having | 组级过滤 | N |
order by | 输出排序顺序 | N |
limit | 要检索的行数 | N |
联结表
inner join 等值连结(内部联结)
- inner join
- 自联结
- 自然联结
outer join (外部联结)
- (left, right) outer join
UNION
- 组合查询