




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Oracle数据库根底山东众阳软件张目录Oracle数据库概述SQL根底处置数据第三方工具简单运用.Oracle数据库概述.Oracle〔甲骨文〕公司是世界上最大的企业软件公司,主要向全球用户提供数据库、工具和运用软件以及相关的咨询、培训和支持效力。Oracle数据库〔OracleDatabase〕是甲骨文公司推出的关系型数据库产品,是世界上运用最为广泛的数据库管理系统,到目前仍旧在数据库市场上占有主要份额。.关系型数据库:引见关系型数据库:简而言之就是关系/二维表的集合。Oracle数据库表名:EMPLOYEES表名:DEPARTMENTS.关系型数据库:表的术语2.主键3.列4.外键6.空值1.行5.域空值既不是空格也不是0.多表关联表中每一行数据均由主键保证独一性。多表经过外键关联表:EMPLOYEES表:DEPARTMENTS主键主键外键….Oracle的总体框架构造.Oracle实例一个oracle实例由一系列的后台进程和内存构造组成当启动实例的时候,oracle会开辟一块内存〔SGA〕用于存放数据库信息,并启动后台进程,SGA内的信息是被后台进程所共享的。实例和数据库的关系实例是“内存〞和“后台进程〞的集合,“数据库〞是数据的物理存储,要特别留意,一个实例可以用于一个数据库,多个实例也可同时用于一个数据库〔RAC〕,实例和数据库是多对一的关系。.Oracle的内存构造Oracle的内存由PGA〔ProgramGlobalArea〕和SGA〔SystemGlobalArea〕组成。PGA中包括效力器进程的数据和控制信息,其中的信息是不被共享的。SGA中包括数据库实例的数据和控制信息,是可以被共享的。SGA被划分成多个区域,主要的区域如下:数据库高速缓冲区〔DatabaseBufferCache〕,用于存放数据文件的副本,一切的用户进程都可以并发的衔接到这个实例,共享数据库高速缓冲区中的数据。共享池〔SharedPool〕又分为库缓冲区〔LibraryCache〕和字典缓冲区〔DictionaryCache〕。库缓冲区用于存放运用过的sql,包括这些sql语句的执行方案及这些sql的语法分析树。数据库对象的信息存储在数据字典表中,包括用户账号数据、数据文件名、段名、盘区位置、表的阐明和权限等,当数据库需求这些信息时就会读取数据字典并将这些信息存储在字典缓冲区中。重做日志缓冲区〔RedoLogBuffer〕用于存放用户对数据库的改动,这是一片循环运用的内存区域。.oracle的存储构造Oracle的存储构造分为物理存储构造和逻辑存储构造。物理存储构造由数据文件、联机日志文件、控制文件构成,这些是数据库严厉意义上的“物理构造组成〞,除此之外,组成oracle的还有其他的一些文件。Oracle存储的逻辑构造由数据块〔DataBlock〕、区〔Extent〕、段〔Segment〕和表空间〔Tablespace〕组成,块是最根本的存储单元,它们是一个自下而上的逻辑构造。.数据块.数据块数据块由块头、表目录、行目录、行数据和空余空间五部分组成。我们又把块头、表目录、行目录合称为头部信息区,存放块的信息而不存放数据。数据块与操作系统块不同,但是又有关系,一个数据块的大小是操作系统块大小的整数倍。行链接:假设插入的一行数据很大以致于一个块存不下,oracle就会把一行数据分成几段存在数据块中,这个过程叫行链接。行迁移:数据块中存在一条记录,update操作使记录变长,而当前块没有足够的空间包容这条记录,无法之下,只能把整行数据移到一个新的数据块中,并在原数据块中留下一个指针指向新的数据块,被挪动的数据的rowid坚持不变,这就是行迁移。留意行链接和行迁移都会影响数据库的性能。.区和段区是数据库的一个逻辑存储单元,它由延续的数据块组成,特别强调的是区是一段延续的存储空间,当段中的空间耗尽时oracle会分配一个新的区给这个段。可以经过存储参数来控制区的分配。段是存放数据的逻辑存储单元,由一系列的区组成,包括数据段、索引段、暂时段、回滚段等。.表空间系统默许创建的是小文件表空间,是传统的表空间类型。大文件表空间由一个单独的很大的数据文件组成,使oracle可以运用和管理超级大的文件。系统表空间〔SYSTEM〕:存放数据字典的数据,一旦翻开数据库,系统表空间必需在线。辅助表空间〔SYSAUX〕:对系统表空间的补充,存放数据库组件的信息,必要时可分担系统表空间的负载。回滚表空间〔UNDOTBS〕:存放回滚数据。每个数据库可以有多个回滚表空间,但只能有一个活动的。暂时表空间:是暂时存放数据的地方,创建用户的时候应该给用户指定一个暂时表空间。USERS表空间:假设创建用户时没有运用DEFAULTTABLESPACE关键字指定默许表空间,oracle会将其指定给用户作为默许表空间。.SQL根底.什么是SQL?SQL:构造化查询言语 (StructuredQueryLanguageSQL)是访问Oracle数据库中数据的描画方法SQL言语主要提供下述功能:查询表中数据行插入、修正、删除表中的数据行创建、修正、删除数据库对象保证数据库的一致性和完好性控制数据库及其访问.主要的SQL语句SELECTINSERTUPDATEDELETEMERGECREATEALTERDROPRENAMETRUNCATECOMMITROLLBACKSAVEPOINTGRANTREVOKE数据获取数据处置言语(DML)数据定义言语(DDL)事务控制言语(TCL)数据控制言语(DCL)COMMENT.根本SQLSELECT语句SELECT*|{[DISTINCT]column|expression[alias],...}FROMtable[WHEREcondition(s)][ORDERBY{column,expr,alias}[ASC|DESC]];在最简单的方式中,SELECT语句必需包含下面的内容:一个SELECT子句,指定被显示的列一个FROM子句,指定表,该表包含SELECT子句中的字段列表.选择一切列与指定列SELECT*FROMdepartments; 用SELECT关键字后面的星号(*),可以显示表中数据的一切列。SELECTdepartment_id,location_idFROMdepartments; 用SELECT语句来显示表的指定列,指定列名之间用逗号分隔。SELECT后也可以指定伪列,一个伪列的行为像表中的列一样,但不是真的存储在表中。不能插入或删除伪列的值。一些可用的伪列如下:CURRVAL、NEXTVAL、LEVEL、ROWID和ROWNUM。.算数运算符用算术运算符创建数字和日期数据的表达式上表列出了SQL提供的算术运算符。除了FROM子句,他可以在任何一个SQL语句的子句中运用算术运算符,留意优先级。对于日期数据,只能对DATE和TIMESTAMP数据类型运用加和减操作。操作+-*/说明加减乘除.空值null是一个未分配的、未知的值,既然是未知的,就有无数种能够性null不是0,也不是空格判别一个字段能否为NULL,应该用ISNULL或ISNOTNULL,而不能用‘=’,同样的,对NULL的!=、>、<、>=、<=等操作的结果都是未知的,也就算说,这些操作的结果依然是NULL包含空值的算术表达式计算结果为空
总结:除了ISNULL、ISNOTNULL以外,对NULL的任何操作的结果还是NULL.经典的例子SQL> CREATEORREPLACEPROCEDUREP1(P_ININNUMBER)AS
2BEGIN
3IFP_IN>=0THEN
4DBMS_OUTPUT.PUT_LINE('TRUE');
5ELSE
6DBMS_OUTPUT.PUT_LINE('FALSE');
7ENDIF;
8END;
SQL> CREATEORREPLACEPROCEDUREP2(P_ININNUMBER)AS
2BEGIN
3IFP_IN<0THEN
4DBMS_OUTPUT.PUT_LINE(‘FALSE’);
5ELSE
6DBMS_OUTPUT.PUT_LINE(‘TRUE’);
7ENDIF;
8END;
假设传入的是null值,结果是什么呢?.定义列的别名列别名:改动列标题的名字可用于计算结果跟在列名后面或在列名和别名之间运用AS关键字假设别名中包含有空格、或特殊字符、或大小写敏感,要求用双引号SELECTlast_nameASname,commission_pctcommFROMemployees;.连字运算符连字运算符:衔接列或者字符串到其它的列用两个竖线表示(||)构造一个字符表达式的合成列SELECTfirst_name||last_nameASEmployeesFROMemployees;.文字字符串文字字符串是包含在SELECT列表中的一个字符串,一个数字或者一个日期日期和字符的文字字符串值必需用单引号括起来每个文字字符串在每行输出一次
SELECTlast_name||'isa'||job_idAS“EmployeeDetails〞FROMemployees;.运用WHERE子句 用WHERE子句限制前往的行SELECT*|{[DISTINCT]column|expression[alias],...}FROMtable[WHEREcondition(s)];WHERE子句跟着FROM子句WHERE限制查询满足条件的行condition由列名、表达式、常数和比较操作组成WHERE子句可以比较列值、文字值、算术表达式或者函数,WHERE子句由三个元素组成:列名,比较条件,列名、常量或值列表。.字符串和日期WHERE子句中:字符串和日期的值必需包含在单引号中,但是,数字常数不应该包含在单引号中字符串的值是大小写敏感的,日期值是格式敏感的日期的默许格式是DD-MON-RR.
SELECTlast_name,job_id,department_idFROMemployeesWHERElast_name='Whalen';.比较条件 运算含义=等于>大于>=大于等于<小于<=小于等于<>!=^=不等于 比较条件被用于一个表达式与一个值或与另一个表达式的比较。 ...WHEREhire_date='01-JAN-95' ...WHEREsalary>=6000 ...WHERElast_name='Smith'.其他比较条件(一) 操作含义BETWEEN...AND...在两个值之间(包含)IN(set)匹配一个恣意值列表LIKE匹配一个字符模板ISNULL是一个空值 运用BETWEEN: SELECTlast_name,salary FROMemployees WHEREsalaryBETWEEN2500AND3500; 运用IN: SELECTemployee_id,last_name,salary,manager_id FROMemployees WHEREmanager_idIN(100,101,201);.其他比较条件(二)运用LIKE条件运用LIKE条件执行有效搜索串值的通配符搜索搜索条件既可以包含文字也可以包含数字:%表示恣意顺序的零个或多个字符_表示一个字符SELECTfirst_nameFROMemployeesWHEREfirst_nameLIKE'%S_';运用NULL条件用ISNULL操作来测试空值SELECTlast_name,manager_idFROMemployeesWHEREmanager_idISNULL;NULL条件,包括ISNULL条件和ISNOTNULL条件。.逻辑条件 运算含义 AND假设两个组成部分的条件都为真,前往TRUE OR假设两个组成部分中的任一个条件为真,前往TRUE NOT假设跟随的条件为假,前往TRUE 可以在WHERE子句中用AND和OR运算符运用多个条件。 假设要得到正确的结果:运用AND时要求两个条件同时为真运用OR时要求两者或多者之一为真即可NOT运算符那么可以用于另一个SQL运算符,例如,IN、BETWEEN、LIKE、和NULL。留意:表达式NOT(column_nameISNULL)是正确的.优先规那么表达式求值顺序1算术运算2连字操作3比较操作4IS[NOT]NULL,LIKE,[NOT]IN5[NOT]BETWEEN6NOT逻辑条件7AND逻辑条件8OR逻辑条件运用圆括号改动优先规那么.集合操作UNION
由每个查询选择的一切不反复的行,即 并集不包含反复值
UNIONALL
由每个查询选择的一切的行,包括一切 反复的行完全,即并集包含反复值
INTERSECT
由每个查询选择的一切不反复的相交行 即交集
MINUS
在第一个查询中,不在后面查询中,并 且结果行不反复,即差集.ORDERBY子句用ORDERBY子句排序–ASC:升序排序,默许–DESC:降序排序语法:SELECTexprFROMtable[WHEREcondition(s)][ORDERBY{column,expr}[ASC|DESC]];留意:ORDERBY子句在查询完成后执行,假设运用了ORDERBY子句,它必需位于SQL语句的最后。可以指定一个表达式,或者一个别名,或者列序号作为排序条件。.SQL函数函数是SQL的一个非常强有力的特性,函数可以用于下面的目的:执行数据计算修正单个数据项支配输出进展行分组格式化显示的日期和数字转换列数据类型SQL函数有输入参数,并且总有一个前往值。.SQL函数(续)函数分为单行函数和多行函数单行函数 仅对单个行进展运算,并且每行前往一个结果。 我们主要讨论以下几种常用的函数类型:字符数字日期转换多行函数可以支配成组的行,每个行组给出一个结果,这些函数也被称为组函数。.单行函数单行函数:支配数据项接受多个参数〔列或者表达式〕,并前往一个值作用于每一个前往行每行前往一个结果可以修正数据类型可以嵌套.单行函数(续)常用的单行函数:字符函数:接受字符输入,可以前往字符或者数字值数字函数:接受数字输入,前往数字值日期函数:对DATE数据类型的值进展运算(除了MONTHS_BETWEEN函数前往一个数字,一切日期函数都前往一个DATE数据类型的值。)转换函数:从一个数据类型转换为另一个数据类型通用函数:NVL、NVL2、NULLIF、COALSECE、CASE、DECODE.字符函数字符函数可以被分为大小写处置和字符处置两种:大小写处置函数如下:LOWER(column|expression) 转换字符值为小写 UPPER(column|expression) 转换字符值为大写 INITCAP(column|expression)转换每个单词的首字母值为大写,一切其它值为小写字符处置函数如下: CONCAT(column1|expression1,column2|expression2) 衔接第一个字符值到第二个字符值;等价于衔接运算符(||)SUBSTR(column|expression,m[,n]) 从字符值中前往指定的字符,开场位置在m,n字符长度(假设m是负数,计数从字符值末尾开场;假设n被忽略,前往到串终了的一切字符)。.字符函数〔续〕LENGTH(column|expression)前往表达式中的字符数INSTR(column|expression,’string’,[,m],[n]) 前往一个命名串的数字位置。随意地,他可以提供一个位置m作为查找的开场,在字符串中第n次发现的位置。m和n的默许值是1,意味着在起始开场查找,并且报告第一个发现的位置。 LPAD(column|expression,n,'string')RPAD(column|expression,n,'string') 填充字符值左、右调理到n字符位置的总宽度 TRIM([leading|trailing|both]trim_characterFROMtrim_source)使他可以从一个字符串修整头或尾字符(或两者)。假设trim_character或trim_source是字符文字,他必需放在单引号中。REPLACE(text,search_string,replacement_string)从字符串查找一个文本表达式,假设找到,用指定的值串替代它.字符函数(续) 函数结果 CONCAT('Hello','World')HelloWorld SUBSTR('HelloWorld',1,5)Hello LENGTH('HelloWorld')10 INSTR('HelloWorld','W')6 LPAD(salary,10,'*')*****24000 RPAD(salary,10,'*')24000***** TRIM('H'FROM'HelloWorld')elloWorld.数字函数ROUND(45.926,2)45.93TRUNC(45.926,2)45.92MOD(1600,300)100 ROUND(column|expression,n) 四舍五入列、表达式或值为n位小数位,假设n被忽略,无小数位。(假设n是负值,小数点左边的数被四舍五入)。TRUNC(column|expression,n) 截断列、表达式或值到n位小数,假设n被忽略,那么n默以为0。MOD(m,n) 前往m除以n的余数。常用于确定一个数是奇数还是偶数。.日期的运用Oracle数据库用内部数字格式存储日期:世纪,年,月,日,小时,分钟和秒,其内部存储格式举例如下: CENTURYYEARMONTHDAYHOURMINUTESECOND 2016071592043默许日期显示格式是DD-MON-RR.
SYSDATE函数前往:•Date•TimeSYSDATE是一个日期函数,它前往当前数据库效力器的日期和时间。SELECTSYSDATEFROMDUAL;.用日期计算既然数据库以数字方式存储日期,那么就可以用算术运算符进展计算,例如,加或减。日期可以加或减数字常数以及日期,如下例如:运算 结果 阐明 date+number 日期加一个天数到一个日期上date-number 日期从一个日期上减一个天数date-date 天数用一个日期减另一个日期date+number/24日期加一个小时数到一个日期上从日期加或者减一个数,结果是一个日期值两个日期相减,得到两个日期之间的天数用小时数除以24,可以加小时到日期上.日期函数 函数说明 MONTHS_BETWEEN两个日期之间的月数 ADD_MONTHS加日历月到日期 NEXT_DAY下个星期几是几号 LAST_DAY指定月的最后一天 ROUND四舍五入日期 TRUNC截断日期.日期函数(续)MONTHS_BETWEEN(date1,date2):计算date1和date2之间的月数,其结果可以是正的也可以是负的。假设date1大于date2,结果是正的,反之,结果是负的。结果的小数部分表示月的一部分。ADD_MONTHS(date,n):添加n个日历月到date。n的值必需是整数,但可以是负的。NEXT_DAY(date,‘char’):计算在date之后的下一个周(‘char’)指定天的日期。char的值能够是一个表示一天的数或者是一个字符串。LAST_DAY(date):计算包含date的月的最后一天的日期ROUND(date[,‘fmt’]):前往用格式化方式fmt四舍五入到指定单位的date,假设格式方式fmt被忽略,date被四舍五入到最近的天。TRUNC(date[,‘fmt’]):前往用格式化方式fmt截断到指定单位的带天的时间部分的date,假设格式方式fmt被忽略,date被截断到最近的天。.运用日期函数MONTHS_BETWEEN(‘01-SEP-15’,‘11-JAN-14’) 19.6774194ADD_MONTHS(‘11-JAN-16’,6) '11-JUL-16'NEXT_DAY(‘01-SEP-15’,‘3’)下个星期二是几号 '08-SEP-15'LAST_DAY('01-FEB-16') '29-FEB-16'.运用日期函数(续)假定SYSDATE='25-JUL-95':ROUND(SYSDATE,'MONTH')01-AUG-95ROUND(SYSDATE,'YEAR')01-JAN-96TRUNC(SYSDATE,'MONTH')01-JUL-95TRUNC(SYSDATE,'YEAR')01-JAN-95TRUNC(TO_DATE('25-JUL-95'),'YEAR') 01-JAN-95.转换函数数据类型转换隐式数据类型转换显式数据类型转换对于直接赋值,Oracle效力器可以自动地进展下面的转换: 从 到 VARCHAR2orCHAR NUMBER VARCHAR2orCHAR DATE NUMBERVARCHAR2 DATEVARCHAR2对于表达式赋值,Oracle效力器能自动地进展下面的转换: 从 VARCHAR2orCHAR到 DATE 从 VARCHAR2orCHAR到 NUMBER.转换函数(续)显式数据类型转换SQL提供三种函数来从一种数据类型转换值到另一种:TO_CHAR(number|date[,fmt][,nlsparams]) 转换一个数字或日期值为一个VARCHAR2字符串,带格式化款式fmt。数字转换:nlsparams参数指定下面的字符,它由数字格式化元素前往:小数字符 99999.99前导0 09999本地货币符号 L9999国际货币符号 $9999假设忽略nlsparams或其它参数,该函数在会话中运用默许参数值。.转换函数(续)转化字符串到数字TO_NUMBER(char[,'format_model'])转化字符串到日期TO_DATE(char[,'format_model'])格式模板必需放在单引号中。常用日期格式的模板 YYYY/MM/DDHH24:MI:SSselectto_timestamp('2021-07-1615:13:28.45','yyyy-mm-ddhh24:mi:ss.ff')fromdual;.通用函数以下函数可用于恣意数据类型,并且适用于空值NVL(expr1,expr2)NVL2(expr1,expr2,expr3)NULLIF(expr1,expr2)COALESCE(expr1,expr2,...,exprn)NVL转换空值为一个实践值。NVL2假设expr1非空,前往expr2;假设expr1为空,前往expr3。NULLIF比较两个表达式,假设相等前往空;假设不相等,前往第一个表达式COALESCE前往表达式列表中的第一个非空表达式。.条件表达式在SQL语句中提供IF-THEN-ELSE逻辑的运用。两种用法:–CASE表达式–DECODE函数CASE表达式CASEexpr WHENcomparison_expr1THENreturn_expr1 WHENcomparison_expr2THENreturn_expr2 WHENcomparison_exprnTHENreturn_exprn ELSEelse_expr]END.CASE运用例如 SELECTlast_name,job_id,salary, CASEsalary WHEN‘5000'THEN1.10*salary WHEN‘4000'THEN1.15*salary WHEN‘3500'THEN1.20*salary ELSEsalary END"REVISED_SALARY" FROMemployees;.DECODE函数 DECODE(col|expression,search1,result1[,search2,result2,...,][,default]) DECODE函数在比较表达式(expression)和每个查找(search)值后解码表达式,假设表达式与查找一样,前往结果。 假设省略默许值,当没有查找值与表达式相匹配时前往一个空值。SELECTlast_name,job_id,salary,DECODE(salary,‘5000’,1.10*salary,‘4000’,1.15*salary,‘3500’,1.20*salary,salary) REVISED_SALARYFROMemployees;.多表衔接查询衔接表的方式:内衔接外衔接〔左外衔接、右外链接〕全衔接〔全外衔接〕内衔接(innerjoin)实践上就是等值衔接,表中作为衔接条件的列的值必需相等,前往2个表中完全符合条件的记录。外衔接〔outerjoin〕除了显示匹配相等衔接条件的数据外,还可以显示基于某一个表中无法匹配相等衔接条件的记录。全衔接〔fulljoin〕的查询结果是左外衔接和右外链接查询结果的并集,即使是记录关联不上,也会把这部分信息查询出来。
.外衔接语法外衔接运算符是加号(+)SELECTt1.column,t2.columnFROMt1,t2WHEREt1.column(+)=t2.column;SELECTt1.column,t2.columnFROMt1,t2WHEREt1.column=t2.column(+);外衔接可以从一个表中前往那些在另一个表中没有直接匹配的行外衔接操作符是一个在圆括号中的加号(+),它被放置在衔接的短少信息的一侧。为了使来自不完善表的一行或多行可以被衔接,该操作符有产生一个或多个空行的作用。.组函数组函数不象单行函数,组函数对行的集合进展操作,对每组给出一个结果。这些集合能够是整个表或者是表分成的组。 以下为常用的组函数,每个函数接纳一个参数: 函数 说明 AVG([DISTINCT|ALL]n) n的平均值,忽略空值COUNT({*|[DISTINCT|ALL]expr}) 计数,求除了空计算,*包括重 复和带空值的行。MAX([DISTINCT|ALL]expr) 最大值,忽略空值MIN([DISTINCT|ALL]expr) 最小值,忽略空值STDDEV([DISTINCT|ALL]x) n的规范差,忽略空值SUM([DISTINCT|ALL]n) 合计n的值,忽略空值VARIANCE([DISTINCT|ALL]x) n的方差,忽略空值.GROUPBY子句GROUPBY就是经过列将数据进展分组SELECTcolumn,group_function(column)FROMtable[WHEREcondition][GROUPBYgroup_by_expression][ORDERBYcolumn];在语法中,group_by_expression指定那些用于将行分组的列,这些列的值作为行分组的根据。运用WHERE子句,他可以在划分行成组以前过滤行。在GROUPBY子句中必需包含列。在GROUPBY子句中他不能用列别名。默许情况下,行以包含在GROUPBY列表中的字段的升序排序。他可以用ORDERBY子句覆盖这个默许值。.HAVING子句用HAVING子句约束分组,执行过程:假设语句有WHERE子句,效力器建立候选行行被分组运用组函数匹配HAVING子句的组被显示SELECTcolumn,group_functionFROMtable[WHEREcondition][GROUPBYgroup_by_expression][HAVINGgroup_condition][ORDERBYcolumn];.数据库对象表 根本存储单元,由行和列组成视图 逻辑地从一个或多个表中表示数据子集序列 数字值发生器索引 改善一些查询的性能同义词给对象可选择的名字还有其他的数据库对象,如存储过程、触发器、包、函数、约束等。.命名规那么表命名和列命名:•必需以字母开场•必需是1–30个字符长度•只能包含A–Z,a–z,0–9,_,$,和#•同一个用户所拥有的对象之间不能重名•不能用Oracle效力器的保管字留意:默许情况下名字是大小写不敏感的,例如,EMPLOYEES与eMPloyees或eMpLOYEES作为同一个名字来处置,oracle会自动转成大写。假设在创建时运用了“〞,那么oracle就会区分大小写。.Oracle数据库中的表•用户表:–由用户创建和维护的表的集合,包含用户信息•数据字典:–由Oracle效力器创建和维护的表的集合,包含数据库信息有四种数据字典视图,每一种有一个特定的前缀来反映其不同的目的。USER_这些视图包含关于用户所拥有的对象的信息。 ALL_这些视图包含一切用户可访问的表(对象表和相关的表)的信息。DBA_这些视图是受限制的视图,它们只能被分配有DBA角色的用户所访问。 V$ 这些视图是动态执行的视图,包含数据库效力器的性能、存储器和锁的信息。.常用数据类型数据类型说明VARCHAR2(size) 可变长度的字符数据〔最大为4000字符〕CHAR(size) 固定长度的字符数据〔默以为1,最大为2000〕NUMBER(p,s) 可变长度的数字数据DATE 日期和时间值TIMESTAMP(size) 时间戳,默许长度为6LONG 最大2G的可变长度字符数据CLOB 最大4G的字符数据RAWandLONGRAW 原始二进制数据BLOB 最大4G的二进制数据BFILE 最大4G的,存储在外部文件中的二进制数据ROWID一个64进制的数制系统,表示表中一行的独一 地址.CREATETABLE语句•用户必需有:–CREATETABLE权限–一个存储区域CREATETABLE[schema.]table(columndatatype[DEFAULTexpr][,...]);•必需指定:–表名–列名、列数据类型和列的大小schema与一切者的名字一样table表的名字DEFAULTexpr指定默许值column列的名字datatype列的数据类型和长度.用子查询创建表该方法既可以创建表还可以将从子查询前往的行插入新创建的表中。CREATETABLEdept80[(column[,column...])]ASSELECTemployee_id,last_name,salary*12ANNSAL,hire_dateFROMemployeesWHEREdepartment_id=80;被创建的表要带指定的列名,并且由SELECT语句前往的行被插入到新表中。字段的定义只能包括列名和默许值。假设给出了指定的列,列的数目必需等于子查询中列表的列数目。假设没有给出了指定的列,表的列名应和子查询中的列名一样。完好性规那么不会被传送到新表中,仅列的数据类型被定义。.ALTERTABLE语句用ALTERTABLE语句可以:•添加一个新列•修正一个已存在的列•为新列定义一个默许值•删除一个列添加列ALTERTABLEtableADD(columndatatype[DEFAULTexpr][,columndatatype]...);修正列ALTERTABLEtableMODIFY(columndatatype[DEFAULTexpr][,columndatatype]...);删除列ALTERTABLEtableDROP(column);.修正列可以改动列的数据类型、大小和默许值ALTERTABLEdept80MODIFY(last_nameVARCHAR2(30));对默许值的改动只影响后来插入表中的数据原那么可以添加宽度或一个数字列的精度。可以添加数字列或字符列的宽度。可以减少一个列的宽度,但仅在列中只包含空值或表中没有行时。可以改动数据类型,但仅在列中只包含空值时。CHAR列与VARCHAR2数据类型可以相互转换,但仅当列中只包含空值时,或者不改动列的大小时。对默许值的改动仅影响以后插入的列。.删除表留意:在表中的一切数据和构造都被删除任何未决的事务都被提交一切的索引被删除他不能回退DROPTABLE语句.子查询SELECTselect_listFROMtableWHEREexproperator(SELECTselect_listFROMtable);子查询放在圆括号中,在主查询之前执行一次将子查询放在比较条件的右边子查询的结果被用于主查询(外查询)在子查询中的ORDERBY子句普通不需求子查询可以被放在CREATEVIEW语句中、CREATETABLE语句、UPDATE语句、INSERT语句的INTO子句和UPDATE语句的SET子句中。.子查询类型单行子查询:从内SELECT语句只前往一行的查询多行子查询:从内SELECT语句前往多行的查询单行子查询仅前往一行,运用单行比较符运算符含义=等于>大于>=大于或等于<小于<=小于或等于<>不等于.多行子查询前往多于一行运用多行比较符操作含义IN等于列表中的任何成员ANY比较子查询前往的每个值ALL比较子查询前往的全部值<ANY意思是小于最大值,>ANY意思是大于最小值,=ANY等同于IN。<ALL意思是小于最小值,>ALL意思是大于最大值。.处置数据.DML-数据支配言语〔datamanipulationlanguage〕是SQL的一个中心部分,用于操作数据库中的数据,DML言语不隐含COMMIT语句,因此需求用户手动提交对数据库的修正。当他做下面操作时,DML语句被执行:–添加新行到表中〔增〕–删除表中的行〔删〕–修正表中的行〔改〕事务:由一系列的DML语句组成,成为一个逻辑任务单元。事务中的语句必需全部胜利,否那么必需全部回退。
.DML言语包括:INSERTUPDATEDELETESELECT〔DMLorDQL?〕MERGECALLEXPLAINPLANLOCKTABLE.INSERT语句语法运用INSERT语句添加新行到表中 INSERTINTOtable[(column[,column...])] VALUES(value[,value...]); 在语法中:table是表的名字column是表中的列名value是列的相应值用该语法一次只能插入一行.插入新行插入包含每一个列值的新行值以表中列的默许顺序列表在INSERT子句中字段可以随意列表INSERTINTOdepartments(department_id,department_name,manager_id,location_id)VALUES(70,'PublicRelations',100,1700);字符和日期要用单引号括起来.插入带空值的行隐式方法:省略字段列表中的列INSERTINTOdepartments(department_id,epartment_name)VALUES(30,'Purchasing');显式方法:在VALUES子句中指定NULL关键字INSERTINTOdepartments(department_id,department_name,manager_id,location_id)VALUES(100,'Finance',NULL,NULL);.插入特殊的值SYSDATE函数取出当前的日期时间insertintoemp(empno,ename,job,mgr,hiredate,sal,comm,deptno)values(7196,'GREEN','SALESMAN',7782,SYSDATE,2000,null,10);TO_DATE函数可作日期转换,插入特定的日期时间的值insertintoemp(empno,ename,job,mgr,hiredate,sal,comm,deptno)values(7196,'GREEN','SALESMAN',7782,TO_DATE('2021-06-0108:30:20',‘YYYY-MM-DDHH24:MI:SS')
,2000,null,10);.从另一个表中复制行创建带有子查询的INSERT语句INSERTINTOsales_reps(id,name,salary,commission_pct)SELECTemployee_id,last_name,salary,commission_pctFROMemployeesWHEREjob_idLIKE'%REP%';不要运用VALUES子句在子查询中列的数目要匹配INSERT子句中列的数目.UPDATE语句运用UPDATE语句更改现有的行UPDATEtableSETcolumn=value[,column=value,...][WHEREcondition];table是表的名字column是表中列的名字value是相应的值或对应列的子查询condition是where条件的内容,以此确定要被更新的行。用查询表来显示受更新的行以确认更新操作。假设需求,一次更新多行.更新表中的行假设运用了WHERE子句,指定的一行或多行将被修正UPDATEemployeesSETdepartment_id=70WHEREemployee_id=113;假设脱漏WHERE子句,表中一切的行都会被修正UPDATEcopy_empSETdepartment_id=110;.用子查询更新多个列更改7698号雇员的任务和部门,使其与7499号雇员的一样
UPDATEempSET(job,deptno)=(selectjob,deptnofromempwhereempno=7499)WHEREempno=7698;.对基于另一个表的行进展更改在UPDATE语句中,用子查询来更新基于另一个表中值的那些行。UPDATEcopy_empSETdepartment_id=(SELECTdepartment_idFROMemployeesWHEREemployee_id=100)WHEREjob_id=any(SELECTjob_idFROMemployeesWHEREemployee_id=200);用基于来自EMPLOYEES表的值更新COPY_EMP表,它用employee100的部门号改动一切任务岗位与employee200的任务岗位一样的那些雇员的部门号.DELETE语句运用DELETE语句从表中删除已存在的行•假设指定了WHERE子句,那么删除指定的行DELETEFROMdepartmentsWHEREdepartment_name='Finance';•假设脱漏了WHERE子句,表中一切的行都被删除DELETEFROMcopy_emp;.删除基于另一个表的行在DELETE语句中用子查询来删除表中的基于另一个表中值的行DELETEFROMemployeeWHEREdeptno=(SELECTdeptnofromdeptwheredname='SALES');.TRUNCATETRUNCATEtablecopy_emp;DELETEFROMcopy_emp;清空表中一切数据删除数据的效率明显比DELETE高恢复数据需求备份,代价高.根本SQLMERGE合并语句按照指定的条件执行插入或删除操作假设满足条件的行存在,执行更新操作;否那么执行插入操作:防止多次反复执行插入和删除操作提高效率而且运用方便在数据仓库运用中经常运用.合并语句的语法可以运用merge语句,根据指定的条件进展插入或更新操作MERGEINTOtable_nametable_aliasUSING(table|view|sub_query)aliasON(joincondition)WHENMATCHEDTHENUPDATESETcol1=col_val1,col2=col2_valWHENNOTMATCHEDTHENINSERT(column_list)VALUES(column_values);.MERGEINTOcopy_empcUSINGemployeeseON(c.employee_id=e.employee_id)WHENMATCHEDTHENUPDATESETc.first_name=e.first_name,c.last_name=e.last_name,...c.department_id=e.department_idWHENNOTMATCHEDTHENINSERTVALUES(e.employee_id,e.first_name,e.last_name,e.,e.phone_number,e.hire_date,e.job_id,e.salary,emission_pct,e.manager_id,e.department_id);合并语句举例在对表COPY_EMP运用merge语句,根据指定的条件从表EMPLOYEES中插入或更新数据。.数据库事务Oracle数据库基于事务处置确保数据的一致性。要么全部完成,要么全部废弃的操作集合。数据库事务可以由下面的语句组成:•对数据做出一致性修正的DML语句•一个DDL语句•一个DCL语句.事务的开场与终了开场于第一个被执行的DML语句遇到下面事件之一终了:COMMIT或ROLLBACK语句被运转DDL或DCL语句被执行(自动提交)用户正常退出〔自动提交〕用户非正常退出〔自动回滚〕系统异常终止〔自动回滚〕.COMMIT和ROLLBACK语句COMMIT--提交,简单来说就是终了当前事务,把所做的修正保管到数据库ROLLBACL--回滚,终了当前事务,丢弃一切未决的数据改动用COMMIT和ROLLBACK语句,他可以:确保数据的一致性在数据永久改动之前进展预览分组逻辑相关的操作.控制事务运用COMMIT、SAVEPOINT和ROLLBACK语句控制事务逻辑。SAVEPOINTname 在当前事务中标志保管点
ROLLBACKTOSAVEPOINTname 回滚当前事务到指定的保管点,从而丢弃保管点创建后的任何改动。假设忽略了TOSAVEPOINT子句,ROLLBACK语句回滚整个事务。由于保管点是逻辑的,因此,没有方法列出曾经创建的保管点。.举个例子用SAVEPOINT语句在当前事务中创建一个标志用ROLLBACKTOSAVEPOINT语句回退到该标志UPDATE...SAVEPOINTupdate_done;savepointcreated.INSERT...ROLLBACKTOupdate_done;Rollbackcomplete..隐式事务处置在下面的情况下,一个自动提交发生:–DDL语句被发送–DCL语句被发送–正常退出iSQL*Plus,没有明确地发送COMMIT或ROLLBACK语句当iSQL*Plus非正常退出时,或者发生系统缺点时,一个自动回退发生.COMMIT或ROLLBACK之前数据的形状以前的数据形状可以被恢复当前用户能用SELECT语句查看DML操作的结果其他用户不能察看当前用户DML语句的结果受影响的行被锁定,其他用户不能改动受影响的行中数据.COMMIT之后数据的形状数据在数据库中被永久地改动数据的以前形状被永久地丧失一切用户都能察看该结果受影响行的锁定被释放,其它用户可以支配那些行一切保管点被擦除.ROLLBACK之后的数据形状用ROLLBACK语句丢弃一切未决的改动:数据的改动被吊销数据的以前形状被恢复受影响行的锁定被释放.读一致性读一致性确保在恣意时间点,数据库都能提供数据的一致性视图读一致性要求对于同一份数据:查询不需求等待修正修正不需求等待查询修正需求等待修正.视图视图是基于表或另一个视图的逻辑表,一个视图并不包含它本人的数据,它象一个窗口,经过该窗口可以查看或改变表中的数据。视图基于其上的表称为基表。视图在数据字典中作为一个SELECT语句存储。视图的作用:•限制数据访问•使得复杂的查询容易•提供数据的独立性•表现一样数据的不同察看.简单视图和复杂视图下面是简单视图:数据仅来自一个表不包含函数或数据分组能经过视图执行DML操作下面是复杂视图:数据来自多个表包含函数或数据分组不总是允许经过视图进展DML操作.Top-N分析•Top-N查询寻觅一列的n个最大或最小值,例如:–销售最好的前10位产品是什么?–销售最差的前10位产品是什么?•最大值和最小值在Top-N查询中设置•Top-N查询在需求基于一个条件,从表中显示最前面的n条记录或最后面的n条记录时是有用的。.执行Top-N分析Top-N分析查询的高级构造是:SELECT[column_list],ROWNUMFROM(SELECT[column_list]FROMtableORDERBYTop-N_column)WHEREROWNUM<=N;Top-N分析的例子为了从EMPLOYEES表中显示挣钱最多的3个人的名字及其薪水:SELECTROWNUMasRANK,last_name,salaryFROM(SELECTlast_name,salaryFROMemployeesORDERBYsalaryDESC)WHEREROWNUM<=3;.序列是自动产生的独一的数,可被多个用户共享以产生独一的整数典型的用途是创建一个主键值可以替代运用程序编号,是一个节省时间的对象序列号独立于表被存储和产生,因此,一样的序列可以被多个表运用当运用高速缓存存储器时,访问序列值的效率提高。.CREATESEQUENCE语法定义一个序列来自动产生有顺序的数:CREATESEQUENCEsequence[INCREMENTBYn][STARTWITHn][{MAXVALUEn|NOMAXVALUE}][{MINVALUEn|
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电子级磷酸制备企业制定与实施新质生产力项目商业计划书
- 生物基肥料行业深度调研及发展项目商业计划书
- 船舶制造智能制造模式-洞察阐释
- 头癣患者的抓取反应与皮疹反应相关性研究-洞察阐释
- 农业生态系统服务的生态系统服务价值的长期效应研究-洞察阐释
- 宠物摄影作品评价-洞察阐释
- 自然色调与室内空气质量关系-洞察阐释
- 虚拟人身体语言生成的用户体验研究-洞察阐释
- 线雕技术在皮肤紧致中的应用-洞察阐释
- 房地产行业政策调控下的市场波动分析-洞察阐释
- 粮安工程粮库智能化升级改造 投标方案(技术标)
- 吉塔行星模拟课程
- 2023上海虹口区初三语文一模作文写作指导及范文:这也是我的舞台
- 《反本能 如何对抗你的习以为常》读书笔记思维导图PPT模板下载
- 西南交11春学期《模拟电子技术A》离线作业
- 施工单位平安工地考核评价表(标准)
- JJF 1855-2020纯度标准物质定值计量技术规范有机物纯度标准物质
- GB/T 35194-2017土方机械非公路机械传动宽体自卸车技术条件
- GB 6245-2006消防泵
- SMT通用作业指导书
- 工作票培训-课件
评论
0/150
提交评论