Oracle 自主学习笔记(二)

1、select * from emp where ename like '_A%' or ename  like 'A%';
   select * from emp where substr (ename,1,1) = 'A' or substr(ename,2,1) = 'A';  因为查询员工信息所以在 emp 表中检索
   select * from emp where instr(ename,'A') = 1 or instr(ename,'A') = 2;         知道 substr 和 instr 两个函数的用法
   //查询姓名首字母为 "A"或第二个字符为"A"的所有员工信息

2、select * from emp where job!='CLERK' and job!='SALESMAN' and deptno  in (20,30);       两个都不行所以用 and 并且 deptno
   //查询部门20和30中的、岗位不是"CLERK" 或 "SALESMAN"的所有员工信息                      20和30之间 用 in

3、select * from emp where to_char(hiredate, 'yyyy-mm-dd') like '1981%' and sal between 2500 and 3500 and comm is NULL;
   //查询工资在2500-3500之间,1981年入职的,没有奖金的所有员工信息
首先先将 hhiredate 字符串化 用 to_char ,直接 comm is NULL


4、select * from emp where sal > (select avg(sal) from emp);   子查询 先算平均值 直接用 where进行比较   
   //查询比平均员工工资高的员工信息

5、select deptno,dname,loc from dept where deptno in (select deptno from emp group by deptno having avg(sal)> 2000);
   //查询平均工资高于2000的部门信息

查询部门信息,所以主表是部门dept表,用 group by 分组 然后再找出平均分 > 2000 的结果,用having 筛选,此时avg函数计算的
是每个部门的平均分,然后通过找出 deptno 用 in查询部门信息 

6、select loc from dept where deptno in (select deptno from emp where ename = 'WARD');
   select ename,dept.loc from dept,emp where emp.deptno = dept.deptno and ename = 'WARD';
   //查询出WARD的工作所在地

7、select ename,dname,loc from emp,dept where emp.deptno = dept.deptno and emp.sal > (select sal from emp where ename = 'ADAMS');
   //查询出工资比ADAMS高的所有人姓名、部门、所在地。

8、select * from emp where sal =(select min(sal) from (select * from emp order by sal desc )where rownum <= 7);
   //查询工资排名第7的员工信息

二、oracle 单行函数  

1、mod(y,x) 返回y除以x的余数,如果x为0则返回y
2、round(x,[,y]) 四舍五入,y省略,四舍五入到整数位;y为负,则到小数点前y位,y为正,则到小数点后y位
3、trunc(x,[,y]) 截取数字。如y省略,则截去x的小数部分;y为负,截小数点前y位;为正,截取小数点后y位

date:年、月、日、时、分、秒 DD-MM-YYYY
timestamp:时间戳
to_char(hiredate, 'YYYY-MM-DD') 把日期或数字转换为字符串
to_date('2006-05-01', 'YYYY-MM-DD') 把字符串转换为日期类型

日期时间运算函数
add_months(sysdate,3) add_months(sysdate,-2)
last_day() 当月的最后一天
months_between() 相减运算 months_between('17-9月-2013', '17-9月-2013') 9-9
next_day(date,char)比当前日期晚的第一个...
char() 字符函数
concat('新点','软件有限公司') 字符连接函数
initcap('XINDIAN,ruanjian') 关键字第一个字大写,后面的小写
length('XINDIAN,ruanjian') 计算字符串长度 逗号和空格都算
lower()转化小写  upper()转化为大写


三、集合运算符
union all 合并,包括重复行
union 合并,不包括重复行
minus 第一个结果集中有但第二个没有的行,及差
intersect 返回两个结果集都有的行,及交


四、子查询
子查询:使用子查询可以用一系列简单的查询构成复杂的查询,从而明显增加SQL的功能
单行子查询:指不向外层查询返回查询记录或者只返回一条查询记录  = > < != 
多行子查询:可以向外层查询返回多行记录                        不能使用 > < = 等
多行子查询使用的运算符:in、not in、exists、not exists、all、any,其中all、any必须与比较运算符一起使用


in,any,all 
<any 指小于最大值   >any 指大于最小值


 

猜你喜欢

转载自blog.csdn.net/ljf_djcrs/article/details/81089124