进阶查询(一):条件查询
语法:使用where关键字
SELECT 查询列表 FROM 表名 WHERE 筛选条件
-
按条件表达式筛选:条件运算符 > < = != <> >= <=(SQL语句的不等号一般写为<>而不用!=)
-
按逻辑表达式筛选:逻辑运算符 and or not
-
(3)模糊查询: like 、between and、in、is null
一、 按表达式筛选
-
筛选表中工资大于12000的员工信息:
SELECT * FROM employees WHERE salary>12000;
-
筛选部门编号不等于90的员工名和部门编号:
SELECT first_name, last_name, department_id FROM employees WHERE department_id <> 90;
二、按逻辑表达式筛选
-
查询工资在10000到20000之间的员工名、工资和奖金:
SELECT last_name, salary, commission_pct FROM employees WHERE salary >= 10000 AND salary <= 20000;
-
查询部门编号不是在90到110之间的,或者工资高于15000的员工信息:
SELECT * FROM employees WHERE salary >= 15000 OR department_id > 110 OR department_id < 90;
或者使用NOT和AND的组合来筛选部门编号:
SELECT * FROM employees WHERE NOT (department_id >= 90 AND department_id <= 110) OR salary >= 15000;
三、模糊查询
(1)LIKE
,通常与通配符搭配使用
通配符:
- %:表示0或多个字符
- _ :表示单个字符
查询员工名中包含字符a的员工信息
SELECT * FROM employees WHERE last_name LIKE '%a%'
查询员工名中第三个字符为n,第五个字符为l的员工名称
SELECT last_name FROM employees WHERE last_name LIKE '__n_l%'
查询员工名第二个字符为_的员工名称(需要用到转义字符\)
SELECT last_name FROM employees WHERE last_name LIKE '_\_%'
转义字符可以自己定义,如这里可以定义KaTeX parse error: Expected group after '_' at position 77: …ast_name LIKE '_̲_%’ ESCAPE $;`
(2)使用 between and
进行范围条件查询
查询员工编号在100到200之间的员工信息: between and可对取同一字段某一区间的数值时使用,代码更为简单。
注意:between A and B,A要<=B,且查询出的结果是包含两个临界值的。(如下式查询结果是包含100和120的)
SELECT * FROM employees WHERE employee_id BETWEEN 100 AND 120
(3)使用IN
判断某一值是否属于in列表中的某一项
注意,in列表中的内容类型应一致,且in列表中不支持使用通配符。
查询员工工种编号是IT_PROG、AD_VP、AD_PRES其中之一的员工名和工种编号:
SELECT last_name,job_id FROM employees WHERE job_id IN ('IT_PROG','AD_VP','AD_PRES')
(4)is null
:null值不可直接用=查询,查询null值需要使用IS 或者 IS NOT
查询没有奖金的员工名和奖金率
SELECT last_name,commission_pct FROM employees WHERE commission_pct IS NULL
(5)安全等于 <=>
IS只能和NULL匹配使用,=适合查询非NULL值,而安全等于<=>
两者皆可查,但是代码可读性较差。
示例:
SELECT last_name,commission_pct FROM employees WHERE commission_pct <=> NULL
或者
SELECT last_name,salary FROM employees WHERE salary <=> 12000
附练习用sql脚本:
链接:https://pan.baidu.com/s/1UtUhpiStVXKpzFKz6qZjgQ
提取码:yysu