select
–from
–where
–grouop by
–having
–order by
–limit
[ where … ] # 指定结果需满足的条件
[ group by …] # 指定结果按照哪几个字段来分组
[ having …] # 过滤分组的记录必须满足的次要条件
[ order by… ] # 指定查询记录按一个或者多个条件排序
[ limit { [ 位置偏移量,] 行数 | 位置偏移量 OFFSET 行数 }] ; # 指定查询的记录从哪条至哪条
1、基本查询-连表查询
select
[all
| distinct
] [* | 列名1,列名n]
- 查询表中所有的数据列结果:select * from 表名;
- 某些字段:select 列名1,列名n from 表名;
- 默认是all,返回所有查询的数据,distinct去掉重复的数据
as
别名 as可省
<表名> [as] <别名>
<列名> [as] <列别名>
2、条件查询
wherre
<查询条件> {<判定运算1>,<判定运算2>,…}
and
连接两个甚至多个查询条件。
判定运算的语法分类如下:- <表达式1>{=|<|<=|>|>=|<=>|<>|!=}<表达式2>
- <表达式1>[not]
like
<表达式2> - <表达式1>[not ][
pegexp
|rlike
]<表达式2> - <表达式1>[not]
between
<表达式2>and
<表达式3> - <表达式1>is [not] null
a)、使用 LIKE 的模糊查询
<表达式1>[not]like
<表达式2> - 字符串匹配是一种模式匹配,使用运算符 LIKE 设置过滤条件,过滤条件使用通配符进行匹配运算,而不是判断是否相等进行比较。
- 相互间进行匹配运算的对象可以是 CHAR、VARCHAR、TEXT、DATETIME 等数据类型。运算返回的结果是 TRUE 或 FALSE。
- 利用通配符可以在不完全确定比较值的情形下创建一个比较特定数据的搜索模式,并置于关键字 LIKE 之后。可以在搜索模式的任意位置使用通配符,并且可以使用多个通配符。
| 百分号(%) |下划线(_) |
|–|--|
|百分号不匹配空值;百分号可以代表搜索模式中给定位置的 0 个、1 个或多个字符;尾空格可能会干扰通配符的匹配,一般可以在搜索模式的最后附加一个百分号。 | 下画线只匹配单个字符 |
b)、PEGEXP|
RLIKE正则表达式查询
3、分组查询
group by
{ <列名> | <表达式> | <位置> } [asc
| desc
]
语法说明如下:
- <列名>:指定用于分组的列。可以指定多个列,彼此间用逗号分隔。
- <表达式>:指定用于分组的表达式。通常与聚合函数一块使用,例如可将表达式 COUNT(*)AS’ 人数 ’ 作为 SELECT 选择列表清单的一项。
- <位置>:指定用于分组的选择列在 SELECT 语句结果集中的位置,通常是一个正整数。例如,GROUP BY 2 表示根据 SELECT 语句列清单上的第 2 列的值进行逻辑分组。
asc
|desc
:关键字 ASC 表示按升序分组,关键字 DESC 表示按降序分组,其中 ASC 为默认值。- 注意:GROUP BY 子句中的各选择列必须也是 SELECT 语句的选择列清单中的一项。
对于 group by子句的使用,需要注意以下几点。 - group by 子句可以包含任意数目的列,使其可以对分组进行嵌套,为数据分组提供更加细致的控制。
- group by 子句列出的每个列都必须是检索列或有效的表达式,但不能是聚合函数。若在 SELECT 语句中使用表达式,则必须在 group by子句中指定相同的表达式。
- 除聚合函数之外,sekect 语句中的每个列都必须在 group by 子句中给出。
- 若用于分组的列中包含有 null 值,则null 将作为一个单独的分组返回;若该列中存在多个 null 值,则将这些 null 值所在的行分为一组。
4、指定过滤条件
having
<过滤条件>
HAVING 子句和 WHERE 子句非常相似,HAVING 子句支持 WHERE 子句中所有的操作符和语法,但是两者存在几点差异:
- WHERE 子句主要用于过滤数据行,而 HAVING 子句主要用于过滤分组,即 HAVING 子句基于分组的聚合值而不是特定行的值来过滤数据,主要用来过滤分组。
- WHERE 子句不可以包含聚合函数,HAVING 子句中的条件可以包含聚合函数。
- HAVING 子句是在数据分组后进行过滤,WHERE 子句会在数据分组前进行过滤。WHERE 子句排除的行不包含在分组中,可能会影响 HAVING 子句基于这些值过滤掉的分组。
5、对查询结果进行排序
order by
{<列名> | <表达式> | <位置>} [asc|desc]
- 列名
指定用于排序的列。可以指定多个列,列名之间用逗号分隔。 - 表达式
指定用于排序的表达式。 - 位置
指定用于排序的列在 SELECT 语句结果集中的位置,通常是一个正整数。
asc
(升序,默认),desc
(降序)- ORDER BY 子句中可以包含子查询。
- 当排序的值中存在空值时,ORDER BY 子句会将该空值作为最小值来对待。
- 当在 ORDER BY 子句中指定多个列进行排序时,MySQL 会按照列的顺序从左到右依次进行排序。
- 查询的数据并没有以一种特定的顺序显示,如果没有对它们进行排序,则将根据插入到数据表中的顺序显示。使用 ORDER BY
子句对指定的列数据进行排序。
6、限制查询结果的记录条数
limit
[<位置偏移量>,] <行数> | 位置偏移量 offset
行数
- 第一个参数“位置偏移量”指示 MySQL 从哪一行开始显示,如果不指定“位置偏移量”,将会从表中的第一条记录开始,第一条记录的位置偏移量是 0。
- 第二个参数“行数”指示返回的记录条数。