Skip to content

深入理解SQL数据查询语言:DQL基础与条件查询

Published:  at  06:10 AM

DQL(Data Query Language)数据查询语言

DQL 是 SQL 中最常用的一类语言,主要用于 从数据库中查询数据。其核心关键字是 SELECT


一、DQL 基础查询(SELECT)

1. 基本语法

SELECT 查询列表
FROM 表名;

FROM 子句在某些数据库中不可省略,但查询常量或表达式时可不依赖表。


2. 基本特点

  1. 查询列表可以是:

    • 表中的字段
    • 常量
    • 表达式
    • 函数
  2. 查询结果是一个 虚拟表(结果集),不会影响原表数据


3. 基础示例

-- 选中指定数据库
USE myemployees;

-- 查询单个字段
SELECT last_name FROM employees;

-- 查询多个字段(顺序任意)
SELECT last_name, first_name, email FROM employees;

-- 查询所有字段
SELECT * FROM employees;

4. 列名与反引号

当字段名与关键字冲突或包含特殊字符时,可以使用 反引号(`)

SELECT `salary` FROM employees;

注意:反引号 ≠ 单引号


5. 查询常量、表达式和函数

-- 常量
SELECT 100;
SELECT 'Steven';

-- 表达式
SELECT 98 * 10;

-- 函数
SELECT VERSION();

6. 起别名(AS)

作用:

-- 使用 AS
SELECT 100 * 5 AS result;
SELECT last_name AS 姓, first_name ASFROM employees;

-- 省略 AS(别名包含特殊字符需加引号)
SELECT last_name 姓, first_name 名 FROM employees;

7. 去重(DISTINCT)

SELECT DISTINCT department_id FROM employees;

8. + 号的注意事项(MySQL)

在 SQL 中,+ 仅表示数值运算,不能用于字符串拼接:

-- 字符串拼接应使用 CONCAT
SELECT CONCAT(last_name, ' ', first_name) AS 姓名 FROM employees;

+ 的规则:


二、DQL 条件查询(WHERE)

1. 基本语法

SELECT 查询列表
FROM 表名
WHERE 筛选条件;

执行顺序:

  1. FROM
  2. WHERE
  3. SELECT

2. 条件分类

(1)条件表达式

运算符: > < = != <> >= <= (推荐使用 <> 表示不等)

-- 工资大于 12000
SELECT * FROM employees WHERE salary > 12000;

-- 部门编号不等于 90
SELECT CONCAT(first_name,' ',last_name) 姓名, department_id
FROM employees
WHERE department_id <> 90;

(2)逻辑运算符

-- 工资在 10000 到 20000 之间
SELECT first_name, last_name, salary
FROM employees
WHERE salary > 10000 AND salary < 20000;

-- 工资高于 15000 或部门不为 90
SELECT last_name, salary, department_id
FROM employees
WHERE salary > 15000 OR department_id <> 90;

(3)模糊查询

LIKE + 通配符
SELECT last_name, salary
FROM employees
WHERE last_name LIKE '_o__h%';

转义通配符:

-- 使用反斜杠
SELECT * FROM employees
WHERE job_id LIKE '__\_%';

-- 使用 ESCAPE
SELECT * FROM employees
WHERE job_id LIKE '__$_%' ESCAPE '$';

BETWEEN AND
SELECT *
FROM employees
WHERE employee_id BETWEEN 100 AND 120;

IN
SELECT last_name, job_id
FROM employees
WHERE job_id IN ('IT_PROG', 'AD_VP', 'AD_PRES');

特点:


IS NULL / IS NOT NULL
SELECT last_name, commission_pct
FROM employees
WHERE commission_pct IS NULL;

=<> 不能用于判断 NULL


安全等于 <=>
SELECT last_name, commission_pct, job_id
FROM employees
WHERE job_id <=> 'SA_REP'
   OR commission_pct <=> NULL;

可判断 NULL,但可读性较差,不推荐频繁使用


三、DQL 排序查询(ORDER BY)

1. 基本语法

SELECT 查询列表
FROM 表名
[WHERE 筛选条件]
ORDER BY 排序字段 [ASC | DESC];

说明:


2. 排序示例

-- 工资降序
SELECT * FROM employees ORDER BY salary DESC;

-- 工资升序
SELECT * FROM employees ORDER BY salary ASC;

3. 排序 + 条件

SELECT last_name, department_id, hiredate
FROM employees
WHERE department_id >= 90
ORDER BY hiredate;

4. 按表达式、别名和函数排序

-- 按年薪排序
SELECT last_name,
       salary * 12 * (1 + IFNULL(commission_pct, 0)) AS 年薪
FROM employees
ORDER BY 年薪 DESC;

-- 按函数排序
SELECT last_name, salary, LENGTH(last_name) AS 长度
FROM employees
ORDER BY LENGTH(last_name);

5. 多字段排序

-- 先按工资升序,再按员工编号降序
SELECT last_name, salary, employee_id
FROM employees
ORDER BY salary ASC, employee_id DESC;

四、小结


Suggest Changes

Previous Post
SQL常用函数详解及应用示例
Next Post
MySQL数据库基础与常用操作指南