SQL常用语法分类——DQL(数据查询语言)(篇一)——基本查询、条件查询、聚合函数
- 本专栏将会持续更新,旨在为大家源源不断地呈现更多有帮助的Mysql学习内容。以下是之前更新的两篇文章,如有需要可以供您参考。
【Mysql自学笔记(黑马程序员)】基础篇(一)SQL常用语法分类——DDL(数据定义语言)
【Mysql自学笔记(黑马程序员)】基础篇(二)SQL常用语法分类——DML(数据操作语言)
一、概述
1、什么是DQL?
DQL即数据查询语言(Data Query Language),它是用于从数据库中检索数据的一种语言,是SQL的重要组成部分。其核心用途就是从数据库的一个或多个表(以及视图等数据库对象)中获取满足特定条件的数据记录,简单来说是查询数据库中表的记录,并按照期望的格式呈现出来。
2、本文内容
-
本文主要介绍DQL相关语句,包括基本查询、条件查询、聚合函数、分组查询、排序查询、分页查询六部分,本文共分为两篇,首先介绍基本查询、条件查询、聚合函数以及他们的应用。
-
本文思维导图如下,以供大家参考。视频教程参考B站黑马程序员,如有任何问题欢迎批评指正。
二、DQL语句介绍
0、前言
为便于理解,本文提供一个具体使用场景,来帮助大家更快掌握查询操作,后续操作均基于此表。
-------------------------------------------------------------
student_id | name | age | gender | grade | major | score | enrollment_date |
---|---|---|---|---|---|---|---|
1 | Alice | 20 | Female | Sophomore | Computer Science | 85 | 2024-09-01 |
2 | Bob | 21 | Male | Junior | Mathematics | 78 | 2023-09-01 |
3 | Carol | 19 | Female | Freshman | English | 92 | 2024-09-01 |
4 | David | 22 | Male | Senior | Physics | 88 | 2022-09-01 |
5 | Eve | 20 | Female | Sophomore | Biology | 80 | 2024-09-01 |
6 | Frank | 21 | Male | Junior | Chemistry | 75 | 2023-09-01 |
7 | Grace | 19 | Female | Freshman | History | 90 | 2024-09-01 |
8 | Henry | 22 | Male | Senior | Engineering | 83 | 2022-09-01 |
9 | Isabella | 20 | Female | Sophomore | Psychology | 87 | 2024-09-01 |
10 | Jack | 21 | Male | Junior | Economics | 72 | 2023-09-01 |
表格数据说明如下:
(1)student_id:这是一个唯一标识每个学生的编号列,数据类型是整数类型,用于准确区分不同的学生个体,方便在后续的数据查询、更新、删除等操作中精准定位到特定学生的记录。
(2)name:存储学生的姓名,数据类型为字符串类型,用于记录学生的具体名称。
(3)age:表示学生的年龄,数据类型为整数类型。
(4)gender:记录学生的性别,取值为 “Male”(男性)或 “Female”(女性)。
(5)grade:描述学生所在的年级,为字符串类型,取值为 “Freshman”(大一新生)、“Sophomore”(大二学生)、“Junior”(大三学生)、“Senior”(大四学生)。
(6)major:存储学生所学的专业信息,也是字符串类型,可用于按专业进行分组统计、查询特定专业学生情况等分析操作。
(7)score:用于记录学生的成绩,数据类型为整数类型。
(8)enrollment_date:记录学生的入学日期,数据类型为日期类型。
-------------------------------------------------------------
将以下代码输入控制台并执行,以创建表格并输入相关数据,后续语句介绍示例均基于此表。
CREATE TABLE students (
student_id INT,
name VARCHAR(255),
age INT,
gender ENUM('Male', 'Female'),
grade VARCHAR(255),
major VARCHAR(255),
score DECIMAL(5, 2),
enrollment_date DATE
);
INSERT INTO students (student_id, name, age, gender, grade, major, score, enrollment_date) VALUES
(1, 'Alice', 20, 'Female', 'Sophomore', 'Computer Science', 85.00, '2024-09-01'),
(2, 'Bob', 21, 'Male', 'Junior', 'Mathematics', 78.00, '2023-09-01'),
(3, 'Carol', 19, 'Female', 'Freshman', 'English', 92.00, '2024-09-01'),
(3, 'David', 22, 'Male', 'Senior', 'Physics', 88.00, '2022-09-01'),
(5, 'Eve', 20, 'Female', 'Sophomore', 'Biology', 80.00, '2024-09-01'),
(6, 'Frank', 21, 'Male', 'Junior', 'Chemistry', 75.00, '2023-09-01'),
(7, 'Grace', 19, 'Female', 'Freshman', 'History', 90.00, '2024-09-01'),
(8, 'Henry', 22, 'Male', 'Senior', 'Engineering', 83.00, '2022-09-01'),
(9, 'Isabella', 20, 'Female', 'Sophomore', 'Psychology', 87.00, '2024-09-01'),
(10, 'Jack', 21, 'Male', 'Junior', 'Economics', 72.00, '2023-09-01');
1、基本查询
- 查询多个字段
----------查询多个字段----------
SELECT 字段1, 字段2, 字段3 ... FROM 表名;
SELECT * FROM 表名;
查询多个字段有两种书写形式:
- 第一行代码用于将指定的 “表名” 所对应的数据库表中选取特定的列(也就是这里列举的字段 1、字段 2、字段 3 等等)的数据,这种查询方式可用于获取表中部分列数据的场景。
- 第二行代码中的 “*” 是一个通配符,表示查询指定 “表名” 所对应的表中的所有列的数据,当需要获取一张表的完整信息,或者暂时不确定具体需要哪些列,只先查看表中的所有数据情况时可以用此获得表中的全部内容。
下面列举一个示例,展示SELECT语句的基本查询用法,点此可以返回数据表查看数据:
----------查询students表格中name、grade、score字段内容----------
SELECT
name, grade, students.score
FROM
students;
----------查询students表格中所有字段内容----------
SELECT
*
FROM
students;
代码输出的结果分别如下:
特殊说明: 在第一行代码中,我们使用了 ‘SELECT name, grade, students.score FROM students’ 语句来对表格中数据进行查询,其中“students.score”指定了是从 “students” 表中的 “score” 列,虽然在只查询一个表时通常省略表名前缀,但这样写可以更明确;若涉及多表查询,则需要在指定字段前加入前缀,确保查询到需要的数据。
- 设置别名
----------查询字段,并设置别名----------
SELECT 字段1 AS 别名1, 字段2 AS 别名2, ... FROM 表名;
- 通过使用 “AS” 关键字,可以为每个选中的字段指定一个别名,使查询结果更符合需求或更易理解。
- 当进行多表连接查询等操作时,为了区分可能出现的不同表中有相同名称的列的情况,可以通过赋予别名来加以区分。
下面列举一个示例,展示 AS 关键词的用法,点此可以返回数据表查看数据,代码以及结果展示如下:
----------
SELECT
name AS 学生姓名,
score AS 学生成绩
FROM
students;
- 去除重复记录
----------查询字段,并去除重复记录----------
SELECT DISTINCT 字段列表 FROM 表名;
“DISTINCT” 关键字用于对查询结果进行去重操作。当执行这条语句时,它会从指定列数据去除那些取值完全相同的重复值。
下面列举一个示例,展示 DISTINCT 关键词的用法,点此可以返回数据表查看数据,代码以及结果展示如下:
SELECT
DISTINCT grade, enrollment_date
FROM
students;
2、条件查询
----------条件查询语句----------
SELECT 字段列表 FROM 表名 WHERE 条件列表;
- 在本语句中,WHERE关键词是用于对查询的数据进行筛选的关键部分。只有满足 “条件列表” 中所设定的全部条件,才会被包含在最终的查询结果中。
- 在使用 WHERE 关键词时,可以借助多种运算符来设定筛选条件的限制,常见的逻辑运算符总结如下表:
分类 | 符号名称 | 功能 |
比较运算符 | > | 大于 |
>= | 大于等于 | |
< | 小于 | |
<= | 小于等于 | |
= | 等于 | |
<> 或 != | 不等于 | |
BETEWEEN ... AND ... | 在某个范围之内(包含最大值与最小值) | |
IN (...) | 在 IN 后列表中的值,多选一 | |
LIKE 占位符 (...) | 模糊匹配 ( _ 匹配单个字符,% 匹配任意个字符) | |
IS (NOT) NULL | 是 (不是) NULL 值 | |
逻辑运算符 | AND 或 && | 并且(多个条件同时成立) |
OR 或 || | 或者(多个条件任意一个成立) | |
NOT 或 ! | 非,不是 |
※※下面列举六个示例,展示 WHERE 关键词的用法,点此可以返回数据表查看数据,代码以及结果展示如下:
-------------------------------------------------------------
- 示例1:使用比较运算符(等于)
(1)要求:筛选出专业为 “Computer Science” 的所有学生记录。
(2)代码:
SELECT
*
FROM
students
WHERE
major = 'Computer Science';
(3)运行结果:
-------------------------------------------------------------
- 示例2:使用比较运算符(大于)和逻辑运算符(与)
(1)要求:筛选出年龄大于 20 岁并且成绩大于 80 分的学生姓名,年龄,考试分数。
(2)代码:
SELECT
name, age, score
FROM
students
WHERE
age > 20 AND score > 80;
(3)运行结果:
-------------------------------------------------------------
- 示例3:使用比较运算符(小于等于)和逻辑运算符(或)
(1)要求:筛选出年龄小于等于 20 岁 或者是 ‘数学专业’ 的学生序号、姓名和专业。
(2)代码:
SELECT
student_id, name, major
FROM
students
WHERE
age <= 20 OR major = 'Mathematics';
(3)运行结果:
-------------------------------------------------------------
- 示例4:使用比较运算符(大于等于)和逻辑运算符(与)以及嵌套的逻辑运算符(或)
(1)要求:筛选出年龄大于等于 21 岁并且成绩大于等于 80 分的,或者是 专业是 “Physics” 的学生姓名、专业以及分数。
(2)代码:
SELECT
name, major, score
FROM
students
WHERE
(age >= 21 AND score >= 80) OR major = 'Physics';
(3)运行结果:
在本条查询语句中,‘()’ 起到了明确运算优先级的作用,代码要先执行()中的内容,之后在执行外面的内容。
-------------------------------------------------------------
- 示例5:使用 BETWEEN AND 运算符以及IN 运算符
(1)要求:筛选出年龄在 20 岁(包含 20 岁)到 22 岁(包含 22 岁)之间的学生 或者 专业是 ‘Computer Science’, ‘Mathematics’, ‘Physics’ 的学生姓名、年龄、以及专业名称。
(2)代码:
SELECT
name, age, major
FROM
students
WHERE
(age BETWEEN 20 AND 22) OR (major IN ('Computer Science', 'Mathematics', 'Physics'));
(3)运行结果:
-------------------------------------------------------------
- 示例6:使用 LIKE 运算符
(1)要求:查询姓名以 ‘A’ 字母开头的, 或 ‘e’ 字母结尾的, 或姓名中包含 ‘er’ 的, 或姓名中第二个字母是 'a” 的学生姓名以及成绩。
(2)代码:
SELECT
name, score
FROM
students
WHERE
name LIKE 'A%' OR
name LIKE '%e' OR
name LIKE '%er%' OR
name LIKE '_a%';
(3)运行结果:
- LIKE 运算符,通配符 % 表示任意字符序列(可以是零个、一个或多个字符)。以查姓名以 ‘A’ 字母开头的为例,’name LIKE ‘A%’ 表示要筛选出姓名以字母 “A” 开头的学生记录。所以无论后面跟着多少个字符,只要开头是 “A”,该学生记录就会被筛选出来。
- ‘ _ ’ 它表示任意单个字符,因为 ‘ _ ’ 只匹配一个字符,所以第一个字符可以是任意的,只要第二个字符是 “a”,并且后面跟着任意字符序列(由 % 表示),该学生记录就会被筛选出来。
-------------------------------------------------------------
3、聚合函数
聚合函数是用于对一组数据进行汇总计算的函数,在 SQL 中经常用于对数据表中的列数据进行统计分析等操作。常见的聚合函数有:COUNT、MAX、MIN、AVG、SUM等等,下面我们将对他们分别介绍。
----------聚合函数查询语句----------
SELECT 聚合函数 字段列表 FROM 表名;
聚合函数名称 | 函数功能 |
---|---|
COUNT | 统计数量 |
MAX | 最大值 |
MIN | 最小值 |
AVG | 平均值 |
SUM | 求和 |
※※下面列举一个示例,将聚合函数与前文的条件查询结合使用展示用法。点此可以返回数据表查看数据,代码以及结果展示如下:
-------------------------------------------------------------
- 示例:统计特定专业且成绩高于某分数的学生人数、总成绩、平均成绩、最高成绩和最低成绩
(1)要求:筛选成绩大于80分的计算机科学专业的学生,并查询他们的学生人数、总分、平均分、最高分以及最低分。
(2)代码:
SELECT
COUNT(*) AS student_count,
SUM(score) AS total_score,
AVG(score) AS average_score,
MAX(score) AS max_score,
MIN(score) AS min_score
FROM
students
WHERE
major = 'Computer Science' AND score > 80;
(3)运行结果:
标签:students,09,查询,运算符,score,SQL,查询语言,SELECT From: https://blog.csdn.net/m0_50695189/article/details/143380957(1)首先使用了逻辑运算符 AND 结合比较运算符>筛选出专业是 “Computer Science” 的成绩高于 80 分的学生,只有同时满足这两个条件的学生记录才会被纳入后续的聚合计算。
(2)之后使用了五个聚合函数分别得到了学生人数、总成绩、平均成绩、最高成绩以及最低成绩,并使用 AS 关键字分别命名。