当前位置: 首页 > news >正文

MySQL 高阶查询语句详解:排序、分组、子查询与视图

前言

建表语句

插入示例数据

一、按关键字排序(ORDER BY)

语法:

示例:

二、区间判断与去重查询

1. 使用 AND / OR 进行条件筛选

2. 使用 DISTINCT 去重

三、分组查询(GROUP BY)

语法:

示例:

四、限制结果条目(LIMIT)

语法:

示例:

五、设置别名(AS)

示例:

六、通配符查询(LIKE)

示例:

七、子查询

示例:

八、视图(VIEW)

创建视图:

查看视图:

多表视图:

视图与表的区别:

九、NULL 值处理

示例:

总结

前言

本文将介绍 MySQL 中常用的高阶查询语句,包括按关键字排序、分组查询、限制结果条目、设置别名、使用通配符、子查询和视图等内容,并通过示例展示其使用方法。


建表语句

sql

-- 创建学生信息表 info
CREATE TABLE info (id INT,name VARCHAR(10) PRIMARY KEY NOT NULL,score DECIMAL(5,2),address VARCHAR(20),hobbid INT(5)
);-- 创建辅助表 ky11
CREATE TABLE ky11 (id INT
);-- 创建测试表 test01
CREATE TABLE test01 (id INT,name VARCHAR(10),age CHAR(10)
);-- 创建副本表 t1(用于示例)
CREATE TABLE t1 AS SELECT * FROM info WHERE 1=0;

插入示例数据

sql

-- 向 info 表插入数据
INSERT INTO info VALUES(1, 'liuyi', 80.00, 'beijing', 2);
INSERT INTO info VALUES(2, 'wangwu', 90.00, 'shengzheng', 2);
INSERT INTO info VALUES(3, 'lisi', 60.00, 'shanghai', 4);
INSERT INTO info VALUES(4, 'tianqi', 99.00, 'hangzhou', 5);
INSERT INTO info VALUES(5, 'jiaoshou', 98.00, 'laowo', 3);
INSERT INTO info VALUES(6, 'hanmeimei', 10.00, 'nanjing', 3);
INSERT INTO info VALUES(7, 'lilei', 11.00, 'nanjing', 5);-- 向 ky11 表插入数据
INSERT INTO ky11 VALUES(1), (2), (3);-- 向 test01 表插入数据
INSERT INTO test01 VALUES(1, 'zhangsan', '20');
INSERT INTO test01 VALUES(2, 'lisi', '30');
INSERT INTO test01 VALUES(3, 'wangwu', '29');-- 向 t1 表插入数据(复制 info 表数据)
INSERT INTO t1 SELECT * FROM info;

一、按关键字排序(ORDER BY)

使用 ORDER BY 可以对查询结果进行排序,支持单字段或多字段排序。

语法:

sql

SELECT column1, column2, ... 
FROM table_name 
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...;
  • ASC:升序(默认)

  • DESC:降序

示例:

sql

-- 按分数升序
SELECT name, score FROM info ORDER BY score;-- 按分数降序
SELECT name, score FROM info ORDER BY score DESC;-- 多字段排序:先按兴趣降序,再按 id 升序
SELECT id, name, hobbid FROM info ORDER BY hobbid DESC, id ASC;

二、区间判断与去重查询

1. 使用 AND / OR 进行条件筛选

sql

-- 分数在70到90之间
SELECT * FROM info WHERE score > 70 AND score <= 90;-- 分数大于70或小于等于90
SELECT * FROM info WHERE score > 70 OR score <= 90;

2. 使用 DISTINCT 去重

sql

SELECT DISTINCT hobbid FROM info;

三、分组查询(GROUP BY)

GROUP BY 常与聚合函数(如 COUNTSUMAVGMAXMIN)一起使用。

语法:

sql

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE condition
GROUP BY column_name;

示例:

sql

-- 按兴趣分组统计人数
SELECT COUNT(name), hobbid FROM info GROUP BY hobbid;-- 分数大于80的学生按兴趣分组并排序
SELECT COUNT(name), hobbid 
FROM info 
WHERE score >= 80 
GROUP BY hobbid 
ORDER BY COUNT(name) ASC;

四、限制结果条目(LIMIT)

LIMIT 用于限制返回的记录数。

语法:

sql

SELECT column1, column2, ...
FROM table_name
LIMIT [offset,] number;

示例:

sql

-- 前3条记录
SELECT * FROM info LIMIT 3;-- 从第4条开始取3条
SELECT * FROM info LIMIT 3, 3;-- 按 id 降序取最后3条
SELECT id, name FROM info ORDER BY id DESC LIMIT 3;

五、设置别名(AS)

使用 AS 可以为列或表设置别名,提高可读性。

示例:

sql

-- 列别名
SELECT name AS 姓名, score AS 成绩 FROM info;-- 表别名
SELECT i.name, i.score FROM info AS i;-- 统计表记录数
SELECT COUNT(*) AS number FROM info;

六、通配符查询(LIKE)

通配符 % 表示多个字符,_ 表示一个字符。

示例:

sql

-- 名字以 c 开头
SELECT id, name FROM info WHERE name LIKE 'c%';-- 名字中包含 g
SELECT id, name FROM info WHERE name LIKE '%g%';-- 名字为 tang 开头且后面跟3个字符
SELECT id, name FROM info WHERE name LIKE 'tang___';

