1. 首页 > Oracle教程 > 正文

Oracle教程FG052-SQL条件查询

1. WHERE子句基础

WHERE子句用于过滤查询结果,只返回满足指定条件的行。它是SQL查询中最常用的子句之一,用于精确筛选数据。更多学习教程www.fgedu.net.cn

WHERE子句语法:SELECT column1, column2, … FROM table_name WHERE condition;

2. 比较运算符

使用比较运算符可以比较列值与指定值之间的关系。

— 等于运算符
SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE salary = 17000;EMPLOYEE_ID EMP_NAME EMP_EMP_EMP_LAST_NAME SALARY
———– ——————– ————————- ———-
101 Neena Kochhar 17000
102 Lex De Haan 17000

— 不等于运算符
SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE salary != 17000;EMPLOYEE_ID EMP_NAME EMP_EMP_EMP_LAST_NAME SALARY
———– ——————– ————————- ———-
100 Steven King 24000
103 Alexander Hunold 9000
104 Bruce Ernst 6000

— 大于运算符
SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE salary > 10000;EMPLOYEE_ID EMP_NAME EMP_EMP_EMP_LAST_NAME SALARY
———– ——————– ————————- ———-
100 Steven King 24000
101 Neena Kochhar 17000
102 Lex De Haan 17000

— 小于运算符
SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE salary < 10000;EMPLOYEE_ID EMP_NAME EMP_EMP_EMP_LAST_NAME SALARY ----------- -------------------- ------------------------- ---------- 103 Alexander Hunold 9000 104 Bruce Ernst 6000 -- 大于等于运算符 SELECT employee_id, first_name, last_name, salary FROM employees WHERE salary >= 9000;EMPLOYEE_ID EMP_NAME EMP_EMP_EMP_LAST_NAME SALARY
———– ——————– ————————- ———-
100 Steven King 24000
101 Neena Kochhar 17000
102 Lex De Haan 17000
103 Alexander Hunold 9000

— 小于等于运算符
SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE salary <= 9000;EMPLOYEE_ID EMP_NAME EMP_EMP_EMP_LAST_NAME SALARY ----------- -------------------- ------------------------- ---------- 103 Alexander Hunold 9000 104 Bruce Ernst 6000

3. 逻辑运算符

使用逻辑运算符可以组合多个条件。

— AND运算符
SELECT employee_id, first_name, last_name, salary, department_id
FROM employees
WHERE salary > 10000 AND department_id = 90;EMPLOYEE_ID EMP_NAME EMP_EMP_EMP_LAST_NAME SALARY DEPARTMENT_ID
———– ——————– ————————- ———- ————-
100 Steven King 24000 90
101 Neena Kochhar 17000 90
102 Lex De Haan 17000 90

— OR运算符
SELECT employee_id, first_name, last_name, salary, department_id
FROM employees
WHERE salary > 15000 OR department_id = 60;EMPLOYEE_ID EMP_NAME EMP_EMP_EMP_LAST_NAME SALARY DEPARTMENT_ID
———– ——————– ————————- ———- ————-
100 Steven King 24000 90
101 Neena Kochhar 17000 90
102 Lex De Haan 17000 90
103 Alexander Hunold 9000 60
104 Bruce Ernst 6000 60

— NOT运算符
SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE NOT salary = 17000;EMPLOYEE_ID EMP_NAME EMP_EMP_EMP_LAST_NAME SALARY
———– ——————– ————————- ———-
100 Steven King 24000
103 Alexander Hunold 9000
104 Bruce Ernst 6000

4. 范围查询

使用BETWEEN和IN运算符可以查询指定范围内的值。

— BETWEEN运算符
SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE salary BETWEEN 9000 AND 17000;EMPLOYEE_ID EMP_NAME EMP_EMP_EMP_LAST_NAME SALARY
———– ——————– ————————- ———-
101 Neena Kochhar 17000
102 Lex De Haan 17000
103 Alexander Hunold 9000

— IN运算符
SELECT employee_id, first_name, last_name, department_id
FROM employees
WHERE department_id IN (60, 90);EMPLOYEE_ID EMP_NAME EMP_EMP_EMP_LAST_NAME DEPARTMENT_ID
———– ——————– ————————- ————-
100 Steven King 90
101 Neena Kochhar 90
102 Lex De Haan 90
103 Alexander Hunold 60
104 Bruce Ernst 60

— NOT IN运算符
SELECT employee_id, first_name, last_name, department_id
FROM employees
WHERE department_id NOT IN (60);EMPLOYEE_ID EMP_NAME EMP_EMP_EMP_LAST_NAME DEPARTMENT_ID
———– ——————– ————————- ————-
100 Steven King 90
101 Neena Kochhar 90
102 Lex De Haan 90

5. 模式匹配

