Oracle系列《一》:简单SQL与单行函数使用scott/tiger用户下的emp表和dept表完成下列练习,表的结构说明如下emp员工表(empno员工号/ename员工姓名/job工作/mgr上级编号/hiredate受雇日期/sal薪金/comm佣金/deptno部门编号)dept部门表(deptno部门编号/dname部门名称/loc地点)工资=薪金+佣金登录Oracle数据库1、sqlplusscott/tiger2、sqlplus/nologSQL>connscott/tiger若是使用SYS的账号进行登录的话,则使用以下语句SQL>conn/assysdba【1】EMP表内容查询SQL>SELECT*FROMemp;出错,原因是没有找到该表,因为该表时SCOTT用户的表,所以查询时应该加上scott.emp就可以了【2】显示当前用户SQL>showuser【3】查看当前用户的所有表SQL>SELECT*FROMtab;【4】若想重复执行上一条SQL语句,则在sqlplus命令行下输入"/"即可【5】查询一张表的结构,例如dept表SQL>descdept【6】在雇员表中查询雇员的编号、姓名、工作SQL>SELECTempno,ename,jobFROMemp;【7】可以为列名取别名,在Linux下Oracle如果英文别名不加上双引号则会变成大写SQL>SELECTempno编号,ename姓名,job工作FROMemp;【8】查询所有的工作SQL>SELECTDISTINCTjobFROMemp;工作可能会重复,加上DISTINCT关键字【9】若要求按照以下的格式进行结果输出,如NO:7469,Name:SMITH,Job:CLERKSQL>SELECT'NO:'||empno||',Name:'||ename||',Job:'||jobFROMemp;【10】要求列出每个雇员的姓名及年薪SQL>SELECTename,sal*12incomeFROMemp;这里年薪最好用别名进行标识,可以一眼就能明白【11】查看每月可以得到奖金的雇员信息SQL>SELECT*FROMempWHEREcommisNOTNULL;【12】要求基本工资大于1500,同时可以领取奖金的雇员信息SQL>SELECT*FROMempWHEREsal>1500ANDcommisNOTNULL;如果是或的是关系,则使用OR【13】查询基本工资不大于1500,同时不可以领取奖金的雇员信息SQL>SELECT*FROMempWHERENOT(sal>1500ANDcommisNOTNULL);【14】查询在1981年雇佣的全部雇员信息,BETWEEN..AND包含等于的情况SQL>SELECT*FROMempWHEREhiredateBETWEEN'01-JAN-81'AND'31-DEC-81';【15】Oracle对大小敏感,所以查询时名字要区分大小写【16】要求查询出雇员编号不是7369、7499的雇员信息SQL>SELECT*FROMempWHEREempnoNOTIN(7369,7499);【17】SQL中LIKE语句要注意通配符%和_SQL>SELECT*FROMempWHEREhiredateLIKE'%81%';【18】查看雇员编号不是7369的雇员信息,使用<>或!=SQL>SELECT*FROMempWHEREempno<>7369;【19】要求对雇员的工资由低到高进行排序,升序为默认(ASC),降序(DESC)SQL>SELECT*FROMempGROUPBYsal;【20】查看出部门号为10的雇员信息,查询的信息按照工资从高到低,若工资相等则按雇用日期从早到晚排列SQL>SELECT*FROMempWHEREdeptno=10GROUPBYsalDESC,hiredateASC;数据库系统中,每个数据库之间区别最大的就是在函数的支持上,单行函数是最简单的函数,单行函数分为1、字符函数:接受字符输入并且返回字符或数值2、数值函数:接受数值输入并返回数值3、日期函数:对日期型数据进行操作4、转换函数:将一种数据类型转换为另一种数据类型5、通用函数:NVL、DECODE函数字符函数:【1】大小写转换UPPER和LOWERSQL>SELECTUPPER('smith')FROMdual;【2】将雇员姓名变为开头字母大写,INITCAPSQL>SELECTINITCAP(ename)FROMemp;字符函数中有连接函数CONCAT,但不如||好用,还有字符串处理的一些函数字符串截取:substr()字符串长度:length()内容替换:replace()SQL>SELECTsubstr('hello',1,3),length('hello'),replace('hello','l','x')FROMdual;这里注意的是Oracle中字符串截取从0和从1开始都是一样的,谨防面试提问【3】要求显示所有雇员的姓名及姓名的后3个字符SQL>SELECTename,SUBSTR(ename,LENGTH(ename)-2)FROMemp;以上操作显得较为麻烦,substr()函数是可以倒着截取SQL>SELECTename,SUBSTR(ename,-3,3)FROMemp;数值函数:1、四舍五入:ROUND()2、截断小数位:TRUNC()3、取余(取模):MODSQL>SELECTROUND(789.536)FROMdual;【1】保留2位小数,(如果是-2则对整数进行四舍五入,变为800了)SQL>SELECTROUND(783.56,2)FROMdual;【2】使用MOD()函数进行取余操作SQL>SE...