【 Python 全栈开发 - WEB开发篇 - 32 】MySQL高级查询


一、LIMIT限制查询结果的数量

开始之前,我们先准备一下数据,打开cmd,输入:

mysql -u root -p

进行登录,登录后:

  1. 创建数据库:
DROP DATABASE IF EXISTS mydb;
CREATE DATABASE mydb;
USE mydb;
  1. 创建 student 表:
CREATE TABLE student (
    id CHAR(6),
    name VARCHAR(50),
    age INT,
    gender VARCHAR(50) DEFAULT 'male'
);
  1. 向 student 表插入数据:
INSERT INTO student (id,name,age,gender) VALUES ('01', 'lili', 14, 'male');
INSERT INTO student (id,name,age,gender) VALUES ('02', 'wang', 15, 'female');
INSERT INTO student (id,name,age,gender) VALUES ('03', 'tywd', 16, 'male');
INSERT INTO student (id,name,age,gender) VALUES ('04', 'hfgs', 17, 'female');
INSERT INTO student (id,name,age,gender) VALUES ('05', 'qwer', 18, 'male');
INSERT INTO student (id,name,age,gender) VALUES ('06', 'zxsd', 19, 'female');
INSERT INTO student (id,name,age,gender) VALUES ('07', 'hjop', 16, 'male');
INSERT INTO student (id,name,age,gender) VALUES ('08', 'tyop', 15, 'female');
INSERT INTO student (id,name,age,gender) VALUES ('09', 'nhmk', 13, 'male');
INSERT INTO student (id,name,age,gender) VALUES ('10', 'xdfv', 17, 'female');
INSERT INTO student (id,name,age,gender) VALUES ('12', 'lili', 14, 'male');
INSERT INTO student (id,name,age,gender) VALUES ('13', 'wang', 15, 'female');

当执行查询数据时可能会返回很多条记录,而用户需要的数据可能只是其中的一条或者几条。

查询年纪最小的 3 位同学:

select * from student order by age asc limit 3;

在这里插入图片描述

查询编号前五的学生:

select * from student order by id asc limit 5;

在这里插入图片描述

二、使用GROUP BY进行分组查询

GROUP BY 子句可像切蛋糕一样将表中的数据进行分组,再进行查询等操作。换言之,可通俗地理解为:通过GROUP BY将原来的表拆分成了几张小表。
接下来,我们通过一个新的例子开始学习GROUP BY,代码如下

创建数据库:

DROP DATABASE IF EXISTS mydb;
CREATE DATABASE mydb;
USE mydb;

创建员工表:

CREATE TABLE employee (
    id int,
    name varchar(50),
    salary int,
    departmentnumber int
);

向员工表中插入数据:

INSERT INTO employee values(1,'tome',2000,01); 
INSERT INTO employee values(2,'lucy',9000,02); 
INSERT INTO employee values(3,'joke',5000,03); 
INSERT INTO employee values(4,'wang',3000,04); 
INSERT INTO employee values(5,'chen',3000,01); 
INSERT INTO employee values(6,'yukt',7000,02); 
INSERT INTO employee values(7,'rett',6000,03); 
INSERT INTO employee values(8,'mujk',4000,04); 
INSERT INTO employee values(9,'poik',3000,01);

1.GROUP BY和聚合函数一起使用

统计各部门员工个数:

select count(*), departmentnumber from employee group by departmentnumber;

统计部门编号大于 01 的各部门员工个数:

select count(*), departmentnumber from employee where departmentnumber>01 group by departmentnumber;

在这里插入图片描述

2.GROUP BY和聚合函数以及HAVING一起使用

统计工资总和大于 8000 的部门:

select sum(salary),departmentnumber from employee group by departmentnumber having sum(salary)>8000;

在这里插入图片描述

三、使用ORDER BY对查询结果排序

从表中査询出来的数据可能是无序的或者其排列顺序不是我们期望的。为此,我们可以使用ORDER BY对查询结果进行排序
其语法格式如下所示:

SELECT 字段名1,字段名2,FROM 表名
ORDER BY 字段名1 [ASC | DESC],字段名2 [ASC | DESC];

在该语法中:字段名1、字段名2是查询结果排序的依据;参数 ASC 表示按照升序排序,DESC 表示按照降序排序;默认情况下,按照 ASC 方式排序。通常情况下,ORDER BY子句位于整个SELECT语句的末尾。

查询所有员工并按照薪水多少升序排列:

select * from employee order by salary asc;

在这里插入图片描述

查询所有员工并按照薪水多少降序排列:

select * from employee order by salary desc;

在这里插入图片描述


本文参考:MySQL 有这一篇就够(呕心狂敲37k字,只为博君一点赞!!!)

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值