SQL 查询语句

1. 去重查询

在查询数据时,有时需要去除重复的行。SQL 提供了 DISTINCT 关键字来实现去重。

示例:

1
2
3
4
5
-- 写法1:使用 DISTINCT 关键字
SELECT DISTINCT(joA) FROM tmp_emp;

-- 写法2:省略括号
SELECT DISTINCT joA FROM tmp_emp;

注意

  • DISTINCT 作用于所有选择的列,返回唯一组合的行。
  • 如果查询多列,DISTINCT 会基于所有列的组合去重。

2. 别名

在查询结果中,可以为列或表起别名,使结果更易读。

示例:

1
2
3
4
SELECT enAme AS 名字,
empno AS 编号,
sAl
FROM tmp_emp;

注意

  • 使用 AS 关键字为列起别名(AS 可以省略)。
  • 别名可以用于简化复杂查询或提高结果的可读性。

3. 条件查询

通过 WHERE 子句,可以根据条件过滤数据。

示例:

1
2
3
4
5
6
7
8
9
-- 查询工资大于1500的雇员
SELECT empno, enAme, sAl
FROM tmp_emp
WHERE sAl > 1500;

-- 查询工资不等于1500的雇员
SELECT empno, enAme, sAl
FROM tmp_emp
WHERE sAl <> 1500;

常用条件运算符

  • ><>=<=:比较大小。
  • =、<>:等于、不等于。
  • BETWEEN ... AND ...:范围查询。
  • IS NULLIS NOT NULL:判断空值。

4. 逻辑运算符

WHERE 子句中,可以使用逻辑运算符组合多个条件。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- 查询工资大于1500且可以领取奖金的雇员
SELECT ename, sal, comm
FROM tmp_emp
WHERE sal > 1500 AND comm IS NOT NULL;

-- 查询工资大于1500或可以领取奖金的雇员
SELECT ename, sal, comm
FROM tmp_emp
WHERE sal > 1500 OR comm IS NOT NULL;

-- 查询工资不大于1500且不能领取奖金的雇员
SELECT sal AS 工资, comm AS 奖金
FROM tmp_emp
WHERE NOT (sal > 1500 OR comm IS NOT NULL);

逻辑运算符

  • AND:同时满足多个条件。
  • OR:满足任意一个条件。
  • NOT:取反。

5. 集合操作

SQL 提供了集合操作符,用于合并、比较多个查询结果。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
-- UNION:合并两个查询结果,去重
SELECT sAl FROM tmp_emp
UNION
SELECT sAl FROM tmp_emp;

-- UNION ALL:合并两个查询结果,不去重
SELECT sAl FROM tmp_emp
UNION ALL
SELECT sAl FROM tmp_emp;

-- INTERSECT:获取两个查询结果的交集
SELECT sAl FROM tmp_emp
INTERSECT
SELECT sAl FROM tmp_emp;

-- MINUS:获取两个查询结果的差集
SELECT * FROM A
MINUS
SELECT * FROM B;

注意

  • UNIONUNION ALL 的区别在于是否去重。
  • INTERSECT 返回两个查询结果的共同部分。
  • MINUS 返回第一个查询结果中不在第二个查询结果中的部分。

6. 范围查询

使用 BETWEEN ... AND ... 可以查询某个范围内的数据。

示例:

1
2
3
4
5
6
7
8
9
-- 查询工资在1500到3000之间的雇员
SELECT sal
FROM tmp_emp
WHERE sal BETWEEN 1500 AND 3000;

-- 查询1981年雇佣的所有员工
SELECT hiredate
FROM tmp_emp
WHERE hiredate BETWEEN '1-1月-1981' AND '31-12月-1981';

注意

  • BETWEEN 包含边界值。
  • 日期范围查询时,注意日期格式与数据库设置一致。

7. 空值处理

在数据库中,空值(NULL)表示缺失或未知的数据。需要使用 IS NULLIS NOT NULL 来判断空值。

示例:

1
2
3
4
5
6
7
8
9
-- 查询没有奖金的雇员
SELECT comm, enAme
FROM tmp_emp
WHERE comm IS NULL;

-- 查询有奖金的雇员
SELECT comm, enAme
FROM tmp_emp
WHERE comm IS NOT NULL;

注意

  • 不能使用 = 或 <> 判断空值,必须使用 IS NULLIS NOT NULL

8. 复杂查询

通过组合条件、集合操作和子查询,可以实现复杂的查询需求。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- 查询工资大于1500且可以领取奖金的雇员
SELECT ename, sal, comm
FROM tmp_emp
WHERE sal > 1500
AND comm IS NOT NULL;

-- 使用 INTERSECT 实现相同功能
SELECT ename, sal, comm
FROM tmp_emp
WHERE sal > 1500
INTERSECT
SELECT ename, sal, comm
FROM tmp_emp
WHERE comm IS NOT NULL;

注意

  • 复杂查询时,可以分步骤编写 SQL,逐步验证结果。
  • 使用集合操作可以简化某些复杂查询的逻辑。

总结

  1. 使用 DISTINCT 去重。
  2. 使用 AS 起别名。
  3. 使用 WHERE 子句进行条件过滤。
  4. 使用集合操作符(UNIONINTERSECTMINUS)处理多个查询结果。
  5. 使用 BETWEEN 进行范围查询。
  6. 处理空值(NULL)。

SQL 查询语句
https://blog.pangcy.cn/2018/09/04/数据库相关/Oracle/SQL 语法/SQL 查询语句/
作者
子洋
发布于
2018年9月4日
许可协议