甲骨文数据库oracle个人学习(sql部分)
- 格式:pdf
- 大小:875.16 KB
- 文档页数:21
甲骨文数据库oracle个人学习(SQL)BY BINGOSUMMER一、L ESSON11.sql*plus & isql*plusOracle 11g 中已经去掉了isql*plus功能,即不用通过http://IP:5560/isqlplus打开2.连字运算符|| :连字符两边的列被合并成一个单个的输出列。
select last_name || job_id AS employees from employees;3.文字字符串select last_name || ‘is a ‘|| job_id as employees from employees;单引号包括起来。
4.去掉相同的行:关键字:distinctselect distinct department_id from employees;5.描述表describe tablename二、L esson21.where字符串和日期,包括在单引号之中。
数字不包括在单引号之中。
所有的字符搜索是大小写敏感的。
日期格式为DD-MON-RR别名不能用在WHERE中。
2.between必须先指明下限,如where department_id between 2500 and 3500;3.in如果IN条件中的成员是字符或日期,必须在单引号之中。
4.LIKE% 表示0个或多个字符_ 表示一个字符。
搜索%或_字符,要用转义符”\”,如\%,\_5.IS NULL不能用=null来表示6.优先规则算术运算>连字操作>比较操作>IS (NOT) NULL ,LIKE, (NOT) IN>(NOT)BETWEEN>NOT>AND>OR7.ORDER BY可以依别名来排序默认是升序ASC,也可以是降序DESC可以多列排序,逗号分隔三、L ESSON31.SQL单行函数仅对单个行进行去处,并且每行返回一个结果。
包括:字符、数字、日期、转换接收一个或多个参数,并且对查询的每个返回行返回一个值,值可以是:用户提供的常数、变量值、列名、表达式。
语法:function_name[arg1,arg2]2.字符函数UPPER\LOWER\INITCAPCONCAT\SUBSTR\INSTR\LPAD\RPAD\TRIM3.数字函数round/trunc/mod4.DUAL 虚拟表其所有者是SYS用户,并且可以被所有用户访问,它只包含一列。
通常用于SELECT子句语法的完整。
四、l esson41.从多表中获得数据1)笛卡尔乘积:为了避免笛卡尔乘积的形成,在WHERE 子句中应当总是包含正确的连接条件2)为了连接N个表在一起,最少需要N-1个连接条件。
2.等值连接(简单连接或内连接)3.如果列名在两个表之间不相同,就不需要限定列,但是,使用表前缀可以改善性能。
4.对于表,可以使用别名。
表别名有助于保持SQL代码较小,因此使用的存储器也少。
5.用外连接返回不直接匹配的记录。
如果一个行不满足连接条件,该行将不出现在查询结果中。
可以使用一个外连接查看那些不满足连接条件的行。
外连接运算符号是(+)(+)放在连接的缺少信息的一侧。
6.自然连接(natural join)从两个表中选择在所有的匹配列中有相等值的行。
如果列有相同名字,但数据类型不同,则会返回一个错误。
自然连接相当于创建“等值连接”ING 子句USING子句可以被用来指定哪些将被用于一个等值连接的列中的唯一列。
在USING子句中引用的列不应用在SQL语句的任何地方用表名或表别名限制(前缀)8.ON子句用于自然连接的连接条件9.三向连接连接被从左到右执行。
select 1.a,2,b,3,c from 1join 2on 1.a=2.a [using (a)]join 3on 2.b=3.b [using (b)]10.内与外连接连接两个表,仅返回匹配的行的连接,称为内连接在两个表之间的连接,返回内连接的结果,同时还返回不匹配行的左(或右)表的连接,称为左(或右)连接在两个表之间的连接,返回内连接的结果,同时还返回左和右连接,称为全连接左连接:left outer join b on (a.1=b.1) 相当于:where a.1 = b.1(+)右连接:right outer join b on (a.1=b.1) 相当于:where a.1(+) = b.1全连接:full outer join b on (a.1=b.1) 相当于:where a .1 = b.1(+) union{ select ..from..} where a.1(+)= b.1五、L esson51.group by 语句把表中的行划分为组,再可以用组函数返回每一组的摘要信息。
在GROUP BY 子句中不能使用列别名。
在GROUP BY 列表中的字段的升序排序。
group by 中的列不必在SELECT 列表中。
在同一个SELECT语句中使用单独的列和组函数的混合时,必须包括一个GROUP BY子句来指定单独的列。
不能用WHERE 子句来约束分组,但可以用HAVING 子句来约束分组。
建议先用GROUP BY 子句,再调用HAVING 子句,更合逻辑。
六、L ESSON6 子查询1.子查询的原则1)子查询放在圆括号中2)将子查询放在比较条件的右边。
3)在子查询中不需要ORDER BY 子句,除非正在执行TOP-N分析4)先执行内查询(子查询),再执行外查询,将内查询作为外查询的条件。
2.单行子查询1)仅返回一行。
2)使用单行比较符(=、>,<,>=,<=,<>)3)避免子查询错误:在单行子查询中返回了多行结果。
如SELECT employee_id, last_name FROM employees WHERE salary =(SELECTMIN(salary) FROM employees GROUP BY department_id);3.带子查询的HAVING子句1)首先执行子查询,返回结果到主查询的HAVING子句中。
4.多行子查询。
用IN,ANY,ALL多行比较符。
<any 小于最大值>any 大于最小值<all 小于最小值>all 大于最大值=any 相当于in如果子查询返回的结果可能返回有空值,则不能使用NOT IN 比较符。
其相当于<>all。
比较一个空值的所有条件结果还是空。
七、l esson 7八、l esson 8 操纵数据1.insert into tablename(column1,column2..) values (value1,value2..)ORACLE服务器自动强制所有数据类型、数据范围和数据完整性约束。
在插入新行时,任何没有被明确列出的字段都将获得一个空值。
在SQL语句中使用& 替换变量提示用户输入值。
运行脚本文件,可以使用&变量2.update tablename set column 1=value1 where condition如果省略了where 语句,会更新所有行。
可以在set 中使用子查询,将子查询得到的结果返回给set value中。
3.delete & truncate1)delete from tablename where condition如果没有where语句,将删除表中所有行。
2)delete语句删除后,只有表的数据结构被保留,清空表的另一个更有效的方法是用truncate。
truncate快速删除表中的所有行。
不产生回退信息。
3)注意删除时完整性约束。
不能删除包括主键的行,该主键被用来另一个表的外键。
如果完整性约束包含了on delete cascade 选项,那么可以删除行,并且所有相关的子表记录都被删除。
4.merge语句1)可以有条件地更新或插入行到表中,这样就避免多重UPDATE语句。
是执行更新操作还是执行插入操作,取决于ON子句中的条件。
2)同一个MERGE语句中,不能多次更新目的表中相同的行。
3)merge into table_nameusing (table|view|sub_query)on (join condition)when matched thenupdate setcol1=col_val1,col2=col_val2…when not matched theninsert (column_list)values(column_values);4)数据库事务处理A.DML 数据库操纵语言:由许多DML语句组成。
ORACLE服务器将他们视为一个单个整体或一个逻辑工作单元。
对数据进行永久的改变。
B.DDL:数据定义语言,由单个的DDL语句组成DDL不能回滚C.DCL:数据控制语言,由单个DCL语句组成。
D.下列情况事务结束:commit 或rollback语句发布ddl或dcl语句发布E.显示控制事务语句commitsavepoint namerollbackrollback to savepoint nameF.隐式事务处理如果automatic commit命令被设置为ON,每个单个的DML语句在执行后被立即提交,不能回滚所做的改变。
如果automatic 命令被设置为off,commit仍然能够被显式地发布。
当一个事务被系统故障中断时,整个事务被自动回滚。
返回表到他们上一次提交时的状态。
mit 或rollback提交之前数据的状态数据操纵操作首先影响数据库缓冲区,因此,数据以前的状态可以被恢复。
当前用户可以查询表观察到数据操纵操作的结果。
其他用户不能观察到当前用户所做的数据操纵操作的结果。
Oracle服务器用读一致性来确保每个用户看到的数据和上次提交时相同。
受影响的行被锁定;其他用户不能改变受影响的行中的数据。
mit 提交之后数据的状态数据的改变被写到数据库中。
数据以前状态永久地丢失。
所有用户都可以观察到事务的结果。
受影响的行上的所被释放;其他用户现在可以对行进行新的数据改变。
所有保存点被释放。
I.rollback提交之后数据的状态数据的改变被还原数据以前的状态被恢复受影响的行上的锁被释放如果一个语句的执行错误被发现,一个事务的一部分可以用隐式的回退丢弃。
其他已经被执行的DML语句不能被隐式丢弃,可以由用户显示地提交或回滚。
5)读一致性其目的是确保每个用户看到的数据和他最后一次提交,并且在一个DML操作开始之前的数据一样。
在对数据库进行一个插入、更新或删除时,ORACLE服务器在数据改变之前获得相关数据的拷贝,并且将这些数据写到一个回退段(undo segment),除了修改者看到的是自己修改后的结果,其他用户都看到的是这个回退段的快照。