select语句(2)--排序和限制查询

    xiaoxiao2022-06-22  17

    第二章:排序和限制查询

    一、排序

        1.排序:所谓排序,就是根据某个字段的值按照升序或者降序的情况将记录查询出来         语法:         select col_name,...         from tb_name         order by col_name [asc|desc],...     注意:1.排序使用order by字句,该子句只对查询记录显示调整,并不改变查询结果,所以执行权最低,即最后执行。     2.排序关键词:         asc:升序(默认,默认的意思是不加关键词的时候默认为升序排序)         desc:降序     3.如果有多个列排序,后面的列排序的前提是前面的列排好序以后有重复(相同)的值。     例子:     id    id2     1    2     2    3     3    4     4    1     4    2     语句:  select id,id2 from test order by id,id2 desc;        结果:     id    id2     1    2     2    3     3    4     4    2     4    1     注意:先排第一列,如果第一列有重复的值再排第二列,以此类推

    需求:查看员工的id,名字和薪资,按照薪资的降序排序显示。

    首先查看没有排序的序列:

    SQL> select id,salary from s_emp where rownum<=10;结果如下所示,在语句中 where rownum<=10的意思是取数据库中s_emp表的前10行:

    排序后的结果如下所示:

    SQL> select id,salary from s_emp where rownum<=10 order by salary desc;

        4.order by 后面还可以跟数字,表示使用select后面的第几个列进行排序 从1开始数,数字不能大于你所写的列名的个数。     例如:     //使用last_name列进行排序 select last_name,salary from s_emp order by 1;       //使用salary列进行排序 select last_name,salary from s_emp order by 2; 二、限制查询,即指定查询条件进行查询     语法:     select col_name,...     from tb_name     where col_name 比较操作表达式     逻辑操作符           col_name 比较操作表达式     ...     注意:     1.限制查询条件,使用where子句     2.条件可以多个,使用逻辑操作符和()进行条件的逻辑整合     3.where子句的优先级别最高     4.比较操作表达式由操作符和值组成         常见的操作:         1》逻辑比较操作符         =  >  <  >=  <=         2》不等于:三个都表示不等于的意思(经常用的是!=)         !=   <>   ^= 需求:查看员工工资小于1000的员工id和名字  

    select id,last_name,salary from s_emp where salary <= 1100;

    结果如下所示:

            3》sql比较操作符SQL comparison operators               BETWEEN ... AND...               IN(list)               LIKE               IS NULL          1)between and:在什么范围之内 [x,y],是一种闭区间操作 需求:查看员工工资在700 到 1500之间的员工id,和名字   select id,last_name,salary from s_emp where salary between 700 and 1500;

        结果如下所示:

        也可以在日期列上使用between and操作,但是要看当前session会话的语言环境来决定是使用中文格式的日期还是英文格式的日期     alter session set nls_language='simplified chinese';     如果是中文的语言环境:     查询在90年3月8号到91年2月9号之间入职的员工信息  SQL>select id,last_name,start_date from s_emp where start_date between '08-3月-90' and '01-1月-91';    查询last_name字段从Biri到Patel的员工信息    SQL>select id,last_name,start_date from s_emp here last_name between 'Biri' and 'Patel';下面是更改语言环境之后的查询方式     alter session set nls_language=english;     如果是英文的语言环境:     查询在90年3月8号到91年2月9号之间入职的员工信息    SQL>select id,last_name,start_date from s_emp where start_date between '08-MAR-90' and '09-FEB-91';         2)in(list):在一个列表中 需求:查看员工号1,3,5,7,9员工的工资    SQL>select id,last_name,salary from s_emp where id not in(1,3,5,7,9);

    结果如下所示:

    需求:查看是在'08-3月-90'或者'09-2月-91'入职的员工信息    select id,last_name,start_date from s_emp where start_date in ('08-3月-90','02-2月-91');需求:查看名字为Ngao或者Smith的员工信息        select id,last_name,salary from s_emp where last_name in ('Ngao','Smith');        3) like:模糊查询,即值不是精确的值的时候使用         通配符,即可以代替任何内容的符号         % :通配0到多个字符         _ : 当且仅当通配一个字符(下划线)         转义字符:         默认为\,可以指定,指定的时候用escape 符号指明即可,转义字符只能转义后面的一个字符 需求:查看员工名字以C字母开头的员工的id,工资。   

    select id,last_name,salary from s_emp where last_name like 'C%';

    练习:查看员工名字长度不小于5,且第四个字母为n的员工id和工资   select id,last_name,salary from s_emp where last_name like '___n_%'; 需求:查看员工名字中包含一个_的员工id和工资     注意:_是一个特殊字符,所以要转义    select id,last_name,salary from s_emp where last_name like '%/_%' escape '/';       4)is null:对null值操作特定义的操作符,不能使用= 需求:查看员工提成为空的员工的id和名字  

    select id,last_name,commission_pct from s_emp where commission_pct is null;

    结果如下所示:

         4》逻辑操作符     当条件有多个的时候使用         and:且逻辑         or: 或逻辑         注意:  not优先级>and优先级>or优先级         not:非逻辑          NOT BETWEEN AND          NOT IN          NOT LIKE          IS NOT NULL(!!!!) 需求:查看员工部门id为41且职位名称为Stock Clerk(存库管理员)的员工id和名字   

    select id,last_name,dept_id,title from s_emp where dept_id = 41 and title = 'Stock Clerk';

    练习:查看员工部门为41 或者 44号部门 且工资大于1000的员工信息    select id,last_name,dept_id,salary from s_emp where salary > 1000 and ( dept_id = 41 or dept_id = 44 );    查看员工部门为41且工资大于1000 或者 44号部门的员工信息   select id,last_name,dept_id,salary from s_emp where salary > 1000 and dept_id = 41 or dept_id = 44;   需求:查看员工提成不为空的员工信息    select id,last_name,commission_pct from s_emp where commission_pct is not null;

       需求:查看员工名字不是以C字母开头的员工信息。

    select id,last_name,salary from s_emp where last_name not like 'C%'; 如果集合中含null,不能使用not in操作符,但可以使用in SQL> select * from s_emp where dept_id not in(10,12,41,42,35,null);     结果显示未:未选定行

    SQL> select * from s_emp where dept_id in(10,41,42,35,null)结果显示为:则只显示括号中的内容数字内容,null不显示

      

    转载请注明原文地址: https://ju.6miu.com/read-1122663.html

    最新回复(0)