1. WHERE子句基础
WHERE子句用于过滤查询结果,只返回满足指定条件的行。它是SQL查询中最常用的子句之一,用于精确筛选数据。更多学习教程www.fgedu.net.cn
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. 逻辑运算符
使用逻辑运算符可以组合多个条件。
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运算符可以查询指定范围内的值。
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运算符可以进行模式匹配查询。
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值。
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. 最佳实践
1. 合理使用WHERE子句过滤数据,减少返回的行数
2. 使用适当的比较运算符,确保查询条件的准确性
3. 合理使用逻辑运算符,组合多个条件
4. 使用BETWEEN和IN运算符进行范围查询,提高查询可读性
5. 使用LIKE运算符进行模式匹配时,避免以通配符开头
6. 正确处理NULL值,使用IS NULL和IS NOT NULL
7. 使用括号明确条件的优先级
8. 对于复杂查询,考虑使用子查询或临时表
9. 为WHERE子句中的列创建索引,提高查询性能
10. 避免在WHERE子句中使用函数,影响索引的使用
更多视频教程www.fgedu.net.cn
学习交流加群风哥微信: itpux-com
学习交流加群风哥QQ113257174
更多学习教程公众号风哥教程itpux_com
from oracle:www.itpux.com
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
