MySQL进阶查询普及

前言

在对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查询的字段名一样,个数类型也一样

道阻且长,行则将至!加油! --不是冷漠
原文地址:https://www.cnblogs.com/bushilengmo/p/13815035.html