Oracle带where的查询语句

我的Oracle数据库学习笔记

Day 6带where的查询语句


文章目录


带条件的查询 (结果集中仅显示满足条件的记录)

  1. 语法:
select 列名列表
 from 表名
 [where 查询条件];
  1. 运算符:
    1)算术运算符: + - * / %
    2)条件运算符 : =,!=(<>),>,>=,<,<=, any,all,some
    注意: any, all不能单独使用,要和其他 6个条件运算符一起使用
    any和some是等价的
    3) 逻辑运算符:not, and ,or not -->and–>or
    4)SQL运算符: like, in, between and , is null, 相反值: not like ,not in,not between
    and ,is not null.
    Like 与通配符一起使用:
    %:任意长度的字符
    _:一个字符
    5)sql连接符:
    concat(s1,s2)
    s||s2: || 连接符

1.查询10部门的员工信息(编号,姓名,职位,工资,部门编号)

 select empno,ename,job,sal,deptno
 from emp
 where deptno=10;

2.查询不是10号部门的员工信息(编号,姓名,职位,工资,部门编号)

select empno,ename,job,sal,deptno
 from emp
 where deptno !=10;

与上面的语句等效

 select empno,ename,job,sal,deptno
 from emp
 where deptno <> 10;

3.查询工资高于1500(不含)的员工信息(编号,姓名,职位,工资,部门编号)

 select empno,ename,job,sal,deptno
 from emp
 where sal>1500;

查询工资高于1500(含)的员工信息(编号,姓名,职位,工资,部门编号)

select empno,ename,job,sal,deptno
 from emp
 where sal>=1500;

4 .在查询语句使用逻辑运算符 not ,and, or

4.1 查询10号部门中工资高于1500的员工(编号,姓名,职位,工资,部门编号) -->and
 select empno,ename,job,sal,deptno
 from emp
where deptno=10 and sal>1500;
4.2 查询工资高于3000(含)或工资低于1000(含)的员工信息(编号,姓名,职位,工资,部门编号)–>or
 select empno,ename,job,sal,deptno
 from emp
 where sal >=3000 or sal <=1000;

5 .在条件中判断select语句部分的表达式的值

查询年薪高于15000(含)员工信息(编号,姓名,职位,工资,年薪)
 select empno,ename,job,sal,sal*12 yearsal
 from emp
 --where yearsal >=15000; --条件出现错误 :"yearsal 标识符无效",错误原因为:此名为别名,不能在where条件中使用别名判断
where sal *12 >=15000;

6 .在条件中使用SQL运算符: like ,between … and , in , is null

6.1 like ‘使用通配符的表达式’

like 与 通配符一起使用进行判断 。通配符:
%:有任意长度的字符 (包含0个)
_:表示此处有一个字符
适用于字符类型的值

查询员工姓名中包含A字符的员工信息(编号,姓名,职位,工资,部门编号)
 select empno,ename,job,sal,deptno
 from emp
 where ename like '%A%';
查询员工姓名中以A字符开头的员工信息(编号,姓名,职位,工资,部门编号)
 select empno,ename,job,sal,deptno
 from emp
 where ename like 'A%';
查询员工姓名中以S字符结尾的员工信息(编号,姓名,职位,工资,部门编号)
 select empno,ename,job,sal,deptno
 from emp
 where ename like '%S';
查询员工姓名中第二个字符为A字符的员工信息(编号,姓名,职位,工资,部门编号)
 select empno,ename,job,sal,deptno
 from emp
 where ename like '_A%';
查询员工姓名中倒数第三个字符为M的员工信息(编号,姓名,职位,工资,部门编号)
select empno,ename,job ,sal,deptno
 from emp
 where ename like '%M__'; --注意,两个下划线之间没有空格的
查询员工姓名以A开头或者以’S’结尾的员工信息(编号,姓名,职位,工资,部门编号)
 select empno,ename,job,sal,deptno
 from emp
 where ename like 'A%' or ename like '%S';
 ------------------------------ like 取反 : not like
查询员工姓名不以‘A’开头的员工信息(编号,姓名,职位,工资,部门编号)
 select empno,ename,job,sal,deptno
 from emp
 where ename not like 'A%';
查询员工姓名不以A开头并且也不以’S’结尾的员工信息(编号,姓名,职位,工资,部门编号)
select empno,ename,job,sal,deptno
 from emp
 where ename not like 'A%' and ename not like '%S';

与上面的效果等效

 select empno,ename,job,sal,deptno
 from emp
 where not (ename like 'A%' or ename like '%S');
