前言
在对MySQL数据库的增、删、改、查操作有一定了解之后,就可以学习一些 SQL 语句的高级使用方法。
SQL语句的熟练使用,在平时的运维工作中可以提供不小的帮助,尤其是在一些规模较小的公司,运维身兼数职,
可能会有不少数据库的相关工作。这边就普及下SQL 语句的高级运用方法。
一、常用查询介绍
1.1 按关键字排序
- 使用ORDER BY语句来实现排序
- 排序可针对一个或多个字段
- ASC:升序,默认排序方式
- DESC:降序
ORDER BY的语法结构
1 SELECT column1, column2, ... FROM table_name ORDER BY column1, column2, ... ASC|DESC;
ORDER BY 后面跟多个字段时,字段之间使用英文逗号隔开,优先级是按先后顺序而定。下面以A和B分别表示两个字段:
- ORDER BY A,B desc 指A用升序,B用降序;
- ORDER BY A asc,B desc 指A用升序,B用降序;
- ORDER BY A desc,B desc 指A用降序,B用降序;
1.2 对结果进行分组
- 使用 GROUP BY 语句来实现分组
- GROUP BY通常都是结合聚合函数一起使用的
- 常用的聚合函数包括:计数(COUNT)、求和(SUM)、求平均数(AVG)、最大值(MAX)、最小值(MIN)
GROUP BY的语法结构
1 SELECT column_name, aggregate_function(column_name)FROM table_name WHERE column_name operator valueGROUP BY column_name;
1.3 限制结果条目
-
在使用 MySQL SELECT 语句进行查询时,结果集返回的是所有匹配的记录。有时候仅需要返回第
一行或者前几行,这时候就需要用到 LIMIT 子句。
1 语法 2 SELECT column1, column2, ... FROM table_name LIMIT [offset,] number
(注意)
- LIMIT 的第一个参数是位置偏移量(可选参数),是设置 MySQL 从哪一行开始显示。
- 如果不设定第一个参数,将会从表中的第一条记录开始显示。
- 第一条记录的位置偏移量是 0,第二条是 1,以此类推。第二个参数是设置返回记录行的最大数目。
1.4 设置别名
- 当表的名字比较长或者表内某些字段比较长时,为了书写方便可以给字段列或表设置别名
- 使用的时候直接使用别名,简洁明了,增强可读性
列的别名语法结构:
1 SELECT column_name AS alias_name FROM table_name;
表的别名语法结构:
1 SELECT column_name(s) FROM table_name AS alias_name;
(注意)
- 在为表设置别名时,要保证别名不能与数据库中的其他表的名称冲突。
-
列的别名是在结果中有显示的,而表的别名在结果中没有显示,只在执行查询时使用。
1.5 通配符
- 通配符主要用于替换字符串中的部分字符,通过部分字符的匹配将相关结果查询出来。
-
通常通配符都是跟 LIKE 一起使用的,并协同 WHERE 子句共同来完成查询任务。
- 常用的通配符有两个
- %:百分号表示零个、一个或多个字符
-
_:下划线表示单个字符
1 举例 2 mysql> select id,name,level from player where name like 's%'; ##name 字段以 s 开头的记录 3 mysql> select id,name,level from player where name like '%s'; ##name 字段以 s 结尾的记录 4 mysql> select id,name,level from player where name like '%es%'; ###name 字段中间含 es 的记录 5 mysql> select id,name,level from player where name like '_uess'; ###替换开头的一个字符
1.6 子查询
- 子查询也被称作内查询或者嵌套查询
- 子查询语句是先于主查询语句被执行的
- 子查询结果作为外层的条件返回给主查询进行下一步的查询过滤
- 在嵌套的时候,子查询内部还可以再次嵌套新的子查询,也就是说可以多层嵌套
1 语法 2 select 字段名列表 from 表名 where 字段名 运算符 3 (select 字段名 from 表名 where 条件)
注意:外层的where的条件必须和内层的select查询的字段名一样,个数类型也一样