Oracle数据库培训PPT课件

简介 相关

截图

Oracle数据库培训PPT课件
Oracle数据库培训PPT课件

简介

这是一个关于Oracle数据库培训PPT(部分ppt内容已做更新升级)课件,主要介绍了基本的SELECT语句、约束和排序数据、单行函数、多表显示数据、组函数合计数据、创建和管理表等内容。列选择:你能够使用SELECT语句的列选择功能选择表中的列,这些列是你想要用查询返回的。当你查询时,你能够选择你查询的表中指定的列。行选择:你能够使用SELECT语句的行选择功能选择表中的行,这些行是你想要用查询返回的。你能够使用不同的标准限制你看见的行。连接:你能够使用SELECT语句的连接功能来集合数据,这些数据被存储在不同的表中,在它们之间可以创建连接。在后面的课程中你将学到更多关于连接的内容,欢迎点击下载Oracle数据库培训PPT(部分ppt内容已做更新升级)课件哦。

Oracle数据库培训PPT课件是由红软PPT免费下载网推荐的一款培训教程PPT类型的PowerPoint.

SQL 语言基础kNO红软基地
主要内容kNO红软基地
基本的SELECT语句kNO红软基地
约束和排序数据kNO红软基地
单行函数kNO红软基地
多表显示数据、组函数合计数据kNO红软基地
创建和管理表kNO红软基地
子查询&操纵数据kNO红软基地
内置约束kNO红软基地
创建视图kNO红软基地
其他数据库对象kNO红软基地
基本的select语句 kNO红软基地
目标kNO红软基地
完成本课后, 您应当能够:kNO红软基地
•列出SQL SELECT语句的功能kNO红软基地
•执行基本的SELECT语句kNO红软基地
SQL SELECT语句的功能kNO红软基地
列选择:你能够使用SELECT语句的列选择功能选择表中的列,这些列是你想要用查询返回的。当你查询时,你能够选择你查询的表中指定的列。 kNO红软基地
行选择:你能够使用SELECT语句的行选择功能选择表中的行,这些行是你想要用查询返回的。你能够使用不同的标准限制你看见的行。 kNO红软基地
连接:你能够使用SELECT语句的连接功能来集合数据,这些数据被存储在不同的表中,在它们之间可以创建连接。在后面的课程中你将学到更多关于连接的内容。 kNO红软基地
基本SELECT语句kNO红软基地
 SELECT *| {[DISTINCT] kNO红软基地
                  column|expression[alias],...}kNO红软基地
 FROM table; kNO红软基地
•SELECT 确定哪些列kNO红软基地
•FROM 确定哪张表kNO红软基地
选择所有列与指定列kNO红软基地
    SELECT * FROM departments;kNO红软基地
    用跟在SELECT关键字后面的星号 (*),你能够显示表中数据的所有列。kNO红软基地
    SELECT department_id, location_id kNO红软基地
    FROM departments; kNO红软基地
   你能够用SELECT语句来显示表的指定列,指定列名之间用逗号分隔。kNO红软基地
写SQL 语句kNO红软基地
•SQL 语句对大小写不敏感kNO红软基地
•SQL 语句可以写成一行或多行kNO红软基地
•关键字不能简写或分开折行kNO红软基地
•子句通常放在不同的行kNO红软基地
•缩进用于增强可读性kNO红软基地
算术表达式 kNO红软基地
用算术运算符创建数字和日期数据的表达式kNO红软基地
操作        说明kNO红软基地
     +             加kNO红软基地
     -              减kNO红软基地
     *              乘kNO红软基地
     /               除kNO红软基地
使用算术运算符kNO红软基地
    SELECT last_name, salary, salary + 300 kNO红软基地
    FROM employees;kNO红软基地
    优先级:kNO红软基地
    •乘法和除法比加法和减法的优先级高kNO红软基地
    •相同优先级的运算符从左到右计算kNO红软基地
    •圆括号用于强制优先计算,并且使语句更 清晰kNO红软基地
    SELECT last_name, salary,  12*salary+100  kNO红软基地
    FROM employees;kNO红软基地
空值 kNO红软基地
   •null 是一个未分配的、未知的,或不适用的值kNO红软基地
   •null不是0,也不是空格kNO红软基地
   •包含空值的算术表达式计算结果为空kNO红软基地
   SELECT last_name, job_id, salary, kNO红软基地
                  commission_pctkNO红软基地
   FROM employees;kNO红软基地
定义列别名 kNO红软基地
列别名:kNO红软基地
   •改变列标题的名字kNO红软基地
   •可用于计算结果kNO红软基地
   •紧跟在列名后面–在列名和别名之间可以有选项AS 关键字kNO红软基地
   •如果别名中包含有空格、或者特殊字符、或者大小写敏感,要求用双引号kNO红软基地
   SELECT last_name AS name, commission_pct comm FROM employees; kNO红软基地
连字运算符kNO红软基地
连字运算符:kNO红软基地
   •连接列或者字符串到其它的列kNO红软基地
   •用两个竖线表示(||)kNO红软基地
   •构造一个字符表达式的合成列 kNO红软基地
   SELECT first_name||last_name AS EmployeeskNO红软基地
   FROM employees;kNO红软基地
文字字符串kNO红软基地
   •文字字符串是包含在SELECT列表中的一个字符串,一个数字或者一个日期kNO红软基地
   •日期和字符的文字字符串值必须用单引号括起来kNO红软基地
   •每个文字字符串在每行输出一次 kNO红软基地
   SELECT last_name||' is a '||job_id kNO红软基地
                  AS "Employee Details”kNO红软基地
   FROM employees;kNO红软基地
约束和排序数据 kNO红软基地
目标kNO红软基地
完成本课后, 您应当能够执行下列操作:kNO红软基地
•用一个查询限制返回的行kNO红软基地
•用一个查询分类返回的行 kNO红软基地
限制选择的行kNO红软基地
   用WHERE子句限制返回的行kNO红软基地
   SELECT * |{[DISTINCT] kNO红软基地
                     column|expression[alias],...}kNO红软基地
   FROM tablekNO红软基地
   [WHERE condition(s)]; kNO红软基地
   WHERE子句跟着FROM子句kNO红软基地
   WHERE 限制查询满足条件的行 kNO红软基地
   condition 由列名、表达式、常数和比较操作组成 kNO红软基地
   WHERE子句能够比较列值、文字值、算术表达式或者函kNO红软基地
   数,WHERE子句由三个元素组成: kNO红软基地
   列名 , 比较条件 , 列名、常量或值列表 。kNO红软基地
使用WHERE子句kNO红软基地
   SELECT employee_id, last_name, job_id, kNO红软基地
                  department_id]kNO红软基地
    FROM employeeskNO红软基地
    WHERE department_id = 90 ;kNO红软基地
字符串和日期kNO红软基地
•字符串和日期的值放在单引号中kNO红软基地
•字符值区分大小写,日期值是格式敏感的kNO红软基地
•日期的默认格式是DD-MON-RR.kNO红软基地
  SELECT last_name, job_id, department_idkNO红软基地
  FROM employees kNO红软基地
  WHERE last_name = 'Whalen'; kNO红软基地
比较条件kNO红软基地
                 运算                       含义kNO红软基地
                   =                          等于kNO红软基地
                   >                          大于 kNO红软基地
                   >=                        大于等于kNO红软基地
                   <                          小于kNO红软基地
                   <=                       小于等于kNO红软基地
                   <>                       不等于kNO红软基地
比较条件被用于一个表达式与一个值或与另一个表达式的比较。kNO红软基地
... WHERE hire_date='01-JAN-95' kNO红软基地
... WHERE salary>=6000 kNO红软基地
... WHERE last_name='Smith' kNO红软基地
其它比较条件kNO红软基地
操作                              含义kNO红软基地
            BETWEEN...AND...            在两个值之间(包含)kNO红软基地
            IN(set)                                 匹配一个任意值列表kNO红软基地
            LIKE                                    匹配一个字符模板kNO红软基地
            IS NULL                              是一个空值 kNO红软基地
使用BETWEEN条件:kNO红软基地
    SELECT last_name, salary kNO红软基地
    FROM employees kNO红软基地
    WHERE salary BETWEEN 2500 AND 3500;kNO红软基地
使用IN条件kNO红软基地
    SELECT employee_id, last_name, salary, manager_idkNO红软基地
    FROM employeeskNO红软基地
    WHERE manager_id IN (100, 101, 201);kNO红软基地
其它比较条件kNO红软基地
使用LIKE条件kNO红软基地
•使用LIKE条件执行有效搜索串值的通配符搜索kNO红软基地
•搜索条件既可以包含文字也可以包含数字:kNO红软基地
    –%表示任意顺序的零个或多个字符kNO红软基地
    –_表示一个字符kNO红软基地
    SELECT first_name kNO红软基地
    FROM employees kNO红软基地
    WHERE first_name LIKE 'S%'; kNO红软基地
使用NULL条件kNO红软基地
•用IS NULL操作来测试空值kNO红软基地
    SELECT last_name, manager_id kNO红软基地
    FROM employees kNO红软基地
    WHERE manager_id IS NULL; kNO红软基地
    NULL条件,包括IS NULL条件和IS NOT NULL条件。 kNO红软基地
逻辑条件kNO红软基地
    运算                               含义kNO红软基地
    AND    如果两个组成部分的条件都为真,返回TRUEkNO红软基地
    OR      如果两个组成部分中的任一个条件为真,返回TRUEkNO红软基地
    NOT    如果跟随的条件为假,返回TRUE kNO红软基地
可以在WHERE子句中用AND和OR运算符使用多个条件。 kNO红软基地
使用AND操作:AND要求两个条件同时为真kNO红软基地
    SELECT employee_id, last_name, job_id, salarykNO红软基地
    FROM employeeskNO红软基地
    WHERE salary >=10000 AND job_id LIKE '%MAN%'; kNO红软基地
逻辑条件kNO红软基地
使用OR操作:OR操作要求两者之一为真即可kNO红软基地
    SELECT employee_id, last_name, job_id, salarykNO红软基地
    FROM employeeskNO红软基地
    WHERE salary >= 10000 OR job_id LIKE '%MAN%'; kNO红软基地
使用NOT操作 kNO红软基地
    SELECT last_name, job_idkNO红软基地
    FROM employeeskNO红软基地
    WHERE job_id kNO红软基地
                  NOT IN ('IT_PROG', 'ST_CLERK', 'SA_REP');kNO红软基地
注:NOT运算符也可以用于另一个SQL运算符,例如,BETWEEN、LIKE、和NULL。kNO红软基地
优先规则 kNO红软基地
  求值顺序kNO红软基地
        1                      算术运算kNO红软基地
        2                      连字操作kNO红软基地
        3                      比较操作kNO红软基地
        4                      IS[NOT]NULL, LIKE, [NOT]INkNO红软基地
        5                      [NOT] BETWEENkNO红软基地
        6                      NOT逻辑条件kNO红软基地
        7                      AND逻辑条件kNO红软基地
        8                      OR逻辑条件 kNO红软基地
使用圆括号改变优先规则kNO红软基地
ORDER BY子句kNO红软基地
•用ORDER BY子句排序行kNO红软基地
   –ASC: 升序排序,默认kNO红软基地
   –DESC: 降序排序kNO红软基地
•ORDER BY子句在SELECT语句的最后kNO红软基地
   SELECT last_name, job_datekNO红软基地
   FROM employeeskNO红软基地
   ORDER BY hire_date ;kNO红软基地
语法 :kNO红软基地
   SELECT expr  kNO红软基地
   FROM table kNO红软基地
   [WHERE condition(s)] kNO红软基地
   [ORDER BY {column, expr} [ASC|DESC]]; kNO红软基地
单行函数 kNO红软基地
目标kNO红软基地
完成本课后,您应当能够执行下列操作:kNO红软基地
•描述在SQL 中可用的函数的变量类型kNO红软基地
•在SELECT语句中使用字符,数字和日期函数kNO红软基地
•描述转换函数的使用 kNO红软基地
SQL 函数kNO红软基地
函数是SQL的一个非常强有力的特性,函数能够用于下面的目的: kNO红软基地
执行数据计算 kNO红软基地
修改单个数据项 kNO红软基地
操纵输出进行行分组 kNO红软基地
格式化显示的日期和数字 kNO红软基地
转换列数据类型 kNO红软基地
SQL函数有输入参数,并且总有一个返回值。kNO红软基地
   注:在本课中讲述的大多数函数是针对SQL的Oracle版的。 kNO红软基地
SQL 函数 (续) kNO红软基地
有两种截然不同的函数: kNO红软基地
单行函数 kNO红软基地
多行函数 kNO红软基地
单行函数 kNO红软基地
    这些函数仅对单个行进行运算,并且每行返回一个结果。有不同类型的单行函数,本课下面的函数类型: kNO红软基地
字符 kNO红软基地
数字 kNO红软基地
日期 kNO红软基地
转换 kNO红软基地
多行函数 kNO红软基地
    这些函数能够操纵成组的行,每个行组给出一个结果,这些函数也被称为组函数。多行函数在后面的课程中介绍。kNO红软基地
