语法:
SELECT 查询列表 FROM 表名 WHERE (过滤) 筛选条件 ; |
满足条件返回true , 不满足返回false。
分类:
1) 按条件表达式筛选:
条件运算符号 > < = <> <= ...
2) 按逻辑表达式筛选:
&& || !
3) 模糊查询:
like between and in is null
一、按条件表达式筛选
案例1:
查询`employees`表中的工资>12000的员工信息
SELECT * FROM employees WHERE salary > 12000 ; |
案例2:
查询表中的工资<3000的员工名和工资
SELECT last_name, salary FROM employees WHERE salary < 3000 ; |
案例3:
查询部门编号department_id不等于80的员工名和部门编号
SELECT last_name, department_id FROM employees WHERE department_id <> 80 ; |
二、按逻辑表达式筛选 (&& || ! 与或非)
-- 逻辑运算符的作用:用于连接条件表达式
# && 和 and:两个条件都为true,则返回true;反则false
# || 和 or:两个条件有一个为true,结果为true;反之false
# ! 和 not:如果连接的条件本身为false,返回true;反之false
案例1:
请用&&查询工资在11000到14000之间的员工名、工资、编号
SELECT last_name, salary, employee_id FROM employees WHERE salary >= 11000 && salary <= 14000 ; |
案例2:
查询部门编号不是在90到110之间,或工资高于15000的员工信息
SELECT * FROM employees WHERE department_id < 90 AND department_id > 110 OR salary > 15000 ; |
案例3:
查询department_id不是90、100、110、80、50的员工编号及员工名
SELECT department_id, last_name FROM employees WHERE department_id != 80 && department_id != 90 && department_id <> 50 && department_id <> 100 && department_id != 110 && department_id <> 30 ; |
三、模糊查询 -- LIKE IN BETWEEN..AND.. IS NULL
1) LIKE :
%:任意个任意字符
_:1个任意字符
案例1:
查询员工名中以字符e开头的员工信息
SELECT * FROM employees WHERE last_name LIKE ‘e%‘ ; |
案例2:
查询员工名中以字符y结尾的名字、员工编号、工资
SELECT last_name, employee_id, salary FROM employees WHERE last_name LIKE ‘%y‘ ; |
案例3:
查询第2个字符为e,第五个字符为l的员工名和工资
SELECT last_name, salary FROM employees WHERE last_name LIKE ‘_e__l%‘ |
案例4:
查询员工表中的名字第二个字符为_的员工名
SELECT last_name FROM employees WHERE last_name LIKE ‘__%‘ ; |
#-----------------------------以上写法错误
在以上写法中_不被理解为下划线,
它被认为是一个任意单字符 -- 我们需要给他进行转义,才能让语法认识它
SELECT last_name FROM employees WHERE last_name LIKE ‘_\_%‘ ; |
-- \:字符串中需要使用\来进行转义,否则会报错提示语法错误
LIKE 特点:一般都是配合通配符使用
# 它的筛选条件不是一个很具体,没有等于或者大于小于某个具体的值
# 它是一个很模糊的条件,所以被称为模糊查询
# 因为它不算精确匹配,只能算模糊匹配
2) BETWEEN ..and ..在范围内
案例1:
查询员工编号在100到120之间的员工信息 (请用&&方法)
-- 方法一:
SELECT * FROM employees WHERE employee_id >= 100 && employee_id <= 120 ; |
-- 方法二:
SELECT * FROM employees WHERE employee_id BETWEEN 100 AND 120; |
3) IN
-- 语法:IN(Str1,Str2...)
检查该数值是否为括号内的参数,如果是,返回true,反之false
-- select 18 in (30,15,22,23)
案例1:
查询员工的工种编号是‘FI_ACCOUNT‘,‘AD_VP‘,‘AD_PRES‘,‘IT_PROG‘中的一个员工名和工种编号
方法1:逻辑表达式 OR ||
SELECT last_name, job_id FROM employees WHERE job_id=‘FI_ACCOUNT‘ || job_id=‘AD_VP‘|| job_id=‘AD_PRES‘|| job_id=‘IT_PROG‘; |
#这样查询当然可以,但是当数据偏多时太过于麻烦
SELECT last_name, job_id FROM employees WHERE job_id IN(‘FI_ACCOUNT‘,‘AD_VP‘,‘AD_PRES‘,‘IT_PROG‘) |
-- 只要满足IN列表中的其中一项,就可以返回数据
请问:in列中可以支持我们写% 或 _ 吗?
SELECT last_name, job_id FROM employees WHERE job_id IN(‘FI_ACCOUNT‘,‘AD_%‘) |
不行,这里用的是IN,IN相当于是=号,而在这里使用_和%它是一个不确定的值,所以它不支持使用
-- 相反,它也可以使用关键字NOT来查看不在条件范围内的记录
案例2:
查看部门的编号不在60,80,90,30,50,110,110以内的全部信息
SELECT * FROM employees WHERE department_id NOT IN (30, 50, 60, 80, 90, 100, 110); |
4) IS NULL 查询空值 ISNULL()
案例1:
查询没有奖金的员工名和奖金率
SELECT last_name, commission_pct FROM employees WHERE commission_pct IS NULL ; |
SELECT last_name, commission_pct FROM employees WHERE ISNULL(commission_pct); |
案例2:
查询有奖金的员工名和奖金率
SELECT last_name, commission_pct FROM employees WHERE commission_pct IS NOT NULL ; |