阅读前须知-点我下拉
数据库简单查询的学习笔记
目录
数据库简单查询
├── 1.1 数据库查询是什么?
├── 1.2 查询的核心 —— SELECT
├── 1.3 查询指定字段
├── 1.4 筛选条件 —— WHERE
├── 1.5 排序 —— ORDER BY
├── 1.6 并或 —— AND 和 OR
├── 1.7 模糊查询 —— LIKE
├── 1.8 限制数量 —— LIMIT
└── 1.9 重命名 —— AS
数据库聚合函数
├── 2.1 统计数量 —— COUNT()
├── 2.2 简单函数 —— SUM(),AVG(),MAX(),MIN()
├── 2.3 分组 —— GROUP BY
├── 2.4 分组后筛选 —— HAVING
└── 2.5 SQL的执行顺序
数据库简单查询
1.数据库查询是什么?
数据库查询本质是:从数据库中“提取数据”,也可以简单理解为:在Excel表格中查找内容。只是数据库更加强大。
SQL(Structured Query Language)是查询语言,就是结构化查询语言。专门用来对数据增删改查,核心就是SELECE,本篇文章,就会围绕查询,进行数据库简单查询的学习笔记整理。
举一个实例,下方有一个名为student的表格:
表(table): EXCEL表格
行(row): 一条数据
列(column): 一个字段
| id |
name |
age |
score |
phone |
| 1 |
张三 |
18 |
95 |
138 |
| 2 |
李四 |
19 |
88 |
NULL |
| 3 |
王五 |
18 |
76 |
NULL |
2.查询的核心——SELECT
SELECT:查询。*:all的意思,所有字段。FROM:从哪个表。
完整含义:查询student表中是所有数据
3.查询指定字段
1
| SELECT name, score FROM student;
|
如果不使用查询全部的*,上述代码的完整含义为:只查询student表中姓名和成绩。
实际效果如下:
| name |
score |
| 张三 |
95 |
| 李四 |
88 |
| 王五 |
76 |
4.筛选条件——WHERE
| 运算符 |
含义 |
| = |
等于 |
| > |
大于 |
| < |
小于 |
| >= |
大于等于 |
| <= |
小于等于 |
| != |
不等于 |
1 2
| SELECT * FROM student WHERE age = 18;
|
完整含义:查询student表中年龄等于18的学生
1 2
| SELECT * FROM student WHERE score > 90;
|
完整含义:查询student表中成绩大于90的学生
- 对字段进行布尔类型的判断,1为true,0为false
1 2
| SELECT * FROM student WHERE is_school=1;
|
完整含义:查询student表中在校的学生
1 2
| SELECT * FROM student WHERE is_school=0;
|
完整含义:查询student表中不在校的学生
- 还可以检查缺失值,IS NULL:缺失值 ; IS NOT NULL:存在值
1 2
| SELECT * FROM student WHERE phone IS NULL;
|
完整含义:查询student表中没有手机号的学生
| id |
name |
phone |
| 2 |
李四 |
NULL |
| 3 |
王五 |
NULL |
1 2
| SELECT * FROM student WHERE phone IS NOT NULL;
|
完整含义:查询student表中有手机号的学生
5. 排序——ORDER BY
ASC : 升序
DESC : 降序
1 2
| SELECT * FROM student ORDER BY score ASC;
|
完整含义:查询student表并升序排序
1 2
| SELECT * FROM student ORDER BY score DESC;
|
完整含义:查询student表并降序排序
6. 并或——AND 和 OR
AND:同时满足
1 2
| SELECT * FROM student WHERE age = 18 AND score > 90;
|
完整含义:查询student表中年龄18并且成绩大于90的学生
OR:满足一个即可
1 2
| SELECT * FROM student WHERE age = 18 OR score > 90;
|
完整含义:查询student表中年龄18或者成绩大于90的学生
7. 模糊查询——LIKE
1 2
| SELECT * FROM student WHERE name LIKE '张%';
|
| 写法 |
含义 |
| 张% |
张开头 |
| %张 |
张结尾 |
| %张% |
包含张 |
8. 限制数量——LIMIT
1 2
| SELECT * FROM student LIMIT 2;
|
完整含义:只查询student表中前两条数据
1 2 3
| SELECT * FROM student ORDER BY score DESC LIMIT 1;
|
查询了整个表,在对其进行降序后,只查询第一条数据,就是成绩最大的
完整含义:查询student表中成绩最高的一位学生
9. 重命名——AS
对比以下2种写法,都是查询了student表中年龄的列,对比有AS和没AS的区别
1 2
| SELECT age FROM student;
|
1 2
| SELECT age AS 年龄 FROM student;
|
数据库聚合函数
1. 统计数量——COUNT()
1
| SELECT COUNT(*) FROM student;
|
完整含义:统计所有的学生人数(COUNT(*)含义是统计所有行数)
结果 —> 3
1 2
| SELECT COUNT(*) FROM student WHERE age = 18;
|
逻辑是统计完所有行数后,找到年龄是18的学生
完整含义:统计所有的学生人数
结果 —> 2
COUNT()和SELECT 的本质区别是:前者是“有多少个”,后者是“都有谁?”
2. 简单函数——SUM(),AVG(),MAX(),MIN()
1
| SELECT SUM(score) FROM student;
|
SUM()求和:计算95+88+76
1
| SELECT AVG(score) FROM student;
|
AVG()求平均值
1
| SELECT MAX(score) FROM student;
|
MAX()最大值
1
| SELECT MIN(score) FROM student;
|
MIN()最小值
3. 分组——GROUP BY
假如现在有一个新表grade:
| name |
class |
score |
| 张三 |
1班 |
90 |
| 李四 |
1班 |
80 |
| 王五 |
2班 |
70 |
如果需要统计每个班级的平均分,就需要分组。GROUP BY 基本语法:SELECT 分组字段,聚合函数 FROM 表名 GROUP BY 分组字段;
1 2 3
| SELECT class AS 班级, COUNT(*) AS 人数 FROM student GROUP BY class;
|
先统计每个班级的人数:
1 2 3
| SELECT class AS 班级, AVG(score) AS 平均分 FROM student GROUP BY class;
|
4. 分组后筛选——HAVING
区分:WHERE是分组之前的筛选,HAVING是分组之后的筛选,并且WHERE不能使用聚合函数,仅针对行;HAVING可以使用聚合函数,并且针对组。
1 2 3 4
| SELECT class, AVG(score) FROM student GROUP BY class HAVING AVG(score) > 80;
|
完整含义:查询grade表中平均分大于80分的班级
5. SQL的执行顺序
1 2 3 4 5 6 7 8
| SELECT FROM WHERE GROUP BY HAVING SELECT ORDER BY LIMIT
|