瞧这里,没有比这更全的!mysql高阶语句介绍汇总!(查询正则表达式运算符连接查询函数存储过程)

Posted 龙少。

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了瞧这里,没有比这更全的!mysql高阶语句介绍汇总!(查询正则表达式运算符连接查询函数存储过程)相关的知识,希望对你有一定的参考价值。

一.常用查询类

1.按关键字排序

使用 SELECT 语句可以将需要的数据从 MySQL 数据库中查询出来,如果对查询的结果进行排序,可以使用 ORDER BY 语句来对语句实现排序,并最终将排序后的结果返回给用户。这个语句的排序不光可以针对某一个字段,也可以针对多个字段

ASC 是按照升序进行排序的,是默认的排序方式,即 ASC 可以省略。SELECT 语句中如果没有指定具体的排序方式,则默认按 ASC方式进行排序。
DESC 是按降序方式进 行排列。当然 ORDER BY 前面也可以使用 WHERE 子句对查询结果进一步过滤。

按分数排序,默认不指定是升序排列

mysql> select id,name,score from info order by score;
+------+-----------+-------+
| id   | name      | score |
+------+-----------+-------+
|    6 | hanmeimei | 10.00 |
|    7 | lilei     | 11.00 |
|    3 | lisi      | 60.00 |
|    1 | liuyi     | 80.00 |
|    2 | wangwu    | 90.00 |
|    5 | jiaoshou  | 98.00 |
|    4 | tianqi    | 99.00 |
+------+-----------+-------+
7 rows in set (0.00 sec)

分数按降序排列

mysql> select id,name,score from info order by score desc;
+------+-----------+-------+
| id   | name      | score |
+------+-----------+-------+
|    4 | tianqi    | 99.00 |
|    5 | jiaoshou  | 98.00 |
|    2 | wangwu    | 90.00 |
|    1 | liuyi     | 80.00 |
|    3 | lisi      | 60.00 |
|    7 | lilei     | 11.00 |
|    6 | hanmeimei | 10.00 |
+------+-----------+-------+
7 rows in set (0.00 sec)

drder by 结合 where使用,order by 结合where使用

mysql> select name,score from info where address='nanjing' order by score desc; 	#order by 结合where使用
+-----------+-------+
| name      | score |
+-----------+-------+
| lilei     | 11.00 |
| hanmeimei | 10.00 |
+-----------+-------+
2 rows in set (0.00 sec)

drder by 结合多字段,查询学生信息先按兴趣id降序排列,相同分数的,id也按降序排列

mysql> select id,name,hobbid from info order by hobbid desc,id desc;	
+------+-----------+--------+
| id   | name      | hobbid |
+------+-----------+--------+
|    7 | lilei     |      5 |
|    4 | tianqi    |      5 |
|    3 | lisi      |      4 |
|    6 | hanmeimei |      3 |
|    5 | jiaoshou  |      3 |
|    2 | wangwu    |      2 |
|    1 | liuyi     |      2 |
+------+-----------+--------+
7 rows in set (0.00 sec)

查询学生信息先按兴趣id降序排列,相同分数的,id按升序排列

mysql> select id,name,hobbid from info order by hobbid desc,id;						

+------+-----------+--------+
| id   | name      | hobbid |
+------+-----------+--------+
|    4 | tianqi    |      5 |
|    7 | lilei     |      5 |
|    3 | lisi      |      4 |
|    5 | jiaoshou  |      3 |
|    6 | hanmeimei |      3 |
|    1 | liuyi     |      2 |
|    2 | wangwu    |      2 |
+------+-----------+--------+
7 rows in set (0.01 sec)

说明:
ORDER BY 语句可以使用多个字段来进行排序,当排序的第一个字段相同的记录有多条的情况下,这些多条的记录再按照第二个字段进行排序,ORDER BY 后面跟多个字段时,字段之间使用英文逗号隔开,优先级是按先后顺序而定,但order by 之后的第一个参数只有在出现相同值时,第二个字段才有意义。

2.区间判断及查询不重复记录

(1)AND/OR ——且/或

mysql>  select * from info where score >70 and score <=90;
+------+--------+-------+------------+--------+
| id   | name   | score | address    | hobbid |
+------+--------+-------+------------+--------+
|    1 | liuyi  | 80.00 | beijing    |      2 |
|    2 | wangwu | 90.00 | shengzheng |      2 |
+------+--------+-------+------------+--------+
2 rows in set (0.00 sec)

mysql> select * from info where score >70 or score <=90;
+------+-----------+-------+------------+--------+
| id   | name      | score | address    | hobbid |
+------+-----------+-------+------------+--------+
|    6 | hanmeimei | 10.00 | nanjing    |      3 |
|    5 | jiaoshou  | 98.00 | laowo      |      3 |
|    7 | lilei     | 11.00 | nanjing    |      5 |
|    3 | lisi      | 60.00 | shanghai   |      4 |
|    1 | liuyi     | 80.00 | beijing    |      2 |
|    4 | tianqi    | 99.00 | hangzhou   |      5 |
|    2 | wangwu    | 90.00 | shengzheng |      2 |
+------+-----------+-------+------------+--------+
7 rows in set (0.00 sec)

