一、MySQL查询学习笔记(基础查询、条件查询、排序查询、常见函数、分组查询 详解)
发布日期:2021-05-08 02:33:38 浏览次数:19 分类:精选文章

本文共 3464 字,大约阅读时间需要 11 分钟。

DQL语言学习指南

一、基础查询

DQL(Data Query Language,数据查询语言)是数据库管理系统提供的一种查询和数据操作语言,常用于 MySQL、Oracle 等数据库中。它与 Java 的 System.out.println 类似,用于从数据库中检取数据。

1. 查询单个字段

SELECT last_name FROM employees;

该语句用于从 employees 表中检取 last_name 字段的值。

2. 查询多个字段

SELECT last_name, salary, email FROM employees;

该语句可以一次性检取多个字段的值。

3. 查询所有字段

SELECT * FROM employees;

使用 * 可快速检取表中所有字段的值。

4. 查询常量值

SELECT 100; SELECT 'john';

常量值可以是数字或字符串。

5. 查询表达式

SELECT 100%98;

表达式可以是数学运算。

6. 查询函数

SELECT VERSION();

函数可以用于获取数据库信息。

7. 起别名

为了便于理解或区分字段,可以给查询结果起别名。使用 AS 或空格方式。

使用 AS

SELECT last_name AS 姓, first_name AS 名 FROM employees;

使用空格

SELECT last_name 姓, first_name 名 FROM employees;

8. 去重

使用 DISTINCT 关键字可以去除重复值。

SELECT DISTINCT department_id FROM employees;

9. +号的作用

MySQL 中的 + 只有加法运算符功能。

示例

SELECT 100 + 90;  -- 两个数值型执行加法SELECT 'john' + 90;  -- 字符型转换为数值型,如果转换成功执行加法,否则结果为 0SELECT null + 10;  -- 包含 `null` 的结果为 `null`

10. 拼接字符串

使用 CONCAT 函数可以拼接多个字符串。

SELECT CONCAT('a', 'b', 'c') AS 结果;SELECT CONCAT(last_name, first_name) AS 姓名 FROM employees;

二、条件查询

1. 按条件表达式筛选

使用基本的比较运算符和逻辑运算符。

示例

SELECT * FROM employees WHERE salary > 10000;

2. 按逻辑表达式筛选

使用 &&||! 进行复杂逻辑判断。

示例

SELECT * FROM employees WHERE salary > 10000 && salary < 20000;

3. 模糊查询

使用 LIKEBETWEENINIS NULL 进行模糊查询。

示例

SELECT * FROM employees WHERE last_name LIKE '%a%';

三、排序查询

1. 按单个字段排序

SELECT * FROM employees ORDER BY salary DESC;

2. 结合筛选条件排序

SELECT * FROM employees WHERE department_id >= 90 ORDER BY employee_id DESC;

3. 按表达式排序

SELECT *, salary * 12 * (1 + IFNULL(commission_pct, 0)) AS 年薪 FROM employees ORDER BY 年薪 DESC;

4. 按别名排序

SELECT *, salary * 12 * (1 + IFNULL(commission_pct, 0)) AS 年薪 FROM employees ORDER BY 年薪 ASC;

5. 按函数排序

SELECT LENGTH(last_name), last_name FROM employees ORDER BY LENGTH(last_name) DESC;

6. 按多个字段排序

SELECT * FROM employees ORDER BY salary DESC, employee_id ASC;

四、常见函数

1. 字符函数

SELECT LENGTH('john'); SELECT LENGTH('张三丰hahaha');

示例

SELECT CONCAT(last_name, '_', first_name) AS 姓名 FROM employees;

2. 数学函数

SELECT ROUND(-1.55); SELECT ROUND(1.567, 2);

示例

SELECT IF(10 < 5, '大', '小');

3. 日期函数

SELECT NOW(); SELECT CURDATE(); SELECT CURTIME();

示例

SELECT DATE_FORMAT(NOW(), '%y年%m月%d日') AS 入职日期 FROM employees WHERE commission_pct IS NOT NULL;

4. 其他函数

SELECT VERSION(); SELECT DATABASE(); SELECT USER();

五、分组查询

1. 使用 GROUP BY

SELECT AVG(salary) FROM employees;

示例

SELECT COUNT(*) FROM employees WHERE department_id = 90;

2. 分组前筛选

SELECT MAX(salary), department_id FROM employees WHERE email LIKE '%a%' GROUP BY department_id;

示例

SELECT AVG(salary), manager_id FROM employees WHERE commission_pct IS NOT NULL GROUP BY manager_id;

3. 分组后筛选

SELECT COUNT(*) FROM employees GROUP BY department_id HAVING COUNT(*) > 5;

示例

SELECT job_id, MAX(salary) FROM employees WHERE commission_pct IS NOT NULL GROUP BY job_id HAVING MAX(salary) > 12000;

4. 添加排序

SELECT job_id, MAX(salary) FROM employees WHERE commission_pct IS NOT NULL GROUP BY job_id HAVING MAX(salary) > 6000 ORDER BY MAX(salary) DESC;

5. 按多个字段分组

SELECT MIN(salary), job_id, department_id FROM employees GROUP BY department_id, job_id ORDER BY MIN(salary) DESC;

强化练习

  • 查询每个 job_id 的员工工资的最大值、最小值、平均值和总和,并按 job_id 升序排序:
  • SELECT MAX(salary), MIN(salary), AVG(salary), SUM(salary), job_id FROM employees GROUP BY job_id ORDER BY job_id;
    1. 查询员工最高工资和最低工资的差距:
    2. SELECT MAX(salary) - MIN(salary) AS 差距 FROM employees;
      1. 查询各管理者手下员工的最低工资(最低工资不能低于6000),排除没有管理者的员工:
      2. SELECT MIN(salary), manager_id FROM employees WHERE manager_id IS NOT NULL GROUP BY manager_id HAVING MIN(salary) >= 6000;
    上一篇:PAT L3-005. 垃圾箱分布 26分 测试点4 过不了
    下一篇:L3-008 喊山 (30分) C++ BFS题解

    发表评论

    最新留言

    逛到本站,mark一下
    [***.202.152.39]2025年04月07日 03时57分12秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章