Oracle学习(6)

冷暖自知 提交于 2020-03-09 11:33:40

5、SQL的基础查询 ----DQL语言

1)基本查询语言

(1)from 关键字 select …from… where…

指定从那个表中查询

(2)使用别名的问题

在select语句后面,select是指定查询的那些列

    语法:别名写在列名之后,空格隔开,中间可以加或者不加as关键字。

    列名 别名     /    列名 as 别名

    说明:如果希望别名中区分大小写字符,或者别名中包含字符或空格,则必须用双引号括起来。

(3)select子句

select用于指定要查询的列
  
    ----如果是特定的某几列,在select后面写清楚那几列,逗号分隔开。

(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中的查询条件

(1)使用 > < >= <= = !=等价于<>

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

(2)使用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';

(3)使用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';

(4)使用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');

(5)使用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;

(6) 使用is null 和 is not null

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

   是否等于空    is null

   不等于空      is not null 

(7)使用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大于最大的,小于最小的

(8)使用distinct去重

数据表中可能存储相同数据的行,默认情况下查询的数据是显示所有的行的数据。

当重复数据没有实际意义的时候,可以使用distinct去重。

注意:distinct只用在select子句的列名前。

查询员工表中的部门编号:
select deptno from emp;
select distinct deptno from emp;  
查看每个部门的职位--去掉重复:
select distinct deptno,job from emp;

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!