使用LIKE运算符可以进行模式匹配查询。

— 匹配以’S’开头的名字
SELECT employee_id, first_name, last_name
FROM employees
WHERE first_name LIKE ‘S%’;EMPLOYEE_ID EMP_NAME EMP_EMP_EMP_LAST_NAME
———– ——————– ————————-
100 Steven King

— 匹配以’g’结尾的名字
SELECT employee_id, first_name, last_name
FROM employees
WHERE last_name LIKE ‘%g’;EMPLOYEE_ID EMP_NAME EMP_EMP_EMP_LAST_NAME
———– ——————– ————————-
100 Steven King
101 Neena Kochhar

— 匹配包含’o’的名字
SELECT employee_id, first_name, last_name
FROM employees
WHERE first_name LIKE ‘%o%’;EMPLOYEE_ID EMP_NAME EMP_EMP_EMP_LAST_NAME
———– ——————– ————————-
101 Neena Kochhar
103 Alexander Hunold

— 匹配第二个字符是’e’的名字
SELECT employee_id, first_name, last_name
FROM employees
WHERE first_name LIKE ‘_e%’;EMPLOYEE_ID EMP_NAME EMP_EMP_EMP_LAST_NAME
———– ——————– ————————-
103 Alexander Hunold
104 Bruce Ernst

6. NULL值查询

使用IS NULL和IS NOT NULL运算符可以查询NULL值。

— 查询commission_pct为NULL的员工
SELECT employee_id, first_name, last_name, commission_pct
FROM employees
WHERE commission_pct IS NULL;EMPLOYEE_ID EMP_NAME EMP_EMP_EMP_LAST_NAME COMMISSION_PCT
———– ——————– ————————- ————–
100 Steven King
101 Neena Kochhar
102 Lex De Haan
103 Alexander Hunold
104 Bruce Ernst

— 查询manager_id不为NULL的员工
SELECT employee_id, first_name, last_name, manager_id
FROM employees
WHERE manager_id IS NOT NULL;EMPLOYEE_ID EMP_NAME EMP_EMP_EMP_LAST_NAME MANAGER_ID
———– ——————– ————————- ———-
101 Neena Kochhar 100
102 Lex De Haan 100
103 Alexander Hunold 102
104 Bruce Ernst 103

7. 复杂条件查询

组合使用多个条件进行复杂查询。

— 复杂条件查询
SELECT employee_id, first_name, last_name, salary, department_id, hire_date
FROM employees
WHERE (salary > 10000 AND department_id = 90) OR
(salary < 10000 AND department_id = 60) OR hire_date > TO_DATE(‘2005-01-01’, ‘YYYY-MM-DD’);EMPLOYEE_ID EMP_NAME EMP_EMP_EMP_LAST_NAME SALARY DEPARTMENT_ID HIRE_DATE
———– ——————– ————————- ———- ————- ———-
100 Steven King 24000 90 17-JUN-03
101 Neena Kochhar 17000 90 21-SEP-05
102 Lex De Haan 17000 90 13-JAN-01
103 Alexander Hunold 9000 60 03-JAN-06
104 Bruce Ernst 6000 60 21-MAY-07

— 使用括号改变优先级
SELECT employee_id, first_name, last_name, salary, department_id
FROM employees
WHERE salary > 10000 AND (department_id = 60 OR department_id = 90);EMPLOYEE_ID EMP_NAME EMP_EMP_EMP_LAST_NAME SALARY DEPARTMENT_ID
———– ——————– ————————- ———- ————-
100 Steven King 24000 90
101 Neena Kochhar 17000 90
102 Lex De Haan 17000 90

8. 最佳实践

风哥提示:SQL条件查询的最佳实践:
1. 合理使用WHERE子句过滤数据,减少返回的行数
2. 使用适当的比较运算符,确保查询条件的准确性
3. 合理使用逻辑运算符,组合多个条件
4. 使用BETWEEN和IN运算符进行范围查询,提高查询可读性
5. 使用LIKE运算符进行模式匹配时,避免以通配符开头
6. 正确处理NULL值,使用IS NULL和IS NOT NULL
7. 使用括号明确条件的优先级
8. 对于复杂查询,考虑使用子查询或临时表
9. 为WHERE子句中的列创建索引,提高查询性能
10. 避免在WHERE子句中使用函数,影响索引的使用

生产环境建议:在生产环境中,应尽量简化WHERE子句的复杂度,避免使用过于复杂的条件组合。同时,为频繁查询的列创建索引,提高查询性能。对于大型表,考虑使用分区表和并行查询来提高查询效率。

更多视频教程www.fgedu.net.cn

学习交流加群风哥微信: itpux-com

学习交流加群风哥QQ113257174

更多学习教程公众号风哥教程itpux_com

from oracle:www.itpux.com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息