MySQL 高阶语句

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

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

MySQL 提供了一些高阶的查询语句用法,可以帮助我们更灵活、高效地进行数据查询。以下是一些常用的高阶用法: 1. 子查询: 子查询是将一个查询嵌套在另一个查询中的查询结构。它可以用作 `SELECT` 语句中的列、`FROM` 子句中的表、`WHERE` 子句中的条件等。 示例: ```sql SELECT column_name FROM table_name WHERE column_name IN (SELECT column_name FROM another_table WHERE condition); ``` 2. 联合查询: 联合查询用于将两个或多个查询的结果合并成一个结果集。可以使用 `UNION` 或 `UNION ALL` 运算符来执行联合查询。 示例: ```sql SELECT column_name FROM table1 UNION SELECT column_name FROM table2; ``` 3. 分页查询: 分页查询用于在结果集中进行分页显示数据。可以使用 `LIMIT` 子句指定要返回的记录数量,并使用 `OFFSET` 子句指定要跳过的记录数量。 示例: ```sql SELECT column_name FROM table_name LIMIT number_of_rows OFFSET offset_value; ``` 4. 排序: 可以使用 `ORDER BY` 子句对查询结果进行排序。可以按照一个或多个列进行升序或降序排序。 示例: ```sql SELECT column_name FROM table_name ORDER BY column_name ASC; ``` 5. 聚合函数和分组: 使用聚合函数(如 `SUM`、`AVG`、`COUNT` 等)可以对数据进行聚合计算。可以结合 `GROUP BY` 子句将结果集按照一个或多个列进行分组。 示例: ```sql SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name; ``` 这些是一些常用的 MySQL 查询语句高阶用法,可以根据具体需求进行学习和使用。此外,MySQL 还提供了其他高级特性,如窗口函数、子查询优化、索引优化等,可以进一步提升查询性能和灵活性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值