终端(sqlplus)-登录,虚表,rownum,函数,空值,日期

目录

一、开始步骤

二、登录scott账户操作系统表

1.连接登录,查看表的描述信息:desc emp

2. 虚表dual 

3. 起别名

4. 字段连接符:select ename||sal from emp;

5. distinct语句的使用

6. rownum关键字的使用

7. 对于空值的处理

8. 对于日期的处理

9. 对于字符字符串的处理函数

10.to_char(系统日期字段,‘格式’)、to_date('日期字符串',‘格式’)函数的使用

11.组函数和group by 子句的使用



一、开始步骤

      cmd——管理员身份登录——终端输入sqlplus,回车——输入用户名,回车——输入密码,回车——连接成功

终端(sqlplus)-登录,虚表,rownum,函数,空值,日期_第1张图片终端(sqlplus)-登录,虚表,rownum,函数,空值,日期_第2张图片

二、登录scott账户操作系统表

1.连接登录,查看表的描述信息:desc emp

终端(sqlplus)-登录,虚表,rownum,函数,空值,日期_第3张图片

终端(sqlplus)-登录,虚表,rownum,函数,空值,日期_第4张图片

2. 虚表dual 

        用来计算各种各样表达式的表,其中只有一个字段,一条记录,在计算表达式的时候只会显示一条记录,如   执行select 2*3 from dual; 时只会显示一条记录,执行select 2*3 from emp; 时,其显示的行数与emp表里面的记录数相同。

         同理,执行 select sysdate from dual;时只会显示一条记录(当前时间),而使用 select sysdate from em;则会显示多条相同的记录(当前时间)。

终端(sqlplus)-登录,虚表,rownum,函数,空值,日期_第5张图片

3. 起别名

   ① 别名可以是 **as 别名** 格式;比如:select ename 名字 from emp;

   ②也可以是** 空格  别名(省略as格式)**;比如:select ename as 名字 from emp;

   ③但是别名不能有空格,如果一定要有空格,将别名用“别名”双引号括起来; 比如:select ename " 我的 名字" from emp;

终端(sqlplus)-登录,虚表,rownum,函数,空值,日期_第6张图片

4. 字段连接符:select ename||sal from emp;

   ① ||相当于Java里面的字符串连接符“+”号,在这里使用“||”符号,将关系表里面的两个字段连接,并输出;

   ②当字段和字符串连接时,字符串打单引号 select ename||'一曦' from emp;

   ③当字段和字符串连接时,字符串中有单引号时,将字符串中的单引号用两个单引号表示(转义);select ename||'一''曦' from emp;

   ④当字段和字符串连接时,字符串中有双引号时,不需要转义:select ename||'"一曦"' from emp;

终端(sqlplus)-登录,虚表,rownum,函数,空值,日期_第7张图片终端(sqlplus)-登录,虚表,rownum,函数,空值,日期_第8张图片

终端(sqlplus)-登录,虚表,rownum,函数,空值,日期_第9张图片终端(sqlplus)-登录,虚表,rownum,函数,空值,日期_第10张图片

5. distinct语句的使用

    ①distinct语句中select显示的字段只能是distinct指定的字段,其他字段是不可能出现的。例如,假如表A有“备注”列,如果想获取distinc name,以及对应的“备注”字段,想直接通过distinct是不可能实现的。

    ②distinct这个关键字用来过滤掉多余的重复记录而只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有字段信息。其原因是distinct只能返回它的目标字段,而无法返回其它字段。

      如:select distinct deptno from emp;

终端(sqlplus)-登录,虚表,rownum,函数,空值,日期_第11张图片

    ③如果distinct同时作用于两个字段deptno和job,实际上是根据“deptno+job”来去重,distinct同时作用在了deptno和job上。

       如:select distinct deptno, job from emp;

终端(sqlplus)-登录,虚表,rownum,函数,空值,日期_第12张图片

    ④select ename, distinct deptno from emp;  --会提示错误,因为distinct必须放在开头。

    ⑤count是不能统计多个字段的,如:select count(distinct deptno,job) from emp;会报错,若想使用,需使用嵌套查询,

       如:  select count(*) from (select distinct deptno, job from emp);

6. rownum关键字的使用

    ①Oracle的SQL语句中没有limit,limit是mysql中特有的,在Oracle中看可用rownum来表示,用于查询结果中的前N行数据,

如:select empno, ename from emp where rownum<=5;

      用于查询emp表中前五行的数据并显示 empno, ename两个字段。

终端(sqlplus)-登录,虚表,rownum,函数,空值,日期_第13张图片

    ②查询按empno排序的前6行的值,

      如:  select empno, ename from emp where rownum<=5 order by empno;

