条件查询
select 列1... from 表名 where 条件
- 支持的运算符:= <=> != <> > < >= <=
between...and in(...) is null not or and
比较运算符= <=> != <> > < >= <=
- 从emp表中查询出sal 大于等于 10000的员工的姓名和工资
SELECT ename, sal
FROM emp
WHERE sal >= 10000;
- 从emp表中查询出部门编号为20的员工的姓名和部门编号
SELECT ename, deptno
FROM emp
WHERE deptno = 20;
- 从emp表中查询出05年过后入职的员工的所有信息
SELECT *
FROM emp
WHERE hiredate >= '2005-01-01';
- 从emp表中查询出不是文员的员工的所有信息
SELECT *
FROM emp
WHERE job != '文员';
SELECT '赵' < '钱'; # 1
- 从emp表中查询出comm为null的员工的所有信息
普通的比较运算符和null比较,得到unknown
SELECT *
FROM emp
WHERE comm = NULL; # 1条数据都得不到
要和null值比较,请用 <=> 和 <>
SELECT *
FROM emp
WHERE COMM <=> NULL;
逻辑运算符 &&(AND) ||(OR) !(NOT) XOR
&& 与:只有 1 && 1 结果才为1
|| 或:只有 0 || 0 结果才为0
! 非:表示取反,原来为1 现在为0,原来为0,现在为1
XOR 异或:有且仅有1个条件为真时,结果才为真
- 从emp表中查出工资大于10000的销售员
SELECT *
FROM emp
WHERE sal > 10000 && job = '销售员';
- 从emp表中查询出经理和分析师
SELECT *
FROM emp
WHERE job = '经理' || job = '分析师';
&& 的优先级比 || 高,就要先计算与,再计算或
所以下面这条语句没有筛选到 job = '经理'的工资情况
先执行 job = '分析师' && sal > 25000得到结果A
在计算 job = '经理' || A
SELECT *
FROM emp
WHERE job = '经理' || job = '分析师' && sal > 25000;
SELECT *
FROM emp
WHERE (job = '经理' || job = '分析师') && sal > 25000;
模糊查询
- 当我们只知道部分信息的时候,可以使用模糊查询来查询数据
select 列1... from 表名 where 列名 like '模糊条件'
- 其中模糊条件有2个符号
- ‘%’ 代表0-N个字符
- ‘_’ 代表一个字符
- 例如我们的表中有一个刘备,再添加一个刘玄德
SELECT * FROM emp WHERE ename LIKE '刘_'
- 上面语句能查到刘备,而查不到刘玄德
SELECT * FROM emp WHERE ename LIKE '刘__'
- 上面语句能查到刘玄德而查不到刘备
SELECT * FROM emp WHERE ename LIKE '刘%'
- 上面语句就既能查到刘备,也能查到刘玄德
- '_'和'%'既能放在关键词后也能放在关键字前
SELECT * FROM emp WHERE ename LIKE '%德'
- 从emp表中查询出包括特殊字符的员工
往emp表里添加一条数据,ename为刘备玄德
INSERT INTO emp(ename) VALUES('刘备_玄德');
escape 表示 后面的字符是转义字符,把他用到特殊字符前面,就表示特殊字符本身
SELECT *
FROM emp
WHERE ename LIKE '%#_%' ESCAPE '#';
between and
between and 用于查询数值在一个连续区间内的数据
从emp表中查询出工资在15000到30000之间的员工信息
SELECT *
FROM emp
WHERE sal >= 15000 && sal <= 30000;
SELECT *
FROM emp
WHERE sal BETWEEN 15000 AND 30000;
SELECT *
FROM emp
WHERE hiredate BETWEEN '2002-01-01' AND '2007-12-31';
in
in 用于查询数字在一个不连续的集合中的数据
从emp表中,部门编号为10,20,30的员工信息
SELECT *
FROM emp
WHERE deptno in(10,20,30);
如果使用between and, 万一有个部门编号为15,也要被查出来
查询出公司里面的文员、经理和销售员
SELECT *
FROM emp
WHERE job in('文员', '经理', '销售员');
is null
is null 用来判断数据是否为空
SELECT *
FROM emp
WHERE COMM IS NULL;
SELECT *
FROM emp
WHERE comm <=> null;