Oracle中select语法的使用及注意事项

在Oracle数据库中,select语句是用来进行数据库数据查询

1.直接查询

   语句:select 列名(可以有多个) from 表名;

   举例:1)查询emp表中员工名和职位的信息 :select ename ,job from emp;

              2)查询emp表中的所有信息 : select empno , ename , job ,  sal , comm, deptno... from emp; 或者 select * from emp;

   注意 :* :表示所有列名的信息

 

2.查询时as为列名重新起名

   语句 : select 列名 as 别名 from 表名;

   举例 : 1)查询emp表中员工名和职位信息,同时将ename名改为“姓名” , job名改为“职位” : select ename as "姓名", job as "职位" from emp;

     2)举例1中也可以这样表示:(a) select ename as 姓名, job as 职位 from emp;   (省略双引号)

                   (b) select ename 姓名, job 职位 from emp;  (省略as也可以)

   注意:    1.省略双引号是,语句中的别名称之间不能有空格,否则会出错

               2.若别名为sql特有的词语时,别名需要写在双引号之中 , select ename as "姓名", job as "from" from emp;

 

3.特殊语句where语句的使用,可以指定搜索特定的信息

 语句 : select 列名(可以有多个) from 表名 where 列名 = '表格中指定信息';(注意是英文单引号)

    举例 : 1)查询emp表中job为CLERK的员工名和编号 : select ename , empno from emp where job = 'CLERK'  ;

                 2)查询emp表中部门编号为20的员工名和职位:select ename , job from emp where deptno = 20;

    注意:1.指定信息若是字符或者字符串,要写到英文单引号之中,数值则不用

    2.sql语句不区分大小写,但是表格中的指定信息是严格区分大小写的

   

 

 

 

4.where语法中运算符的使用

   操作运算符: +   -   /   *   %

    例子:1)查询员工姓名和一年的工资(加上年终奖) : select ename, sal*12+comm from emp;

 

 

     注意:查询结果有很多是没有数据的,原因是员工的年终奖是null值,任何数值与null结算都是得到null值

  解决方法:需要对null进行处理:null-->0   

          1).方式一:nvl :相当于if ,格式:nvl(comm,0)   

          if(comm == null){

            return 0;

          }

 

       2). 方式二:nvl2(comm,comm,0)

          if(comm == null){

            return 0;

          }else{

            return comm;

          }

 

 

 

   关系运算符:>  >=  <  <=  =  !=或<>

   例子:1.查询工资高于3000的员工与职位 : select ename, job from emp where sal >=3000;

      2.查询部门编号不为7566的员工与职位 : select ename, job from emp where deptno !=7566;

   注意:当查询的语句有null值时,不能使用 =  和!=或<>,应该使用is 和 is not

        如:select * from emp where comm is not null;

 

   逻辑运算符:or  and  not

  例子:1.查询职位为CLERK并且工资高于1000的员工名,职位和工资信息:select ename, job , sal from emp where job = 'CLERK' and sal > 1000;

     2.查询职位为CLERK或者工资高于1000的员工名,职位和工资信息:select ename, job , sal from emp where job = 'CLERK' or sal > 1000; 

     3.查询工资低于3000的员工和工资信息(用not) : select ename, job, sal from emp where not (sal >=3000);

 

5.范围查询:beween ... and ...

   语法: select 列名 from 表名 where 列名 between 小 and 大;

   举例: 查询工资在2000~5000的员工信息, select * from emp where sal between 2000 and 5000; 

 

   语法:select 列名 from 表名 where 列名 in (数据, 数据,......)

   举例:查询工资3000和5000的员工信息, select * from emp where sal in(3000,5000);

              查询工资不是3000和5000的员工信息, select * from emp where sal not  in(3000,5000);

   注意:not in 里面不能出现null,否则查询的数据为空,语法不允许

 

 

6.模糊查询:like...

   配合通配符使用: 1)  _ :一个字符

            2)%:任意个字符

   例子:1.查询名字带字母S的员工信息 : select * from emp where ename like '%S%';

      2.查询名字第二个为字母C的员工信息 : select * from emp where ename like '_C%';

      3.查询名字长度大于4的员工信息: select * from emp where ename like '_____%'; (5个_)

   特殊:若查询的信息中包含下划线 ,如:zhang_san , 则select * from emp where ename like '%\_%';(错误)

              对于上面的问题,解决方法:select * from emp where ename like '%\_%' escape '\';

 

7.排序( order by )

   语法:select 列名.. from emp order by  列名 desc(降序);

              select 列名.. from emp order by  列名 asc(升序);  -----若不写则升序降序的标识,语句默认是升序

   例子:查询emp表并按工资降序 : select * from emp order by sal desc;

   注意:null默认是最大值

   特殊:多列查询

    例子:查询emp表并按工资升序,若部门编号相同则按部门降序:

     select * from emp order by sal asc , deptno desc;

 

8.distinct:对查询出的结果集去重

   例子:select distinct deptno from emp; 

posted @ 2021-08-04 21:11  Brack_Pearl  阅读(2417)  评论(0编辑  收藏  举报