单行函数kNO红软基地
单行函数:kNO红软基地
•操纵数据项kNO红软基地
•接受多个参数并返回一个值kNO红软基地
•作用于每一个返回行kNO红软基地
•每行返回一个结果kNO红软基地
•可以修改数据类型kNO红软基地
•可以嵌套kNO红软基地
•接受多个参数,参数可以是一个列或者一个表达式kNO红软基地
单行函数(续)kNO红软基地
单行函数的特性包括: kNO红软基地
作用于查询中返回的每一行 kNO红软基地
每行返回一个结果 kNO红软基地
可能返回一个与参数不同类型的数据值 kNO红软基地
可能需要一个或多个参数 kNO红软基地
能够用在SELECT、WHERE和ORDER BY子句中,可以嵌套 。kNO红软基地
function_name[(arg1, arg2,...)]kNO红软基地
function_name 是函数的名字。 kNO红软基地
arg1, arg2 是由函数使用的任意参数,可以由一个列名或者一个表达式提供。 kNO红软基地
单行函数(续)kNO红软基地
本课包括下面的单行函数: kNO红软基地
字符函数:接受字符输入,可以返回字符或者数字值 kNO红软基地
数字函数:接受数字输入,返回数字值 kNO红软基地
日期函数:对DATE数据类型的值进行运算 (除了MONTHS_BETWEEN函数返回一个数字,所有日期函数都返回一个DATE数据类型的值。) kNO红软基地
转换函数:从一个数据类型到另一个数据类型转换一个值 kNO红软基地
通用函数: kNO红软基地
   NVL 、 NVL2、 NULLIF、 COALSECE、 CASE 、 DECODEkNO红软基地
字符函数 kNO红软基地
单行字符函数接受字符数据作为输入,既可以返回字符值也kNO红软基地
可以返回数字值。字符函数可以被分为下面两种: kNO红软基地
大小写处理函数 kNO红软基地
字符处理函数kNO红软基地
大小写处理函数如下:kNO红软基地
LOWER(column|expression)   转换字符值为小写  kNO红软基地
UPPER(column|expression)   转换字符值为大写  kNO红软基地
INITCAP(column|expression) 转换每个单词的首字母值为大写,所有kNO红软基地
                                                    其它值为小写 kNO红软基地
字符处理函数如下: kNO红软基地
CONCAT(column1|expression1 ,column2|expression2)  kNO红软基地
     连接第一个字符值到第二个字符值;等价于连接运算符 (||)  kNO红软基地
SUBSTR(column|expression,m [,n])  kNO红软基地
     从字符值中返回指定的字符,开始位置在 m,n字符长度 (如果 m 是负数,计数从字符值末尾开始;如果 n 被忽略,返回到串结束的所有字符)。kNO红软基地
LENGTH(column|expression) 返回表达式中的字符数kNO红软基地
INSTR(column|expression, ‘string’, [,m], [n] )  kNO红软基地
   返回一个命名串的数字位置。随意地,你可以提供一个位置m作为查找的开始,在字符串中第n次发现的位置。m和n的默认值是1,意味着在起始开始查找,并且报告第一个发现的位置。  kNO红软基地
LPAD(column|expression, n, 'string') kNO红软基地
     RPAD(column|expression, n, 'string')  kNO红软基地
     填充字符值左、右调节到n字符位置的总宽度  kNO红软基地
TRIM(leading|trailing|both , trim_character FROM trim_source) kNO红软基地
     使你能够从一个字符串修整头或尾字符(或两者)。如果trim_character或trim_source是字符文字,你必须放在单引号中。  kNO红软基地
REPLACE(text, search_string, replacement_string)  kNO红软基地
     从字符串查找一个文本表达式,如果找到,用指定的值串代替它 kNO红软基地
大小写处理函数kNO红软基地
这些函数转换字符串的大小写kNO红软基地
           函 数                          结 果kNO红软基地
LOWER('SQL Course')       sql coursekNO红软基地
UPPER('SQL Course')        SQL COURSEkNO红软基地
INITCAP('SQL Course')      Sql CoursekNO红软基地
LOWER:转换大小写混合的字符串为小写字符串 kNO红软基地
UPPER:转换大小写混合的字符串为大写字符串 kNO红软基地
INITCAP:将每个单词的首字母转换为大写,其他字母为小写 kNO红软基地
 SELECT ‘The job id for ’||UPPER(last_name)||‘ is ’ kNO红软基地
    ||LOWER(job_id) AS "EMPLOYEE DETAILS" kNO红软基地
    FROM employees; kNO红软基地
字符处理函数kNO红软基地
                函  数                            结  果kNO红软基地
CONCAT('Hello', 'World')           HelloWorldkNO红软基地
SUBSTR('HelloWorld',1,5)         HellokNO红软基地
LENGTH('HelloWorld')               10kNO红软基地
INSTR('HelloWorld', 'W')            6kNO红软基地
LPAD(salary, 10,'*')                    *****24000kNO红软基地
RPAD(salary, 10, '*')                   24000 *****kNO红软基地
TRIM('H' FROM 'HelloWorld')    elloWorldkNO红软基地
数字函数kNO红软基地
ROUND:四舍五入指定小数的值kNO红软基地
ROUND(45.926, 2)            45.93kNO红软基地
TRUNC(45.926, 2)             45.92kNO红软基地
MOD(1600, 300)                100  kNO红软基地
    ROUND(column|expression, n) kNO红软基地
 四舍五入列、表达式或值为n位小数位,或者,如果n被忽略,无小数位。(如果n是负值,小数点左边的数被四舍五入) kNO红软基地
    TRUNC(column|expression,n)  kNO红软基地
    截断列、表达式或值到n位小数,或者,如果n被忽略,那么n默认为0  kNO红软基地
    MOD(m,n)  返回m除以n的余数kNO红软基地
使用ROUND函数kNO红软基地
    SELECT ROUND(45.923,2), ROUND(45.923,0),ROUND(45.923,-1) FROM DUAL;kNO红软基地
使用TRUNC函数kNO红软基地
    SELECT TRUNC(45.923,2), TRUNC(45.923),TRUNC(45.923,-2) FROM DUAL;kNO红软基地
使用MOD函数kNO红软基地
    SELECT last_name, salary, MOD(salary, 5000) FROM employees WHERE job_id = 'SA_REP';kNO红软基地
注:MOD函数经常用于确定一个值是奇数还是偶数kNO红软基地
日期的使用kNO红软基地
    •Oracle 数据库用内部数字格式存储日期:世纪,年,月,日,小时,分钟和秒kNO红软基地
    •默认日期显示格式是DD-MON-RR.kNO红软基地
    SELECT last_name, hire_datekNO红软基地
    FROM employeeskNO红软基地
    WHERE last_name like ''G%';'; kNO红软基地
    SYSDATE函数返回:kNO红软基地
    •Date kNO红软基地
    •Time kNO红软基地
    SYSDATE是一个日期函数,它返回当前数据库服务器的日期和时间。kNO红软基地
    SELECT SYSDATE  FROM DUAL; kNO红软基地
用日期计算kNO红软基地
•从日期加或者减一个数,结果是一个日期值kNO红软基地
•两个日期相减,得到两个日期之间的天数kNO红软基地
•用小时数除以24,可以加小时到日期上 kNO红软基地
既然数据库以数字方式存储日期,你就可以用算术运算符进行计算,例如,加或减。你可以加或减数字常数以及日期。 kNO红软基地
你可以进行下面的运算: kNO红软基地
运算                结果  说明  kNO红软基地
date + number     日期      加一个天数到一个日期上kNO红软基地
date - number     日期      从一个日期上减一个天数kNO红软基地
date - date     天数      用一个日期减另一个日期 kNO红软基地
date + number/24   日期      加一个小时数到一个日期上 kNO红软基地
日期函数kNO红软基地
            函   数                       说   明 kNO红软基地
MONTHS_BETWEEN         两个日期之间的月数kNO红软基地
ADD_MONTHS                   加日历月到日期kNO红软基地
NEXT_DAY                        下个星期几是几号kNO红软基地
LAST_DAY                         指定月的最后一天kNO红软基地
ROUND                               四舍五入日期kNO红软基地
TRUNC                                截断日期kNO红软基地
日期函数(续)kNO红软基地
 MONTHS_BETWEEN(date1, date2):计算date1和date2之间的月数,其结果可以是正的也可以是负的。如果date1大于date2,结果是正的,反之,结果是负的。结果的小数部分表示月的一部分。 kNO红软基地
 ADD_MONTHS(date, n):添加n个日历月到date。n的值必须是整数,但可以是负的。 kNO红软基地
NEXT_DAY(date, ‘char’):计算在date之后的下一个周(‘char’)指定天的日期。char的值可能是一个表示一天的数或者是一个字符串。 kNO红软基地
LAST_DAY(date):计算包含date的月的最后一天的日期kNO红软基地
ROUND(date[,‘fmt’]):返回用格式化模式fmt四舍五入到指定单位的 date ,如果格式模式 fmt 被忽略,date被四舍五入到最近的天。 kNO红软基地
TRUNC(date[, ‘fmt’]):返回用格式化模式fmt截断到指定单位的带天的时间部分的date,如果格式模式fmt被忽略,date被截断到最近的天。 kNO红软基地
使用日期函数kNO红软基地
•MONTHS_BETWEEN (‘01-SEP-95’,‘11-JAN-94’) kNO红软基地
19.6774194kNO红软基地
•ADD_MONTHS (‘11-JAN-94’,6)kNO红软基地
'11-JUL-94'kNO红软基地
•NEXT_DAY (‘01-SEP-95’,‘2’) kNO红软基地
下个星期五是几号       '08-SEP-95'kNO红软基地
•LAST_DAY('01-FEB-95') kNO红软基地
'28-FEB-95'kNO红软基地
使用日期函数(续)kNO红软基地
假定SYSDATE = '25-JUL-95':kNO红软基地
•ROUND(SYSDATE,'MONTH')      01-AUG-95kNO红软基地
•ROUND(SYSDATE ,'YEAR')        01-JAN-96kNO红软基地
•TRUNC(SYSDATE ,'MONTH')     01-JUL-95 kNO红软基地
•TRUNC(SYSDATE ,'YEAR')        01-JAN-95kNO红软基地
•TRUNC(TO_DATE('25-JUL-95') ,'YEAR') kNO红软基地
                                                       01-JAN-95 kNO红软基地
转换函数kNO红软基地
数据类型转换kNO红软基地
•隐式数据类型转换kNO红软基地
•显式数据类型转换kNO红软基地
对于直接赋值,Oracle 服务器能够自动地进行下面kNO红软基地
的转换:kNO红软基地
                 从                                到kNO红软基地
VARCHAR2 or CHAR           NUMBERkNO红软基地
VARCHAR2 or CHAR           DATEkNO红软基地
NUMBER                               VARCHAR2 kNO红软基地
DATE                                     VARCHAR2kNO红软基地
对于表达式赋值,Oracle 服务器能自动地进行下面的转换:kNO红软基地
从 VARCHAR2 or CHAR  到  DATEkNO红软基地
从 VARCHAR2 or CHAR  到  NUMBERkNO红软基地
转换函数(续)kNO红软基地
显式数据类型转换kNO红软基地
SQL 提供三种函数来从一种数据类型转换值到另一种: kNO红软基地
TO_CHAR(number|date,[ fmt], [nlsparams]) kNO红软基地
转换一个数字或日期值为一个VARCHAR2字符串,带格式kNO红软基地
化样式fmt。 kNO红软基地
数字转换:nlsparams 参数指定下面的字符,它由数字格式kNO红软基地
化元素返回: kNO红软基地
小数字符     99999.99kNO红软基地
前导0          09999      kNO红软基地
本地货币符号  L9999kNO红软基地
国际货币符号 $9999kNO红软基地
如果忽略nlsparams或其它参数,该函数在会话中使用默认参数值。kNO红软基地
TO_CHAR(number|date,[ fmt], [nlsparams])kNO红软基地
指定返回的月和日名字及其缩写的语言。如果忽略该参数,kNO红软基地
该函数在会话中使用默认日期语言 。kNO红软基地
TO_NUMBER(char,[fmt], [nlsparams]) kNO红软基地
用由可选格式化样式fmt指定的格式转换包含数字的字符串为kNO红软基地
一个数字。Nlsparams参数在该函数中的目的与TO_CHARkNO红软基地
函数用于数字转换的目的相同 。kNO红软基地
TO_DATE(char,[fmt],[nlsparams]) kNO红软基地
按照fmt指定的格式转换表示日期的字符串为日期值。如果忽kNO红软基地
略fmt,格式是 DD-MON-YY。Nlsparams参数的目的与kNO红软基地
TO_CHAR函数用于日期转换时的目的相同。kNO红软基地
对日期使用TO_CHAR函数kNO红软基地
TO_CHAR(date, 'format_model')kNO红软基地
格式模板kNO红软基地
•必须加单引号,并且区分大小写kNO红软基地
•能够包含任一有效的日期格式元素kNO红软基地
•有一个fm元素用来删除填补的空,或者前导零kNO红软基地
•用一个逗号与日期值分开kNO红软基地
    SELECT employee_id, kNO红软基地
                   TO_CHAR(hire_date, 'MM/YY')  Month_Hired kNO红软基地
    FROM employeeskNO红软基地
    WHERE last_name = 'Higgins';kNO红软基地
