
一、MySQL查询学习笔记(基础查询、条件查询、排序查询、常见函数、分组查询 详解)
使用
1. 使用
查询每个
发布日期: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. 模糊查询
使用 LIKE
、BETWEEN
、IN
和 IS 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;
- 查询员工最高工资和最低工资的差距:
- 查询各管理者手下员工的最低工资(最低工资不能低于6000),排除没有管理者的员工:
SELECT MAX(salary) - MIN(salary) AS 差距 FROM employees;
SELECT MIN(salary), manager_id FROM employees WHERE manager_id IS NOT NULL GROUP BY manager_id HAVING MIN(salary) >= 6000;
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年04月07日 03时57分12秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
函数指针的典型应用-计算函数的定积分(矩形法思想)
2019-03-05
8051单片机(STC89C52)八个LED灯闪烁
2019-03-05
8051单片机(STC89C52)以定时器中断模式实现两倒计时器异步计时
2019-03-05
用 wxPython 打印你的 App
2019-03-05
vue项目通过vue.config.js配置文件进行proxy反向代理跨域
2019-03-05
Linux下安装MySql过程
2019-03-05
原生vue实现VantUI中IndexBar索引导航栏功能
2019-03-05
android:使用audiotrack 类播放wav文件
2019-03-05
vue通过better-scroll 封装自定义的下拉刷新组件
2019-03-05
android解决:使用多线程和Handler同步更新UI
2019-03-05
vue自定义封装Loading组件
2019-03-05
解决移动端项目中苹果ios和安卓android手机点击输入框网页页面自动放大缩小
2019-03-05
Element UI 中动态路由的分析及实现
2019-03-05
使用springMVC配置视图管理器后找不到指定的页面
2019-03-05
关于js中对于Promise的深入理解
2019-03-05
杭电 2007 平方和与立方和(输入数据的大小顺序并不能默认)
2019-03-05
十大排序算法之三:插入排序(Python)
2019-03-05
利用Python实现循环队列
2019-03-05
利用递归实现二叉树的前中后序遍历(Python)
2019-03-05