条件查询是众多查询语句里的一种方法,不是将表中所有的数据都查出来的,而是查询出符合条件的数据。
语法格式:
select 字段名 from 表名 where 查询条件;
查询薪资等于800的员工
select * from emp where sal=800;
查询薪资不等于800的员工
select * from emp where sal!=800;
select * from emp where sal<>800;
查询薪资小于3000的
select * from emp where sal<3000;
查询薪资小于等于3000的
select * from emp where sal<=3000;
查询薪资大于3000的
select * from emp where sal>3000;
查询薪资大于等于3000的
select * from emp where sal>=3000;
between…and…等同于>=and<=
查询薪资在1500到3000之间的
select * from emp where sal between 1500 and 3000;
select * from emp where sal>=1500 and sal<=3000;
查询津贴为null的
select * from emp where comm is null ;
查询津贴不为null的
select * from emp where comm is not null ;
注意:在数据库中null不能使用等号来衡量,需要使用is null进行判断,null表示什么都没有、空,它不是一个值。
select * from emp where comm = null ; 查询结果为空
查询薪资为3000且名字为FORD的员工
select * from emp where sal=3000 and ename='FORD';
员工名字为字符串,需要使用单引号引起来
查询薪资为800或者3000的
select * from emp where sal=800 or sal=3000;
and和or同时出现时的优先级问题:
查询工资大于2500,并且部门编号为10或20 的员工。
select * from emp where sal>2500 and deptno=10 or deptno=20;
如果我们按照上面的写法,所查询出来的数据如下图所示,明显不符合我们的要求
我们需要使用小括号将or语句括起来
select * from emp where sal>2500 and (deptno=10 or deptno=20);
上面的测试并不能看出and和or的优先级谁更高,我们需要进行一下的查询测试。
我们来查询工资为3000且名字叫作SCOTT的人和工资为1250且名字叫作WARD的人,我们分别使用小括号和不使用小括号进行查询。
select ename,sal from emp where (sal=3000 and ename='SCOTT') or (sal=1250 and ename='WARD');
select ename,sal from emp where sal=3000 and ename='SCOTT' or sal=1250 and ename='WARD';
经过上面的测试,我们就可以得出,and 的优先级是要高于or的
in相当于多个or
查询薪资为(800,1500,3000)这些的员工的名字
select ename as 员工姓名 from emp where sal=800 or sal=1500 or sal=3000;
select ename as 员工姓名 from emp where sal in (800,1500,3000);
查询薪资不为(800,1500,3000)这些的员工的名字
select ename as 员工姓名 from emp where sal not in (800,1500,3000);
in 并不是一个区间,in后面跟的是具体的值,更类似于一个集合。
like 模糊查询,支持 % 百分号,_ 下划线匹配,"%“表示任意的多个字符,”_ "表示任意的一个字符
查询名字中含有'S'的员工
select ename from emp where ename like '%' 'S' '%';
查询名字是以'T'结尾的
select ename from emp where ename like '%T';
查询名字以'S'开始的
查询第二个字母是'A'的
select ename from emp where ename like '_A%';
查询第三个字母是'R'的
select ename from emp where ename like '__R%' ;
如果名字中含有下划线,而我们又想要查找出名字中含有下划线的
select name from table_name where name like '%_%';
这样查找会查出所有的姓名,因为'_'具有特殊含义,们需要w对其进行转义,加一个斜杠'\'
select name from table_name where name like '%\_%';
这样就可以找出名字中带有下划线的数据了