第七章数据过滤
7.1组合WHERE子句
7.1.1AND操作符
输入:
SELECT first_name, last_name, salary
FROM employees
WHERE salary <= 4800 AND department_id = 60;
输出:
说明:MySQL允许使用多个WHERE子句,可以以AND子句或OR子句的方式使用。这里的AND和OR是用来连接WHERE子句的关键字,被称为逻辑操作符。AND要求返回的数据满足所有WHERE子句的要求,上例就是在查找满足工资小于等于4800且所隶属的部门代码为60的员工的姓和名。
输入:
SELECT first_name, last_name, salary, department_id
FROM employees
WHERE salary <= 4800 OR department_id = 60;
输出:
说明:OR操作符是匹配任一条件
7.1.3计算次序
输入:
SELECT first_name, last_name, salary, department_id
FROM employees
WHERE department_id = 60 OR department_id = 90 AND salary <= 4800;
输出:
说明:这里返回的结果是计算的次序导致的。SQL优先处理AND运算符,也就是说上面的示例中由于满足部门代码为90且工资小于等于4800的数据根本不存在,所以SQL只返回了部门代码为60的数据。
输入:
SELECT first_name, last_name, salary, department_id
FROM employees
WHERE (department_id = 60 OR department_id = 90) AND salary <= 30000;
输出:
说明:使用()之后就拥有比AND和OR更高的优先级,这里的结果才是正确的。
7.2IN操作符
输入:
SELECT first_name, last_name, salary, department_id
FROM employees
WHERE department_id IN (60,90);
输出:
说明:IN操作符用来指定条件范围内,范围内的每个条件都可以进行匹配,条件格式为IN(条件1,条件2)。IN操作符完成的是与OR操作符同样的工作。
输入:
SELECT first_name, last_name, salary, department_id
FROM employees
WHERE department_id = 60 OR department_id = 90;
输出:
说明:使用IN操作符的优点有:
- 语法更清楚直观
- 计算次序更容易管理
- 比OR执行的更快
- 可以包含其他SELECT语句
7.3NOT操作符
输入:
SELECT first_name, last_name, salary, department_id
FROM employees
WHERE department_id NOT IN (60,90);
输出:
说明:1.NOT WHERE子句用来否定后跟条件的关键字。
2.MySQL支持使用NOT对IN、BETWEEN和 EXISTS子句取反,这与多数其他DBMS允许使用NOT对各种条件取反有很大的差别。