mysql> select * from info where score >70 or (score >75 and score <90);			#嵌套多个条件
+------+----------+-------+------------+--------+
| id   | name     | score | address    | hobbid |
+------+----------+-------+------------+--------+
|    5 | jiaoshou | 98.00 | laowo      |      3 |
|    1 | liuyi    | 80.00 | beijing    |      2 |
|    4 | tianqi   | 99.00 | hangzhou   |      5 |
|    2 | wangwu   | 90.00 | shengzheng |      2 |
+------+----------+-------+------------+--------+
4 rows in set (0.00 sec)

(2)distinct 查询不重复记录

语法:

select distinct 字段 from 表名﹔

mysql> select distinct hobbid from info;
+--------+
| hobbid |
+--------+
|      3 |
|      5 |
|      4 |
|      2 |
+--------+
4 rows in set (0.00 sec)

3.对结果进行分组

通过 SQL 查询出来的结果,还可以对其进行分组,使用 GROUP BY 语句来实现 ,GROUP BY 通常都是结合聚合函数一起使用的,常用的聚合函数包括:计数(COUNT)、 求和(SUM)、求平均数(AVG)、最大值(MAX)、最小值(MIN),GROUP BY 分组的时候可以按一个或多个字段对结果进行分组处理。

语法
SELECT column_name, aggregate_function(column_name)FROM table_name WHERE column_name operator valueGROUP BY column_name;

按hobbid相同的分组,计算相同分数的学生个数(基于name个数进行计数)

mysql> select count(name),hobbid from info group by hobbid;
+-------------+--------+
| count(name) | hobbid |
+-------------+--------+
|           2 |      2 |
|           2 |      3 |
|           1 |      4 |
|           2 |      5 |
+-------------+--------+
4 rows in set (0.00 sec)

结合where语句,筛选分数大于等于80的分组,计算学生个数

mysql> select count(name),hobbid from info where score>=80 group by hobbid;
+-------------+--------+
| count(name) | hobbid |
+-------------+--------+
|           2 |      2 |
|           1 |      3 |
|           1 |      5 |
+-------------+--------+
3 rows in set (0.00 sec)

结合order by把计算出的学生个数按升序排列

mysql> select count(name),score,hobbid from info where score>=80 group by hobbid order by count(name) asc;
+-------------+-------+--------+
| count(name) | score | hobbid |
+-------------+-------+--------+
|           1 | 98.00 |      3 |
|           1 | 99.00 |      5 |
|           2 | 80.00 |      2 |
+-------------+-------+--------+
3 rows in set (0.00 sec)

4.限制结果条目limit

limit 限制输出的结果记录
在使用 MySQL SELECT 语句进行查询时,结果集返回的是所有匹配的记录(行)。有时候仅 需要返回第一行或者前几行,这时候就需要用到 LIMIT 子句

语法
SELECT column1, column2, … FROM table_name LIMIT [offset,] number

LIMIT 的第一个参数是位置偏移量(可选参数),是设置 MySQL 从哪一行开始显示。 如果不设定第一个参数,将会从表中的第一条记录开始显示。需要注意的是,第一条记录的 位置偏移量是 0,第二条是 1,以此类推。第二个参数是设置返回记录行的最大数目。

查询所有信息显示前4行记录

mysql> select * from info limit 3;
+------+-----------+-------+---------+--------+
| id   | name      | score | address | hobbid |
+------+-----------+-------+---------+--------+
|    6 | hanmeimei | 10.00 | nanjing |      3 |
|    5 | jiaoshou  | 98.00 | laowo   |      3 |
|    7 | lilei     | 11.00 | nanjing |      5 |
+------+-----------+-------+---------+--------+
3 rows in set (0.00 sec)

从第4行开始,往后显示3行内容

mysql> select * from info limit 3,3;
+------+--------+-------+----------+--------+
| id   | name   | score | address  | hobbid |
+------+--------+-------+----------+--------+
|    3 | lisi   | 60.00 | shanghai |      4 |
|    1 | liuyi  | 80.00 | beijing  |      2 |
|    4 | tianqi | 99.00 | hangzhou |      5 |
以上是关于瞧这里,没有比这更全的!mysql高阶语句介绍汇总!(查询正则表达式运算符连接查询函数存储过程)的主要内容,如果未能解决你的问题,请参考以下文章

iOS-Runtime 10种用法(没有比这更全的了)

整理了大数据学习全套资源,大概没有比这更全的了!

关于 RabbitMQ,应该没有比这更详细的教程了

史上更全的MySQL高性能优化实战总结!

有没有比这更简单的通过 PHP 请求特定音频文件的方法?

来一波SpringBoot开源项目,没有比这更简单了