终端(sqlplus)-登录,虚表,rownum,函数,空值,日期_第14张图片

    ③rownum是伪列,是在获取查询结果集后再加上去的 (获取一条记录加一个rownum)。对符合条件的结果添加一个从1开始的序列号。rownum是动态的,必先有查询结果,然后再给查询的结果集添加上这个列(rownum只能用< 或者<= )。  例如:第一条记录的rownum是1 ,第二条是2,以此类推。 

7. 对于空值的处理

    ①  选区空值——is null, 如:select * from emp where comm is null;

    ②  选区非空值——is not null, 如: select * from emp where comm is not null;

    ③将空值转换为特定值(比如0)——如:select ename, nvl(comm, 0) from emp;  即将所有的空值都转换为0;

终端(sqlplus)-登录,虚表,rownum,函数,空值,日期_第15张图片

8. 对于日期的处理

    ① 在不使用日期函数时,我们可以根据系统日期的存储格式简单操作日期,首先通过select sysdate from dual;获取系统日期的指定格式,再进行操作,

     如:select empno, ename, hiredate from emp where hiredate>'01-5月 -81';

终端(sqlplus)-登录,虚表,rownum,函数,空值,日期_第16张图片

9. 对于字符字符串的处理函数

    ①lower(a)/ upper(a)——将某个字段的字母全部小写,如:  select lower(ename) 小写名字 from emp where lower(ename) like 'a%' or lower(ename) like 'm%';

终端(sqlplus)-登录,虚表,rownum,函数,空值,日期_第17张图片

    ②substr(a, 0, 2)——选取某个字符串a 的前两个字符(顾前不顾尾),如:select substr(ename,0, 2) from emp where  lower(ename) like 'a%' or lower(ename) like 'm%';

终端(sqlplus)-登录,虚表,rownum,函数,空值,日期_第18张图片

    ③chr(数字)/ascii(‘字符’)——把数字转换成相对应的字母(ASCII码),如: select chr(65) from dual; 或select ascii('A') from dual;

    ④round('数字')——四舍五入,如: select round(23.33) from dual; / select round(23.3365, 2) from dual;

终端(sqlplus)-登录,虚表,rownum,函数,空值,日期_第19张图片

10.to_char(系统日期字段,‘格式’)、to_date('日期字符串',‘格式’)函数的使用

    ① to_char函数的功能是将数值型或者日期型转化为字符型,

         如:select to_char(sysdate,'YYYY-MM-DD  HH:mm:ss') 系统时间 from dual;

         

              select to_char(sysdate,'YYYY/MM/DD  HH24:mm:ss') 系统时间 from dual;

        

    ②用于date/time转换的模板

模板 描述
HH 一天的小时数 (01-12)
HH12 一天的小时数 (01-12)
HH24 一天的小时数 (00-23)
MI 分钟 (00-59)
SS 秒 (00-59)
YYYY 年(4和更多位)
YY 年的后两位
MM 月份 (01-12)
DD 一个月里的日子(01-31)
D 一周里的日子(1-7;SUN=1)

    ③查询星期:select to_char(sysdate,'day') 星期 from dual;

      

    ④ 查询员工入职日期并筛选符合条件的元组—— 如:  select empno, ename,to_char(hiredate,'YYYY-MM-DD') from emp where hiredate>to_date('1981-05-01','YYYY-MM-DD');

终端(sqlplus)-登录,虚表,rownum,函数,空值,日期_第20张图片

11.组函数和group by 子句的使用

      ①将多条记录组合在一起,产生一个输出,即函数的输入有N条, 输出仅有一条;

      ②代表函数有: mix, min, sum, count, avg

      ③在有group by子句的SQL语句中,所有出现在select后面的字段,如果没有出现在group by 子句后面,则必须出现在组函数中。如: select deptno, max(sal) from emp group by deptno;

     ④查询每个部门工资最高的人的信息:

    方法一:select e.deptno,e.ename,e.sal from emp e, (select deptno,max(sal) sal from emp group by deptno) t where e.deptno=t.deptno and e.sal=t.sal order by e.deptno;

        终端(sqlplus)-登录,虚表,rownum,函数,空值,日期_第21张图片

      方法二: select ename,e.sal,e.deptno from emp e join (select max(sal) sal, deptno from emp group by deptno) t on e.sal=t.sal and e.deptno=t.deptno;

       注意:inner join ... on...相当于join... on...,为了让where只做选择条件,on做连接条件,推荐使用第二种方法进行表的连接操作。

        终端(sqlplus)-登录,虚表,rownum,函数,空值,日期_第22张图片

    ⑤查询每个员工姓名、部门名称、工资等级:select ename, dname, grade from emp e  join dept d on e.deptno=d.deptno   join salgrade on e.sal between losal and hisal   where ename like 'A%';

     终端(sqlplus)-登录,虚表,rownum,函数,空值,日期_第23张图片

   

你可能感兴趣的:(Oracle学习)