资源描述:
《韩顺平 oracle听课笔记 经典》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、复杂查询-单表查询:查询部门中各个岗位的平均工资和最高工资。selectavg(sal),max(sal),deptno,jobfromempgroupbydeptno,job;groupby用于对查询的结果分组统计;selectavg(sal),max(sal),deptno,jobfromempgroupbydeptno,jobhavingavg(sal)>2000;having子句用于限制分组显示结果;selectavg(sal),max(sal),deptno,jobfromempgroupbydeptno,jobhavingavg(sal)>2
2、000orderbydeptnodesc;orderby用于排序;复杂查询-多表查询:select?,?fromempa1,depta2wherea1.deptno=a2.deptno;自连接(同一张表的关联查询):select?,?fromempworker,empbosswherewoker.?=boss.?;子查询:1.单行子查询:返回单行数据2.多行子查询:返回多行数据select*fromempwherejobin(select());all=嵌套select(max());any=嵌套select(min());3.多列子查询:select?
3、,?fromempwhere(?,?)=(select?,?);注意对应关系4.from子句中使用子查询:select?,?fromempa1,(selectdeptno,avg(sal)mysalfromempgroupbydeptno)a2wherea1.deptno=a2.deptnoanda1.sal>a2.mysal;(a2叫做内嵌视图)表指定别名不可加as,列可以加as;5.用查询结果创建表:createm1(?,?,?)asselect?,?,?fromemp;复杂查询-分页查询:1.rownum分页:(select*fromemp)2.显
4、示rownum(oracle分配的)selecta1.*,rownumrnfrom(select*fromemp)a1;3.指定范围:6到10条记录selecta1.*,rownumrnfrom(select*fromemp)a1whererownum<=10;前10条记录select*from(selecta1.*,rownumrnfrom(select*fromemp)a1whererownum<=10)wherern>=6;4.几个查询变化:a.指定查询列,(只需要修改最里层的子查询)select*from(selecta1.*,rownumrnf
5、rom(select?,?fromemp)a1whererownum<=10)wherern>=6;b.如何排序,(只需要修改最里层的子查询)select*from(selecta1.*,rownumrnfrom(select?,?fromemporderby?)a1whererownum<=10)wherern>=6;复杂查询-合并查询:unoin:并集且去除重复的unionall:并集且不去除重复的,也不排序intersect:取交集minus:取差集sql函数的使用:lower(char),upper(char),length(char),subs
6、tr(char,m,n)从m开始取n个字符。selectupper(substr(ename,1,1))fromemp;(首字母大写)selectlower(substr(ename,2,length(ename)-1))fromemp;(除首字母大写后面字母小写)replace(char,m,n)选择字段名将m替换成nround(n,[m])四舍五入m为小数点后面的的m位trunc(n,[m])截取数字m为小数点后面的的m位mod(m,n)取模(余数)floor(n)返回小于或者等于n的最大整数ceil(n)返回大于或者等于n的最小整数例:显示一个月(
7、30天)的情况下所有员工的日薪,忽略余数:selecttrunc(sal/30),enamefromemp;或者selectfloor(sal/30),enamefromemp;显示员工的入职天数:Selecttrunc(sysdate-hiredate)"入职天数",enamefromemp;显示当月倒数第三天入职的员工:last_day(d):返回指定日期所在月份的最后一天selecthiredate,enamefromempwherelast_day(hiredate)-2=hiredate;转换函数:to_char(char,data):将字符串
8、转换成date类型的数据to_date('1988-12-12','yyyy-m