阅读前须知-点我下拉

数据库简单查询的学习笔记

目录

  1. 数据库简单查询
    ├── 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. 数据库聚合函数
    ├── 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

1
SELECT 字段 FROM 表名;
  • 以下笔记全部结合于上述的实例表格
1
SELECT * FROM student;

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表中有手机号的学生

id name phone
1 张三 138

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;
age
18
20
1
2
SELECT age AS 年龄
FROM student;
年龄
18
20

数据库聚合函数

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
2班 1
1
2
3
SELECT class AS 班级, AVG(score) AS 平均分
FROM student
GROUP BY class;
班级 平均分
1班 85
2班 70

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