select的用法--每个员工的所有信息select*fromemp;--每个人的部门编号,姓名,薪水selectempno,ename,salfromemp;--每个人的年薪selectename,sal*12fromemp;--计算2*3的值select2*3fromemp;--计算2*3的值(dual)select2*3fromdual;--得到当前时间selectsysdatefromdual;--可以给列起别名,比如求每个人的年薪selectename,sal*12annual_salfromemp;--如果别名中有空格,需要用双引号selectename,sal*12annualsalfromemp;--如果没有内容,则为空selectename,sal,commfromemp;/*null*/--当空字段参与计算,则结果是null--例如:计算每个人的全年的收入包括月薪和年终奖selectename,sal*12+commfromemp;--可以将多个字符串拼在一起。比如:求每个人的薪水,格式为smith-sal-123selectename||'-'||sal||'-'||commfromemp;--如果字符串中有单引号,需要用另外一个单引号转义,比如:这样一个字符串:he'sfriendselectename||'he''sfriend'fromemp;distinct关键词的用法--求有哪些个部门selectdeptnofromemp;selectdistinctdeptnofromemp;--可以用来修饰多个字段--求有哪些个部门和job的组合selectdeptno,jobfromemp;selectdistinctdeptno,jobfromemp;--------------------------------------------------------where关键词的用法--可以是数值类型的等值判断。比如:求10这个部门的所有员工select*fromempwheredeptno=10;--可以是字符串类型的等值判断。比如:求叫KING的这个人的信息select*fromempwhereename='KING';--也可以是不等值判断。比如:求薪水小于2000的员工信息select*fromempwheresal2000;--字符串也可以做不等值判断,比如:求所有ename大于'CBA'的员工信息。selectenamefromempwhereename'CBA';--求部门不是10的部门select*fromempwheredeptno10;--求薪水在800和1500之间的员工信息select*fromempwheresalbetween800and1500;--也可以写成select*fromempwheresal=800andsal=1500;/*这样写则不可以--select*fromempwhere800=sal=1500;*/--where...in..的用法。比如:求薪水是800或者1500或正2000的员工信息selectename,empno,salfromempwheresalin(800,1500,2000);--相当于写成这样selectename,empno,salfromempwheresal=800orsal=1500orsal=2000;--再比如求姓名是KING,SMITH,AA的员工信息selectename,empno,salfromempwhereenamein('KING','SMITH','AA');--求入职时间在20-2月-81之后的员工信息selectename,hiredatefromempwherehiredate'20-2月-81';----------------------------------------------------------andornot的用法--求薪水大于1000或者部门在10这个部门的员工信息select*fromempwheresal1000ordeptno=10;--求薪水不是800或者不是1500或者不是3000的员工信息select*fromempwheresal800andsal1500andsal3000;--也可以这样来写select*fromempwheresalnotin(800,1500,3000);----------------------------------------------------------like的用法--求名字中包含ALL这三个字符的员工信息selectenamefromempwhereenamelike'%ALL%';--求名字中的第二个字母是A的员工selectenamefromempwhereenamelike'_A%';--特殊字符需要转义。比如:求员工中包含特殊字符%的员工信息selectenamefromempwhereenamelike'%\%%'escape'\';----------------------------------------------------------null的用法--求没有年终奖的员工selectenamefromempwherecommisnull;--求有年终奖的员工selectenamefromempwherecommisnotnull;----------------------------------------------------------orderby的用法--员工信息按照姓名正序排列selectename,salfromemporderbyenameasc;--ascent--员工信息按照倒叙排列selectename,salfromemporderbyenamedesc;--descent--也可以是多个字段组合排列。例如:员工信息按照部门正序排列,并且按照姓名倒叙排列selectename,sal,deptnofromemporderbydeptnoasc,enamedesc;----------------------------------------------------------function的用法--把所有姓名变成小写selectlower(ename)fromemp;--把所有姓名变成大写selectupper(ename)fromemp;--求所有人名中包含'a'的员工信息不区分大小写selectenamefromempwherelower(ename)like'%a%';--截取子字符串,比如求Hello的一部分selectsubstr('Hello',2)fromdual;--求Hello的一部分,并指明长度selectsubstr('Hello',2,3)fromdual;--求ascii码对应的字符selectchr(65)fromdual;--求字符对应的ascii码selectascii('中')fromdual;--四舍五入selectround(23.652)fromdual;--四舍五入小数点后面多少位selectround(23.652,1)fromdual;--四舍五入小数点前面多少位selectround(23.652,-1)fromdual;----------------------------------------------------------important!日期转换函数----------------------------------------------------------将当前日期转换成1981-03-1212:00:00这种形式的字符串selectto_char(sysdate,'YYYY-MM-DDHH24:MI:SS')fromdual;--将1981-03-1212:00:00字符串转换成日期selectto_date('1981-03-1212:00:00','YYYY-MM-DDHH24:MI:SS')fromdual;--将每个人的薪水转换成固定格式的字符串selectto_char(sal,'L00,000.9999')fromemp;--将固定格式的字符串转换成数值selectto_number('$1,250.00','$9,999.99')fromdual;--null当null参与计算时候,需要要nvl这个函数selectename,sal*12+commfromemp;selectename,sal*12+nvl(comm,0)fromemp;----------------------------------------------------------groupfunction组函数--求所有人的薪水的总和,平均值,最大值,最小值selectsum(sal),avg(sal),max(sal),min(sal)fromemp;--求总的行数selectcount(*)fromemp;--求总的行树,(可以指定具体的字段)但如果字段有null值的时候需要小心使用selectcount(comm)fromemp;--也可以过滤掉重复的行之后统计行数selectcount(distinctdeptno)fromemp;--可以指明按照哪个字段进行分组.比如;分部门统计最高薪水selectdeptno,max(sal)fromempgroupbydeptno;--也可以按照多个字段来分组统计,比如:分部门和岗位,统计最高薪水和行数selectdeptno,job,max(sal),count(*)fromempgroupbydeptno,job;----------------------------------------------------------重要:出现在select列表中的字段,如果没有在组函数中,那么必须出现在groupby子句中。----------------------------------------------------------selectename,deptno,max(sal)fromempgroupbydeptno;--selectename,max(sal)fromemp;--求薪水最高的员工姓名selectmax(sal)fromemp;selectename,salfromempwheresal=5000;selectenamefromempwheresal=(selectmax(sal)fromemp);--having从句的用法--求平均薪水是2000以上的部门selectavg(sal),deptnofromempgroupbydeptnohavingavg(sal)2000;----------------------------------------------------------总结一下select语法selectfromwheregroupbyhavingorderby----------------------------------------------------------执行顺序veryimportant!--首先执行where语句将原有记录过滤;--第二执行groupby进行分组;--第三执行having过滤分组;--然后将select中的字段值选出来;--最后执行orderby进行排序;--------------------------------------------------------/*按照部门分组统计,求最高薪水,平均薪水只有薪水是1200以上的才参与统计并且分组结果中只包括平均薪水在1500以上的部门而且按照平均薪水倒叙排列*/selectmax(sal),avg(sal),deptnofromempwheresal1200group