目录
一、开始步骤
二、登录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,回车——输入用户名,回车——输入密码,回车——连接成功
用来计算各种各样表达式的表,其中只有一个字段,一条记录,在计算表达式的时候只会显示一条记录,如 执行select 2*3 from dual; 时只会显示一条记录,执行select 2*3 from emp; 时,其显示的行数与emp表里面的记录数相同。
同理,执行 select sysdate from dual;时只会显示一条记录(当前时间),而使用 select sysdate from em;则会显示多条相同的记录(当前时间)。
① 别名可以是 **as 别名** 格式;比如:select ename 名字 from emp;
②也可以是** 空格 别名(省略as格式)**;比如:select ename as 名字 from emp;
③但是别名不能有空格,如果一定要有空格,将别名用“别名”双引号括起来; 比如:select ename " 我的 名字" from emp;
① ||相当于Java里面的字符串连接符“+”号,在这里使用“||”符号,将关系表里面的两个字段连接,并输出;
②当字段和字符串连接时,字符串打单引号 select ename||'一曦' from emp;
③当字段和字符串连接时,字符串中有单引号时,将字符串中的单引号用两个单引号表示(转义);select ename||'一''曦' from emp;
④当字段和字符串连接时,字符串中有双引号时,不需要转义:select ename||'"一曦"' from emp;
①distinct语句中select显示的字段只能是distinct指定的字段,其他字段是不可能出现的。例如,假如表A有“备注”列,如果想获取distinc name,以及对应的“备注”字段,想直接通过distinct是不可能实现的。
②distinct这个关键字用来过滤掉多余的重复记录而只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有字段信息。其原因是distinct只能返回它的目标字段,而无法返回其它字段。
如:select distinct deptno from emp;
③如果distinct同时作用于两个字段deptno和job,实际上是根据“deptno+job”来去重,distinct同时作用在了deptno和job上。
如:select distinct deptno, job from emp;
④select ename, distinct deptno from emp; --会提示错误,因为distinct必须放在开头。
⑤count是不能统计多个字段的,如:select count(distinct deptno,job) from emp;会报错,若想使用,需使用嵌套查询,
如: select count(*) from (select distinct deptno, job from emp);
①Oracle的SQL语句中没有limit,limit是mysql中特有的,在Oracle中看可用rownum来表示,用于查询结果中的前N行数据,
如:select empno, ename from emp where rownum<=5;
用于查询emp表中前五行的数据并显示 empno, ename两个字段。
②查询按empno排序的前6行的值,
如: select empno, ename from emp where rownum<=5 order by empno;
③rownum是伪列,是在获取查询结果集后再加上去的 (获取一条记录加一个rownum)。对符合条件的结果添加一个从1开始的序列号。rownum是动态的,必先有查询结果,然后再给查询的结果集添加上这个列(rownum只能用< 或者<= )。 例如:第一条记录的rownum是1 ,第二条是2,以此类推。
① 选区空值——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;
① 在不使用日期函数时,我们可以根据系统日期的存储格式简单操作日期,首先通过select sysdate from dual;获取系统日期的指定格式,再进行操作,
如:select empno, ename, hiredate from emp where hiredate>'01-5月 -81';
①lower(a)/ upper(a)——将某个字段的字母全部小写,如: select lower(ename) 小写名字 from emp where lower(ename) like 'a%' or lower(ename) like 'm%';
②substr(a, 0, 2)——选取某个字符串a 的前两个字符(顾前不顾尾),如:select substr(ename,0, 2) from emp where lower(ename) like 'a%' or lower(ename) like 'm%';
③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;
① 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');
①将多条记录组合在一起,产生一个输出,即函数的输入有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;
方法二: 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做连接条件,推荐使用第二种方法进行表的连接操作。
⑤查询每个员工姓名、部门名称、工资等级: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%';