-*和列名哪个好?---Oracle9之前,列名好,之后一样---查询员工信息:员工号 姓名 月薪 年薪select empno ,ename,sal,sal*12 2 form emp;----c命令别名有没有双引号是有区别?如果别名有空格则需要“”,如果没有则不需要。----查询员工信息:员工号 姓名 月薪 年薪 奖金 年收入select empno,ename,sal,sal*12,comm,sal*12+comm关于空值的问题null?1、包含空值的表达式都为null2、null!=null nvl(a,b)当A的值为空则返回b---查询奖金为null的员工select * from emp where comm is nulldistinct :去掉重复的记录,作用于所有的列尽量用列名来代替*SQL语言不明确区分大小写空值是无效的,未指定的,不是空格也不是0包含空值的数学表达式都是空值,关键字不能缩写连接符“||”可以用来合成列 字符串日期和字符串只能在单引号中出现查询员工信息******的薪水是******spool c:\11.txtspool off 相当于录屏功能。对于日期的数据格式敏感---默认的日期格式是 DD-MON-RR查询17-11月-81入职的员工select * from emp where hiredate='17-11月-81'--查询参数设置v$打头的数据字典:参数设置,性能相关更改日期数据格式:alter session set NLS_DATE_FORMATE="DD-MON-RR"and:1、含边界2、小值在前,大指在后in:在集合中(not in不在集合中)结论是:如果集合中含有null,不能使用not in操作符,可以使用inlike :模糊查询---查询名字中含有下划线的员工---转义字符----排序----查询员工信息,按照月薪排序select * from emp oder by desc;----order by后面+列名 表达式 别名 序号----查询员工信息按照奖金排序select * from emp order by comm------设置页面大小set pagesize 20------如何怎么null排到最后 nulls last 1、管理员登陆sqlplus sys/你的密码 sysdba2、解锁alter user scott account unlock;改密码alter user scoot identified by 新密码单行函数只对一行进行变换,每行只会返回一个结果-----字符函数-----大小写select lower(‘hello world’)转小写initcat首字母大写length字符数 lengthb字节数instr在木传中查找字串的位置,找到返回下标 (从1开始)找不到返回0lpad左填充rpad右填充trim去掉前后指定的字符replace替换数字函数round函数:四舍五入trunc 截断modp----monh 出售放入月数隐式转换的前提:被转换的对象是可以被转换的----to_char转换日期转换----通用函数nvl2(a,b,c)当a=null时,返回c,否则返回bnullif(a,b)当a=b时,返回null,否则返回aCOALESCE:从左到右,找到第一个不为null的值-----条件表达式----涨工资:总裁1000,经理800,其他400select ename,job,sal涨前的工资 case job when‘PERSIDENT’ THEN SAL+1000,select ename,job,sal涨前的工资 decode(‘job’ ‘presdent’ sal+1000 default )-----分组函数组函数会自动滤空count看的是一行NVL是无法忽略空值的-----分组:group by在select中必须在group by中-----having过滤分组不能在where中使用组函数能在having能使用组函数。group by的增强rollupgroup by rollupsqlplus支持报表功能------多表查询笛卡尔积 列数相加,行数相乘至少有n-1个连接条件(n是表的个数)在实际运行环境中我们应该避免使用笛卡尔积全集Equijoin等值连接:查询员工信息:员工号,姓名,月薪,部门名称不等值连接:查询员工信息:员工号 姓名 月薪外连接左外连接:当 where e.deptno=d.deptno不成立时,等号左边的表达式的表的信息仍然被包含写法:where e.deptno=d.deptno(+)右外连接:当 where e.deptno=d.deptno不成立时,等号右边的表达式的表的信息仍然被包含写法:where e.deptno(+)=d.deptno自连接:通过的表的别名将同一张表视为多张表,然后使用对应的连接操作层次查询connect-----子查询:问题不能一步求解定义子查询:子查询(内查询)在主查询前一次完成子查询的结果被主查询使用select * from emp where sal>(select sal from emp where ename='scott')注意问题:1、采用合理的书写风格2、需要把子查询放在括号里面3、可以在主查询的where select from having子句后面可以放子查询4、不可以在主查询的group by后面放子查询5、强调在from后面子查询6、一般在查询中用order by;但在top-N分析中必须使用order by7、主查询和子查询可以不是同一张表,只要子查询返回的结果主查询可以使用即可8、一般来讲先执行子查询,在执行主查询;但相关查询除外9、单行子查询只能使用单行操作符;多行子查询只能使用多行操作符----在select后面的子查询必须是单行子查询select ename ,job,(select sal from emp where empno=7893);----强调在form后面放置子查询----查询员工的姓名和薪水select * from( select ename,sal from emp)-----多行子查询in:在集合中----查询部门名称为sales和accounting的员工信息select * from emp where deptno(select deptno fromd ept where dname=‘sales’ or dname=‘accounting’)any:和集合的任意值比较-----查询工资比20号部门任意一个员工的工资高select * from emp where sal > any(select sal from emp where deptno=20)all:和集合的所有值比较select * from emp where sal> all(select sal from emp where deptno=20)------多行子查询中的空值rownum必须只能<=不能使用>=-----相关子查询:将主查询的某个值,作为参数传递给子查询组函数wm_concat行转列3、集合运算union/union allMINUS注意的问题:1、参与运算的各个集合必须列数相同,且类型一致2、最终的而结果采用第一个集合的表头作为表头3、如果要排序,必须在每个集合后面使用相同的order by4、可以使用括号执行的顺序处理数据SQL的类型:1、DML(data manipulation lanaguage )数据操作语言:insert,update,selected,delecte2、DDL:数据定义语言createtable ,droptable,altertable,truncatetable3、DCL:数据控制语言:commit rollback----隐式插入空值----显示插入空值-----如何一次插入多条数据select中的列必须和insert中的列相对应。delete和trancate区别:1、delete逐条删除,trancate先摧毁表在冲击啊2、delete会产生碎片,trancate不会3、delete不会释放空间,trancate不会4、delete可以被闪回,trancate不会被闪回----Oracle中的事务1、起始标志:DML语句(自动开启)2、结束标志:提交: 显示提交 commit 饮食提交 DDL正常退出 回滚:显示回滚:rollback隐式回滚:掉电 ,宕机,非正常退出事物的隔离级别oracle的隔离级别有3个,标准的是两个,readonly是oracle自己实现的-----oracle的回收站purge recyclebin;回收站清空其他数据库对象视图 从表中抽取的逻辑上相关的数据集合视图不能提高查询效率的,要提高视图的效率只能优化SQL语句。视图建立在已存在的表上,这些已存在的表称为是视图的基表不通过视图操作组函数,group by,order by序列:可供多个数据提供唯一数值的数据库对象。序列的不连续:1、cache值,停电2、序列是公有对象3、回滚rollback索引:提高查询效率oracle中的索引1、b树索引2、位图索引PLSQL给员工涨工资jdbc:result rs=“select empno,jop from emp”;while (rs.next()){ int eno=rs.getInt("empno");}PLSQL打印hello worlddeclare-----说明部分 变量声明begin -----程序包dbms_output.put_line('Hello world');end;/打开输出开关set serveroutput on指在SQL命令语言中加入了过程处理语句,使SQL语言具有过程处理能力IF语句IF条件THEN语句ELSIF语句THEN语句;ELSE 语句;END IF;set serveroutput onaccept num :=#declarepnum:=#begin if pnum=0 then dbms_-----存储过程调用存储过程1、exec sayHello();2、begin sayHell0(); end;/in和out一般来讲,过程和函数的区别在于函数可以有一个返回值;而过程没有返回值。但过程和函数都可以通过------触发器可用于数据的确认实施复杂的安全性检查跟踪数据操作