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

MySQL 高阶语句

文章目录

      • MySQL 高阶语句(一)
      • 一、常用查询
        • 1. 排序查询
        • 2. 区间判断与查询不重复记录
        • 3. 分组查询
        • 4. 限制查询条目
        • 5. 设置别名
        • 6. 通配符
      • 二、子查询
      • 三、连接查询
        • 1. 内连接(`INNER JOIN`)
        • 2. 左连接(`LEFT JOIN`)
        • 3. 右连接(`RIGHT JOIN`)
      • 四、视图(`VIEW`)
      • 五、NULL 值处理
      • 总结
      • 总结

MySQL 高阶语句(一)

在日常数据库操作中,MySQL 不仅可以执行基础的增、删、改、查操作,还提供了丰富的语句用于对查询结果进行排序、分组、筛选等操作。本博客将介绍 MySQL 中常用的高阶查询语句,如排序、区间判断、去重、分组、限制条目、别名设置、通配符、子查询和连接查询。


一、常用查询

1. 排序查询

MySQL 提供 ORDER BY 语句来对查询结果进行排序。可以按升序(ASC,默认)或降序(DESC)进行排序,还可以组合多个字段进行排序。

示例

SELECT id, name, score FROM info ORDER BY score;  -- 按分数升序排列
SELECT id, name, score FROM info ORDER BY score DESC;  -- 按分数降序排列
SELECT id, name, score FROM info WHERE address = 'hangzhou' ORDER BY score DESC;  -- 结合 WHERE 条件

你也可以使用多个字段进行排序:

SELECT id, name, hobbid FROM info ORDER BY hobbid DESC, id;  -- 先按兴趣降序,再按 ID 升序

2. 区间判断与查询不重复记录

ANDOR 操作符 用于区间判断,DISTINCT 可以查询不重复记录。

示例

SELECT * FROM info WHERE score > 70 AND score <= 90;
SELECT DISTINCT hobbid FROM info;  -- 查询不重复的 hobbid

3. 分组查询

GROUP BY 结合聚合函数(如 COUNTSUMAVGMAXMIN)可以对查询结果进行分组。

示例

SELECT COUNT(name), hobbid FROM info GROUP BY hobbid;  -- 按 hobbid 分组统计学生人数
SELECT COUNT(name), hobbid FROM info WHERE score >= 80 GROUP BY hobbid;  -- 只统计分数大于 80 的学生人数

4. 限制查询条目

LIMIT 用于限制返回的记录行数。可以从任意偏移量开始,返回指定数量的记录。

示例

SELECT * FROM info LIMIT 3;  -- 返回前 3 行
SELECT * FROM info LIMIT 3, 3;  -- 从第 4 行开始,返回 3 行

结合 ORDER BY 使用:

SELECT id, name FROM info ORDER BY id LIMIT 3;  -- 按 ID 升序,返回前 3 行

5. 设置别名

AS 用于为表或字段设置别名,使 SQL 语句更简洁。

示例

SELECT name AS 姓名, score AS 成绩 FROM info;  -- 为字段设置别名
SELECT i.name, i.score FROM info AS i;  -- 为表设置别名

6. 通配符

LIKE 和通配符(%_)用于模糊查询。

示例

SELECT id, name FROM info WHERE name LIKE 'c%';  -- 名字以 c 开头
SELECT id, name FROM info WHERE name LIKE '%g%';  -- 名字包含字母 g

二、子查询

子查询是指在一个查询语句中嵌套另一个查询语句,常用于复杂查询场景。

示例

SELECT name, score FROM info WHERE id IN (SELECT id FROM info WHERE score > 80);  -- 查询分数大于 80 的学生

子查询也可以用于 INSERTUPDATEDELETE 语句中:

INSERT INTO t1 SELECT * FROM info WHERE id IN (SELECT id FROM info);  -- 将查询结果插入 t1 表

三、连接查询

连接查询用于从多个表中获取相关数据,常用的连接类型有内连接、左连接和右连接。

1. 内连接(INNER JOIN

只返回两个表中匹配的记录。

SELECT info.id, info.name FROM info INNER JOIN infos ON info.name = infos.name;
2. 左连接(LEFT JOIN

返回左表的所有记录,即使右表中没有匹配的记录。

SELECT * FROM info LEFT JOIN infos ON info.name = infos.name;
3. 右连接(RIGHT JOIN

返回右表的所有记录,即使左表中没有匹配的记录。

SELECT * FROM info RIGHT JOIN infos ON info.name = infos.name;

四、视图(VIEW

视图是数据库中的虚拟表,不存储真实数据,只是存储 SQL 查询的结果集。视图用于简化复杂查询、提高安全性等。

创建视图

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

视图可以像表一样使用,也可以修改原表的数据:

UPDATE v_score SET score = 120 WHERE name = 'tianqi';  -- 修改视图同时修改原表

五、NULL 值处理

IS NULLIS NOT NULL 用于判断字段是否为空值。需要注意,NULL 值与 0 或空字符串不同。

示例

SELECT * FROM info WHERE addr IS NULL;  -- 查询地址为空的记录

总结

MySQL 提供了多种高级查询语句,使开发者能够更灵活地处理复杂的查询任务。从排序、分组到连接查询、视图创建等操作,这些语句都是数据库操作中不可或缺的工具。

示例

SELECT * FROM info WHERE addr IS NULL;  -- 查询地址为空的记录

总结

MySQL 提供了多种高级查询语句,使开发者能够更灵活地处理复杂的查询任务。从排序、分组到连接查询、视图创建等操作,这些语句都是数据库操作中不可或缺的工具。

通过合理使用这些高级语句,不仅可以提高查询效率,还可以优化数据库结构,提升业务系统的性能。


http://www.mrgr.cn/news/25254.html

相关文章:

  • 数据库基础知识概述与管理操作指南
  • 电力系统保护技术交直流充电桩测试负载
  • 2012-2022年各省新质生产力数据(含原始数据+计算代码+计算结果)
  • 武汉传媒学院联合创龙教仪建设DSP教学实验箱,基于DSP C6000平台搭建
  • 深度防御:反射API在防御跨站脚本攻击中的作用
  • wpf触发与模板的使用示例:批量生产工具
  • 基于PHP的丽江旅游管理系统
  • [Python办公]常用Python数据采集爬虫技术对比
  • 学习之使用IDEA集成GIT
  • TS 常用类型
  • TypeScript 扩展
  • 《AIGC:内容创作与变现的新机遇》
  • 828华为云征文|部署电子书阅读器 Koodo Reader
  • MPU6050移植DMP读出三轴角度
  • RZ7888电机驱动芯片
  • Java线程
  • 先导工业4.0生产线教学平台助力职业智能制造教育教学
  • Java语言程序设计基础篇_编程练习题18.24 (将十六进制数转换为十进制数)
  • ios xib 子控件约束置灰不能添加约束
  • 为什么不写注释?写“为什么不”注释?