七、子查询

子查询是嵌套在主查询中的查询语句,常用于 WHERE 或 FROM 子句中。

示例:

sql

-- 查询分数大于80的学生
SELECT name, score FROM info 
WHERE id IN (SELECT id FROM info WHERE score > 80);-- 多表子查询
SELECT id, name, score FROM info 
WHERE id IN (SELECT * FROM ky11);-- 使用 EXISTS 判断子查询是否返回结果
SELECT COUNT(*) FROM info 
WHERE EXISTS (SELECT id FROM info WHERE score = 80);

八、视图(VIEW)

视图是基于查询结果的虚拟表,不存储数据,仅保存查询逻辑。

创建视图:

sql

CREATE VIEW v_score AS 
SELECT * FROM info WHERE score >= 80;

查看视图:

sql

SELECT * FROM v_score;

多表视图:

sql

CREATE VIEW v_info AS 
SELECT i.id, i.name, i.score, t.age 
FROM info i, test01 t 
WHERE i.name = t.name;

视图与表的区别:

  • 视图不存储数据,表存储数据

  • 视图是逻辑表,表是物理表

  • 视图可以简化复杂查询,提高安全性


九、NULL 值处理

NULL 表示缺失值,与空字符串 '' 不同。

示例:

sql

-- 查询 NULL 值
SELECT * FROM info WHERE addr IS NULL;-- 查询非 NULL 值
SELECT * FROM info WHERE addr IS NOT NULL;

总结

本文介绍了 MySQL 中常用的高阶查询语句,包括排序、分组、限制结果、别名、通配符、子查询和视图等功能。掌握这些语句能显著提升数据库查询的灵活性和效率。

如果有任何问题或建议,欢迎在评论区留言!


文章转载自:

http://YmvEnGCo.wqbbc.cn
http://V2XmBgXn.wqbbc.cn
http://YLiZO8dh.wqbbc.cn
http://fRXrnt32.wqbbc.cn
http://UDT9pTsW.wqbbc.cn
http://v2T6hDGo.wqbbc.cn
http://un2JTq1L.wqbbc.cn
http://pwaz4drQ.wqbbc.cn
http://AjGARSfF.wqbbc.cn
http://cFcj0AeQ.wqbbc.cn
http://9JxL6NxW.wqbbc.cn
http://vchEJaRA.wqbbc.cn
http://GbhlfsSO.wqbbc.cn
http://Gi2gV7xj.wqbbc.cn
http://Nqpnm3IC.wqbbc.cn
http://oTji8kwJ.wqbbc.cn
http://z4SeDiJM.wqbbc.cn
http://7tdzirZn.wqbbc.cn
http://LnONdVTG.wqbbc.cn
http://hnv2rRkH.wqbbc.cn
http://ZX1geOnm.wqbbc.cn
http://gDGgohR4.wqbbc.cn
http://SGtz2caS.wqbbc.cn
http://OZBfahX2.wqbbc.cn
http://0D3dikSD.wqbbc.cn
http://jfkWuAMv.wqbbc.cn
http://RwdheDpn.wqbbc.cn
http://nyxAOf5z.wqbbc.cn
http://ATNTevKg.wqbbc.cn
http://EkRJPw7w.wqbbc.cn
http://www.dtcms.com/a/383954.html

相关文章:

  • Mathtype公式批量编号一键设置公式居中编号右对齐
  • CKS-CN 考试知识点分享(5) 安全上下文 Container Security Context
  • 简单的分数求和 区分double和float
  • Python核心技术开发指南(066)——封装
  • SFR-DeepResearch: 单智能体RL完胜复杂多智能体架构
  • 【Docker+Nginx+Ollama】前后端分离式项目部署(传统打包方式)
  • ffplay数据读取线程
  • 回溯剪枝的 “减法艺术”:化解超时危机的 “救命稻草”(二)
  • 16-21、从监督学习到深度学习的完整认知地图——机器学习核心知识体系总结
  • 二叉树的顺序存储
  • 第7课:本地服务MCP化改造
  • CF607B Zuma -提高+/省选-
  • DMA-API(map和unmap)调用流程分析(十一)
  • LeetCode 1898.可移除字符的最大数目
  • LeetCode算法日记 - Day 42: 岛屿数量、岛屿的最大面积
  • 局域网文件共享
  • llamafactory 部署教程
  • Linux链路聚合工具之ifenslave命令案例解析
  • 资金方视角下的链改2.0:拉菲资本的观察与判断
  • AIPex:AI + 自然语言驱动的浏览器自动化扩展
  • < JS事件循环系列【四】> 事件循环补充概念:从执行细节到性能优化
  • MySQL从入门到精通:基础、安装与实战管理指南
  • 解决:Ubuntu、Kylin、Rocky系统中root用户忘记密码
  • javascript文本长度检测与自动截取,用于标题长度检测
  • 解锁 DALL・E 3:文生图多模态大模型的无限可能
  • 深入理解 LVS-DR 模式与 Keepalived 高可用集群
  • 数据库学习MySQL系列4、工具一 Navicat Premium 图形化软件的使用详细教程
  • RL【10-2】:Actor - Critic
  • MATLAB学习文档(十六)
  • 滑动窗口概述