DQL(Data Query Language,数据查询语言)是SQL中的一个子集,主要用于查询数据库中的数据。DQL的核心语句是 SELECT,它用于从一个或多个表中提取数据,并能够通过各种条件进行过滤、排序和聚合操作。下面是DQL的相关知识点及示例:
1. SELECT 语句
SELECT 是 DQL 中的核心语句,用于从表中查询数据。
基本语法:
SELECT 列名1, 列名2, ... FROM 表名 WHERE 条件;
- 列名1, 列名2:需要查询的列。
- FROM:指定查询的表。
- WHERE:可选的条件,用于过滤返回的行。
示例:
查询 users 表中的 name 和 email 列:
SELECT name, email FROM users;
设置别名
语法:SELECT 字段1 AS 别名1, 字段2 AS 别名2 ... FROM 表名;
示例:
将 name 列的别名设置为 username,将 email 列的别名设置为 user_email:
SELECT name AS username, email AS user_email FROM users;
去除重复记录
语法:SELECT DISTINCT 字段列表 FROM 表名;
示例:
查询 users 表中不同的城市(去除重复的 city):
SELECT DISTINCT city FROM users;
示例2:
查询 users 表中不同的 email 和 city 组合:
SELECT DISTINCT email, city FROM users;
2. SELECT * 查询所有列
使用 * 可以查询表中的所有列。
示例:
查询 users 表的所有列:
SELECT * FROM users;
3. WHERE 子句(条件查询)

WHERE 子句用于过滤查询结果,返回满足条件的行。
基本语法:
SELECT 列名 FROM 表名 WHERE 条件;
示例:
查询 users 表中 age 大于 25 的用户:
SELECT * FROM users WHERE age > 25;
2. 比较运算符
在 WHERE 子句中,常用的比较运算符包括:
=:等于!=或<>:不等于>:大于<:小于>=:大于或等于<=:小于或等于
示例:
# 查询 users 表中 age 等于 30 的用户:
SELECT * FROM users WHERE age = 30;
# 查询 users 表中 age 不等于 30 的用户:
SELECT * FROM users WHERE age != 30;
3. 逻辑运算符
逻辑运算符用于在 WHERE 子句中组合多个条件:
AND:所有条件都必须为真。OR:只要有一个条件为真。NOT:条件不成立时为真。
示例:
# 查询 users 表中 age 大于 25 且 city 为 'New York' 的用户:
SELECT * FROM users WHERE age > 25 AND city = 'New York';
# 查询 users 表中 age 大于 25 或 city 为 'New York' 的用户:
SELECT * FROM users WHERE age > 25 OR city = 'New York';
4. BETWEEN 操作符
BETWEEN 用于筛选值在某个范围内的记录。
基本语法:
SELECT 列名 FROM 表名 WHERE 列名 BETWEEN 最小值 AND 最大值;
示例:
查询 users 表中 age 在 20 到 30 岁之间的用户:
注意小的值在前,大的值在后,否则无法筛选
SELECT * FROM users WHERE age BETWEEN 20 AND 30;
5. IN 操作符
IN 用于筛选列值在给定列表中的记录。(相当于或)
基本语法:
SELECT 列名 FROM 表名 WHERE 列名 IN (值1, 值2, ...);
示例:
查询 users 表中 city 为 'New York'、'Los Angeles' 或 'Chicago' 的用户:
SELECT * FROM users WHERE city IN ('New York', 'Los Angeles', 'Chicago');
6. LIKE 操作符
LIKE 用于进行模糊匹配,常用于文本数据。通常结合通配符 %(表示零个或多个字符)和 _(表示一个字符)使用。
基本语法:
SELECT 列名 FROM 表名 WHERE 列名 LIKE 模式;
示例:
查询 users 表中 name 以 'A' 开头的用户:A%表示开头为A,其余的都行
SELECT * FROM users WHERE name LIKE 'A%';
查询 users 表中 name 中包含 'son' 的用户:
SELECT * FROM users WHERE name LIKE '%son%';
7. IS NULL 和 IS NOT NULL
IS NULL 用于查找列中值为 NULL 的记录,IS NOT NULL 用于查找列中不为 NULL 的记录。
基本语法:
SELECT 列名 FROM 表名 WHERE 列名 IS NULL; SELECT 列名 FROM 表名 WHERE 列名 IS NOT NULL;
示例:
查询 users 表中 email 为空的用户:
SELECT * FROM users WHERE email IS NULL;
查询 users 表中 email 不为空的用户:
SELECT * FROM users WHERE email IS NOT NULL;
4. ORDER BY 子句(排序查询)
ORDER BY 用于对查询结果进行排序,可以按升序(ASC)或降序(DESC)排列。
基本语法:
SELECT 列名 FROM 表名 ORDER BY 列名 [ASC|DESC];
示例:
查询 users 表中的用户,并按 age 列降序排列:
SELECT * FROM users ORDER BY age DESC;
5. LIMIT 子句(分页查询)
LIMIT 用于限制返回的结果集中的行数。通常用于分页查询。
基本语法:
SELECT 列名 FROM 表名 LIMIT n;
示例:
查询 users 表中的前 5 行数据:
SELECT * FROM users LIMIT 5;
6. 聚合函数:
7. GROUP BY 子句(分组查询)
GROUP BY 用于将查询结果按某个或多个列进行分组,常常与聚合函数(如 COUNT、SUM、AVG 等)一起使用。
基本语法:
SELECT 列名, 聚合函数 FROM 表名 GROUP BY 列名;
示例:
统计 users 表中每个城市的用户数量:
SELECT city, COUNT(*) AS user_count FROM users GROUP BY city;
8. HAVING 子句
HAVING 子句用于过滤 GROUP BY 的结果。它与 WHERE 类似,但 HAVING 主要用于过滤分组后的结果,而 WHERE 则用于在分组前过滤数据。
基本语法:
SELECT 列名, 聚合函数 FROM 表名 GROUP BY 列名 HAVING 条件;
示例:
查询 users 表中用户数量大于 10 的城市:
SELECT city, COUNT(*) AS user_count FROM users GROUP BY city HAVING user_count > 10;













![re题(17)BUUCTF-[BJDCTF2020]JustRE](https://img-blog.csdnimg.cn/direct/38587680b29d4db1895f8d3678b7227e.png)





