查询姓名为史密斯的员工的所有信息 select*from emp where ename ='SMITH'; select*from emp where ename ='smith';--where查询的值 严格区分大小写 select*from emp where'SMITH';--错误,查找值时,前面要跟上对应的列名
查询薪资为3000的员工的所有信息 select*from emp where sal =3000;
一. 逻辑运算符
< , <= , > , >= , = , 不等于号: != 或 <> –等于一次只能查询一个内容
1 2 3 4 5
select*from emp where ename <'SMITH';--按照首字母比较
select*from emp where sal >=3000;
select*from emp where ename ='SMITH',ename ='KING';--报错,等于不能一次查询多个内容
二. 包含 in() 不包含 not in()
一次查询多个内容时使用
1 2 3 4 5 6 7 8 9 10 11
select*from emp where ename in('SCOTT','KING','FORD');--in既能查询一个内容,也能查询多个内容,是等于号的上位替代品。 select*from emp where ename in('scott','KING','FORD','史密斯');--in中有表中不存在的值时不输出,不会报错。
select*from emp where sal in(1000,2000,3000); select*from emp where sal >in(1000,2000,3000);--报错,in跟not in不能跟逻辑运算符一起使用
select*from emp where sal notin(1000,2000,3000);--not in 为 in 的反面
select*from emp where ename in(2222,'KING','FORD','史密斯');--括号内的数据类型要保持一致
select*from emp where ename in('2222','KING','FORD','史密斯');
三. 布尔连接
and 且 –需要满足所有条件才能输出 or 或 –满足其一即可输出
1 2 3 4 5
select*from emp where ename ='SMITH'or ename ='KING';--查相同的列,or不如in好用
select*from emp where ename ='SMITH'or sal =3000;--可以查不同的列
查询emp表中所有有佣金的员工 select*from emp where comm isnotnull;
查询emp表中所有没有佣金的员工 select*from emp where comm isnull;
select sal,sal+100,comm from emp; select sal,sal+100,comm+100from emp;--空值不参与运算
select*from emp where comm >=1000; select*from emp where comm <=1000;--空值不参与比较
select*from emp where comm =0;--查不到空值 select*from emp where comm ='';--查不到空值 select*from emp where comm isnull;--查询空值的方法
思考题 计算员工一年的总薪资--总薪资为:(薪资+奖金)*12 select12*(sal+comm) 总薪资 from emp;--空值不参与运算
select12*(sal+nvl(comm,0)) 总薪资 from emp;--正确答案
1 2 3 4 5 6 7 8
1.nvl(字段,默认值) 函数--专门针对空值的函数,作用是把空值处理成默认值 --函数必定带括号,函数会有一个返回值 --函数看里面填字段 select nvl(comm,100),comm from emp;
2.nvl2(字段,非空处理成默认值1,空值处理成默认值2)
select nvl2(comm,1,0),comm from emp;
注意点: nvl() 跟 nvl2() 处理空值时,默认值数据类型要跟字段保持一致
1 2 3 4
例子:select nvl(comm,'无佣金'),comm from emp;--报错原因,默认值跟字段数据类型不一致 3.求和函数 sum()--了解一下,后面专门讲 selectsum(nvl2(comm,1,0)) from emp;--求出有佣金的人数 selectsum(sal) from emp;--当月总薪资(不包含佣金)
七. any() 任意一个 all() 全部–需要搭配逻辑运算符使用
1 2 3 4 5 6 7 8
select*from emp where sal >any(1000,2000,3000);--大于集合内最小值 select*from emp where sal >all(1000,2000,3000);--大于集合内最大值
select*from emp where sal <any(1000,2000,3000);--小于集合内最大值 select*from emp where sal <all(1000,2000,3000);--小于集合内最小值
select*from emp where sal =any(1000,2000,3000);--等于集合内任意数值 select*from emp where sal =all(1000,2000,3000);--等于集合内所有数值--不存在