数据库-Oracle学习笔记(7)

SQL的基础查询 --DQL语言

1)基本查询语言 select … from … where …;

  • (1)from关键字
    指定从哪个表中查询
  • (2)使用别名的问题
    在select语句里面,select是指定查询的哪些列
    语法:别名写在列明之后,空格隔开,中间可以加或者不加as关键字。
    说明:如果希望别名中区分大小写字符,或者别名中包含字符或空格,则必须用双引号括起来。
  列名 别名
  列名 as 别名
  select empno, ename, sal*12 from emp;
  select empno as id, ename name, sal*12 as totalSal from emp;
  select empno as "id", ename "name", sal*12 as "年薪" from emp;
  • (3)select子句
    select用于指定要查询的列
    如果是表中所有的列,在select后面使用*
    如果是特定的某几列,在select后面写清楚那几列,逗号分隔开。
  select * from...
  select id, name,age as 别名 from ....
  • (4)where子句
    where子句用于在查询中做条件限制的
    (where子句可用用在select、update、delete)
    强调:
    ① 在where子句中,如果条件是和数字比较,可以使用单引号,也可以不用;
    ② 在where子句中,如果条件是和字符串以及日期类型的数据进行比较,则必须用单引号引起来。
  查询在部门10下面的所有员工信息
  select * from emp where deptno=10;
  select * from emp where deptno='10';
  查询员工表中职位是SALESMAN的职员
  select * from emp where job='SALESMAN';
  select * from emp where job=SALESMAN;   ORA-00904: "SALESMAN": 标识符无效

2)Oracle中的查询条件 --where子句中的

使用 > < >= <= = !=等价于<>

  查询员工表薪水低于2000的员工信息
  select * from emp where sal<2000;
  select * from emp where sal+nvl(comm,0)<2000;
  查询员工表中不属于部门10的员工信息
  select * from emp where deptno!=10;
  select * from emp where deptno<>10;
  查询员工表中在200211日以后入职的员工信息,比较日期类型数据
  SELECT ENAME,SAL,HIREDATE FROM emp 
  WHERE HIREDATE > TO_DATE('2002-1-1','YYYY-MM-DD');

使用and或者or关键字

在SQL操作中,如果希望返回的结果是必须满足多个条件,使用and来连接这些条件;
在SQL操作中,如果希望返回的结果是满足多个条件之一即可,使用or来连接这些条件。

  查询底薪大于1000并且职位是'CLERK'的员工信息
  select * from emp where sal>1000 and job='CLERK'; 正确
  SELECT * FROM EMP WHERE SAL>1000 AND JOB='CLERK'; 正确
  select * from emp where sal>1000 and job='clerk';   错误
  select * from emp where sal>1000 and lower(job)='clerk'; 正确
  select * from emp where sal>1000 and initcap(job)='Clerk';  正确
  select job, upper(job), lower(job), initcap(job) from emp;
  查询底薪大于1000或者职位是'CLERK'的员工信息
  select * from emp where sal>1000 or lower(job)='clerk';
  select * from emp where sal>1000 or job='CLERK';

使用like条件 – 模糊查询

模糊匹配查询中的通配符:

  • %:表示0到多个字符
  • _:表示单个任意字符
  select * from emp where ename='SMITH';    精确值查询
  select * from emp where ename like '_A%';   员工姓名中第二个字母是A的  模糊匹配查询
  模糊匹配查询     查询员工姓名中包含A的所有信息
  select * from emp where ename like '%A%';
  模糊匹配查询    查询员工姓名中是S结尾的员工信息
  select * from emp where ename like '%S';

使用in和not in

语法:in(list1, list2,list3,…)取出等于列表中的值
not in(list1,list2,list3…)取出不等于此列表中的数据
参数list表示列表值,每一个列表值用逗号分隔开

  查询职位是MANAGER或者CLERK的员工信息
  select * from emp where job='MANAGER' or job='CLERK';
  select * from emp where job in('MANAGER', 'CLERK');
  查询出不是部门10和不是部门20的员工信息
  select * from emp where deptno !=10 and deptno !=20;   正确
  SELECT * FROM emp WHERE DEPTNO NOT IN (10,20);    正确
  select * from emp where deptno !=10  or deptno !=20;   错误

使用between a1 and a2

用于查询符合某个值范围条件的数据 (a1到a2之间的范围,包含a1和a2)
使用在数字类型、字符串类型和日期类型的数据范围上。

  查询底薪在1500~3000之间的员工信息
  select * from emp where sal between 1500 and 3000;
  select * from emp where sal>=1500 and sal<=3000;

使用is null和is not null

空值null是一个特殊值,比较的时候不能使用=。

  • 是否等于空 is null
  • 不等于空 is not null
  查询提成为空的员工信息
  select * from emp where comm is null;
  查询提成不为空的员工信息
  select * from emp where comm is not null;

使用any和all

any和all不能单独使用,需要配合比较运算符> >= < <=一起使用

  >any(list1,list2,list3,....):大于()里的最小值
  <any(list1,list2,list3....):小于()里的最大值
  >all(list1,list2,list3...):大于()里的最大值
  <all(list1,list2,list3...):小于()里的最小值
  select * from emp where sal>any(3500,4000,4500);  工资大于3500
  select * from emp where sal<any(3500,4000,4500);  工资小于4500
  select * from emp where sal>all(3500,4000,4500);  工资大于4500
  select * from emp where sal<all(3500,4000,4500);  工资小于3500
  any   大于最小的,小于最大的
  all   大于最大的,小于最小的

使用distinct去重

数据表中可能存储相同数据的行,默认情况下查询的数据是显示所有的行的数据。
当重复数据没有实际意义的时候,可以使用distinct去重。
注意:distinct使用在select子句的列名前。

  select deptno from emp;    查询员工表中的所有部门编号
  查看员工表中有哪些部门,过滤重复数据
  select distinct deptno from emp;
  查询员工表中部门和职位
  select deptno, job from emp;
  查看每个部门的职位--去掉重复
  select distinct deptno, job from emp;

Oracle中的查询条件思维导图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值