#条件查询和模糊查询
DESC emp;
/**条件查询
不是将表中所有数据都查出来,是查询出来所有符合条件的。
语法格式:
SELECT
...
FROM
...
WHERE
条件;*/
# = 等于 查询薪资等于800的员工姓名和编号
SELECT empno,ename,job FROM emp WHERE sal = 800;
#查询SMITH的编号和薪资
SELECT empno,job,sal FROM emp WHERE ename = ‘SMITH‘; #字符串需要使用单引号括起来
# <>或!= 不等于 查询薪资不等于800的员工姓名和编号?
SELECT empno,ename,job FROM emp WHERE sal !=800;
SELECT empno,ename,job FROM emp WHERE sal <> 800;
#<,<=,>,>= 小于,小于等于,大于,大于等于
SELECT empno,ename,job FROM emp WHERE sal < 2000;
SELECT empno,ename,job FROM emp WHERE sal <= 2000;
SELECT empno,ename,job FROM emp WHERE sal > 2000;
SELECT empno,ename,job FROM emp WHERE sal >= 2000;
#BETWEEN ... and ...两个值之间,等同于>= and <=
SELECT
empno,ename,sal
FROM
emp
WHERE
sal BETWEEN 1000 AND 2000;
SELECT empno,ename,sal FROM emp WHERE sal >= 1000 AND sal <= 2000;
#注意:使用 BETWEEN AND的时候,必须遵循左小右大。 BETWEEN 2000 AND 1000;这种是查不出来的,并且 BETWEEN AND 是闭区间,包括了两段的值
#is NULL 为 NULL (is NOT NULL 不为空)
#查询哪些员工的津贴/补助为null?
#SELECT empno ename sal comm. 注意 查询NULL不可以使用=,需要使用is NULL。因为数据库中的 NULL并不是值。
SELECT
empno,ename,sal,comm
FROM
emp
WHERE
comm is NULL;
#查询哪些员工的津贴/补助不为null?
SELECT empno,ename,sal,comm FROM emp WHERE comm is NOT NULL;
#AND并且
SELECT empno,ename,job,sal FROM emp WHERE job = ‘MANAGER‘ AND sal >=2500;
#or 或者
SELECT empno,ename,job,sal FROM emp WHERE job = ‘MANAGER‘ OR sal > 3000;
# AND和or同时出现的话,有优先级问题吗?
#查询工资大于2500,并且部门编号为10或20的部门的员工
SELECT
empno,ename,job,sal,deptno
FROM
emp
WHERE
sal>2500 AND deptno = 10 or deptno = 20;
/**分析以上语句问题?
AND优先级比or高
以上语句会先执行and,然后执行or.
以上这个语句表示什么含义?
找出工资大于2500并且部门编号为10的员工,或者编号为20的员工。*/
#改进
SELECT
empno,ename,job,sal,deptno
FROM
emp
WHERE
sal>2500 AND (deptno = 10 or deptno = 20);#AND和OR同时出现and 优先级较高,如果想让or先执行,需要加“()”。
如果不确定优先级,只需要加上"()"就可以了。
#in 包含,相当于多个or(not in 不在这个范围中)
#查询工作岗位是MANAGER和SALESMAN的员工?
SELECT ename,job FROM emp WHERE job IN (‘manager‘,‘salesman‘);
#注意:in不是一个区间,in后面跟的是具体的值。
#查询薪资是800和5000的员工信息
SELECT ename,job,sal FROM emp WHERE sal in (800,5000);
SELECT ename,job,sal FROM emp WHERE sal not in (800,5000);
/**NOT 可以取非,主要用在is或in中
is NULL
is not NULL
in
not in
*/
/** LIKE
称为模糊查询,支持%或下划线匹配
% 匹配任意个字符
下划线,一个下划线只匹配一个字符
(%是一个特殊的符号,——也是一个特殊的字符)
*/
#找出名字中含有o的
SELECT ename FROM emp WHERE ename LIKE ‘%o%‘;
#找出名字以T结尾的?
SELECT ename FROM emp WHERE ename LIKE ‘%t‘;
#找出名字以K开始的?
SELECT ename FROM emp WHERE ename LIKE ‘k%‘;
#找出第二个字母是A的
SELECT ename FROM emp WHERE ename LIKE ‘_a%‘;
#找出第三个字母是R的
SELECT ename FROM emp WHERE ename LIKE ‘__R%‘;
#如何找出名字中带有‘_‘的?
SELECT name FROM STUDETN WHERE name like ‘%_%‘
# 这样是不可以的,下划线代表了任意一个字符,这样会将表中的所有name都查询到
SELECT name FROM STUDETN WHERE name like ‘%\_%‘
# \带有转译效果,在_前加上\即可查询到名字中带_的name数据。