首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
9.1 基本查询语句
9.2 单表查询
9.2.1 查询所有字段
9.2.2 查询指定字段
9.2.3 查询指定数据
9.2.4 带关键字IN的查询
9.2.5 带关键字BETWEEN AND的范围查询
9.2.6 带LIKE的字符匹配查询
9.2.7 用IS NULL关键字查询空值
9.2.8 带AND的多条件查询
9.2.9 带OR的多条件查询
9.2.10 用DISTINCT关键字去除结果中的重复行
9.2.11 用ORDER BY关键字对查询结果进行排序
9.2.12 用GROUP BY关键字分组查询
9.2.13 用LIMIT限制查询结果的数量
9.3 聚合函数查询
9.3.1 COUNT()统计函数
9.3.2 SUM()求和函数
9.3.3 AVG()平均数函数
9.3.4 MAX()最大值函数
9.3.5 MIN()最小值函数
9.4 连接查询
9.4.1 内连接查询
9.4.2 外连接查询
9.4.3 复合条件连接查询
9.5 子查询
9.5.1 带IN关键字的子查询
9.5.2 带比较运算符的子查询
9.5.3 带EXISTS关键字的子查询
9.5.4 带ANY关键字的子查询
9.5.5 带ALL关键字的子查询
9.6 合并查询结果
9.7 定义表和字段的别名
9.7.1 为表取别名
9.7.2 为字段取别名
9.8 使用正则表达式查询
9.8.1 匹配指定字符中的任意一个
9.8.2 使用“*”和“ ”来匹配多个字符
9.8.3 匹配以指定的字符开头和结束的记录
10.1 MySQL函数
10.2 数学函数
10.2.1 ABS(x)绝对值函数
10.2.2 FLOOR(x)向下取整函数
10.2.3 RAND()随机数函数
10.2.4 PI()圆周率函数
10.2.5 TRUNCATE(x,y)截断函数
10.2.6 ROUND(x)近似值函数和ROUND(x,y)四舍五入函数
10.2.7 SQRT(x)平方函数
10.3 字符串函数
10.3.1 INSERT(s1,x,len,s2)替换函数
10.3.2 UPPER(s)函数和UCASE(s)字母大写函数
10.3.3 LEFT(s,n)取左函数
10.3.4 RTRIM(s)去空格函数
10.3.5 SUBSTRING(s,n,len)截取函数
10.3.6 REVERSE(s)反转函数
10.3.7 FIELD(s,s1,s2,…,sn)位置函数
10.3.8 LOCATE(s1,s)、POSITION(s1 IN s)和INSTR(s,s1)3个位置函数
10.4 日期和时间函数
10.4.1 CURDATE()和CURRENT_DATE()当前日期函数
10.4.2 CURTIME()和CURRENT_TIME()当前时间函数
10.4.3 NOW()当前日期和时间函数
10.4.4 DATEDIFF(d1,d2)间隔天数函数
10.4.5 ADDDATE(d,n)日期计算函数
10.4.6 ADDDATE(d,INTERVAL expr type)日期时间计算函数
10.4.7 SUBDATE(d,n)日期计算函数
10.5 条件判断函数
10.6 系统信息函数
10.6.1 获取MySQL版本号、连接数和数据库名的函数
10.6.2 获取用户名的函数
10.6.3 获取字符串的字符集和排序方式的函数
10.7.1 格式化函数FORMAT(x,n)
10.7.2 改变字符集的函数
10.7.3 改变字段数据类型的函数
当前位置:
首页>>
技术小册>>
MySQL从入门到精通(三)
小册名称:MySQL从入门到精通(三)
### 第9章 数据检索与查询优化 #### 9.2 单表查询 在MySQL数据库中,单表查询是最基础也是最重要的数据检索方式之一。它允许用户从单个表中检索出满足特定条件的数据行。掌握单表查询技巧,对于理解更复杂的SQL查询语句、提升数据库操作效率以及优化数据检索性能至关重要。本节将详细探讨单表查询的各个方面,包括基本SELECT语句的使用、条件筛选、排序、分组以及限制结果集等。 ##### 9.2.1 SELECT语句基础 `SELECT`语句是SQL中用于数据检索的基本命令。其基本语法结构如下: ```sql SELECT column1, column2, ... FROM table_name WHERE condition ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ... LIMIT number_of_rows OFFSET offset; ``` - **SELECT** 部分指定了要从表中检索的列名。使用`*`可以检索所有列。 - **FROM** 指定了包含数据的表名。 - **WHERE** 子句(可选)用于设置检索数据的条件。 - **ORDER BY** 子句(可选)用于对结果集进行排序。 - **LIMIT** 和 **OFFSET** 子句(可选)用于限制返回的记录数,并可以指定从哪条记录开始返回。 ##### 9.2.2 检索所有列与指定列 - **检索所有列**: ```sql SELECT * FROM employees; ``` 这条语句会检索`employees`表中的所有列和所有行。 - **检索指定列**: ```sql SELECT employee_id, first_name, last_name FROM employees; ``` 这里只检索了`employee_id`、`first_name`和`last_name`三列。 ##### 9.2.3 使用WHERE子句进行条件筛选 `WHERE`子句允许你根据一个或多个条件来过滤结果集。 - **单一条件筛选**: ```sql SELECT * FROM employees WHERE department_id = 5; ``` 检索部门ID为5的所有员工。 - **多条件筛选**(使用AND、OR、NOT): ```sql SELECT * FROM employees WHERE department_id = 5 AND salary > 5000; ``` 检索部门ID为5且薪资超过5000的所有员工。 ```sql SELECT * FROM employees WHERE (department_id = 5 OR department_id = 10) AND salary > 5000; ``` 检索部门ID为5或10且薪资超过5000的所有员工。 ```sql SELECT * FROM employees WHERE NOT department_id = 5; ``` 检索部门ID不是5的所有员工。 ##### 9.2.4 使用ORDER BY进行排序 `ORDER BY`子句用于对结果集进行排序。默认情况下,排序是升序的(ASC),但你可以通过指定DESC来改为降序。 - **单列排序**: ```sql SELECT * FROM employees ORDER BY hire_date ASC; ``` 按入职日期升序排列所有员工。 - **多列排序**: ```sql SELECT * FROM employees ORDER BY department_id ASC, hire_date DESC; ``` 首先按部门ID升序排列,如果部门ID相同,则按入职日期降序排列。 ##### 9.2.5 使用LIMIT和OFFSET限制结果集 `LIMIT`子句用于限制查询结果返回的记录数,而`OFFSET`子句用于指定从哪条记录开始返回。 - **使用LIMIT**: ```sql SELECT * FROM employees LIMIT 5; ``` 返回`employees`表中的前5条记录。 - **结合使用LIMIT和OFFSET**: ```sql SELECT * FROM employees LIMIT 5 OFFSET 10; ``` 跳过前10条记录,返回接下来的5条记录。 ##### 9.2.6 使用DISTINCT去除重复行 当查询结果集中包含重复行时,可以使用`DISTINCT`关键字来去除这些重复行。 ```sql SELECT DISTINCT department_id FROM employees; ``` 这条语句会返回所有不同的部门ID,即使某个部门ID在`employees`表中出现了多次。 ##### 9.2.7 使用聚合函数进行统计 聚合函数(如`COUNT()`, `SUM()`, `AVG()`, `MAX()`, `MIN()`)允许你对一组值执行计算,并返回一个单一的值。 - **计算行数**: ```sql SELECT COUNT(*) FROM employees; ``` 返回`employees`表中的总行数。 - **计算平均值**: ```sql SELECT AVG(salary) FROM employees; ``` 返回`employees`表中所有员工薪资的平均值。 - **最大值与最小值**: ```sql SELECT MAX(salary), MIN(salary) FROM employees; ``` 返回薪资的最大值和最小值。 ##### 9.2.8 实战案例:员工信息查询 假设我们需要查询薪资高于公司平均薪资的所有员工信息,并按部门ID和薪资降序排列。 ```sql SELECT * FROM employees WHERE salary > (SELECT AVG(salary) FROM employees) ORDER BY department_id ASC, salary DESC; ``` 这个查询首先计算了公司所有员工的平均薪资,然后选出了薪资高于这个平均值的员工,最后按照部门ID升序和薪资降序排列了结果。 ### 总结 单表查询是SQL数据检索的基础,掌握其基本概念和技巧对于进行复杂的数据分析和报表生成至关重要。通过本节的学习,你应该能够熟练使用`SELECT`语句、`WHERE`子句、`ORDER BY`子句、`LIMIT`和`OFFSET`子句以及聚合函数来执行各种单表查询任务。此外,理解并应用`DISTINCT`关键字去除重复行也是提高查询结果准确性的重要手段。希望这些内容能够帮助你在MySQL数据库操作中更加得心应手。
上一篇:
9.1 基本查询语句
下一篇:
9.2.1 查询所有字段
该分类下的相关小册推荐:
SQL零基础到熟练应用(增删改查)
MySQL从入门到精通(五)
MySQL从入门到精通(四)
细说MySQL(零基础到高级应用)
MySQL 实战 45 讲
MySQL8.0入门与实践
MySQL从入门到精通(一)
MySQL从入门到精通(二)
MySQL必会核心问题