Mysql DQL 学习记录
发布人:shili8
发布时间:2024-12-30 01:57
阅读次数:0
**MySQL DQL 学习记录**
**前言**
DQL(Data Query Language)是 MySQL 中用于从数据库中检索数据的语言。它提供了各种命令来查询、过滤和排序数据。在本文中,我们将学习 MySQL DQL 的基本概念、常用命令以及实践示例。
**1. SELECT 命令**
SELECT 命令用于从表中检索数据。它是 DQL 中最常用的命令。
sqlSELECT column_name(s) FROM table_name;
* `column_name(s)`:指定要检索的列名,可以使用逗号分隔多个列名。
* `table_name`:指定要从中检索数据的表名。
示例:
sqlSELECT name, ageFROM users;
上述命令将从 `users` 表中检索 `name` 和 `age` 列的值。
**2. WHERE 子句**
WHERE 子句用于过滤满足特定条件的数据。
sqlSELECT column_name(s) FROM table_nameWHERE condition;
* `condition`:指定要过滤的条件,可以使用逻辑运算符(AND、OR、NOT)和比较运算符(=、<>、<、>、<=、>=)。
示例:
sqlSELECT name, ageFROM usersWHERE age >18;
上述命令将从 `users` 表中检索年龄大于18 的用户信息。
**3. ORDER BY 子句**
ORDER BY 子句用于对检索的数据进行排序。
sqlSELECT column_name(s) FROM table_nameORDER BY column_name(s) ASC|DESC;
* `column_name(s)`:指定要根据哪个列进行排序。
* `ASC`(升序)或 `DESC`(降序):指定排序的顺序。
示例:
sqlSELECT name, ageFROM usersORDER BY age DESC;
上述命令将从 `users` 表中检索用户信息,并按年龄降序排列。
**4. LIMIT 子句**
LIMIT 子句用于限制返回的数据行数。
sqlSELECT column_name(s) FROM table_nameLIMIT number;
* `number`:指定要返回的数据行数。
示例:
sqlSELECT name, ageFROM usersLIMIT5;
上述命令将从 `users` 表中检索前五条用户信息。
**5. GROUP BY 子句**
GROUP BY 子句用于对检索的数据进行分组。
sqlSELECT column_name(s) FROM table_nameGROUP BY column_name(s);
* `column_name(s)`:指定要根据哪个列进行分组。
示例:
sqlSELECT name, COUNT(*) FROM usersGROUP BY name;
上述命令将从 `users` 表中检索用户信息,并按用户名进行分组,统计每个用户名下的用户数量。
**6. HAVING 子句**
HAVING 子句用于过滤满足特定条件的分组数据。
sqlSELECT column_name(s) FROM table_nameGROUP BY column_name(s) HAVING condition;
* `condition`:指定要过滤的条件,可以使用逻辑运算符(AND、OR、NOT)和比较运算符(=、<>、<、>、<=、>=)。
示例:
sqlSELECT name, COUNT(*) FROM usersGROUP BY nameHAVING COUNT(*) >1;
上述命令将从 `users` 表中检索用户信息,并按用户名进行分组,过滤出每个用户名下有多于一条记录的用户名。
**7. JOIN 子句**
JOIN 子句用于连接两个或多个表。
sqlSELECT column_name(s) FROM table1, table2WHERE condition;
* `table1` 和 `table2`:指定要连接的表名。
* `condition`:指定要连接的条件,可以使用逻辑运算符(AND、OR、NOT)和比较运算符(=、<>、<、>、<=、>=)。
示例:
sqlSELECT users.name, orders.order_idFROM users, ordersWHERE users.id = orders.user_id;
上述命令将从 `users` 和 `orders` 表中检索用户信息和订单信息,并连接两个表,过滤出每个用户下有相关订单的记录。
**8. UNION 子句**
UNION 子句用于合并两个或多个 SELECT语句的结果集。
sqlSELECT column_name(s) FROM table1UNIONSELECT column_name(s) FROM table2;
* `table1` 和 `table2`:指定要合并的表名。
* `column_name(s)`:指定要合并的列名,可以使用逗号分隔多个列名。
示例:
sqlSELECT name, ageFROM usersUNIONSELECT name, ageFROM customers;
上述命令将从 `users` 和 `customers` 表中检索用户信息和客户信息,并合并两个结果集,去除重复记录。
**9. EXISTS 子句**
EXISTS 子句用于检查是否存在满足特定条件的数据。
sqlSELECT column_name(s) FROM table1WHERE EXISTS (SELECT * FROM table2 WHERE condition);
* `table1` 和 `table2`:指定要检查的表名。
* `condition`:指定要检查的条件,可以使用逻辑运算符(AND、OR、NOT)和比较运算符(=、<>、<、>、<=、>=)。
示例:
sqlSELECT users.nameFROM usersWHERE EXISTS (SELECT * FROM orders WHERE orders.user_id = users.id);
上述命令将从 `users` 表中检索用户信息,并检查每个用户下是否有相关订单,如果存在,则返回该用户的名称。
**10. IN 子句**
IN 子句用于检查一个值是否在指定集合中的任何位置。
sqlSELECT column_name(s) FROM table1WHERE column_name IN (value1, value2, ...);
* `table1`:指定要检查的表名。
* `column_name`:指定要检查的列名。
* `value1`, `value2`, …:指定要检查的值,可以使用逗号分隔多个值。
示例:
sqlSELECT users.nameFROM usersWHERE age IN (18,25,30);
上述命令将从 `users` 表中检索用户信息,并检查每个用户的年龄是否在指定集合中的任何位置,如果存在,则返回该用户的名称。
**总结**
本文介绍了 MySQL DQL 的基本概念、常用命令以及实践示例。通过学习这些内容,读者可以掌握使用 MySQL 进行数据检索和过滤的能力。