MySQL高阶语句

本文介绍了MySQL中的高级查询技巧,包括使用orderby进行升序和降序排序,结合where子句过滤数据,多列排序,区间判断查询,以及使用distinct去除重复记录。此外,还讲解了如何通过groupby进行数据分组,利用聚合函数count、sum、avg和min进行统计,以及limit用于限制查询结果的数量。最后提到了别名的使用和通配符(%和_)在LIKE语句中的作用,以提高查询的灵活性和可读性。
摘要由CSDN通过智能技术生成

MySQL高阶语句

排序

按关键字排序

order by 语句来实现排序

asc 按照升序进行排序(默认)

desc 按照降序方式进行排序

order by 前面可以使用where子句对查询进行进一步的过滤

mysql> select * from ky29;
+------+-----------+-------+------------+--------+
| 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)

select name,score from ky29 where address=‘nanjing’ order by score desc;

只显示姓名和分数,并且提取南京地区的分数并从高往低排序

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

select id,name,hobbid from ky29 order by hobbid desc,id desc;

多列排序

mysql> select id,name,hobbid from ky29 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)

区间判断

区间判断查询 不重复记录

and/or 且/或

distinct 查询不重复记录

select * from ky29 where score >60 and score <=90;

删选大于60小于等于90的分数

mysql> select * from ky29 where score >60 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)

select * from ky29 where score >60 or score <=90;

删选大于60或者小于等于90的分数

mysql> select * from ky29 where score >60 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)

select * from ky29 where score >60 or (score >60 and score <90);

筛选出大于60或者大于60小于90分的数据

mysql> select * from ky29 where score >60 or (score >60 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)

select * from ky29 where score >60 and (score >60 and score <90);

筛选出大于60且大于60小于90分的数据

mysql> select * from ky29 where score >60 and (score >60 and score <90);
+------+-------+-------+---------+--------+
| id   | name  | score | address | hobbid |
+------+-------+-------+---------+--------+
|    1 | liuyi | 80.00 | beijing |      2 |
+------+-------+-------+---------+--------+
1 row in set (0.00 sec)

select distinct hobbid from ky29;

查询不重复的hobbid

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

对结果进行分组

对结果进行分组

通过SQL语句查询出来的结果 进行分组

group by 语句来实现

count(计数)、求和(sum)求平均数(avg)最大值(max)最小值(min)

group by分组可以按一个或多个字段对结果进行分组

select count(name),hobbid from ky29 group by hobbid;

按照hobbid相同的分组,计算相同分数的学生的个数(就是指hobbid为2的人有几个,为3的人有几个)

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

select count(*) from ky29;

查看ky29表里面一共有多少行数据

mysql> select count(*) from ky29;
+----------+
| count(*) |
+----------+
|        7 |
+----------+
1 row in set (0.00 sec)

select count(name),score,hobbid from ky29 where score>=80 group by hobbid order by count(nat(name) asc;

以hobbid进行分组,筛选出分数大于等于80的人,并升序显示

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

限制结果条目

限制结果条目(limit)

limit 限制输出的结果记录(显示你想要看到的行数)

select * from ky29 limit 4,3

显示ky29表里面第四行往下的三行内容

mysql> select * from ky29 limit 4,3 ;
+------+--------+-------+------------+--------+
| id   | name   | score | address    | hobbid |
+------+--------+-------+------------+--------+
|    1 | liuyi  | 80.00 | beijing    |      2 |
|    4 | tianqi | 99.00 | hangzhou   |      5 |
|    2 | wangwu | 90.00 | shengzheng |      2 |
+------+--------+-------+------------+--------+
3 rows in set (0.00 sec)

select id,name from ky29 order by id limit 4;

按照id排序并只显示前四行

mysql> select id,name from ky29 order by id limit 4;
+------+--------+
| id   | name   |
+------+--------+
|    1 | liuyi  |
|    2 | wangwu |
|    3 | lisi   |
|    4 | tianqi |
+------+--------+
4 rows in set (0.00 sec)

设置别名

设置别名 as

列:字段列设置别名,主要是为了简洁明了 增强可读性

在企业中多个表查询字段相同时需要使用到别名来确定是哪一张表的数据

表:表设置别名,主要也是为了简洁明了 增强可读性

select name as 姓名,score as 成绩 from ky29;

将ky29表里面的name和score设置成中文别名

mysql> select name as 姓名,score as 成绩 from ky29;
+-----------+--------+
| 姓名      | 成绩   |
+-----------+--------+
| hanmeimei |  10.00 |
| jiaoshou  |  98.00 |
| lilei     |  11.00 |
| lisi      |  60.00 |
| liuyi     |  80.00 |
| tianqi    |  99.00 |
| wangwu    |  90.00 |
+-----------+--------+
7 rows in set (0.00 sec)

select count(*) as 数量 from ky29;(as可以不需要)

查询ky29表里面的数据条数,并且用数量别名显示

mysql> select count(*) as 数量 from ky29;
+--------+
| 数量   |
+--------+
|      7 |
+--------+
1 row in set (0.00 sec)

create table t1 as select * from ky29;

用ky29里面的数据来创建一个ky30表,这里的as单纯作为连接语句用

mysql> create table t1 as select * from ky29;
Query OK, 7 rows affected (0.02 sec)
Records: 7  Duplicates: 0  Warnings: 0

mysql> select * from t1;
+------+-----------+-------+------------+--------+
| 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)

create table t2 (select * from ky29 where score >=80);

用ky29表里面分数大于等于80的数据来创建一个t2的表

mysql> create table t2 (select * from ky29 where score >=80);
Query OK, 4 rows affected (0.02 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select * from t2;
+------+----------+-------+------------+--------+
| 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)

通配符

通配符主要用于替换字符串中的部分字符,通过部分字符的匹配将相关结果查询出来。

通常通配符都是跟LIKE一起使用的,并协同WHERE

%:表示零个、一个或多个字符

_:表示单个字符

select id,name from ky29 where name like ‘l%’

显示name以l为开头的内容

mysql> select id,name from ky29 where name like 'l%';
+------+-------+
| id   | name  |
+------+-------+
|    7 | lilei |
|    3 | lisi  |
|    1 | liuyi |
+------+-------+
3 rows in set (0.01 sec)

select id,name from ky29 where name like ‘%g%’;

查询名字中间有g的数据

mysql> select id,name from ky29 where name like '%g%';
+------+--------+
| id   | name   |
+------+--------+
|    2 | wangwu |
+------+--------+
1 row in set (0.00 sec)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值