6.2 between …and

指定范围的条件: between … and
between 下限值 and 上限值。 (包含上限值与下限值的)
适用于:数值类型和日期类型

注意: between …and 前后的值如果写反:
between 上限值 and 下限值
查询结果为: 不出现错误,同时没有任何数据显示

查询工资在1000~3000之间的员工信息(编号,姓名,职位,工资,部门编号)
 select empno,ename,job,sal,deptno
 from emp
 where sal >=2000 and sal <=3000;
 -- between and
 select empno,ename,job,sal ,deptno
 from emp
 where sal between 2000 and 3000;
思考一下,下面的SQL语句的结果为?
 select empno,ename,job,sal,deptno
 from emp
 where sal between 3000 and 2000; -- 结果为:A, 出现错误 B 正确显示结果 C 不报错,同时没有任何信息显示 选项为:C
 
 --------------between ... and 取反 : not between .. and ..
查询员工工资不在2000~3000之间的员工信息(编号,姓名,职位,工资,部门编号)
 select empno ,ename,job,sal,deptno
 from emp
 where sal <2000 or sal >3000;

与上面的SQL等效

 select empno,ename,job,sal,deptno
 from emp
 where not (sal >=2000 and sal <=3000); 

与上面的SQL等效

 select empno,ename,job,sal,deptno
 from emp
 where sal not between 2000 and 3000;
6.3 in in(值列表) 匹配值列表中任意一个值 ,值列表之间使用逗号

分隔 .注意:值列表中的值不能带有通配符

查询10部门和20部门的员工信息(编号,姓名,职位,工资,部门编号)
 select empno,ename,job,sal,deptno
 from emp
 where deptno =10 or deptno=20;
 
 -- in
 select empno,ename,job,sal,deptno
 from emp
 where deptno in(10,20);
查询职位为‘CLERK’或者是‘MANAGER’的员工信息(编号,姓名,职位,工资,部门编号)
 select empno ,ename,job,sal,deptno
 from emp
 where job ='CLERK' or job='MANAGER';
 --in
 select empno,ename,job,sal,deptno
 from emp
 where job in('CLERK','MANAGER');
 
 ----------------in 取反 not in 
查询不是10部门也不是20部门的员工信息(编号,姓名,职位,工资,部门编号)
 select empno,ename,job,sal,deptno
 from emp
 where deptno!=10 and deptno <> 20;
 -- not
 select empno ename,job,sal,deptno
 from emp
 where not (deptno=10 or deptno=20);
 --not in
 select empno ename,job,sal,deptno
 from emp
 where deptno not in(10,20);
查询职位不是‘CLERK’同时也不是‘MANAGER’的员工信息(编号,姓名,职位,工资,部门编号)–>not in
select empno,ename,job,sal,deptno
 from emp
 where job not in('CLERK','MANAGER');
6.4 is null 判断值是否为null 不包含‘null’也不包含’’,也不包含0
查询奖金为null的员工信息(编号,姓名,职位,工资,奖金,部门编号)
 select empno,ename,job,sal,comm,deptno
 from emp
 where comm is null;
查询公司的总裁的信息(编号,姓名,职位,部门编号)
 select empno,ename,job,deptno
 from emp
 where mgr is null;
 
 -- is null 取反 is not null
查询有奖金的员工信息(编号,姓名,职位,工资,奖金,部门编号)
 select empno,ename,job,sal,comm,deptno
 from emp
 where comm is not null;

7.使用连接符把多列的值连接为一列显示

7.1 使用函数 concat(s1,s2) 把s2的值连接到s1的后面,成为一个新的字符值
查询员工的信息 (编号姓名,职位,工资)
 select concat(empno,ename) empInfo,job,sal
 from emp;
查询员工的信息 (编号姓名职位,工资)
 select concat(empno,ename,job),sal --出现错误 ,参数个数先效,原因:concat仅写两个参数
 from emp;

解决方式,嵌套调用concat函数 ,

concat(concat(concat(s1,s2),s3),s4)
 select concat(concat(empno,ename),job) empinfo,sal
 from emp;

7.2 使用 || 连接符

##### 查询员工的信息 (编号姓名,职位,工资)
 select empno||ename as empinfo,job,sal
 from emp;
查询员工的信息 (编号姓名职位,工资)
select empno||ename||job||sal empinfo
 from emp;
查询员工信息(编号–>姓名)
 select empno||'-->'||ename as empInfo
 from emp;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值