SQL语法(DQL)|在SQL数据表中的操作语法和完整语段

兄弟们有没有人讲详细点的我想问下,SQL语法(DQL)|在SQL数据表中的操作语法和完整语段
最新回答
一枕庭前雪

2026-10-22 15:09:44

SQL数据查询语言(DQL)的核心操作语法及完整语段如下:

1. 基础查询结构SELECT 字段名 FROM 表名 [WHERE 条件语句] [GROUP BY 字段名] [HAVING 条件语句] [ORDER BY 字段名 [ASC|DESC]] [LIMIT 索引号, 行数];
  • 字段选择:

    查询指定字段:SELECT id, name FROM emp;

    查询所有字段:SELECT * FROM emp;

    字段别名:SELECT id AS "ID号", name FROM emp;

    去重查询:SELECT DISTINCT gender FROM emp;

2. 条件过滤(WHERE)

通过逻辑运算符、比较运算符等筛选数据:

  • 比较运算符:SELECT * FROM emp WHERE id >= 4; -- 大于等于4SELECT * FROM emp WHERE workid != "001"; -- 不等于001SELECT * FROM emp WHERE workid IS NULL; -- 字段为空
  • 范围查询:SELECT * FROM emp WHERE workid BETWEEN "001" AND "003"; -- 区间查询SELECT * FROM emp WHERE workid IN ("001", "003"); -- 包含指定值
  • 逻辑运算符:SELECT * FROM emp WHERE id <= 3 AND workid <= "003"; -- AND条件SELECT * FROM emp WHERE workid = "001" OR workid = "003"; -- OR条件SELECT * FROM emp WHERE NOT workid = "001"; -- NOT取反
  • 模糊查询:SELECT * FROM emp WHERE name LIKE "%lucy%"; -- 包含"lucy"SELECT * FROM emp WHERE name LIKE "lucy_"; -- 匹配5字符且第4位任意
3. 分组汇总(GROUP BY)

结合聚合函数(如COUNT, AVG, SUM, MAX, MIN)对数据分组:

SELECT gender, AVG(age) AS "平均年龄" FROM emp GROUP BY gender; -- 按性别分组求平均年龄SELECT workaddress, COUNT(*) FROM employee GROUP BY workaddress; -- 按地址分组统计人数4. 分组后筛选(HAVING)

对分组结果进一步筛选(与WHERE区别:HAVING作用于分组后数据):

SELECT gender, AVG(age) AS "平均年龄" FROM emp GROUP BY gender HAVING AVG(age) > 20; -- 筛选平均年龄大于20的分组5. 排序(ORDER BY)

按字段升序(ASC,默认)或降序(DESC)排列:

SELECT * FROM emp ORDER BY id ASC; -- 升序SELECT * FROM emp ORDER BY age DESC; -- 降序6. 限制结果行数(LIMIT)

从指定索引开始返回指定行数(索引从0开始):

SELECT * FROM emp LIMIT 2, 2; -- 从第3行开始返回2行SELECT * FROM emp LIMIT 5; -- 返回前5行7. 综合示例

场景:从employee表中查询年龄小于45的员工地址、数量,按地址分组后筛选数量≥3的记录。

SELECT workaddress, COUNT(*) AS "人数" FROM employee WHERE age < 45 GROUP BY workaddress HAVING COUNT(*) >= 3;

执行逻辑:

  1. WHERE age < 45:先过滤年龄小于45的记录。
  2. GROUP BY workaddress:按地址分组。
  3. HAVING COUNT(*) >= 3:筛选分组后人数≥3的地址。
  4. 最终返回地址及对应人数。
8. 其他关键点
  • 聚合函数与GROUP BY:使用聚合函数(如COUNT)时,SELECT中非聚合字段必须出现在GROUP BY中。-- 错误示例:name未在GROUP BY中SELECT name, COUNT(*) FROM emp; -- 正确写法:SELECT gender, COUNT(*) FROM emp GROUP BY gender;
  • WHERE与HAVING的区别:

    WHERE在分组前过滤原始数据。

    HAVING在分组后过滤聚合结果。

通过以上语法和示例,可覆盖SQL数据查询的核心场景,包括条件筛选、分组汇总、排序及分页等操作。