日期格式模板的元素kNO红软基地
YYYY         数字全写年kNO红软基地
YEAR         年的拼写kNO红软基地
MM            月的两数字值kNO红软基地
MONTH     月的全名kNO红软基地
DY             周中天的三字母缩写kNO红软基地
DAY          周中天的全名kNO红软基地
MON         月的三字母缩写kNO红软基地
DD            月的数字天kNO红软基地
使用TO_NUMBER和TO_DATE函数kNO红软基地
•转换字符串到数字,用TO_NUMBER函数格式化:kNO红软基地
TO_NUMBER(char[, 'format_model'])kNO红软基地
•转换字符串到日期,用TO_DATE函数格式化:kNO红软基地
TO_DATE(char[, 'format_model']) kNO红软基地
  Select to_number(‘12345’) kNO红软基地
  from dual;kNO红软基地
  Select to_date(‘20000810’,’yyyy-mm-dd’ kNO红软基地
  fromdual;kNO红软基地
通用函数kNO红软基地
这些函数可用于任意数据类型,并且适用于空值kNO红软基地
•NVL (expr1, expr2)kNO红软基地
•NVL2 (expr1, expr2, expr3)kNO红软基地
•NULLIF (expr1, expr2)kNO红软基地
•COALESCE (expr1, expr2, ..., exprn) kNO红软基地
NVL    转换空值为一个实际值  kNO红软基地
NVL2  如果expr1非空,NVL2返回expr2;如果expr1为空kNO红软基地
              ,NVL2返回expr3。参数expr1可以是任意数据类型kNO红软基地
NULLIF 比较两个表达式,如果相等返回空;如果不相等kNO红软基地
                 ,返回第一个表达式  kNO红软基地
COALESCE 返回表达式列表中的第一个非空表达式 kNO红软基地
NVL函数kNO红软基地
转换一个空值到一个实际的值kNO红软基地
•可用的数据类型可以是日期、字符和数字kNO红软基地
•数据类型必须匹配:kNO红软基地
–NVL(commission_pct,0)kNO红软基地
–NVL(hire_date,'01-JAN-97')kNO红软基地
–NVL(job_id,'No Job Yet') kNO红软基地
语法:kNO红软基地
NVL (expr1, expr2) kNO红软基地
在语法中: kNO红软基地
expr1 是包含空值的源值或者表达式 kNO红软基地
expr2 是用于转换空值的目的值kNO红软基地
Select  nvl(‘1’,’not null’ from dual;kNO红软基地
注:如果expr1为空则返回expr2r的值kNO红软基地
使用NVL2函数kNO红软基地
NVL2 函数检查第一个表达式,如果第一个表达式不为空,kNO红软基地
那么 NVL2 函数返回第二个表达式;如果第一个表达式为kNO红软基地
空,那么第三个表达式被返回。 kNO红软基地
expr2 expr1 非空时的返回值 kNO红软基地
语法 kNO红软基地
NVL2(expr1, expr2, expr3) kNO红软基地
在语法中: kNO红软基地
expr1 是可能包含空的源值或表达式 kNO红软基地
expr3 expr1 为空时的返回值 kNO红软基地
Select  NVL2(‘1’,’not null’,’null’) from dual;kNO红软基地
Select  NVL2(‘1’,’not null’,’null’) from dual;kNO红软基地
使用NULLIF函数kNO红软基地
NULLIF 函数比较两个表达式,如果相等,函数返回空,如果不相等,kNO红软基地
函数返回第一个表达式。第一个表达式不能为 NULL。 kNO红软基地
语法 kNO红软基地
NULLIF (expr1, expr2) kNO红软基地
在语法中: kNO红软基地
expr1 是对于 expr2 的被比较原值 kNO红软基地
expr2 是对于 expr1 的被比较原值。(如果它不等于 expr1,kNO红软基地
    expr1 被返回)。 kNO红软基地
Select nullif(‘abc’,’abcd’) from dual;kNO红软基地
使用COALESCE函数kNO红软基地
• COALESCE函数超过NVL函数的优点是COALESCE函数kNO红软基地
 能够接受多个交替的值。kNO红软基地
•如果第一个表达式非空,它返回该表达式;否则,它做一个kNO红软基地
 保留表达式的结合 。kNO红软基地
COALESCE 函数返回列表中的第一个非空表达式。 kNO红软基地
语法 kNO红软基地
COALESCE (expr1, expr2, ... exprn) kNO红软基地
在语法中: kNO红软基地
expr1 如果它非空,返回该表达式 kNO红软基地
expr2 如果第一个表达式为空并且该表达式非空,返回该表达式 kNO红软基地
exprn 如果前面的表达式都为空,返回该表达式 kNO红软基地
Select coalesce(‘ ',‘ ','bca') from dual;kNO红软基地
条件表达式kNO红软基地
在SQL 语句中提供IF-THEN-ELSE 逻辑的使用。kNO红软基地
两种用法:kNO红软基地
   –CASE表达式kNO红软基地
   –DECODE函数 kNO红软基地
CASE表达式kNO红软基地
   CASE expr WHEN comparison_expr1  THEN return_expr1   kNO红软基地
                       WHEN comparison_expr2  THEN return_expr2 kNO红软基地
                       WHEN comparison_exprn  THEN return_exprn kNO红软基地
                       ELSE else_expr]kNO红软基地
   ENDkNO红软基地
DECODE函数kNO红软基地
DECODE(col|expression, search1, result1 kNO红软基地
               [, search2, result2,...,][, default])kNO红软基地
DECODE 函数在比较表达式 (expression) 和每个查找 kNO红软基地
(search) 值后解码表达式,如果表达式与查找相同,返kNO红软基地
回结果。 kNO红软基地
如果省略默认值,当没有查找值与表达式相匹配时返回kNO红软基地
一个空值。kNO红软基地
多表显示数据&组函数合计数据  kNO红软基地
目标kNO红软基地
完成本课后, 您应当能够执行下列操作:kNO红软基地
•写SELECT 语句使用等值和非等值连接kNO红软基地
 从多个表中访问数据kNO红软基地
•使用外连接查看不满足连接条件的数据kNO红软基地
•识别可用的组函数kNO红软基地
•描述组函数的使用kNO红软基地
•用GROUP BY 子句分组数据kNO红软基地
•用HAVING 子句包含或排除分组的行kNO红软基地
笛卡尔乘积kNO红软基地
•笛卡尔乘积的形成,当:kNO红软基地
  –一个连接条件被遗漏时kNO红软基地
  –一个连接条件不正确时kNO红软基地
  –在第一个表中的所有行被连接到第二个表的所有行时kNO红软基地
•为了避免笛卡尔乘积的形成,在WHERE 子句中应当总是包kNO红软基地
 含正确的连接条件 。kNO红软基地
用Oracle 语法连接表kNO红软基地
使用一个连接从多个表中查询数据kNO红软基地
    SELECT table1.column, table2.column kNO红软基地
    FROM table1, table2 kNO红软基地
    WHERE table1.column1 =table2.column2;kNO红软基地
•在WHERE 子句中写连接条件kNO红软基地
•当多个表中有相同的列名时,将表名作为列名的前缀定义连接 kNO红软基地
•当数据从多表中查询时,要使用连接 (join) 条件。一个表中kNO红软基地
 的行按照存在于相应列中的公值被连接到另一个表中的行,kNO红软基地
 即,通常所说的主键和外键列。 kNO红软基地
什么是等值连接?kNO红软基地
EMPLOYEES               DEPARTMENTSkNO红软基地
用等值连接返回记录kNO红软基地
SELECT employees.employee_id, employees.last_name, kNO红软基地
               employees.department_id, departments.department_id,kNO红软基地
               departments.location_id kNO红软基地
 FROM employees, departmentskNO红软基地
 WHERE employees.department_id = departments.department_id;kNO红软基地
使用表别名kNO红软基地
•使用表别名简化查询kNO红软基地
•使用表别名改善性能 kNO红软基地
    SELECT e.employee_id, e.last_name, e.department_id,kNO红软基地
                   d.department_id, d.location_id kNO红软基地
    FROM employees e , departments d kNO红软基地
    WHERE e.department_id = d.department_id;kNO红软基地
原则 kNO红软基地
表别名最多可以有 30 个字符,但短一些更好。 kNO红软基地
如果在 FROM 子句中表别名被用于指定的表,那么在整个 SELECT 语句中都要使用表别名。 kNO红软基地
表别名应该是有意义的。 kNO红软基地
表别名只对当前的 SELECT 语句有效。kNO红软基地
多于两个表的连接kNO红软基地
    EMPLOYEES      DEPARTMENTS    LOCATIONSkNO红软基地
非等值连接kNO红软基地
EMPLOYEES                  JOB_GRADESkNO红软基地
用非等值连接返回记录kNO红软基地
    SELECT e.last_name, e.salary, j.grade_level kNO红软基地
    FROM employees e, job_grades j kNO红软基地
    WHERE e.salary kNO红软基地
    BETWEEN j.lowest_sal AND j.highest_sal;kNO红软基地
外连接kNO红软基地
         DEPARTMENTS                        EMPLOYEESkNO红软基地
外连接语法kNO红软基地
•你可以用一个外连接查看那些不满足连接条件的行kNO红软基地
•外连接运算符是加号(+)kNO红软基地
  SELECT table1.column, table2.column kNO红软基地
  FROM table1, table2 kNO红软基地
  WHERE table1.column(+)=table2.column;kNO红软基地
  SELECT table1.column, table2.columnkNO红软基地
  FROM table1, table2kNO红软基地
  WHERE table1.column = table2.column(+); kNO红软基地
•用外连接返回不直接匹配的记录 kNO红软基地
•如果在连接条件中使用外连接操作,缺少的行就可以被返kNO红软基地
 回。操作符是一个在圆括号中的加号 (+),它被放置在连接kNO红软基地
 的缺少信息的一侧。为了使来自不完善表的一行或多行能够kNO红软基地
 被连接,该操作符有产生一个或多个空行的作用。 kNO红软基地
使用外连接kNO红软基地
SELECT e.last_name, e.department_id, d.department_namekNO红软基地
FROM employees e, departments dkNO红软基地
WHERE e.department_id (+) = d.department_id ;kNO红软基地
什么是组函数?kNO红软基地
组函数操作行集,给出每组的结果kNO红软基地
          EMPLOYEESkNO红软基地
组函数的类型kNO红软基地
•AVG 平均值kNO红软基地
•COUNT 计数kNO红软基地
•MAX 最大值kNO红软基地
•MIN 最小值kNO红软基地
•STDDEV 标准差kNO红软基地
•SUM 合计kNO红软基地
•VARIANCE 方差kNO红软基地
组函数 (续) kNO红软基地
每个函数接收一个参数,下面的表确定你可以在语法中使用的选项: kNO红软基地
            函    数                                          说        明  kNO红软基地
AVG([DISTINCT|ALL]n)     n 的平均值,忽略空值  kNO红软基地
COUNT({*|[DISTINCT|ALL]expr})  用 * 计数所有行,包括重复和带空值kNO红软基地
                                                       的行。expr 求除了空计算               kNO红软基地
MAX([DISTINCT|ALL]expr)    expr的最大值,忽略空值  kNO红软基地
MIN([DISTINCT|ALL]expr)    expr的最小值,忽略空值  kNO红软基地
STDDEV([DISTINCT|ALL]x)    n 的标准差,忽略空值  kNO红软基地
SUM([DISTINCT|ALL]n)    合计 n 的值,忽略空值  kNO红软基地
VARIANCE([DISTINCT|ALL]x)    n 的方差,忽略空值 kNO红软基地
组函数的语法 kNO红软基地
SELECT[column,] group_function(column), ...kNO红软基地
FROM tablekNO红软基地
[WHERE condition]kNO红软基地
[GROUP BYcolumn]kNO红软基地
[ORDER BYcolumn];kNO红软基地
使用组函数的原则 kNO红软基地
DISTINCT 使得函数只考虑不重复的值;ALL 使得函数考虑每个值,包括重复值。默认值是 ALL ,因此不需要指定。 kNO红软基地
用于函数的参数的数据类型可以是 CHAR、VARCHAR2、NUMBER 或 DATE。 kNO红软基地
所有组函数忽略空值。为了用一个值代替空值,用 NVL、NVL2 或 COALESCE 函数。 kNO红软基地
当使用 GROUP BY 子句时,Oracle 服务器隐式以升序排序结果集。为了覆盖该默认顺序,DESC 可以被用于 ORDER BY 子句。 kNO红软基地
使用AVG 、SUM、MIN、MAX 函数kNO红软基地
你可以使用AVG 和SUM 用于数字数据 kNO红软基地
SELECT AVG(salary), MAX(salary),kNO红软基地
               MIN(salary), SUM(salary)kNO红软基地
FROM employeeskNO红软基地
WHERE job_id LIKE '%REP%';kNO红软基地
使用COUNT 函数kNO红软基地
COUNT(*) 返回一个表中的行数 kNO红软基地
COUNT 函数有三中格式: kNO红软基地
COUNT(*) kNO红软基地
COUNT(expr) kNO红软基地
COUNT(DISTINCT expr) kNO红软基地
COUNT(*) 返回表中满足 SELECT 语句标准的行数,包括重复行,包括有空值列的行。如果 WHERE 子句包括在 SELECT 语句中,COUNT(*) 返回满足 WHERE 子句条件的行数。 kNO红软基地
COUNT(expr) 返回在列中的由 expr 指定的非空值的数。 kNO红软基地
COUNT(DISTINCT expr) 返回在列中的由 expr 指定的唯一的非空值的数。kNO红软基地
注:expr为列名kNO红软基地
组函数和Null 值kNO红软基地
所有组函数忽略列中的空值。在幻灯片的例子中,kNO红软基地
平均值只基于表中的那些 COMMISSION_PCT 列kNO红软基地
的值有效的行的计算。平均值计算是用付给所有雇kNO红软基地
员的总佣金除以接受佣金的雇员数 (4)。 kNO红软基地
SELECT AVG(commission_pct)kNO红软基地
FROM employees;kNO红软基地
在组函数中使用NVL 函数kNO红软基地
NVL 函数强制组函数包括空值。在幻灯片的例子中,平均值kNO红软基地
被基于所有表中的行来计算,不管 COMMISSION_PCT 列kNO红软基地
是否为空。平均值的计算是用付给所有雇员的总佣金除以公kNO红软基地
司的雇员总数 (20)。 kNO红软基地
SELECT AVG(NVL(commission_pct, 0))kNO红软基地
FROM employees;kNO红软基地
创建数据组:GROUP BY 子句语法kNO红软基地
用GROUP BY 子句划分表中的行到较小的组中kNO红软基地
SELECT column, group_function(column)kNO红软基地
FROM tablekNO红软基地
[WHERE condition]kNO红软基地
[GROUP BY group_by_expression]kNO红软基地
[ORDER BY column];kNO红软基地
在语法中, group_by_expression 指定那些用于将行分组的kNO红软基地
列,这些列的值作为行分组的依据。kNO红软基地
使用 WHERE 子句,你可以在划分行成组以前过滤行。 kNO红软基地
在 GROUP BY 子句中必须包含列。 kNO红软基地
在 GROUP BY 子句中你不能用列别名。 kNO红软基地
默认情况下,行以包含在 GROUP BY 列表中的字段的升序排序。你可以用 ORDER BY 子句覆盖这个默认值。 kNO红软基地
如果在 SELECT 子句中包含了组函数,就不能选择单独的结果,除非单独的列出现在 GROUP BY 子句中。如果你未能在 GROUP BY 子句中包含一个字段列表,你会收到一个错误信息。 kNO红软基地
约束分组结果: HAVING 子句kNO红软基地
用HAVING 子句约束分组:kNO红软基地
1.行被分组kNO红软基地
2.应用组函数kNO红软基地
3.匹配HAVING 子句的组被显示 kNO红软基地
SELECT column, group_functionkNO红软基地
FROM tablekNO红软基地
[WHERE condition]kNO红软基地
[GROUP BY  group_by_expression]kNO红软基地
[HAVING  group_condition]kNO红软基地
[ORDER  BY column];kNO红软基地
使用HAVING 子句kNO红软基地
SELECT department_id, MAX(salary)kNO红软基地
FROM employeeskNO红软基地
GROUP BY department_idkNO红软基地
HAVING MAX(salary)>10000 ;kNO红软基地
嵌套组函数kNO红软基地
显示最大平均薪水kNO红软基地
SELECT MAX(AVG(salary))kNO红软基地
FROM employeeskNO红软基地
GROUP BY department_id;kNO红软基地
创建和管理表 kNO红软基地
目标kNO红软基地
完成本课后, 您应当能够执行下列操作:kNO红软基地
•描述主要数据库对象kNO红软基地
•创建表kNO红软基地
•描述列定义时可用的数据类型kNO红软基地
•改变表的定义kNO红软基地
•删除、改名和截断表kNO红软基地
数据库对象kNO红软基地
表              基本存储单元, 由行和列组成kNO红软基地
视图          逻辑地从一个或多个表中表示数据子集kNO红软基地
序列          数字值发生器kNO红软基地
索引          改善一些查询的性能kNO红软基地
同义词      给对象可选择的名字 kNO红软基地
命名规则kNO红软基地
表命名和列命名:kNO红软基地
•必须以字母开始kNO红软基地
•必须是1–30 个字符长度kNO红软基地
•只能包含A–Z, a–z, 0–9, _, $, 和#kNO红软基地
•同一个用户所拥有的对象之间不能重名kNO红软基地
•不能用Oracle 服务器的保留字 kNO红软基地
注:名字是大小写不敏感的,例如, EMPLOYEES 与 kNO红软基地
eMPloyees 或 eMpLOYEES 作为同一个名字来处理。 kNO红软基地
CREATE TABLE语句kNO红软基地
•用户必须有:kNO红软基地
    –CREATE TABLE权限kNO红软基地
    –一个存储区域kNO红软基地
CREATE TABLE [schema.]tablekNO红软基地
(column datatype[DEFAULT expr][, ...]);kNO红软基地
•必须指定:kNO红软基地
    –表名kNO红软基地
    –列名、列数据类型和列的大小kNO红软基地
schema 与所有者的名字一样 kNO红软基地
table 表的名字 kNO红软基地
DEFAULT expr 指定默认值 kNO红软基地
column 列的名字 kNO红软基地
datatype 列的数据类型和长度kNO红软基地
引用另一个用户的表kNO红软基地
•表属于另一个用户,不在该用户的方案中kNO红软基地
•在那些表名字的前面使用所有者的名字作为kNO红软基地
 前缀 kNO红软基地
 如果一个表不属于本用户,那么,其所有者的名字kNO红软基地
 必须放在表名的前面kNO红软基地
SELECT * kNO红软基地
FROM user_b.employees; kNO红软基地
创建表kNO红软基地
•创建表kNO红软基地
CREATE TABLE dept(kNO红软基地
                             deptno NUMBER(2),kNO红软基地
                             dname VARCHAR2(14),kNO红软基地
                             loc VARCHAR2(13));kNO红软基地
•确认表的创建kNO红软基地
DESCRIBE deptkNO红软基地
Oracle 数据库中的表kNO红软基地
•用户表:kNO红软基地
    –由用户创建和维护的表的集合kNO红软基地
    –包含用户信息kNO红软基地
•数据字典:kNO红软基地
    –由Oracle 服务器创建和维护的表的集合kNO红软基地
    –包含数据库信息 kNO红软基地
有四种数据字典视图,每一种有一个特定的前缀来反映其不kNO红软基地
同的目的。 kNO红软基地
USER_  这些视图包含关于用户所拥有的对象的信息。  kNO红软基地
ALL_     这些视图包含所有用户可访问的表 (对象表和相关的表) 的信息。kNO红软基地
DBA_   这些视图是受限制的视图,它们只能被分配有 DBA 角色的用户所kNO红软基地
                  访问。  kNO红软基地
V$       这些视图是动态执行的视图,包含数据库服务器的性能、存储器kNO红软基地
                  和锁的信息。 kNO红软基地
查询数据字典kNO红软基地
•查看本用户所拥有的表的名称 kNO红软基地
SELECT table_name kNO红软基地
FROM user_tables ;kNO红软基地
•查看本用户所拥有的不同的对象类型kNO红软基地
SELECT DISTINCT object_type kNO红软基地
FROM user_objects ;kNO红软基地
•查看本用户所拥有的表、视图、同义词和序列kNO红软基地
SELECT * FROM user_catalog ;kNO红软基地
数据类型kNO红软基地
      数据类型                           说   明kNO红软基地
VARCHAR2(size)        可变长度的字符数据kNO红软基地
CHAR(size)                  固定长度的字符数据kNO红软基地
NUMBER(p,s)              可变长度的数字数据kNO红软基地
DATE                           日期和时间值kNO红软基地
LONG                           最大2G的可变长度字符数据kNO红软基地
CLOB                           最大4G的字符数据kNO红软基地
RAW and LONG RAW 原始二进制数据kNO红软基地
BLOB                           最大4G的二进制数据kNO红软基地
BFILE                           最大4G的,存储在外部文件中的二kNO红软基地
                                     进制数据kNO红软基地
ROWID                         一个64进制的数制系统,表示表中kNO红软基地
                                     一行的唯一地址 kNO红软基地
用子查询创建表kNO红软基地
该方法既可以创建表还可以将从子查询返回的行插入新创建kNO红软基地
的表中。 kNO红软基地
CREATE TABLE dept80 AS kNO红软基地
               SELECT employee_id, last_name, salary*12 kNO红软基地
                              ANNSAL, hire_datekNO红软基地
               FROM employeeskNO红软基地
               WHERE department_id = 80;kNO红软基地
原则 kNO红软基地
被创建的表要带指定的列名,并且由SELECT语句返回的行被插入到新表中。 kNO红软基地
字段的定义只能包括列名和默认值。 kNO红软基地
如果给出了指定的列,列的数目必须等于子查询的SELECT列表的列数目。 kNO红软基地
如果没有给出了指定的列,表的列名应和子查询中的列名是相同的。 kNO红软基地
完整性规则不会被传递到新表中,仅列的数据类型被定义。 kNO红软基地
ALTER TABLE语句kNO红软基地
用ALTERTABLE语句来:kNO红软基地
•添加一个新列kNO红软基地
•修改一个已存在的列kNO红软基地
•为新列定义一个默认值kNO红软基地
•删除一个列 kNO红软基地
添加列kNO红软基地
ALTER TABLE table ADDkNO红软基地
             (column datatype[DEFAULT expr][, column datatype]...);kNO红软基地
修改列kNO红软基地
ALTER TABLE table MODIFYkNO红软基地
            (column datatype[DEFAULT expr][, column datatype]...);kNO红软基地
删除列kNO红软基地
ALTER TABLE table DROP(column); kNO红软基地
添加新列kNO红软基地
•用ADD字句添加列kNO红软基地
ALTER TABLE dept80 ADD (job_id VARCHAR2(9));kNO红软基地
添加新列的原则 kNO红软基地
你可以添加或修改列。 kNO红软基地
你不能指定新添加的列的位置,新列将成为最后一列。 kNO红软基地
修改列kNO红软基地
•可以改变列的数据类型、大小和默认值kNO红软基地
ALTER TABLE dept80 MODIFY(last_name VARCHAR2(30));kNO红软基地
•对默认值的改变只影响后来插入表中的数据kNO红软基地
原则 kNO红软基地
你可以增加宽度或一个数字列的精度。 kNO红软基地
你可以增加数字列或字符列的宽度。 kNO红软基地
你可以减少一个列的宽度,但仅在列中只包含空值或表中没有行时。 kNO红软基地
你可以改变数据类型,但仅在列中只包含空值时。 kNO红软基地
你可以转换一个CHAR列到VARCHAR2数据类型或转换一个VARCHAR2列到 CHAR 数据类型仅当列中只包含空值时,或者你不改变列的大小时。 kNO红软基地
对默认值的改变仅影响以后插入的列。kNO红软基地
删除列kNO红软基地
用DROP COLUMN子句从表中删除列kNO红软基地
ALTER TABLE dept80kNO红软基地
DROP COLUMN job_id; kNO红软基地
原则 kNO红软基地
列可以有也可以没有数据。 kNO红软基地
用ALTER TABLE语句,一次只能有一列被删除。 kNO红软基地
表被修改后必须至少保留一列。 kNO红软基地
一旦一列被删除,它不能再恢复。 kNO红软基地
删除表kNO红软基地
•在表中的所有数据和结构都被删除kNO红软基地
•任何未决的事务都被提交kNO红软基地
•所有的索引被删除kNO红软基地
•你不能回退DROP TABLE语句kNO红软基地
DROP TABLE dept80;kNO红软基地
DROP TABLE语句删除Oracle表定义,当你删除一个表时,kNO红软基地
数据库丢失表中所有的数据,并且所有与其相关的索引也被kNO红软基地
删除。 kNO红软基地
改变一个对象的名字kNO红软基地
•执行RENAME语句,改变一个表、视图、序列或kNO红软基地
同义词kNO红软基地
RENAME dept TO detail_dept;kNO红软基地
注:你必须是对象的所有者kNO红软基地
截断表kNO红软基地
•TRUNCATE TABLE语句:kNO红软基地
  –删除表中所有的行kNO红软基地
  –释放该表所使用的存储空间kNO红软基地
TRUNCATE TABLE detail_dept;kNO红软基地
•不能回退用TRUNCATE删除的行kNO红软基地
•作为选择,可以用DELETE语句删除行kNO红软基地
子查询&操纵数据  kNO红软基地
目标kNO红软基地
完成本课后, 您应当能够执行下列操作:kNO红软基地
•描述子查询能够解决的问题类型kNO红软基地
•定义子查询kNO红软基地
•列出子查询的类型kNO红软基地
•写单行和多行子查询 kNO红软基地
•描述每个DML 语句kNO红软基地
•插入行到表中kNO红软基地
•更新表中的行kNO红软基地
•从表中删除行kNO红软基地
•控制事务kNO红软基地
用子查询解决问题kNO红软基地
用子查询解决问题 kNO红软基地
假想你想要写一个查询来找出挣钱比 Abel 的薪水还多的人。为了解决这个问题,你需要两个查询:一个找出 Abel 的收入,第二个查询找出收入高于 Abel 的人。 kNO红软基地
你可以用组合两个查询的方法解决这个问题,放置一个查询到另一个查询中。 kNO红软基地
内查询或子查询返回一个值给外查询或主查询。使用一个子查询相当于执行两个连续查询并且用第一个查询的结果作为第二个查询的搜索值。 kNO红软基地
子查询语法kNO红软基地
SELECT select_listkNO红软基地
FROM  tablekNO红软基地
WHERE exproperatorkNO红软基地
             (SELECTselect_list  FROM  table);kNO红软基地
•子查询(内查询) 在主查询之前执行一次kNO红软基地
•子查询的结果被用于主查询(外查询)kNO红软基地
子查询可以被放在 CREATE VIEW 语句中、CREATE kNO红软基地
TABLE 语句、UPDATE 语句、INSERT 语句的 INTO 子句kNO红软基地
和 UPDATE 语句的 SET 子句中。kNO红软基地
使用子查询kNO红软基地
SELECT last_namekNO红软基地
FROM employeeskNO红软基地
WHERE salary >kNO红软基地
                            (SELECT salarykNO红软基地
                             FROM employeeskNO红软基地
                             WHERE last_name = 'Abel');kNO红软基地
使用子查询的原则kNO红软基地
•子查询放在圆括号中kNO红软基地
•将子查询放在比较条件的右边kNO红软基地
•在子查询中的ORDER BY 子句一般不需要。kNO红软基地
•在单行子查询中用单行运算符,在多行子查询中用kNO红软基地
多行运算符 。kNO红软基地
子查询的类型kNO红软基地
•单行子查询:从内 SELECT 语句只返回一行的查询 kNO红软基地
•多行子查询:从内 SELECT 语句返回多行的查询kNO红软基地
单行子查询kNO红软基地
•仅返回一行kNO红软基地
•使用单行比较符kNO红软基地
           运算符                        含义kNO红软基地
               =                             等于kNO红软基地
               >                            大于kNO红软基地
               >=                          大于或等于kNO红软基地
               <                            小于kNO红软基地
               <=                          小于或等于kNO红软基地
               <>                          不等于kNO红软基地
执行单行子查询kNO红软基地
SELECT last_name, job_id, salarykNO红软基地
FROM employeeskNO红软基地
WHERE job_id = kNO红软基地
                            (SELECT job_idkNO红软基地
                             FROM employeeskNO红软基地
                             WHERE employee_id = 141)kNO红软基地
AND salary >kNO红软基地
                           (SELECT salarykNO红软基地
                            FROM employeeskNO红软基地
                            WHERE employee_id = 143);kNO红软基地
多行子查询kNO红软基地
•返回多于一行kNO红软基地
•使用多行比较符kNO红软基地
          操作                                含义kNO红软基地
           IN                     等于列表中的任何成员kNO红软基地
           ANY                 比较子查询返回的每个值kNO红软基地
           ALL                  比较子查询返回的全部值kNO红软基地
在多行子查询中使用ANY 运算符kNO红软基地
SELECT employee_id, last_name, job_id, salarykNO红软基地
FROM employeeskNO红软基地
WHERE salary < ANYkNO红软基地
                                    (SELECT salarykNO红软基地
                                     FROM employeeskNO红软基地
                                     WHERE job_id = 'IT_PROG')kNO红软基地
AND job_id <> 'IT_PROG';kNO红软基地
在多行子查询中使用ALL 运算符kNO红软基地
SELECT employee_id, last_name, job_id, salarykNO红软基地
FROM employeeskNO红软基地
WHERE salary < ALLkNO红软基地
                                    (SELECT salarykNO红软基地
                                     FROM employeeskNO红软基地
                                     WHERE job_id = 'IT_PROG')kNO红软基地
AND job_id <> 'IT_PROG';kNO红软基地
数据操纵语言kNO红软基地
•数据操纵语言 (Data manipulation language DML) kNO红软基地
 是SQL的一个核心部分kNO红软基地
•当你做下面操作时,DML 语句被执行:kNO红软基地
  –添加新行到表中kNO红软基地
  –修改表中的行kNO红软基地
  –删除表中的行kNO红软基地
•事务由DML 语句的集合组成,它组成工作的逻辑kNO红软基地
 单元 kNO红软基地
INSERT语句语法kNO红软基地
•使用INSERT语句添加新行到表中kNO红软基地
INSERT INTO table [(column [, column...])] kNO红软基地
VALUES(value [, value...]);kNO红软基地
在语法中: kNO红软基地
table 是表的名字 kNO红软基地
column 是表中的列名 kNO红软基地
value 是列的相应值 kNO红软基地
•用该语法一次只能插入一行kNO红软基地
插入新行kNO红软基地
•插入一个包含每一个列值的新行kNO红软基地
•值以表中列的默认顺序列表kNO红软基地
•在INSERT子句中字段可以随意列表kNO红软基地
INSERT INTO departments(department_id, department_name, kNO红软基地
                                                manager_id, location_id)kNO红软基地
VALUES (70, 'Public Relations', 100, 1700);kNO红软基地
•字符和日期要用单引号括起来kNO红软基地
插入带空值的行kNO红软基地
•隐式方法: 省略字段列表中的列kNO红软基地
INSERT INTO departments (department_id, kNO红软基地
                                                epartment_name )kNO红软基地
VALUES(30, 'Purchasing');kNO红软基地
•显式方法: 在VALUES子句中指定NULL关键字 kNO红软基地
INSERT INTO departmentskNO红软基地
VALUES(100, 'Finance', NULL, NULL);kNO红软基地
使用替换变量kNO红软基地
•在SQL 语句中用&替换变量提示用户输入值kNO红软基地
•&是一个用于变量值的占位符kNO红软基地
INSERT INTO departments (department_id, kNO红软基地
                                                department_name, location_id)kNO红软基地
VALUES (&department_id, '&department_name',&location);kNO红软基地
从另一个表中复制行 kNO红软基地
•用一个子查询写INSERT语句kNO红软基地
INSERT INTO sales_reps(id, name, salary, commission_pct)kNO红软基地
SELECT employee_id, last_name, salary, commission_pctkNO红软基地
FROM employeeskNO红软基地
WHERE job_id LIKE '%REP%';kNO红软基地
•不用VALUES子句kNO红软基地
•在子查询中列的数目要匹配INSERT子句中列的数目kNO红软基地
在INSERT语句中使用子查询kNO红软基地
INSERT INTOkNO红软基地
             (SELECT employee_id, last_name,email,kNO红软基地
                              hire_date, job_id, salary, department_idkNO红软基地
              FROM employeeskNO红软基地
              WHERE department_id = 50) kNO红软基地
VALUES (99999, 'Taylor', 'DTAYLOR',kNO红软基地
                TO_DATE('07-JUN-99', 'DD-MON-RR'),kNO红软基地
                'ST_CLERK', 5000, 50);kNO红软基地
改变表中的数据kNO红软基地
•用UPDATE语句修改已存在的行kNO红软基地
UPDATE table kNO红软基地
SET column=  value[, column = value, ...]kNO红软基地
[WHERE condition];kNO红软基地
table 是表的名字 kNO红软基地
column 是表中列的名字 kNO红软基地
value 是相应的值或对应列的子查询 kNO红软基地
condition 确定要被更新的行,由列名、表达式、常数和比较kNO红软基地
操作符组成 。用查询表来显示受更新的行以确认更新操作。 kNO红软基地
•如果需要,一次更新多行kNO红软基地
更新表中的行kNO红软基地
•如果使用了WHERE子句,指定的一行或多行将被kNO红软基地
 修改kNO红软基地
UPDATE employeeskNO红软基地
SET department_id = 70kNO红软基地
WHERE employee_id = 113;kNO红软基地
•如果遗漏WHERE子句,表中所有的行都会被修改kNO红软基地
UPDATE copy_empkNO红软基地
SET department_id = 110;kNO红软基地
用子查询更新两列kNO红软基地
更新雇员114 的工作和薪水,使其和雇员205 相同 kNO红软基地
UPDATE employeeskNO红软基地
SET job_id = kNO红软基地
                       (SELECT job_id FROM employeeskNO红软基地
                       WHERE employee_id = 205), kNO红软基地
        salary = (SELECT salary FROM employeeskNO红软基地
                       WHERE employee_id = 205) kNO红软基地
WHERE employee_id = 114;kNO红软基地
更新基于另一个表的行kNO红软基地
在UPDATE语句中用子查询来更新基于另一个表中值的那些kNO红软基地
行 。kNO红软基地
UPDATE copy_empkNO红软基地
SET department_id = (SELECT department_idkNO红软基地
                                      FROM employeeskNO红软基地
                                      WHERE employee_id = 100)kNO红软基地
WHERE job_id = any(SELECT job_idkNO红软基地
                              FROM employeeskNO红软基地
                              WHERE employee_id = 200);kNO红软基地
从表中删除行kNO红软基地
使用DELETE语句从表中删除已存在的行kNO红软基地
•如果指定了WHERE子句,则指定的行被删除kNO红软基地
DELETE FROM departments kNO红软基地
WHERE department_name = 'Finance';kNO红软基地
•如果遗漏了WHERE子句,表中所有的行都被删除kNO红软基地
DELETE FROM copy_emp;kNO红软基地
注:删除所有行后,表的数据结构被保留。kNO红软基地
建议的方法是:kNO红软基地
Truncate table copy_emp;kNO红软基地
删除基于另一个表的行kNO红软基地
在DELETE语句中用子查询来删除表中的基于另一个表中值kNO红软基地
的行。 kNO红软基地
DELETE FROM employeeskNO红软基地
WHERE department_id =any(SELECT department_idkNO红软基地
                                           FROM departmentskNO红软基地
                                           WHERE department_name kNO红软基地
                                                         LIKE '%Public%');kNO红软基地
MERGE语句kNO红软基地
•提供有条件地更新和插入数据到数据库表中的能力kNO红软基地
•如果行存在,执行UPDATE;如果是一个新行,执kNO红软基地
 行INSERT:kNO红软基地
  –避免分散更新kNO红软基地
  –增进性能和易用性kNO红软基地
  –在数据仓库应用中有用 kNO红软基地
MERGE语句的语法kNO红软基地
你能够用MERGE语句有条件地插入或更新表中的行kNO红软基地
MERGE INTO table_nametable aliaskNO红软基地
   USING (table|view|sub_query) aliaskNO红软基地
   ON (join condition)kNO红软基地
   WHEN MATCHED THENkNO红软基地
         UPDATE SET col1 = col_val1,kNO红软基地
                                 col2 = col2_valkNO红软基地
   WHEN NOT MATCHED THENkNO红软基地
         INSERT (column_list)kNO红软基地
         VALUES (column_values);kNO红软基地
MERGE语句的语法(续)kNO红软基地
• INTO子句 指定你正在更新或插入的目的表kNO红软基地
• USING子句 指定数据源要被更新或插入的数据的源;可以kNO红软基地
  是一 个表、视图或者子查询。 kNO红软基地
• ON 子句 是一个条件,在此条件上MERGE操作即可以更新kNO红软基地
  也可以插入 kNO红软基地
• WHEN MATCHED | 通知服务器怎样响应连接条件的结果kNO红软基地
MERGE语句的例子kNO红软基地
MERGE INTO copy_emp c kNO红软基地
USING employees e kNO红软基地
ON (c.employee_id = e.employee_id) kNO红软基地
WHEN MATCHED THEN kNO红软基地
UPDATE SET  c.first_name = e.first_name, kNO红软基地
               c.last_name = e.last_name, c.email = e.email,kNO红软基地
               c.phone_number = e.phone_number, kNO红软基地
               c.hire_date = e.hire_date, c.job_id = e.job_id,kNO红软基地
               c.salary = e.salary, c.commission_pct = e.commission_pct, kNO红软基地
               c.manager_id = e.manager_id,kNO红软基地
               c.department_id = e.department_id kNO红软基地
WHEN NOT MATCHED THEN kNO红软基地
INSERT VALUES(e.employee_id, e.first_name, e.last_name, kNO红软基地
                              e.email, e.phone_number, e.hire_date, e.job_id, kNO红软基地
                              e.salary, e.commission_pct, e.manager_id, kNO红软基地
                              e.department_id); kNO红软基地
数据库事务处理kNO红软基地
Oracle服务器基于事务处理确保数据的一致性。在kNO红软基地
改变数据时,事务给你更多的灵活性和可控性,如kNO红软基地
果用户程序失败或者系统失败,事务可以确保数据kNO红软基地
的一致性。 kNO红软基地
数据库事务处理由下面的语句组成:kNO红软基地
•(数据操纵语言)DML语句,对数据进行永久的改变kNO红软基地
•(数据定义语言)DDL 语句kNO红软基地
•(数据控制语言)DCL 语句kNO红软基地
数据库事务处理(续)kNO红软基地
•执行第一个DML SQL 语句时开始kNO红软基地
•遇到下面事件之一结束:kNO红软基地
  –一个COMMIT或ROLLBACK语句被发布kNO红软基地
  –一个DDL 或DCL 语句执行(自动提交)kNO红软基地
  –用户退出 iSQL*PluskNO红软基地
  –系统崩溃kNO红软基地
COMMIT和ROLLBACK语句优点kNO红软基地
用COMMIT和ROLLBACK语句,你能够:kNO红软基地
•确保数据的一致性kNO红软基地
•在数据永久改变之前进行预览kNO红软基地
•分组逻辑相关的操作kNO红软基地
控制事务kNO红软基地
你能够用COMMIT、SAVEPOINT和ROLLBACK语句控制事kNO红软基地
务逻辑。 kNO红软基地
COMMIT  结束当前事务,使得所有未决的数据永久改变。kNO红软基地
SAVEPOINT name   在当前事务中标记保存点。kNO红软基地
ROLLBACK    结束当前事务,丢弃所有未决的数据改变。  kNO红软基地
ROLLBACK TO SAVEPOINT name kNO红软基地
 回滚当前事务到指定的保存点,从而丢弃保存点创建后的任何改变。如果忽略了 TO SAVEPOINT 子句,ROLLBACK 语句回滚整个事务。由于保存点是逻辑的,因此,没有办法列出已经创建的保存点。kNO红软基地
回退改变到一个标记kNO红软基地
•用SAVEPOINT语句在当前事务中创建一个标记kNO红软基地
•用ROLLBACK TO SAVEPOINT语句回退到该标记 kNO红软基地
UPDATE...SAVEPOINT update_done;kNO红软基地
Savepoint created.kNO红软基地
INSERT...ROLLBACK TO update_done;kNO红软基地
Rollback complete.kNO红软基地
隐式事务处理 kNO红软基地
•在下面的情况下,一个自动提交发生:kNO红软基地
  –DDL 语句被发送kNO红软基地
  –DCL 语句被发送kNO红软基地
  –正常退出iSQL*Plus,没有明确地发送COMMIT或ROLLBACK语句kNO红软基地
•当iSQL*Plus 非正常退出时,或者发生系统故障kNO红软基地
 时,一个自动回退发生kNO红软基地
COMMIT或ROLLBACK之前数据的状态kNO红软基地
•以前的数据状态能够被恢复kNO红软基地
•当前用户能用SELECT语句查看DML 操作的结果kNO红软基地
•其他用户不能观察当前用户DML 语句的结果kNO红软基地
•受影响的行被锁定,其他用户不能改变受影响的行kNO红软基地
 中数据 。kNO红软基地
在COMMIT之后数据的状态kNO红软基地
•数据在数据库中被永久地改变kNO红软基地
•数据的以前状态被永久地丢失kNO红软基地
•所有用户都能观察该结果kNO红软基地
•受影响行的锁定被释放,其它用户可以操纵那些行kNO红软基地
•所有保存点被擦除kNO红软基地
提交改变kNO红软基地
•产生改变kNO红软基地
DELETE FROM employeeskNO红软基地
WHERE employee_id = 99999;kNO红软基地
INSERT INTO departments kNO红软基地
VALUES (290, 'Corporate Tax', NULL, 1700);kNO红软基地
•提交改变kNO红软基地
COMMIT;kNO红软基地
ROLLBACK 后的数据状态kNO红软基地
用ROLLBACK语句丢弃所有未决的改变:kNO红软基地
•数据的改变被撤消kNO红软基地
•数据的以前状态被恢复kNO红软基地
•受影响行的锁定被释放kNO红软基地
DELETE FROM copy_emp;kNO红软基地
ROLLBACK;kNO红软基地
读一致性kNO红软基地
目的是确保每个用户看到的数据和他最后一次提交,并kNO红软基地
且在一个DML操作开始之前的数据一样。kNO红软基地
•读一致性在所有时间保证对数据的一致的观察kNO红软基地
•一个用户所做的改变不与另一个用户所做的改变冲突kNO红软基地
•读一致性确保下面的操作有同样的数据:kNO红软基地
      –读者不等待写者kNO红软基地
      –写者不等待读者 kNO红软基地
•数据库用户用两种方法访问数据库: kNO红软基地
读操作 (SELECT 语句) kNO红软基地
写操作 (插入、更新、删除 语句) kNO红软基地
锁定kNO红软基地
锁是防止访问相同资源的事务之间的破坏性交互的kNO红软基地
机制。既可以是用户对象 (例如表或行),也可以是kNO红软基地
对用户不可见的系统对象 (例如共享数据结构和数据kNO红软基地
字典行)。 kNO红软基地
在Oracle 数据库中,锁:kNO红软基地
•在并发事务之间防止破坏性的交互作用kNO红软基地
•不需要用户的动作kNO红软基地
•自动使用最低的限制级别kNO红软基地
•在事务处理期间保持kNO红软基地
•有两种类型:显式锁定和隐式锁定 kNO红软基地
隐式锁定kNO红软基地
•两种锁模式:kNO红软基地
    –独占锁:不允许其他用户访问kNO红软基地
    –共享所:允许其他用户访问kNO红软基地
•高级数据并发操作:kNO红软基地
    –DML: 表共享,行独占–查询: 不需要锁kNO红软基地
    –DDL: 保护定义对象kNO红软基地
•锁保持直到commit 或rollback kNO红软基地
内置约束 kNO红软基地
目标kNO红软基地
完成本课后, 您应当能够执行下列操作:kNO红软基地
•描述约束kNO红软基地
•创建和维护约束kNO红软基地
什么是约束?kNO红软基地
•约束强制规则在表级kNO红软基地
•如果有从属关系,约束防止表的删除kNO红软基地
•下面的约束类型是有效的:kNO红软基地
–NOT NULLkNO红软基地
–UNIQUE kNO红软基地
–PRIMARY KEYkNO红软基地
–FOREIGN KEYkNO红软基地
–CHECK kNO红软基地
• Oracle服务器用约束 (constraints) 来防止无效数据输入到表中。 kNO红软基地
•你可以使用约束做下面的事: kNO红软基地
在插入、更新行或者从表中删除行的时候强制表中的数据kNO红软基地
   遵循规则。对于成功的操作,约束必须被满足 。kNO红软基地
如果表之间有依赖关系,防止表的删除 。kNO红软基地
数据一致性约束 kNO红软基地
        约  束                       说   明  kNO红软基地
NOT NULL  指定列不能包含空值  kNO红软基地
UNIQUE             指定列的值或者列的组合的值对于表中kNO红软基地
                                 所有的行必须是唯一的  kNO红软基地
PRIMARY KEY   表的每行的唯一性标识  kNO红软基地
FOREIGN KEY   在列和引用表的一个列之间建立并且强kNO红软基地
                                  制一个外键关系  kNO红软基地
CHECK              指定一个必须为真的条件 kNO红软基地
约束原则kNO红软基地
•命名一个约束,或者由Oracle 用SYS_Cn格式产生kNO红软基地
  一个名字kNO红软基地
•创建一个约束:kNO红软基地
  –在创建表的同时kNO红软基地
  –在创建表之后kNO红软基地
•在列或者表级定义一个约束kNO红软基地
•在数据字典中查看约束kNO红软基地
定义约束kNO红软基地
CREATE TABLE [schema.]tablekNO红软基地
                             (columndatatype[DEFAULT expr]kNO红软基地
                             [column_constraint],...kNO红软基地
                             [table_constraint][,...]);kNO红软基地
CREATE TABLE employeeskNO红软基地
                             (employee_id NUMBER(6),kNO红软基地
                              first_name VARCHAR2(20),...kNO红软基地
                              job_id VARCHAR2(10) NOT NULL,kNO红软基地
                              CONSTRAINT emp_emp_id_pk kNO红软基地
                              PRIMARY KEY (EMPLOYEE_ID)); kNO红软基地
在语法中: kNO红软基地
schema 与所有者同名 kNO红软基地
table 表的名字 kNO红软基地
DEFAULT expr 指定一个默认值。如果在插入语句中省略了一个值,在省略处使用该默认值 kNO红软基地
column 列的名字 kNO红软基地
datatype 列的数据类型和长度 kNO红软基地
column_constraint 是一个作为列定义一部分的完整性约束 kNO红软基地
table_constraint 是一个作为表定义一部分的完整性约束 kNO红软基地
定义约束(续)kNO红软基地
•列级约束:kNO红软基地
 只涉及一个单个的列,对于该列用规范定义;能够定义完整kNO红软基地
 性约束的任何类型  kNO红软基地
column[CONSTRAINT constraint_name] kNO红软基地
             constraint_type,kNO红软基地
•表级约束kNO红软基地
 涉及一个或多个列,表中的列被分别定义;除了 NOT NULL,kNO红软基地
 能够定义任意约束kNO红软基地
column,...[CONSTRAINT constraint_name] kNO红软基地
                  constraint_type(column, ...),kNO红软基地
NOT NULL约束kNO红软基地
确保某些列不允许空值:定义在列级kNO红软基地
CREATE TABLE employeeskNO红软基地
                (employee_id NUMBER(6),kNO红软基地
                 last_name VARCHAR2(25) NOT NULL,kNO红软基地
                 salary NUMBER(8,2),kNO红软基地
                 commission_pct NUMBER(2,2),kNO红软基地
                 hire_date DATE kNO红软基地
                                 CONSTRAINT emp_hire_date_nn NOT NULLkNO红软基地
                     );kNO红软基地
UNIQUE约束kNO红软基地
UNIQUE键完整性约束,要求列或者列的组合中 (键) 的每个kNO红软基地
值是唯一的,既在表中指定的列或列组合中不能有两行有kNO红软基地
相同的值。定义UNIQUE键约束的列 (或列组合) 被称为唯一kNO红软基地
键 (unique key)。kNO红软基地
UNIQUE约束既可以定义在表级也可以定义在列级:kNO红软基地
CREATE TABLE employeeskNO红软基地
                (employee_id          NUMBER(6),kNO红软基地
                 last_name              VARCHAR2(25) NOT NULL,kNO红软基地
                 email                       VARCHAR2(25),kNO红软基地
                 salary                      NUMBER(8,2),kNO红软基地
                 commission_pct    NUMBER(2,2),kNO红软基地
                 hire_date                DATE NOT NULL,...kNO红软基地
                CONSTRAINT emp_email_uk UNIQUE(email)); kNO红软基地
PRIMARYKEY约束kNO红软基地
PRIMARY KEY约束为表创建一个主键。每个表只能创建一kNO红软基地
个主键。PRIMARY KEY约束是表中的对行唯一标识的一个kNO红软基地
列或者列组合,该约束强制列或列组合的唯一性,并且确保kNO红软基地
作为主键一部分的列不能包含空值。 kNO红软基地
既可以定义在表级也可以定义在列级: kNO红软基地
CREATE TABLE departmentskNO红软基地
                (department_id NUMBER(4),kNO红软基地
                 department_name VARCHAR2(30) kNO红软基地
                 CONSTRAINT dept_name_nn NOT NULL,kNO红软基地
                 manager_id NUMBER(6),kNO红软基地
                 location_id NUMBER(4),kNO红软基地
          CONSTRAINT dept_id_pk PRIMARY KEY(department_id)); kNO红软基地
FOREIGNKEY约束kNO红软基地
FOREIGN KEY约束(语法)kNO红软基地
既可以定义在表级也可以定义在列级:kNO红软基地
CREATE TABLE employeeskNO红软基地
                (employee_id NUMBER(6),kNO红软基地
                 last_name VARCHAR2(25) NOT NULL,kNO红软基地
                 email VARCHAR2(25),kNO红软基地
                 salary NUMBER(8,2),kNO红软基地
                 commission_pct NUMBER(2,2),kNO红软基地
                 hire_date DATE NOT NULL,...kNO红软基地
                 department_id NUMBER(4),kNO红软基地
       CONSTRAINT emp_dept_fk FOREIGN KEY (department_id)kNO红软基地
       REFERENCES departments(department_id),kNO红软基地
       CONSTRAINT emp_email_uk UNIQUE(email)); kNO红软基地
FOREIGN KEY约束 (续) kNO红软基地
外键被定义在子表中,包含引用列的表是父表。外键用下面关键字的组合定义: kNO红软基地
FOREIGN KEY 被用于在表约束级定义子表中的列。 kNO红软基地
REFERENCES 确定父表中的表和列。 kNO红软基地
ON DELETE CASCADE 指出当父表中的行被删除时,子表中相依赖的行也将被级联删除。 kNO红软基地
ON DELETE SET NULL 当父表的值被删除时,转换外键值为空。 kNO红软基地
默认行为被称为约束规则,该规则不允许引用数据的更新或删除。 kNO红软基地
无ON DELETE CASCADE或ON DELETE SET NULL选项,如果父表中的行在子表中引用,则它不能被删除kNO红软基地
CHECK约束kNO红软基地
•定义每行必须满足的条件kNO红软基地
• CHECK约束能够被定义在列级或表级。 kNO红软基地
..., salary NUMBER(2)kNO红软基地
CONSTRAINT emp_salary_min kNO红软基地
CHECK (salary > 0),...kNO红软基地
添加约束语法kNO红软基地
用ALTER TABLE语句:kNO红软基地
•添加或删除约束,但不修改它的结构kNO红软基地
•启用或禁用约束kNO红软基地
•用MODIFY子句添加一个NOT NULL约束kNO红软基地
ALTER TABLE tablekNO红软基地
             ADD [CONSTRAINT constraint] type (column);kNO红软基地
table 是表的名字 kNO红软基地
constraint 是约束的名字 kNO红软基地
type 是约束的类型 kNO红软基地
column 是受约束影响的列的名字 kNO红软基地
删除约束kNO红软基地
•从EMPLOYEES表中删除经理约束kNO红软基地
 ALTER TABLE employeeskNO红软基地
             DROP CONSTRAINT emp_manager_fk;kNO红软基地
•删除DEPARTMENTS表上的PRIMARY KEY约束,并且删kNO红软基地
 除相关联的在EMPLOYEES.DEPARTMENT_ID列上的kNO红软基地
 FOREIGN KEY约束。kNO红软基地
ALTER TABLE departmentskNO红软基地
             DROP PRIMARY KEY CASCADE;kNO红软基地
禁用约束kNO红软基地
•执行ALTERTABLE语句的DISABLE子句来禁用完整性约kNO红软基地
 束。kNO红软基地
•应用CASCADE选项禁用相依赖的完整性约束kNO红软基地
ALTER TABLE employeeskNO红软基地
DISABLE CONSTRAINT emp_emp_id_pk CASCADE;kNO红软基地
原则 kNO红软基地
你即可以在CREATE TABLE语句也可以在ALTER TABLE语句中使用 DISABLE子句。 kNO红软基地
CASCADE子句禁用相依赖的完整性约束。 kNO红软基地
禁用唯一或主键约束会移除唯一性索引。kNO红软基地
启用约束kNO红软基地
•用ENABLE字句启用一个在表中定义的当前禁用的完整性 约束。kNO红软基地
 ALTER TABLE employeeskNO红软基地
 ENABLE CONSTRAINT emp_emp_id_pk; kNO红软基地
•如果启用一个UNIQUE键或PRIMARY KEY约束一个kNO红软基地
 UNIQUE或PRIMARY KEY索引被自动创建。kNO红软基地
原则: kNO红软基地
如果启用一个约束,约束将应用于表中所有的数据,所有在表中的数据都必须适合该约束。 kNO红软基地
如果你启用一个UNIQUE键或者PRIMARY KEY约束,一个UNIQUE或PRIMARY KEY索引将被自动地创建。 kNO红软基地
你即可以CREATE TABLE语句也可以在ALTER TABLE语句中使用ENABLE子句。 kNO红软基地
启用一个带CASCADE选项的被禁用的主键约束不会起用任何依赖于该主键的外键。 kNO红软基地
查看约束kNO红软基地
查询USER_CONSTRAINTS表来查看所有约束定义和命名。kNO红软基地
SELECT constraint_name, constraint_type,search_conditionkNO红软基地
FROM user_constraintskNO红软基地
WHERE table_name = 'EMPLOYEES';kNO红软基地
注:那些没有被表的所有者命名的约束将收到系统指定的约束kNO红软基地
名。在约束类型中,C代表CHECK,P代表PRIMARY KEY,kNO红软基地
R代表引用完整性, U代表UNIQUE键。注意NOT NULL约束kNO红软基地
实际上是一个CHECK约束。 kNO红软基地
查看约束关联的列kNO红软基地
观察在USER_CONS_COLUMNS视图中与约束名关联的列kNO红软基地
SELECT constraint_name, column_namekNO红软基地
FROM user_cons_columnskNO红软基地
WHEREtable_name = 'EMPLOYEES';kNO红软基地
创建视图 kNO红软基地
目标kNO红软基地
完成本课后, 您应当能够执行下列操作:kNO红软基地
•描述视图kNO红软基地
•创建视图,修改视图的定义,删除视图kNO红软基地
•通过视图取回数据kNO红软基地
•通过视图插入、更新和删除数据kNO红软基地
•创建和使用内嵌视图kNO红软基地
•执行“Top-N”分析 kNO红软基地
数据库对象kNO红软基地
     对 象                              说    明kNO红软基地
Table (表)                  基本存储单元,由行和列组成kNO红软基地
View (视图)               数据来自一个或者多个表的数kNO红软基地
                                  据子集的逻辑表示kNO红软基地
Sequence (序列)      产生主键的值kNO红软基地
Index (索引)              改善某些查询的性能kNO红软基地
Synonym (同义词)    一个对象的替换名字kNO红软基地
什么是视图?kNO红软基地
你可以通过创建表的视图来表现数据的逻辑子集或数据的组kNO红软基地
合。视图是基于表或另一个视图的逻辑表,一个视图并不包kNO红软基地
含它自己的数据,它象一个窗口,通过该窗口可以查看或改kNO红软基地
变表中的数据。视图基于其上的表称为基表。视图在数据字kNO红软基地
典中作为一个SELECT语句存储。 kNO红软基地
为什么用视图?kNO红软基地
•限制数据访问kNO红软基地
•使得复杂的查询容易kNO红软基地
•提供数据的独立性kNO红软基地
•表现相同数据的不同观察 kNO红软基地
简单视图和复杂视图kNO红软基地
下面是简单视图: kNO红软基地
数据仅来自一个表 kNO红软基地
不包含函数或数据分组 kNO红软基地
能通过视图执行DML操作 kNO红软基地
下面是复杂视图: kNO红软基地
数据来自多个表 kNO红软基地
包含函数或数据分组 kNO红软基地
不总是允许通过视图进行DML操作 kNO红软基地
创建视图kNO红软基地
创建一个视图,EMPVU80,其中包含了在部门80 中雇员kNO红软基地
的详细信息。kNO红软基地
CREATE VIEW empvu80 kNO红软基地
AS SELECT employee_id, last_name, salarykNO红软基地
FROM employeeskNO红软基地
WHERE department_id = 80;kNO红软基地
查看视图的结构kNO红软基地
DESCRIBE empvu80kNO红软基地
创建视图kNO红软基地
•用子查询中的列别名创建视图kNO红软基地
CREATE VIEW salvu50kNO红软基地
AS SELECT employee_id ID_NUMBER,kNO红软基地
                     last_name NAME,salary*12 ANN_SALARYkNO红软基地
FROM employeeskNO红软基地
WHERE department_id = 50;kNO红软基地
kNO红软基地
CREATE VIEW salvu50 (ID_NUMBER, NAME, ANN_SALARY) kNO红软基地
AS SELECT employee_id, last_name, salary*12 kNO红软基地
FROM employees kNO红软基地
WHERE department_id = 50; kNO红软基地
•从该视图中选择列,视图中的列使用别名命名kNO红软基地
DESCRIBE SQLVU50kNO红软基地
查询视图kNO红软基地
•一旦视图被创建,你就可以查询数据字典视图USER_VIEWSkNO红软基地
来看视图的名字和视图定义。构成视图的SELECT语句的文本kNO红软基地
被存储在一个LONG列中。 kNO红软基地
•用视图存取数据 kNO红软基地
当你用视图存取数据时,Oracle 服务器执行下面的操作: kNO红软基地
从数据字典表USER_VIEWS中取回视图定义。 kNO红软基地
检查对视图的基表的数据存取权限。 kNO红软基地
转换视图查询为一个在基表或表上的等价操作,换句话说,数据从基表得到,或更新基表。kNO红软基地
修改视图kNO红软基地
•用CREATE OR REPLACE VIEW子句,为每个列添加一个kNO红软基地
 别名kNO红软基地
CREATE OR REPLACE VIEW empvu80kNO红软基地
               (id_number, name, sal, department_id)kNO红软基地
                AS SELECT employee_id,kNO红软基地
                                     first_name || ' ' || last_name, kNO红软基地
                                     salary, department_idkNO红软基地
                FROM employeeskNO红软基地
                WHERE department_id = 80;kNO红软基地
•在CREATE VIEW子句中的字段别名列表,按照与子查询中的字段相同的顺序排列kNO红软基地
创建复杂视图kNO红软基地
创建包含组函数的复杂视图,以从两个表中显示值kNO红软基地
CREATE VIEW dept_sum_vukNO红软基地
                          (name, minsal, maxsal, avgsal)kNO红软基地
            AS SELECT d.department_name, MIN(e.salary), kNO红软基地
            MAX(e.salary),AVG(e.salary)kNO红软基地
            FROM employees e, departments dkNO红软基地
            WHERE e.department_id = d.department_idkNO红软基地
            GROUP BY d.department_name;kNO红软基地
视图中DML 操作的执行规则kNO红软基地
•只能在简单视图上执行DML 操作kNO红软基地
•如果视图中包含下面的部分就不能删除行:kNO红软基地
  –组函数kNO红软基地
  –GROUP BY子句kNO红软基地
  –DISTINCT关键字kNO红软基地
  –伪列ROWNUM关键字 kNO红软基地
视图中DML 操作的执行规则kNO红软基地
如果视图中包含下面的部分就不能修改数据:kNO红软基地
•组函数kNO红软基地
•GROUP BY子句kNO红软基地
•DISTINCT关键字kNO红软基地
•伪列ROWNUM关键字kNO红软基地
•用表达式定义的列 kNO红软基地
WITH CHECK OPTION子句 kNO红软基地
•你可以确保DML 操作在视图上被执行,用WITH CHECKkNO红软基地
  OPTION子句检查视图中的域。kNO红软基地
CREATE OR REPLACE VIEW empvu20kNO红软基地
                AS SELECT * FROM employeeskNO红软基地
                WHERE department_id = 20kNO红软基地
       WITH CHECK OPTION CONSTRAINT empvu20_ck ;kNO红软基地
•任何改变视图的任意行中部门号的企图都会失败,因为它违kNO红软基地
 反了WITH CHECK OPTION约束。kNO红软基地
 可以通过视图执行引用完整性检查,你也可以在数据库级别kNO红软基地
 强制约束。kNO红软基地
•添加WITH READ ONLY选项到视图定义中,能够确保无kNO红软基地
 DML 操作发生。kNO红软基地
删除视图kNO红软基地
删除视图不会丢失数据,因为视图是基于数据库中kNO红软基地
的基本表的。kNO红软基地
DROP VIEW empvu80;kNO红软基地
内建视图kNO红软基地
•内建视图是一个带有别名(或相关名) 的可以在SQL 语句中kNO红软基地
 使用的子查询。kNO红软基地
•一个主查询的在FROM 子句中指定的子查询就是一个内建kNO红软基地
 视图的离子。kNO红软基地
•内建子查询不是方案对象kNO红软基地
SELECT a.last_name,a.salary,a.department_id,b.maxsal kNO红软基地
FROM employees a,kNO红软基地
           (SELECT department_id,max(salary) maxsal kNO红软基地
                           FROM employees kNO红软基地
                           GROUP BY department_id) b kNO红软基地
WHERE a.department_id = b.department_id kNO红软基地
AND a.salary < b.maxsal; kNO红软基地
Top-N 分析kNO红软基地
•Top-N 查询寻找一列的n个最大或最小值,例如:kNO红软基地
  –销售最好的前10 位产品是什么?kNO红软基地
  –销售最差的前10 位产品是什么?kNO红软基地
•最大值和最小值在Top-N 查询中设置 kNO红软基地
• Top-N查询在需要基于一个条件,从表中显示最前面的n条kNO红软基地
 记录或最后面的n条记录时是有用的。kNO红软基地
执行Top-N 分析kNO红软基地
Top-N 分析查询的高级结构是:kNO红软基地
SELECT [column_list], ROWNUM kNO红软基地
FROM (SELECT [column_list] kNO红软基地
            FROM table ORDER BY Top-N_column)kNO红软基地
WHERE ROWNUM <= N;kNO红软基地
Top-N 分析的例子kNO红软基地
为了从EMPLOYEES表中显示挣钱最多的3 个人的名字及其kNO红软基地
薪水:kNO红软基地
SELECT ROWNUM as RANK, last_name, salary kNO红软基地
FROM (SELECT last_name,salary kNO红软基地
            FROM employees ORDER BY salary DESC)kNO红软基地
WHERE ROWNUM <= 3;kNO红软基地
其它数据库对象 kNO红软基地
目标kNO红软基地
完成本课后, 您应当能够执行下列操作:kNO红软基地
•创建、维护和使用序列kNO红软基地
•创建和维护索引kNO红软基地
•创建私有和公有同义词kNO红软基地
数据库对象kNO红软基地
对 象                              说    明kNO红软基地
Table (表)                  基本存储单元,由行和列组成kNO红软基地
View (视图)               数据来自一个或者多个表的数kNO红软基地
                                  据子集的逻辑表示kNO红软基地
Sequence (序列)      产生主键的值kNO红软基地
Index (索引)              改善某些查询的性能kNO红软基地
Synonym (同义词)    一个对象的替换名字kNO红软基地
什么是序列?kNO红软基地
序列:kNO红软基地
•是自动产生的唯一的数kNO红软基地
•是可共享的对象kNO红软基地
•典型的用途是创建一个主键值kNO红软基地
•可以代替应用程序编号kNO红软基地
•当使用高速缓存存储器时,访问序列值的效率提高 kNO红软基地
CREATE SEQUENCE语句语法kNO红软基地
定义一个序列来自动产生有顺序的数:kNO红软基地
CREATE SEQUENCE sequencekNO红软基地
                [INCREMENT BY n]kNO红软基地
                [START WITH n]kNO红软基地
                [{MAXVALUE n| NOMAXVALUE}]kNO红软基地
                [{MINVALUE n| NOMINVALUE}]kNO红软基地
                [{CYCLE | NOCYCLE}]kNO红软基地
                [{CACHE n| NOCACHE}];kNO红软基地
• sequence 是序列发生器的名字 kNO红软基地
INCREMENT BY n 指定序列号之间的间隔,在这儿n是一个整数 (如果该子句 被省略,序列增量为1)kNO红软基地
CREATE SEQUENCE语句语法(续)kNO红软基地
• START WITH n 指定要产生的第一个序列数 (如果该子句kNO红软基地
  被省略,序列  从1 开始) kNO红软基地
• MAXVALUE n 指定序列能产生的最大值 kNO红软基地
• NOMAXVALUE 对于升序序列指定10^27为最大值,对于kNO红软基地
  降序序列指定-1 为最大值 (这是默认选项) kNO红软基地
• MINVALUE n 指定最小序列值 kNO红软基地
• NOMINVALUE 对于升序序列指定1为最小值,对于降序序kNO红软基地
  列指定 -(10^26) 为最小值 (这是默认选项) kNO红软基地
• CYCLE|NOCYCLE 指定序列在达到它的最大或最小值之kNO红软基地
  后,是否继续产生(NOCYCLE是默认选项) kNO红软基地
• CACHE n|NOCACHE 指定Oracle服务器预先分配多少值,kNO红软基地
  并且保持在内存中(默认 情况下,Oracle服务器缓冲20个值) kNO红软基地
创建序列kNO红软基地
创建一个序列,命名为DEPT_DEPTID_SEQ。kNO红软基地
CREATE SEQUENCE dept_deptid_seqkNO红软基地
                INCREMENT BY 10kNO红软基地
                START WITH 120kNO红软基地
                MAXVALUE 9999kNO红软基地
                NOCACHEkNO红软基地
                NOCYCLE;kNO红软基地
确认序列kNO红软基地
•校验在USER_SEQUENCES数据字典表中的序列值。kNO红软基地
SELECT sequence_name, min_value, max_value,kNO红软基地
               increment_by, last_numberkNO红软基地
FROM user_sequences;kNO红软基地
•如果NOCACHE被指定,LAST_NUMBER列显示kNO红软基地
 下一个可用序列数。kNO红软基地
NEXTVAL和CURRVAL伪列kNO红软基地
在创建序列后,它产生连续的数给你在表中使用。用kNO红软基地
NEXTVAL和CURRVAL伪列引用序列值。你必须用序列名kNO红软基地
限定NEXTVAL,当你引用sequence.NEXTVAL时,一个新kNO红软基地
的序列数被产生并且当前的序列数被放入CURRVAL。  kNO红软基地
•NEXTVAL返回下一个可用的序列值,它每次返回kNO红软基地
 一个唯一的被引用值,即使对于不同的用户也是如kNO红软基地
 此。kNO红软基地
•CURRVAL获得当前的序列值kNO红软基地
•在CURRVAL获得一个值以前,NEXTVAL对该序kNO红软基地
 列必须发布。kNO红软基地
使用NEXTVAL和CURRVAL的规则 kNO红软基地
你可以在下面的上下文中使用NEXTVAL和CURRVAL: kNO红软基地
一个不是子查询的一部分的SELECT语句的SELECT列表 kNO红软基地
在一个INSERT语句中子查询的SELECT列表 kNO红软基地
一个INSERT语句中的VALUES子句 kNO红软基地
一个UPDATE语句的SET子句 kNO红软基地
你不能在下面的上下文中使用NEXTVAL和CURRVAL: kNO红软基地
一个视图的SELECT列表 kNO红软基地
一个带DISTINCT关键字的SELECT语句 kNO红软基地
一个带GROUP BY、HAVING或ORDER BY子句的SELECT语句 kNO红软基地
一个在SELECT、DELETE或UPDATE语句中的子句 kNO红软基地
在CREATE TABLE或ALTER TABLE语句中的DEFAULT表达式 kNO红软基地
使用序列kNO红软基地
•在location ID 2500 中插入一个新部门名称“Support”kNO红软基地
INSERT INTO departmentskNO红软基地
              (department_id, department_name, location_id)kNO红软基地
              VALUES (dept_deptid_seq.NEXTVAL, kNO红软基地
                             'Support', 2500);kNO红软基地
•查看当前的DEPT_DEPTID_SEQ序列值kNO红软基地
SELECT dept_deptid_seq.CURRVALkNO红软基地
FROM dual;kNO红软基地
使用序列(续)kNO红软基地
•可以更快地访问缓存在存储器中的序列值kNO红软基地
•序列值可能产生间隙,由于:kNO红软基地
  –一个回退发生kNO红软基地
  –系统崩溃kNO红软基地
  –一个序列被用于另一个表kNO红软基地
•如果带NOCACHE创建序列,查询kNO红软基地
 USER_SEQUENCES 表,可以查看下一个可用值 。kNO红软基地
修改序列kNO红软基地
创建增量值,最大值,最小值,循环选项和缓存选项kNO红软基地
ALTER SEQUENCE dept_deptid_seqkNO红软基地
             INCREMENT BY 20kNO红软基地
             MAXVALUE 999999kNO红软基地
             NOCACHEkNO红软基地
             NOCYCLE; kNO红软基地
如果序列达到MAXVALUE限制,将再无来自序列的新值产kNO红软基地
生,并且你将收到一个序列已经超过MAXVALUE的错误指kNO红软基地
示。为了继续使用序列,你可以用ALTER SEQUENCE语句kNO红软基地
修改该序列。 kNO红软基地
修改序列的原则kNO红软基地
•你必须是该序列的所有者,或者有ALTER该序列的权限kNO红软基地
•只有未来的序列数受影响kNO红软基地
•为了以不同的数字重新开始一个序列,该序列必须被删除并kNO红软基地
 且被重新创建kNO红软基地
•一些确认被执行 kNO红软基地
注:用ALTER SEQUENCE语句,START WITH选项不能被kNO红软基地
改变。为了以不同的数重新开始一个序列,该序列必须被删kNO红软基地
除和重新创建。kNO红软基地
删除序列:kNO红软基地
•用DROP SEQUENCE语句从数据字典中删除序列kNO红软基地
•序列一旦不再被引用可以被删除kNO红软基地
DROP SEQUENCE dept_deptid_seq; kNO红软基地
什么是索引?kNO红软基地
索引:kNO红软基地
•是一个方案对象kNO红软基地
•由Oracle 服务器使用,索引用一个指针来加速行的取回kNO红软基地
•用快速路径访问方法来快速定位数据,减小磁盘I/OkNO红软基地
•表和它的索引是无关的kNO红软基地
•被Oracle 服务器自动地使用和维护 kNO红软基地
索引怎样被创建?kNO红软基地
•自动:在一个表的定义中,当定义一个PRIMARY   KEY或kNO红软基地
  UNIQUE约束时,一个唯一索引被自动创建。kNO红软基地
•手动:用户能够在列上创建非唯一的索引来加速对  行的访kNO红软基地
 问。kNO红软基地
索引的类型 kNO红软基地
•唯一索引kNO红软基地
当你在一个表中定义一个列为主键,或者定义一个唯一键约kNO红软基地
束时Oracle服务器自动创建该索引,索引的名字习惯上是约kNO红软基地
束的名字。kNO红软基地
•非唯一索引kNO红软基地
由用户来创建kNO红软基地
创建索引kNO红软基地
•在一个或多个列上创建索引kNO红软基地
CREATE INDEX index ON table(column[, column]...);kNO红软基地
•改善EMPLOYEES表中LAST_NAME列的查询访 问速度。kNO红软基地
 CREATE INDEX emp_last_name_idxkNO红软基地
 ON employees(last_name);kNO红软基地
index 是索引的名字 kNO红软基地
table 是表的名字 kNO红软基地
column 是表中被索引的列的名字 kNO红软基地
什么时候创建索引kNO红软基地
你应该创建索引,如果:kNO红软基地
•一个列包含一个大范围的值kNO红软基地
•一个列包含很多的空值kNO红软基地
•一个或多个列经常同时在一个WHERE子句中或一kNO红软基地
 个连接条件中被使用kNO红软基地
•表很大,并且经常的查询期望取回少于百分之2 到kNO红软基地
 4 的行。kNO红软基地
确认索引kNO红软基地
•USER_INDEXES数据字典视图包含索引和它唯一的名字kNO红软基地
•USER_IND_COLUMNS视图包含索引名、表名和列名 kNO红软基地
SELECT ic.index_name,ic.column_name,kNO红软基地
               ic.column_positioncol_pos,ix.uniquenesskNO红软基地
FROM user_indexes ix, user_ind_columns ickNO红软基地
WHERE ic.index_name = ix.index_namekNO红软基地
AND ic.table_name = 'EMPLOYEES';kNO红软基地
从USER_INDEXES数据字典视图可以确认索引的存在。你kNO红软基地
也可以查询 USER_IND_COLUMNS视图,检查与索引有关kNO红软基地
的列。 kNO红软基地
删除索引kNO红软基地
•用DROP INDEX命令从数据字典中删除索引kNO红软基地
DROP INDEX index;kNO红软基地
注:你不能修改索引,为了改变索引,你必须先删kNO红软基地
除它,然后重新创建它。kNO红软基地
同义词kNO红软基地
创建同义词可以简化对象访问(对象的另一个名字)。同义词kNO红软基地
能够:kNO红软基地
•另一个用户易于查阅表的所有者kNO红软基地
•使对象名字变短kNO红软基地
CREATE  [PUBLIC] SYNONYM synonymkNO红软基地
FOR object; kNO红软基地
PUBLIC 创建一个可以被所有用户访问的同义词 kNO红软基地
synonym 是要被创建的同义词的名字 kNO红软基地
object 指出要创建同义词的对象 kNO红软基地
创建和删除同义词kNO红软基地
•为DEPT_SUM_VU视图创建一个短名字kNO红软基地
CREATE SYNONYM d_sumkNO红软基地
FORM dept_sum_vu;kNO红软基地
•删除同义词kNO红软基地
DROP SYNONYM d_sum;kNO红软基地
练习题kNO红软基地
创建employee表kNO红软基地
    (emp_id number(6),emp_name varchar2(20),kNO红软基地
    work_date date,job_id varchar(10),dept_id (4),kNO红软基地
    salary number(8,2),remark varchar2(10))kNO红软基地
创建jobs表kNO红软基地
     (job_id varchar2(10),job_desc varchar2(40),kNO红软基地
     min_salary number(6), max_salary number(6 ))kNO红软基地
创建dept表kNO红软基地
     (dept_id number(4),dept_name varchar2(30),kNO红软基地
     dept_type varchar2(8))kNO红软基地
定义约束条件kNO红软基地
    分别在employee表的emp_id列、jobs表的job_id列、dept表的dept_id列上定义主键约束条件。kNO红软基地
    分别在employee表的job_id列参照jobs(job_id)、kNO红软基地
     dept_id列参照dept(dept_id)创建外键。kNO红软基地
表中插入数据kNO红软基地
查询表中按部门分组的收入总数、最大值、最小值、平均值。kNO红软基地
查询表中收入在2000至3000的员工收入kNO红软基地
将收入小于2000的员工工资*1.5,在2000至4000之间的*1.3,高于4000的*1.1kNO红软基地
 kNO红软基地

展开

同类推荐

热门PPT

相关PPT