SlideShare uma empresa Scribd logo
1 de 172
Oracle11g Database SQL 语言基础 2011.8 By Kevinlin. 林少杰 [email_address]
SQL 语言简介 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object]
查询数据
使用 SELECT 查询数据 表 1 表 2 查询表中的若干行数据 查询表中的若干列 联合不同表 中的数据
基本 SELECT 语句 ,[object Object],[object Object],SELECT *|{[DISTINCT]  column | expression  [ alias ],...} FROM  table;
查询所有列 SELECT  * FROM  departments;
查询指定列 SELECT department_id, location_id FROM  departments;
SELECT 语句编写 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
SELECT 语句中的四则运算 SELECT last_name, salary, 12*(salary+100) FROM  employees;
Null 值 ,[object Object],[object Object],[object Object]
定义列别名 ( Column Alias) ,[object Object],[object Object],[object Object],[object Object],SELECT last_name "Name" , salary*12 "Annual Salary" FROM  employees; …
连接符操作 ,[object Object],[object Object],[object Object],SELECT last_name||job_id AS "Employees" FROM  employees;
原义字符串 ( Literal Character Strings) ,[object Object],[object Object],[object Object],… SELECT last_name ||' is a '||job_id  AS "Employee Details" FROM  employees;
Quote ( q )  操作 ,[object Object],[object Object],[object Object],SELECT department_name || ' Department' ||  q'[ 's Manager Id:  ]'  || manager_id  AS "Department and Manager"  FROM departments;
消除重复行 SELECT DISTINCT department_id FROM  employees; … SELECT DISTINCT department_id  , job_id FROM  employees; ,[object Object]
DESCRIBE 命令 DESCRIBE employees
限制返回结果 ,[object Object],[object Object],SELECT *|{[DISTINCT]  column|expression  [ alias ],...} FROM  table [WHERE  condition(s) ]; SELECT employee_id, last_name, job_id, department_id FROM  employees WHERE  department_id = 90 ;
比较运算符 ( Comparison Operators) 不等于 ,[object Object],两个值之间 ( 包括限值 ) BETWEEN ...AND... 符合列表内的值 IN(set) 符合字符样式 LIKE 是 null 值 IS NULL 小于 ,[object Object],小于或等于 ,[object Object],大于或等于 >= 大于 ,[object Object],等于 ,[object Object],意义 运算符
使用比较运算符 SELECT last_name, salary FROM  employees WHERE  salary <= 3000 ;
使用比较运算符 SELECT last_name, salary FROM  employees WHERE  salary BETWEEN 2500 AND 3500 ; ,[object Object],下限 上限
使用比较运算符 SELECT employee_id, last_name, salary, manager_id FROM  employees WHERE  manager_id  IN (100, 101, 201) ; ,[object Object]
使用比较运算符 ,[object Object],[object Object],[object Object],[object Object],SELECT first_name FROM  employees WHERE first_name LIKE 'S%' ;
使用比较运算符 ,[object Object],[object Object],SELECT last_name FROM  employees WHERE  last_name  LIKE '_o%' ; SELECT last_name FROM  employees WHERE  last_name LIKE  '%SA%' ESCAPE 'apos;;
使用比较运算符 SELECT last_name, manager_id FROM  employees WHERE  manager_id IS NULL ; ,[object Object]
逻辑运算符 如果条件为假,则返回 TRUE NOT 如果前后两个条件有一个为真,则返回 TRUE ,[object Object],如果前后两个条件都为真,则返回 TRUE ,[object Object],Meaning Operator
使用逻辑运算符 SELECT employee_id, last_name, job_id, salary FROM  employees WHERE  salary >= 10000 AND  job_id LIKE '%MAN%' ; ,[object Object]
使用逻辑运算符 ,[object Object],SELECT employee_id, last_name, job_id, salary FROM  employees WHERE  salary >= 10000 OR  job_id LIKE '%MAN%' ;
使用逻辑运算符 ,[object Object],[object Object],[object Object],[object Object],[object Object]
运算符的优先级规则 可以使用括号改变默认的优先级别 Not equal to ,[object Object],NOT ,[object Object],AND   ,[object Object],OR ,[object Object],IS   [NOT]   NULL ,  LIKE ,  [NOT]   IN ,[object Object],[NOT]   BETWEEN ,[object Object],比较运算符 ,[object Object],连接运算符 ,[object Object],四则运算 ,[object Object],运算符 优先级
排序 ORDER BY ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
排序 ORDER BY ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
替换变量 Substitution Variables ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],SELECT  employee_id, last_name, job_id,  &&column_name FROM  employees ORDER BY  &column_name  ;
SQL 函数 SQL functions 函数 输入 参数  1 参数 2 参数 n 函数进行运算 输出 结果
SQL 函数的两种类型 单行函数 多行函数 每行返回一个结果 多行返回一个结果 函数
单行函数 Single-Row Functions ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],function_name  [( arg1, arg2,... )] 转换函数 字符函数 数字函数 日期函数 一般函数
字符函数 Character Functions 字符函数 LOWER UPPER INITCAP CONCAT SUBSTR LENGTH INSTR LPAD | RPAD TRIM REPLACE 大小写转换函数 字符处理函数
大小写转换函数 Case-Conversion sql course LOWER('SQL Course') Sql Course INITCAP('SQL Course') SQL COURSE UPPER('SQL Course') 结果 函数
字符处理函数 BLACK and BLUE  REPLACE ('JACK and JUE','J','BL')  10 LENGTH('HelloWorld') 6 INSTR('HelloWorld', 'W') *****24000 LPAD(salary,10,'*') 24000***** RPAD(salary, 10, '*') HelloWorld CONCAT('Hello', 'World') elloWorld TRIM('H' FROM 'HelloWorld') Hello SUBSTR('HelloWorld',1,5) 结果 函数
数字函数 100 MOD(1600, 300) 45.93 ROUND(45.926, 2) 45.92 TRUNC(45.926, 2) 结果 函数
日期函数 '08-SEP-95' NEXT_DAY  ('01-SEP-95','FRIDAY') '28-FEB-95' LAST_DAY  ('01-FEB-95') 19.6774194 MONTHS_BETWEEN ('01-SEP-95','11-JAN-94') ‘ 29-FEB-96' ADD_MONTHS (‘31-JAN-96',1) Result Function 01-JUL-03 TRUNC(SYSDATE ,'MONTH') 01-JAN-03 TRUNC(SYSDATE ,'YEAR') 01-AUG-03 ROUND(SYSDATE,'MONTH') 01-JAN-04 ROUND(SYSDATE ,'YEAR')
转换函数 隐式转换 显式转换 数据类型转换
数据类型的隐式转换 NUMBER VARCHAR2 or CHAR DATE VARCHAR2 or CHAR To From VARCHAR2 or CHAR NUMBER VARCHAR2 or CHAR DATE To From …  where hire_date > '01-JAN-90'   …  where name_varchar > 2345   不建议使用隐式转换,可能导致 SQL 的性能下降
数据类型的显式转换 数字类型 字符类型 TO_CHAR() TO_NUMBER() 日期类型 TO_CHAR() TO_DATE()
日期转换为字符 SELECT last_name, TO_CHAR(hire_date, 'fmDD Month YYYY') AS HIREDATE FROM  employees; …
数字转换为字符 SELECT  TO_CHAR(salary, '$99,999.00')  SALARY FROM  employees WHERE  last_name = 'Ernst';
字符转换为日期、数字 SQL> select  TO_number('6,000.00','99,999.00')  from dual; TO_NUMBER('6,000.00','99,999.00') --------------------------------- 6000 SQL> select  TO_date('20110818','YYYYMMDD')  from dual; TO_DATE('201 ------------ 18-AUG-11
函数嵌套 ,[object Object],[object Object],F3( F2 ( F1(col,arg1) , arg2 ),arg3) Step 1 = Result  1 Step 2 = Result  2 Step 3 = Result 3
一般函数 ,[object Object],函数 含义 ,[object Object],如果 expr1 为 null ,则返回 expr2 ,[object Object],如果 expr1 不为 null ,则返回 expr2 ;如果 expr1 为 null ,则返回 expr3 ,[object Object],如果 expr1 与 expr2 相同,则返回 null ,否则返回 expr1 ,[object Object],按顺序判断 expr1~n ,返回首个不为 null 的表达式的值
条件表达式 Conditional Expressions ,[object Object],[object Object],[object Object],[object Object],CASE  expr  WHEN  comparison_expr1  THEN  return_expr1 [WHEN  comparison_expr2  THEN  return_expr2 WHEN  comparison_exprn  THEN  return_exprn ELSE  else_expr ] END DECODE( col|expression, search1, result1    [ , search2, result2,..., ]   [ , default ])
组函数 ,[object Object],EMPLOYEES Maximum salary in  EMPLOYEES   table …
组函数类型 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],组函数
数据分组  GROUP BY  表 EMPLOYEES … 在 EMPLOYEES   表中,计算每个部门的平均工资 SELECT  column ,  group_function(column) FROM  table [WHERE  condition ] [GROUP BY  group_by_expression ] [ORDER BY  column ]; 4400 9500 3500 6400 10033
多个列的 GROUP BY  SELECT  department_id dept_id, job_id, SUM(salary) FROM  employees GROUP BY department_id, job_id  ORDER BY department_id;
组函数的使用 ,[object Object],SELECT  department_id,  COUNT(last_name) FROM  employees; SELECT  department_id, job_id,  COUNT(last_name) FROM  employees GROUP BY department_id;
组函数的使用 ,[object Object],[object Object],错误: SELECT  department_id, AVG(salary) FROM  employees WHERE  AVG(salary) > 8000 GROUP BY department_id; 正确: SELECT  department_id, AVG(salary) FROM  employees GROUP BY department_id HAVING AVG(salary) > 8000 ;
组函数的嵌套 SELECT  MAX(AVG(salary)) FROM  employees GROUP BY department_id;
多个表的数据查询
SQL:1999 标准中的 JOIN 语法 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],SELECT table1.column, table2.column FROM table1 [ NATURAL JOIN  table2 ] | [ JOIN   table2   USING  ( column_name )] | [JOIN  table2   ON ( table1.column_name  =  table2.column_name )]| [ LEFT|RIGHT|FULL OUTER JOIN   table2   ON ( table1.column_name  =  table2.column_name )]| [ CROSS JOIN  table2 ];
NATURAL JOIN ,[object Object],[object Object],[object Object]
使用 USING 进行 join ,[object Object],[object Object]
使用 ON 进行 join ,[object Object],[object Object],SELECT e.employee_id, e.last_name, e.department_id,  d.department_id, d.location_id FROM  employees e JOIN departments d ON  (e.department_id = d.department_id);
使用 ON 进行 join SELECT employee_id, city, department_name FROM  employees e  JOIN  departments d ON  d.department_id = e.department_id  JOIN  locations l ON  d.location_id = l.location_id; …
额外条件 SELECT e.employee_id, e.last_name, e.department_id,  d.department_id, d.location_id FROM  employees e JOIN departments d ON  (e.department_id = d.department_id) AND  e.manager_id = 149 ; ,[object Object],SELECT e.employee_id, e.last_name, e.department_id,  d.department_id, d.location_id FROM  employees e JOIN departments d ON  (e.department_id = d.department_id) WHERE  e.manager_id = 149 ; 或
自连接 self-join ,[object Object],SELECT worker.last_name emp, manager.last_name mgr FROM  employees worker  JOIN  employees manager ON  (worker.manager_id = manager.employee_id); … 表 EMPLOYEES 查询结果
非对等连接 Nonequijoins SELECT e.last_name, e.salary, j.grade_level FROM  employees e JOIN job_grades j ON  e.salary  BETWEEN  j.lowest_sal  AND  j.highest_sal; …
外连接 Outer Joins EMPLOYEES DEPARTMENTS There are no employees in department 190.  …
内连接和外连接 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
左外连接 Left Outer Join SELECT e.last_name, e.department_id, d.department_name FROM  employees e LEFT OUTER JOIN departments d ON  (e.department_id = d.department_id) ; …
全外连接 Left Outer Join SELECT e.last_name, d.department_id, d.department_name FROM  employees e FULL OUTER JOIN departments d ON  (e.department_id = d.department_id) ; …
笛卡尔乘积 Cartesian Products ,[object Object],[object Object],[object Object],[object Object],[object Object]
子查询 subquery ,[object Object],哪个员工的工资比员工 A 高 ? 主查询 : 员工 A 的工资是多少 ? 子查询 :
子查询语法 ,[object Object],[object Object],[object Object],[object Object],[object Object],SELECT select_list FROM table WHERE expr operator   (SELECT select_list   FROM table );
Exists  ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
NOT Exists  和  NOT in ,[object Object],[object Object],SELECT department_id, department_name FROM departments d WHERE  NOT EXISTS  (SELECT 'X' FROM  employees WHERE  department_id = d.department_id); 查找哪个部门没有员工 ( 表 employees 中有一行数据的 department_id 为 null ) ,[object Object],[object Object],[object Object],[object Object],No rows selected.
IN  、 ANY  、 ALL ,[object Object],[object Object],[object Object],[object Object],SELECT employee_id, last_name, job_id, salary FROM  employees WHERE  salary < ANY (SELECT salary FROM  employees WHERE  job_id = 'IT_PROG') AND  job_id <> 'IT_PROG';
IN  、 ANY  、 ALL ,[object Object],[object Object],[object Object],SELECT employee_id, last_name, job_id, salary FROM  employees WHERE  salary < ALL (SELECT salary FROM  employees WHERE  job_id = 'IT_PROG') AND  job_id <> 'IT_PROG';
集合操作符 Set Operators UNION / UNION   ALL A B A B A B INTERSECT A B MINUS
集合操作符说明 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
UNION SELECT employee_id, job_id FROM  employees UNION SELECT employee_id, job_id FROM  job_history; … …
UNION ALL SELECT employee_id, job_id, department_id FROM  employees UNION ALL SELECT employee_id, job_id, department_id FROM  job_history ORDER BY  employee_id; … …
INTERSECT SELECT employee_id, job_id FROM  employees INTERSECT SELECT employee_id, job_id FROM  job_history;
MINUS SELECT employee_id FROM  employees MINUS SELECT employee_id FROM  job_history; …
列数量与类型匹配 SELECT  location_id ,  department_name &quot;Department&quot; ,  TO_CHAR(NULL) &quot;Warehouse location&quot;   FROM departments UNION SELECT  location_id,   TO_CHAR(NULL) &quot;Department&quot; ,  state_province FROM locations;
集合操作符与 ORDER BY  ,[object Object],[object Object],[object Object]
多列子查询 Multiple-Column Subqueries 主查询 WHERE ( MANAGER_ID, DEPARTMENT_ID )  IN 子查询结果 100  90 102  60 124  50
多列子查询 Multiple-Column Subqueries ,[object Object],[object Object]
成对比较子查询 返回与名字为 John 的员工在同一个部门,且同一个领导的员工 SELECT employee_id, manager_id, department_id FROM empl_demo WHERE  (manager_id, department_id)  IN (SELECT  manager_id, department_id FROM empl_demo WHERE first_name = 'John') AND first_name <> 'John';
不成对比较子查询 返回与名字为 John 的员工中任意一个领导相符和任意一个部门相符的员工 当名字为 John 多于一人时,与成对比较子查询的返回结果不同。 SELECT  employee_id, manager_id, department_id FROM  empl_demo WHERE  manager_id IN (SELECT manager_id  FROM empl_demo WHERE first_name = 'John') AND department_id IN (SELECT department_id FROM empl_demo WHERE first_name = 'John')  AND first_name <> 'John';
关联子查询 关联子查询用于行与行的处理,关联子查询对每个数据行都要进行 一次。 GET 主查询 fetch 到一行数据 EXECUTE 子查询根据这行数据的值进行运算 USE 根据子查询的结果,决定是否返回这行数据
关联子查询  vs  嵌套子查询 嵌套子查询: 子查询首先执行,且执行一次,返回相关结果 主查询使用子查询返回的结果进行一次运算 关联子查询: 主查询 fetch 到一行数据 根据这行数据,进行子查询运算 根据子查询的结果,决定是否返回这行数据 重复以上过程,直到主查询结束
使用关联子查询 SELECT  column1 ,  column2 , ... FROM  table1 WHERE  column1  operator    (SELECT  column1, column2 FROM  table2 WHERE  expr1  =  .expr2 ); outer outer SELECT e.employee_id, last_name,e.job_id FROM  employees e  WHERE  2 <= (SELECT COUNT(*) FROM  job_history  WHERE  employee_id = e.employee_id );
WITH ,[object Object],[object Object],[object Object]
WITH 示例 WITH  dept_costs  AS ( SELECT d.department_name, SUM(e.salary) AS dept_total FROM  employees e JOIN departments d ON  e.department_id = d.department_id GROUP BY d.department_name), avg_cost   AS ( SELECT SUM(dept_total)/COUNT(*) AS dept_avg FROM  dept_costs ) SELECT *  FROM  dept_costs   WHERE  dept_total > (SELECT dept_avg  FROM  avg_cost ) ORDER BY department_name;
处理数据
DML Data Manipulation Language ,[object Object],[object Object],[object Object],[object Object],[object Object]
INSERT INSERT INTO departments VALUES (100, 'Finance', NULL, NULL); INSERT INTO departments (department_id,  department_name) VALUES (30, 'Purchasing'); INSERT INTO sales_reps(id, name, salary, commission_pct) SELECT employee_id, last_name, salary, commission_pct FROM  employees INSERT INTO employees (employee_id,hire_date) VALUES   (113,SYSDATE);
多表 INSERT ,[object Object],[object Object],[object Object],[object Object],[object Object]
Unconditional INSERT ALL INSERT  ALL   INTO sal_history VALUES(EMPID,HIREDATE,SAL)   INTO mgr_history VALUES(EMPID,MGR,SAL) SELECT employee_id EMPID, hire_date HIREDATE,    salary SAL, manager_id MGR  FROM  employees   WHERE employee_id > 200;
Unconditional INSERT ALL INSERT  ALL   INTO sal_history VALUES(EMPID,HIREDATE,SAL)   INTO mgr_history VALUES(EMPID,MGR,SAL) SELECT employee_id EMPID, hire_date HIREDATE,    salary SAL, manager_id MGR  FROM  employees   WHERE employee_id > 200;
Conditional INSERT ALL INSERT  ALL WHEN  HIREDATE <  ' 01-JAN-95 '   THEN INTO emp_history VALUES(EMPID,HIREDATE,SAL) WHEN  COMM IS NOT NULL  THEN INTO emp_sales VALUES(EMPID,COMM,SAL) SELECT employee_id EMPID, hire_date HIREDATE,  salary SAL, commission_pct COMM FROM  employees
Conditional INSERT FIRST INSERT FIRST WHEN salary < 5000 THEN INTO sal_low VALUES (employee_id, last_name, salary) WHEN salary between 5000 and 10000 THEN INTO sal_mid VALUES (employee_id, last_name, salary) ELSE INTO sal_high VALUES (employee_id, last_name, salary) SELECT employee_id, last_name, salary FROM employees
Pivoting INSERT ,[object Object],6000 5000 4000 3000 2000 6 176 FRI THUR WED TUES MON Week_ID Emp_ID 6000 6 176 5000 6 176 4000 6 176 3000 6 176 2000 6 176 SALES WEEK Employee_ID
Pivoting INSERT INSERT ALL   INTO sales_info VALUES (employee_id,week_id,sales_MON)   INTO sales_info VALUES (employee_id,week_id,sales_TUE)   INTO sales_info VALUES (employee_id,week_id,sales_WED)   INTO sales_info VALUES (employee_id,week_id,sales_THUR)   INTO sales_info VALUES (employee_id,week_id, sales_FRI)   SELECT EMPLOYEE_ID, week_id, sales_MON, sales_TUE,   sales_WED, sales_THUR,sales_FRI    FROM sales_source_data;
UPDATE UPDATE employees SET  department_id = 50 WHERE  employee_id = 113; UPDATE  copy_emp SET  department_id = 110; UPDATE employees SET  department_id = 50 WHERE  employee_id = null; UPDATE  employees SET  job_id  = (SELECT  job_id FROM employees  WHERE  employee_id = 205) WHERE  employee_id  =  113;
UPDATE 中的关联子查询 UPDATE  table1 alias1 SET  column = (SELECT  expression FROM  table2 alias2 WHERE  alias1.column =  alias2.column );
DELETE DELETE FROM departments WHERE  department_name = ‘Finance'; DELETE FROM  copy_emp; DELETE FROM employees WHERE  department_id = (SELECT department_id FROM  departments WHERE  department_name  LIKE '%Public%');
DELETE 中的关联子查询 DELETE FROM  table1 alias1 WHERE  column operator   (SELECT  expression   FROM  table2 alias2   WHERE  alias1.column = alias2.column);
TRUNCATE TRUNCATE TABLE  table_name ; ,[object Object],[object Object],[object Object]
事务 ,[object Object],[object Object],[object Object],[object Object]
事务的开始与结束 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
事务的显式控制 SAVEPOINT   B SAVEPOINT A DELETE INSERT UPDATE INSERT COMMIT 时间轴 Transaction ROLLBACK  to SAVEPOINT B ROLLBACK  to SAVEPOINT A ROLLBACK
Commit 或 Rollback 前的数据状态 ,[object Object],[object Object],[object Object],[object Object]
Commit 后的数据状态 ,[object Object],[object Object],[object Object],[object Object],[object Object]
Rollback 后的数据状态 ,[object Object],[object Object],[object Object]
语句级回滚 Statement-Level Rollback ,[object Object],[object Object],[object Object]
读一致性 Read Consistency ,[object Object],[object Object],[object Object],[object Object],[object Object]
读一致性的实现 SELECT  * FROM userA.employees; UPDATE employees SET  salary = 7000 WHERE  last_name = 'Grant'; Data blocks Undo segments Changed and   unchanged data Before change (“old” data) 用户 A 用户  B Read- consistent image
SELECT 中的 FOR UPDATE 子句 ,[object Object],[object Object],[object Object],[object Object],SELECT employee_id, salary, commission_pct, job_id FROM employees  WHERE job_id = 'SA_REP' FOR UPDATE  ORDER BY employee_id;
创建数据库对象
数据库对象 逻辑上代表一个或多个表的数据子集 View  产生单调递增的数值 Sequence  存放数据行的逻辑存储单元 Table 同义词,一个对象的替代名称 Synonym  用于改进查询性能 Index 描述 对象
表的命名规则 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
CREATE TABLE ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],CREATE TABLE [ schema .] table ( column   datatype  [DEFAULT  expr ][, ...]);
CREATE TABLE DESCRIBE dept CREATE TABLE dept   (deptno  NUMBER(2), dname  VARCHAR2(14), loc  VARCHAR2(13), create_date DATE DEFAULT SYSDATE );
引用其他用户的表 USERB USERA SELECT *  FROM userB.employees; SELECT *  FROM userA.employees;
CTAS (Create Table As Select) CREATE TABLE  dept80 AS     SELECT   employee_id, last_name,  salary*12 ANNSAL,  hire_date   FROM  employees   WHERE  department_id = 80; DESCRIBE dept80
数据类型 未经处理的类型 RAW and LONG RAW   二进制数据类型 (up to 4 GB) BLOB 存储在外部文件的二进制数据类型 (up to 4 GB) BFILE 日期类型 DATE  变长的字符类型  (up to 2 GB) LONG  字符类型 (up to 4 GB) CLOB 代表表中数据行的唯一地址 ROWID 定长的字符数据 CHAR( size )  变长的数值类型 NUMBER( p , s)   变长的字符类型 VARCHAR2( size ) 描述 Data Type
数据类型 存储时间间隔的类型 INTERVAL YEAR TO MONTH 存储时间间隔的类型 INTERVAL DAY TO SECOND 较精细的日期类型 TIMESTAMP 描述 Data Type
约束 Constraints ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
约束 Constraints ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
约束 Constraints ,[object Object],[object Object],[object Object],CREATE TABLE [ schema .] table ( column   datatype  [DEFAULT  expr ] [ column_constraint ], ... [ table_constraint ][,...] ); column,... [CONSTRAINT  constraint_name ]  constraint_type ( column , ...), column   [CONSTRAINT  constraint_name ]  constraint_type ,
约束 Constraints ,[object Object],[object Object],CREATE TABLE employees( employee_id  NUMBER(6) CONSTRAINT emp_emp_id_pk PRIMARY KEY, first_name  VARCHAR2(20), ...); CREATE TABLE employees( employee_id  NUMBER(6), first_name  VARCHAR2(20), ... job_id  VARCHAR2(10) NOT NULL, CONSTRAINT emp_emp_id_pk  PRIMARY KEY (EMPLOYEE_ID) ); 1 2
外键约束  FOREIGN KEY Constraint 部门表  员工表 外键 INSERT INTO 操作 允许 ( 部门表的主键列不存在数值 9) 允许 主键 … …
外键约束  FOREIGN KEY Constraint ,[object Object],[object Object],[object Object],CREATE TABLE employees( employee_id  NUMBER(6), last_name  VARCHAR2(25) NOT NULL, email  VARCHAR2(25), salary  NUMBER(8,2), commission_pct  NUMBER(2,2), hire_date  DATE NOT NULL, ... department_id  NUMBER(4), CONSTRAINT emp_dept_fk FOREIGN KEY (department_id) REFERENCES departments(department_id), CONSTRAINT emp_email_uk UNIQUE(email));
外键约束  FOREIGN KEY Constraint ,[object Object],[object Object],[object Object],[object Object]
CHECK 约束  CHECK Constraint ,[object Object],[object Object],[object Object],[object Object],[object Object],..., salary NUMBER(2) CONSTRAINT emp_salary_min  CHECK (salary > 0),...
Alter Table 语句 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],ALTER TABLE employees READ ONLY; ALTER TABLE employees READ WRITE;
Drop Table 语句 ,[object Object],[object Object],[object Object],[object Object],DROP TABLE dept80;
创建其他对象 逻辑上显示一个或多个表的数据子集,不占用存储空间 View  产生单调递增的数值 Sequence  由数据行组成,基本的存储单元 Table 同义词,一个对象的替代名称 Synonym  增强查询性能 Index 描述 对象
视图  VIEW ,[object Object],Yes No No One Simple Views Yes 包含函数 Yes 使用 group by  One or more 相关表的个数 Not always 通过视图进行 DML 操作 Complex Views 特点
创建视图 CREATE [OR REPLACE] [FORCE| NOFORCE ] VIEW  view [( alias [,  alias ]...)] AS  subquery [WITH CHECK OPTION [CONSTRAINT  constraint ]] [WITH READ ONLY [CONSTRAINT  constraint ]]; CREATE OR REPLACE VIEW  empvu80 (id_number, name, sal, department_id) AS SELECT  employee_id, first_name || ' '  || last_name, salary, department_id FROM  employees WHERE  department_id = 80;
对视图进行 DML 操作的规则 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
对视图进行 DML 操作的规则 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
对视图进行 DML 操作的规则 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
使用 WITH CHECK OPTION ,[object Object],CREATE OR REPLACE VIEW empvu20 AS SELECT * FROM  employees WHERE  department_id = 20 WITH CHECK OPTION CONSTRAINT  empvu20_ck ;
使用 WITH READ ONLY ,[object Object],CREATE OR REPLACE VIEW empvu10 (employee_number, employee_name, job_title) AS SELECT employee_id, last_name, job_id FROM  employees WHERE  department_id = 10 WITH READ ONLY ;
删除视图 ,[object Object],DROP VIEW  view ; DROP VIEW empvu80;
序列  Sequences ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],1 2 4 3 5 6 8 7 10 9
创建序列 CREATE SEQUENCE  sequence [INCREMENT BY  n ] [START WITH  n ] [{MAXVALUE  n  |  NOMAXVALUE }] [{MINVALUE  n  |  NOMINVALUE }] [{CYCLE |  NOCYCLE }] [{CACHE  n  | NOCACHE}];
NEXTVAL  和  CURRVAL ,[object Object],[object Object],[object Object]
使用序列 ,[object Object],[object Object],INSERT INTO departments(department_id,  department_name, location_id) VALUES  ( dept_deptid_seq.NEXTVAL ,  'Support', 2500); SELECT dept_deptid_seq.CURRVAL FROM dual;
缓存序列值 ,[object Object],[object Object],[object Object],[object Object],[object Object]
修改序列 ALTER SEQUENCE dept_deptid_seq INCREMENT BY 20 MAXVALUE 999999 NOCACHE NOCYCLE; ,[object Object],[object Object],[object Object],[object Object],DROP SEQUENCE dept_deptid_seq;
索引  Indexes ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
索引是怎样被创建的? ,[object Object],[object Object]
创建索引 ,[object Object],[object Object],CREATE INDEX  emp_last_name_idx ON  employees(last_name); CREATE [UNIQUE][BITMAP]INDEX  index ON  table  ( column [,  column ]...);
索引创建建议 以下情况时,不要创建索引 : ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],以下情况时,创建索引 :
删除索引 ,[object Object],[object Object],[object Object],DROP INDEX emp_last_name_idx; DROP INDEX  index ;
同义词  Synonym  ,[object Object],[object Object],[object Object],CREATE [PUBLIC] SYNONYM  synonym FOR  object ;
创建和删除同义词 ,[object Object],[object Object],[object Object],CREATE SYNONYM  d_sum FOR  dept_sum_vu; DROP SYNONYM d_sum;
控制用户访问
控制用户访问 DB 管理员 用户 用户名、密码 权限
权限 Privileges ,[object Object],[object Object],[object Object]
系统权限 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
创建用户 CREATE USER  demo IDENTIFIED BY demo; CREATE USER  user     IDENTIFIED BY  password ;
用户系统权限 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],GRANT  privilege  [,  privilege ...] TO  user  [,  user| role, PUBLIC ...]; GRANT  create session, create table,  create sequence, create view TO  demo;
角色 Roles 不使用 roles 进行权限分配 使用 roles 进行权限分配 权限 用户 Manager
创建角色 CREATE ROLE manager; GRANT create table, create view    TO manager;  GRANT manager TO BELL, KOCHHAR;
对象权限 对象  权限  表    视图   序列 ALTER DELETE INDEX INSERT REFERENCES SELECT   UPDATE
对象权限 ,[object Object],[object Object],[object Object],GRANT object_priv  [( columns )] ON object TO { user | role |PUBLIC} [WITH GRANT OPTION];
赋予对象权限 ,[object Object],[object Object],GRANT  select ON  employees TO  demo; GRANT  update (department_name, location_id) ON  departments TO  demo, manager;
回收对象权限 ,[object Object],[object Object],REVOKE {privilege [, privilege...]|ALL} ON   object FROM  {user[, user...]|role|PUBLIC} [CASCADE CONSTRAINTS];

Mais conteúdo relacionado

Mais procurados

Sql语句编写优化和基本原理总结
Sql语句编写优化和基本原理总结Sql语句编写优化和基本原理总结
Sql语句编写优化和基本原理总结wangchongan
 
了解Oracle在线重定义online redefinition
了解Oracle在线重定义online redefinition了解Oracle在线重定义online redefinition
了解Oracle在线重定义online redefinitionmaclean liu
 
Sql培训 (1)
Sql培训 (1)Sql培训 (1)
Sql培训 (1)jhao niu
 
0927 sas實習課
0927 sas實習課0927 sas實習課
0927 sas實習課景淳 許
 
Python learn guide
Python learn guidePython learn guide
Python learn guiderobin yang
 

Mais procurados (7)

Sql语句编写优化和基本原理总结
Sql语句编写优化和基本原理总结Sql语句编写优化和基本原理总结
Sql语句编写优化和基本原理总结
 
了解Oracle在线重定义online redefinition
了解Oracle在线重定义online redefinition了解Oracle在线重定义online redefinition
了解Oracle在线重定义online redefinition
 
Sql培训 (1)
Sql培训 (1)Sql培训 (1)
Sql培训 (1)
 
0927 sas實習課
0927 sas實習課0927 sas實習課
0927 sas實習課
 
SQL 效能調校
SQL 效能調校SQL 效能調校
SQL 效能調校
 
Python learn guide
Python learn guidePython learn guide
Python learn guide
 
1013 sas 實習課
1013 sas 實習課1013 sas 實習課
1013 sas 實習課
 

Destaque

Ash architecture and advanced usage rmoug2014
Ash architecture and advanced usage rmoug2014Ash architecture and advanced usage rmoug2014
Ash architecture and advanced usage rmoug2014John Beresniewicz
 
Oracle Performance Tuning Fundamentals
Oracle Performance Tuning FundamentalsOracle Performance Tuning Fundamentals
Oracle Performance Tuning FundamentalsEnkitec
 
Oracle Oracle Performance Tuning
Oracle Oracle Performance Tuning Oracle Oracle Performance Tuning
Oracle Oracle Performance Tuning Kernel Training
 
Poliittisen viestinnän sisäpiirit Twitterissä
Poliittisen viestinnän sisäpiirit TwitterissäPoliittisen viestinnän sisäpiirit Twitterissä
Poliittisen viestinnän sisäpiirit TwitterissäJukka Huhtamäki
 
Thriving rather then surviving
Thriving rather then survivingThriving rather then surviving
Thriving rather then survivingErwin Schwella
 
Evaluating my poster
Evaluating my posterEvaluating my poster
Evaluating my posterabcdsmile
 
Montageplan styrocontrol 1.8
Montageplan styrocontrol 1.8Montageplan styrocontrol 1.8
Montageplan styrocontrol 1.8laurenztack
 
基于Oracle 12c data guard & far sync的低资源消耗两地三数据中心容灾方案
基于Oracle 12c data guard & far sync的低资源消耗两地三数据中心容灾方案基于Oracle 12c data guard & far sync的低资源消耗两地三数据中心容灾方案
基于Oracle 12c data guard & far sync的低资源消耗两地三数据中心容灾方案maclean liu
 
深入理解Oracle universal installer(oui)
深入理解Oracle universal installer(oui)深入理解Oracle universal installer(oui)
深入理解Oracle universal installer(oui)maclean liu
 
03. a. salinan permendikbud no. 65 th 2013 ttg standar proses
03. a. salinan permendikbud no. 65 th 2013 ttg standar proses03. a. salinan permendikbud no. 65 th 2013 ttg standar proses
03. a. salinan permendikbud no. 65 th 2013 ttg standar prosesIrma Muthiara Sari
 
Presentacion coleccion GUAU RE MIAU BY MARIA TRAPOS
Presentacion coleccion GUAU RE MIAU BY MARIA TRAPOSPresentacion coleccion GUAU RE MIAU BY MARIA TRAPOS
Presentacion coleccion GUAU RE MIAU BY MARIA TRAPOSMARIA TRAPOS
 
20151017八戸学院大学かいごの学校資料(ビーブリッド竹下)
20151017八戸学院大学かいごの学校資料(ビーブリッド竹下)20151017八戸学院大学かいごの学校資料(ビーブリッド竹下)
20151017八戸学院大学かいごの学校資料(ビーブリッド竹下)Takeshita Kouhei
 
What’s a’twitter
What’s a’twitterWhat’s a’twitter
What’s a’twitterRyan Harrell
 
Case 2012 crowdfunding session to share
Case 2012 crowdfunding session to shareCase 2012 crowdfunding session to share
Case 2012 crowdfunding session to shareJason Potts
 
01. a. salinan permendikbud no. 54 tahun 2013 ttg skl
01. a. salinan permendikbud no. 54 tahun 2013 ttg skl01. a. salinan permendikbud no. 54 tahun 2013 ttg skl
01. a. salinan permendikbud no. 54 tahun 2013 ttg sklIrma Muthiara Sari
 
Creating Relevant Innovation within Changing Expectations
Creating Relevant Innovation within Changing ExpectationsCreating Relevant Innovation within Changing Expectations
Creating Relevant Innovation within Changing ExpectationsEleanor Davies
 
New Zealand Franchising Confidence Index | January 2017
New Zealand Franchising Confidence Index | January 2017New Zealand Franchising Confidence Index | January 2017
New Zealand Franchising Confidence Index | January 2017Franchize Consultants
 

Destaque (20)

Ash architecture and advanced usage rmoug2014
Ash architecture and advanced usage rmoug2014Ash architecture and advanced usage rmoug2014
Ash architecture and advanced usage rmoug2014
 
Oracle Performance Tuning Fundamentals
Oracle Performance Tuning FundamentalsOracle Performance Tuning Fundamentals
Oracle Performance Tuning Fundamentals
 
Oracle Oracle Performance Tuning
Oracle Oracle Performance Tuning Oracle Oracle Performance Tuning
Oracle Oracle Performance Tuning
 
Melide
MelideMelide
Melide
 
Poliittisen viestinnän sisäpiirit Twitterissä
Poliittisen viestinnän sisäpiirit TwitterissäPoliittisen viestinnän sisäpiirit Twitterissä
Poliittisen viestinnän sisäpiirit Twitterissä
 
Thriving rather then surviving
Thriving rather then survivingThriving rather then surviving
Thriving rather then surviving
 
Evaluating my poster
Evaluating my posterEvaluating my poster
Evaluating my poster
 
Montageplan styrocontrol 1.8
Montageplan styrocontrol 1.8Montageplan styrocontrol 1.8
Montageplan styrocontrol 1.8
 
基于Oracle 12c data guard & far sync的低资源消耗两地三数据中心容灾方案
基于Oracle 12c data guard & far sync的低资源消耗两地三数据中心容灾方案基于Oracle 12c data guard & far sync的低资源消耗两地三数据中心容灾方案
基于Oracle 12c data guard & far sync的低资源消耗两地三数据中心容灾方案
 
深入理解Oracle universal installer(oui)
深入理解Oracle universal installer(oui)深入理解Oracle universal installer(oui)
深入理解Oracle universal installer(oui)
 
03. a. salinan permendikbud no. 65 th 2013 ttg standar proses
03. a. salinan permendikbud no. 65 th 2013 ttg standar proses03. a. salinan permendikbud no. 65 th 2013 ttg standar proses
03. a. salinan permendikbud no. 65 th 2013 ttg standar proses
 
Presentacion coleccion GUAU RE MIAU BY MARIA TRAPOS
Presentacion coleccion GUAU RE MIAU BY MARIA TRAPOSPresentacion coleccion GUAU RE MIAU BY MARIA TRAPOS
Presentacion coleccion GUAU RE MIAU BY MARIA TRAPOS
 
20151017八戸学院大学かいごの学校資料(ビーブリッド竹下)
20151017八戸学院大学かいごの学校資料(ビーブリッド竹下)20151017八戸学院大学かいごの学校資料(ビーブリッド竹下)
20151017八戸学院大学かいごの学校資料(ビーブリッド竹下)
 
Dhs2lab
Dhs2labDhs2lab
Dhs2lab
 
What’s a’twitter
What’s a’twitterWhat’s a’twitter
What’s a’twitter
 
Case 2012 crowdfunding session to share
Case 2012 crowdfunding session to shareCase 2012 crowdfunding session to share
Case 2012 crowdfunding session to share
 
01. a. salinan permendikbud no. 54 tahun 2013 ttg skl
01. a. salinan permendikbud no. 54 tahun 2013 ttg skl01. a. salinan permendikbud no. 54 tahun 2013 ttg skl
01. a. salinan permendikbud no. 54 tahun 2013 ttg skl
 
2
22
2
 
Creating Relevant Innovation within Changing Expectations
Creating Relevant Innovation within Changing ExpectationsCreating Relevant Innovation within Changing Expectations
Creating Relevant Innovation within Changing Expectations
 
New Zealand Franchising Confidence Index | January 2017
New Zealand Franchising Confidence Index | January 2017New Zealand Franchising Confidence Index | January 2017
New Zealand Franchising Confidence Index | January 2017
 

Semelhante a Oracle11g database sql语言基础

杰表.2008数据模型设计
杰表.2008数据模型设计杰表.2008数据模型设计
杰表.2008数据模型设计guest07ce405
 
Sql指令
Sql指令Sql指令
Sql指令you_ren
 
杰表.2008报表实例研究
杰表.2008报表实例研究杰表.2008报表实例研究
杰表.2008报表实例研究guest07ce405
 
Oracle经典教程
Oracle经典教程Oracle经典教程
Oracle经典教程yiditushe
 
企业常用Sql
企业常用Sql企业常用Sql
企业常用Sqljade_side
 
Sql Server 高级技巧系列之三整体优化
Sql Server 高级技巧系列之三整体优化Sql Server 高级技巧系列之三整体优化
Sql Server 高级技巧系列之三整体优化向 翔
 
11/01 SAS 快速複習
11/01 SAS 快速複習11/01 SAS 快速複習
11/01 SAS 快速複習景淳 許
 
SQL Server 2008 新增的 T-SQL 與資料型態
SQL Server 2008 新增的 T-SQL 與資料型態SQL Server 2008 新增的 T-SQL 與資料型態
SQL Server 2008 新增的 T-SQL 與資料型態Chui-Wen Chiu
 
Rde packagean zhuang_ji_ji_ben_cao_zuo_
Rde packagean zhuang_ji_ji_ben_cao_zuo_Rde packagean zhuang_ji_ji_ben_cao_zuo_
Rde packagean zhuang_ji_ji_ben_cao_zuo_vinsin27
 
JavaScript 快速複習 2017Q1
JavaScript 快速複習 2017Q1JavaScript 快速複習 2017Q1
JavaScript 快速複習 2017Q1Sheng-Han Su
 
数据库原理第三章
数据库原理第三章数据库原理第三章
数据库原理第三章strun
 
第六章 函數與巨集
第六章 函數與巨集第六章 函數與巨集
第六章 函數與巨集shademoon
 
3小时 快速了解postgre sql
3小时 快速了解postgre sql3小时 快速了解postgre sql
3小时 快速了解postgre sqlMichael Fan
 
Oracle中比对2张表之间数据是否一致的几种方法
Oracle中比对2张表之间数据是否一致的几种方法Oracle中比对2张表之间数据是否一致的几种方法
Oracle中比对2张表之间数据是否一致的几种方法maclean liu
 
Sql指令 2
Sql指令 2Sql指令 2
Sql指令 2you_ren
 
第9章 t sql程序设计
第9章 t sql程序设计第9章 t sql程序设计
第9章 t sql程序设计hanmo1988
 

Semelhante a Oracle11g database sql语言基础 (20)

杰表.2008数据模型设计
杰表.2008数据模型设计杰表.2008数据模型设计
杰表.2008数据模型设计
 
Sql指令
Sql指令Sql指令
Sql指令
 
杰表.2008报表实例研究
杰表.2008报表实例研究杰表.2008报表实例研究
杰表.2008报表实例研究
 
Oracle经典教程
Oracle经典教程Oracle经典教程
Oracle经典教程
 
企业常用Sql
企业常用Sql企业常用Sql
企业常用Sql
 
Sql Server 高级技巧系列之三整体优化
Sql Server 高级技巧系列之三整体优化Sql Server 高级技巧系列之三整体优化
Sql Server 高级技巧系列之三整体优化
 
7
77
7
 
11
1111
11
 
11/01 SAS 快速複習
11/01 SAS 快速複習11/01 SAS 快速複習
11/01 SAS 快速複習
 
SQL Server 2008 新增的 T-SQL 與資料型態
SQL Server 2008 新增的 T-SQL 與資料型態SQL Server 2008 新增的 T-SQL 與資料型態
SQL Server 2008 新增的 T-SQL 與資料型態
 
第四章
第四章第四章
第四章
 
Rde packagean zhuang_ji_ji_ben_cao_zuo_
Rde packagean zhuang_ji_ji_ben_cao_zuo_Rde packagean zhuang_ji_ji_ben_cao_zuo_
Rde packagean zhuang_ji_ji_ben_cao_zuo_
 
Php & Mysql
Php & MysqlPhp & Mysql
Php & Mysql
 
JavaScript 快速複習 2017Q1
JavaScript 快速複習 2017Q1JavaScript 快速複習 2017Q1
JavaScript 快速複習 2017Q1
 
数据库原理第三章
数据库原理第三章数据库原理第三章
数据库原理第三章
 
第六章 函數與巨集
第六章 函數與巨集第六章 函數與巨集
第六章 函數與巨集
 
3小时 快速了解postgre sql
3小时 快速了解postgre sql3小时 快速了解postgre sql
3小时 快速了解postgre sql
 
Oracle中比对2张表之间数据是否一致的几种方法
Oracle中比对2张表之间数据是否一致的几种方法Oracle中比对2张表之间数据是否一致的几种方法
Oracle中比对2张表之间数据是否一致的几种方法
 
Sql指令 2
Sql指令 2Sql指令 2
Sql指令 2
 
第9章 t sql程序设计
第9章 t sql程序设计第9章 t sql程序设计
第9章 t sql程序设计
 

Mais de maclean liu

Mysql企业备份发展及实践
Mysql企业备份发展及实践Mysql企业备份发展及实践
Mysql企业备份发展及实践maclean liu
 
Oracle専用データ復旧ソフトウェアprm dulユーザーズ・マニュアル
Oracle専用データ復旧ソフトウェアprm dulユーザーズ・マニュアルOracle専用データ復旧ソフトウェアprm dulユーザーズ・マニュアル
Oracle専用データ復旧ソフトウェアprm dulユーザーズ・マニュアルmaclean liu
 
【诗檀软件 郭兆伟-技术报告】跨国企业级Oracle数据库备份策略
【诗檀软件 郭兆伟-技术报告】跨国企业级Oracle数据库备份策略【诗檀软件 郭兆伟-技术报告】跨国企业级Oracle数据库备份策略
【诗檀软件 郭兆伟-技术报告】跨国企业级Oracle数据库备份策略maclean liu
 
TomCat迁移步骤简述以及案例
TomCat迁移步骤简述以及案例TomCat迁移步骤简述以及案例
TomCat迁移步骤简述以及案例maclean liu
 
PRM DUL Oracle Database Health Check
PRM DUL Oracle Database Health CheckPRM DUL Oracle Database Health Check
PRM DUL Oracle Database Health Checkmaclean liu
 
dbdao.com 汪伟华 my-sql-replication复制高可用配置方案
dbdao.com 汪伟华 my-sql-replication复制高可用配置方案dbdao.com 汪伟华 my-sql-replication复制高可用配置方案
dbdao.com 汪伟华 my-sql-replication复制高可用配置方案maclean liu
 
Vbox virtual box在oracle linux 5 - shoug 梁洪响
Vbox virtual box在oracle linux 5 - shoug 梁洪响Vbox virtual box在oracle linux 5 - shoug 梁洪响
Vbox virtual box在oracle linux 5 - shoug 梁洪响maclean liu
 
【诗檀软件】Mysql高可用方案
【诗檀软件】Mysql高可用方案【诗檀软件】Mysql高可用方案
【诗檀软件】Mysql高可用方案maclean liu
 
Shoug at apouc2015 4min pitch_biotwang_v2
Shoug at apouc2015 4min pitch_biotwang_v2Shoug at apouc2015 4min pitch_biotwang_v2
Shoug at apouc2015 4min pitch_biotwang_v2maclean liu
 
Apouc 4min pitch_biotwang_v2
Apouc 4min pitch_biotwang_v2Apouc 4min pitch_biotwang_v2
Apouc 4min pitch_biotwang_v2maclean liu
 
使用Oracle osw analyzer工具分析oswbb日志,并绘制系统性能走势图1
使用Oracle osw analyzer工具分析oswbb日志,并绘制系统性能走势图1使用Oracle osw analyzer工具分析oswbb日志,并绘制系统性能走势图1
使用Oracle osw analyzer工具分析oswbb日志,并绘制系统性能走势图1maclean liu
 
诗檀软件 Oracle开发优化基础
诗檀软件 Oracle开发优化基础 诗檀软件 Oracle开发优化基础
诗檀软件 Oracle开发优化基础 maclean liu
 
Orclrecove 1 pd-prm-dul testing for oracle database recovery_20141030_biot_wang
Orclrecove 1 pd-prm-dul testing for oracle database recovery_20141030_biot_wangOrclrecove 1 pd-prm-dul testing for oracle database recovery_20141030_biot_wang
Orclrecove 1 pd-prm-dul testing for oracle database recovery_20141030_biot_wangmaclean liu
 
诗檀软件 – Oracle数据库修复专家 oracle数据块损坏知识2014-10-24
诗檀软件 – Oracle数据库修复专家 oracle数据块损坏知识2014-10-24诗檀软件 – Oracle数据库修复专家 oracle数据块损坏知识2014-10-24
诗檀软件 – Oracle数据库修复专家 oracle数据块损坏知识2014-10-24maclean liu
 
追求Jdbc on oracle最佳性能?如何才好?
追求Jdbc on oracle最佳性能?如何才好?追求Jdbc on oracle最佳性能?如何才好?
追求Jdbc on oracle最佳性能?如何才好?maclean liu
 
使用Virtual box在oracle linux 5.7上安装oracle database 11g release 2 rac的最佳实践
使用Virtual box在oracle linux 5.7上安装oracle database 11g release 2 rac的最佳实践使用Virtual box在oracle linux 5.7上安装oracle database 11g release 2 rac的最佳实践
使用Virtual box在oracle linux 5.7上安装oracle database 11g release 2 rac的最佳实践maclean liu
 
Prm dul is an oracle database recovery tool database
Prm dul is an oracle database recovery tool   databasePrm dul is an oracle database recovery tool   database
Prm dul is an oracle database recovery tool databasemaclean liu
 
Oracle prm dul, jvm and os
Oracle prm dul, jvm and osOracle prm dul, jvm and os
Oracle prm dul, jvm and osmaclean liu
 
Oracle dba必备技能 使用os watcher工具监控系统性能负载
Oracle dba必备技能   使用os watcher工具监控系统性能负载Oracle dba必备技能   使用os watcher工具监控系统性能负载
Oracle dba必备技能 使用os watcher工具监控系统性能负载maclean liu
 
Parnassus data recovery manager for oracle database user guide v0.3
Parnassus data recovery manager for oracle database user guide v0.3Parnassus data recovery manager for oracle database user guide v0.3
Parnassus data recovery manager for oracle database user guide v0.3maclean liu
 

Mais de maclean liu (20)

Mysql企业备份发展及实践
Mysql企业备份发展及实践Mysql企业备份发展及实践
Mysql企业备份发展及实践
 
Oracle専用データ復旧ソフトウェアprm dulユーザーズ・マニュアル
Oracle専用データ復旧ソフトウェアprm dulユーザーズ・マニュアルOracle専用データ復旧ソフトウェアprm dulユーザーズ・マニュアル
Oracle専用データ復旧ソフトウェアprm dulユーザーズ・マニュアル
 
【诗檀软件 郭兆伟-技术报告】跨国企业级Oracle数据库备份策略
【诗檀软件 郭兆伟-技术报告】跨国企业级Oracle数据库备份策略【诗檀软件 郭兆伟-技术报告】跨国企业级Oracle数据库备份策略
【诗檀软件 郭兆伟-技术报告】跨国企业级Oracle数据库备份策略
 
TomCat迁移步骤简述以及案例
TomCat迁移步骤简述以及案例TomCat迁移步骤简述以及案例
TomCat迁移步骤简述以及案例
 
PRM DUL Oracle Database Health Check
PRM DUL Oracle Database Health CheckPRM DUL Oracle Database Health Check
PRM DUL Oracle Database Health Check
 
dbdao.com 汪伟华 my-sql-replication复制高可用配置方案
dbdao.com 汪伟华 my-sql-replication复制高可用配置方案dbdao.com 汪伟华 my-sql-replication复制高可用配置方案
dbdao.com 汪伟华 my-sql-replication复制高可用配置方案
 
Vbox virtual box在oracle linux 5 - shoug 梁洪响
Vbox virtual box在oracle linux 5 - shoug 梁洪响Vbox virtual box在oracle linux 5 - shoug 梁洪响
Vbox virtual box在oracle linux 5 - shoug 梁洪响
 
【诗檀软件】Mysql高可用方案
【诗檀软件】Mysql高可用方案【诗檀软件】Mysql高可用方案
【诗檀软件】Mysql高可用方案
 
Shoug at apouc2015 4min pitch_biotwang_v2
Shoug at apouc2015 4min pitch_biotwang_v2Shoug at apouc2015 4min pitch_biotwang_v2
Shoug at apouc2015 4min pitch_biotwang_v2
 
Apouc 4min pitch_biotwang_v2
Apouc 4min pitch_biotwang_v2Apouc 4min pitch_biotwang_v2
Apouc 4min pitch_biotwang_v2
 
使用Oracle osw analyzer工具分析oswbb日志,并绘制系统性能走势图1
使用Oracle osw analyzer工具分析oswbb日志,并绘制系统性能走势图1使用Oracle osw analyzer工具分析oswbb日志,并绘制系统性能走势图1
使用Oracle osw analyzer工具分析oswbb日志,并绘制系统性能走势图1
 
诗檀软件 Oracle开发优化基础
诗檀软件 Oracle开发优化基础 诗檀软件 Oracle开发优化基础
诗檀软件 Oracle开发优化基础
 
Orclrecove 1 pd-prm-dul testing for oracle database recovery_20141030_biot_wang
Orclrecove 1 pd-prm-dul testing for oracle database recovery_20141030_biot_wangOrclrecove 1 pd-prm-dul testing for oracle database recovery_20141030_biot_wang
Orclrecove 1 pd-prm-dul testing for oracle database recovery_20141030_biot_wang
 
诗檀软件 – Oracle数据库修复专家 oracle数据块损坏知识2014-10-24
诗檀软件 – Oracle数据库修复专家 oracle数据块损坏知识2014-10-24诗檀软件 – Oracle数据库修复专家 oracle数据块损坏知识2014-10-24
诗檀软件 – Oracle数据库修复专家 oracle数据块损坏知识2014-10-24
 
追求Jdbc on oracle最佳性能?如何才好?
追求Jdbc on oracle最佳性能?如何才好?追求Jdbc on oracle最佳性能?如何才好?
追求Jdbc on oracle最佳性能?如何才好?
 
使用Virtual box在oracle linux 5.7上安装oracle database 11g release 2 rac的最佳实践
使用Virtual box在oracle linux 5.7上安装oracle database 11g release 2 rac的最佳实践使用Virtual box在oracle linux 5.7上安装oracle database 11g release 2 rac的最佳实践
使用Virtual box在oracle linux 5.7上安装oracle database 11g release 2 rac的最佳实践
 
Prm dul is an oracle database recovery tool database
Prm dul is an oracle database recovery tool   databasePrm dul is an oracle database recovery tool   database
Prm dul is an oracle database recovery tool database
 
Oracle prm dul, jvm and os
Oracle prm dul, jvm and osOracle prm dul, jvm and os
Oracle prm dul, jvm and os
 
Oracle dba必备技能 使用os watcher工具监控系统性能负载
Oracle dba必备技能   使用os watcher工具监控系统性能负载Oracle dba必备技能   使用os watcher工具监控系统性能负载
Oracle dba必备技能 使用os watcher工具监控系统性能负载
 
Parnassus data recovery manager for oracle database user guide v0.3
Parnassus data recovery manager for oracle database user guide v0.3Parnassus data recovery manager for oracle database user guide v0.3
Parnassus data recovery manager for oracle database user guide v0.3
 

Oracle11g database sql语言基础

  • 1. Oracle11g Database SQL 语言基础 2011.8 By Kevinlin. 林少杰 [email_address]
  • 2.
  • 3.
  • 5. 使用 SELECT 查询数据 表 1 表 2 查询表中的若干行数据 查询表中的若干列 联合不同表 中的数据
  • 6.
  • 7. 查询所有列 SELECT * FROM departments;
  • 8. 查询指定列 SELECT department_id, location_id FROM departments;
  • 9.
  • 10. SELECT 语句中的四则运算 SELECT last_name, salary, 12*(salary+100) FROM employees;
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 18.
  • 19.
  • 20. 使用比较运算符 SELECT last_name, salary FROM employees WHERE salary <= 3000 ;
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34. SQL 函数 SQL functions 函数 输入 参数 1 参数 2 参数 n 函数进行运算 输出 结果
  • 35. SQL 函数的两种类型 单行函数 多行函数 每行返回一个结果 多行返回一个结果 函数
  • 36.
  • 37. 字符函数 Character Functions 字符函数 LOWER UPPER INITCAP CONCAT SUBSTR LENGTH INSTR LPAD | RPAD TRIM REPLACE 大小写转换函数 字符处理函数
  • 38. 大小写转换函数 Case-Conversion sql course LOWER('SQL Course') Sql Course INITCAP('SQL Course') SQL COURSE UPPER('SQL Course') 结果 函数
  • 39. 字符处理函数 BLACK and BLUE REPLACE ('JACK and JUE','J','BL') 10 LENGTH('HelloWorld') 6 INSTR('HelloWorld', 'W') *****24000 LPAD(salary,10,'*') 24000***** RPAD(salary, 10, '*') HelloWorld CONCAT('Hello', 'World') elloWorld TRIM('H' FROM 'HelloWorld') Hello SUBSTR('HelloWorld',1,5) 结果 函数
  • 40. 数字函数 100 MOD(1600, 300) 45.93 ROUND(45.926, 2) 45.92 TRUNC(45.926, 2) 结果 函数
  • 41. 日期函数 '08-SEP-95' NEXT_DAY ('01-SEP-95','FRIDAY') '28-FEB-95' LAST_DAY ('01-FEB-95') 19.6774194 MONTHS_BETWEEN ('01-SEP-95','11-JAN-94') ‘ 29-FEB-96' ADD_MONTHS (‘31-JAN-96',1) Result Function 01-JUL-03 TRUNC(SYSDATE ,'MONTH') 01-JAN-03 TRUNC(SYSDATE ,'YEAR') 01-AUG-03 ROUND(SYSDATE,'MONTH') 01-JAN-04 ROUND(SYSDATE ,'YEAR')
  • 43. 数据类型的隐式转换 NUMBER VARCHAR2 or CHAR DATE VARCHAR2 or CHAR To From VARCHAR2 or CHAR NUMBER VARCHAR2 or CHAR DATE To From … where hire_date > '01-JAN-90' … where name_varchar > 2345 不建议使用隐式转换,可能导致 SQL 的性能下降
  • 44. 数据类型的显式转换 数字类型 字符类型 TO_CHAR() TO_NUMBER() 日期类型 TO_CHAR() TO_DATE()
  • 45. 日期转换为字符 SELECT last_name, TO_CHAR(hire_date, 'fmDD Month YYYY') AS HIREDATE FROM employees; …
  • 46. 数字转换为字符 SELECT TO_CHAR(salary, '$99,999.00') SALARY FROM employees WHERE last_name = 'Ernst';
  • 47. 字符转换为日期、数字 SQL> select TO_number('6,000.00','99,999.00') from dual; TO_NUMBER('6,000.00','99,999.00') --------------------------------- 6000 SQL> select TO_date('20110818','YYYYMMDD') from dual; TO_DATE('201 ------------ 18-AUG-11
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53. 数据分组 GROUP BY 表 EMPLOYEES … 在 EMPLOYEES 表中,计算每个部门的平均工资 SELECT column , group_function(column) FROM table [WHERE condition ] [GROUP BY group_by_expression ] [ORDER BY column ]; 4400 9500 3500 6400 10033
  • 54. 多个列的 GROUP BY SELECT department_id dept_id, job_id, SUM(salary) FROM employees GROUP BY department_id, job_id ORDER BY department_id;
  • 55.
  • 56.
  • 57. 组函数的嵌套 SELECT MAX(AVG(salary)) FROM employees GROUP BY department_id;
  • 59.
  • 60.
  • 61.
  • 62.
  • 63. 使用 ON 进行 join SELECT employee_id, city, department_name FROM employees e JOIN departments d ON d.department_id = e.department_id JOIN locations l ON d.location_id = l.location_id; …
  • 64.
  • 65.
  • 66. 非对等连接 Nonequijoins SELECT e.last_name, e.salary, j.grade_level FROM employees e JOIN job_grades j ON e.salary BETWEEN j.lowest_sal AND j.highest_sal; …
  • 67. 外连接 Outer Joins EMPLOYEES DEPARTMENTS There are no employees in department 190. …
  • 68.
  • 69. 左外连接 Left Outer Join SELECT e.last_name, e.department_id, d.department_name FROM employees e LEFT OUTER JOIN departments d ON (e.department_id = d.department_id) ; …
  • 70. 全外连接 Left Outer Join SELECT e.last_name, d.department_id, d.department_name FROM employees e FULL OUTER JOIN departments d ON (e.department_id = d.department_id) ; …
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78. 集合操作符 Set Operators UNION / UNION ALL A B A B A B INTERSECT A B MINUS
  • 79.
  • 80. UNION SELECT employee_id, job_id FROM employees UNION SELECT employee_id, job_id FROM job_history; … …
  • 81. UNION ALL SELECT employee_id, job_id, department_id FROM employees UNION ALL SELECT employee_id, job_id, department_id FROM job_history ORDER BY employee_id; … …
  • 82. INTERSECT SELECT employee_id, job_id FROM employees INTERSECT SELECT employee_id, job_id FROM job_history;
  • 83. MINUS SELECT employee_id FROM employees MINUS SELECT employee_id FROM job_history; …
  • 84. 列数量与类型匹配 SELECT location_id , department_name &quot;Department&quot; , TO_CHAR(NULL) &quot;Warehouse location&quot; FROM departments UNION SELECT location_id, TO_CHAR(NULL) &quot;Department&quot; , state_province FROM locations;
  • 85.
  • 86. 多列子查询 Multiple-Column Subqueries 主查询 WHERE ( MANAGER_ID, DEPARTMENT_ID ) IN 子查询结果 100 90 102 60 124 50
  • 87.
  • 88. 成对比较子查询 返回与名字为 John 的员工在同一个部门,且同一个领导的员工 SELECT employee_id, manager_id, department_id FROM empl_demo WHERE (manager_id, department_id) IN (SELECT manager_id, department_id FROM empl_demo WHERE first_name = 'John') AND first_name <> 'John';
  • 89. 不成对比较子查询 返回与名字为 John 的员工中任意一个领导相符和任意一个部门相符的员工 当名字为 John 多于一人时,与成对比较子查询的返回结果不同。 SELECT employee_id, manager_id, department_id FROM empl_demo WHERE manager_id IN (SELECT manager_id FROM empl_demo WHERE first_name = 'John') AND department_id IN (SELECT department_id FROM empl_demo WHERE first_name = 'John') AND first_name <> 'John';
  • 90. 关联子查询 关联子查询用于行与行的处理,关联子查询对每个数据行都要进行 一次。 GET 主查询 fetch 到一行数据 EXECUTE 子查询根据这行数据的值进行运算 USE 根据子查询的结果,决定是否返回这行数据
  • 91. 关联子查询 vs 嵌套子查询 嵌套子查询: 子查询首先执行,且执行一次,返回相关结果 主查询使用子查询返回的结果进行一次运算 关联子查询: 主查询 fetch 到一行数据 根据这行数据,进行子查询运算 根据子查询的结果,决定是否返回这行数据 重复以上过程,直到主查询结束
  • 92. 使用关联子查询 SELECT column1 , column2 , ... FROM table1 WHERE column1 operator (SELECT column1, column2 FROM table2 WHERE expr1 = .expr2 ); outer outer SELECT e.employee_id, last_name,e.job_id FROM employees e WHERE 2 <= (SELECT COUNT(*) FROM job_history WHERE employee_id = e.employee_id );
  • 93.
  • 94. WITH 示例 WITH dept_costs AS ( SELECT d.department_name, SUM(e.salary) AS dept_total FROM employees e JOIN departments d ON e.department_id = d.department_id GROUP BY d.department_name), avg_cost AS ( SELECT SUM(dept_total)/COUNT(*) AS dept_avg FROM dept_costs ) SELECT * FROM dept_costs WHERE dept_total > (SELECT dept_avg FROM avg_cost ) ORDER BY department_name;
  • 96.
  • 97. INSERT INSERT INTO departments VALUES (100, 'Finance', NULL, NULL); INSERT INTO departments (department_id, department_name) VALUES (30, 'Purchasing'); INSERT INTO sales_reps(id, name, salary, commission_pct) SELECT employee_id, last_name, salary, commission_pct FROM employees INSERT INTO employees (employee_id,hire_date) VALUES (113,SYSDATE);
  • 98.
  • 99. Unconditional INSERT ALL INSERT ALL INTO sal_history VALUES(EMPID,HIREDATE,SAL) INTO mgr_history VALUES(EMPID,MGR,SAL) SELECT employee_id EMPID, hire_date HIREDATE, salary SAL, manager_id MGR FROM employees WHERE employee_id > 200;
  • 100. Unconditional INSERT ALL INSERT ALL INTO sal_history VALUES(EMPID,HIREDATE,SAL) INTO mgr_history VALUES(EMPID,MGR,SAL) SELECT employee_id EMPID, hire_date HIREDATE, salary SAL, manager_id MGR FROM employees WHERE employee_id > 200;
  • 101. Conditional INSERT ALL INSERT ALL WHEN HIREDATE < ' 01-JAN-95 ' THEN INTO emp_history VALUES(EMPID,HIREDATE,SAL) WHEN COMM IS NOT NULL THEN INTO emp_sales VALUES(EMPID,COMM,SAL) SELECT employee_id EMPID, hire_date HIREDATE, salary SAL, commission_pct COMM FROM employees
  • 102. Conditional INSERT FIRST INSERT FIRST WHEN salary < 5000 THEN INTO sal_low VALUES (employee_id, last_name, salary) WHEN salary between 5000 and 10000 THEN INTO sal_mid VALUES (employee_id, last_name, salary) ELSE INTO sal_high VALUES (employee_id, last_name, salary) SELECT employee_id, last_name, salary FROM employees
  • 103.
  • 104. Pivoting INSERT INSERT ALL INTO sales_info VALUES (employee_id,week_id,sales_MON) INTO sales_info VALUES (employee_id,week_id,sales_TUE) INTO sales_info VALUES (employee_id,week_id,sales_WED) INTO sales_info VALUES (employee_id,week_id,sales_THUR) INTO sales_info VALUES (employee_id,week_id, sales_FRI) SELECT EMPLOYEE_ID, week_id, sales_MON, sales_TUE, sales_WED, sales_THUR,sales_FRI FROM sales_source_data;
  • 105. UPDATE UPDATE employees SET department_id = 50 WHERE employee_id = 113; UPDATE copy_emp SET department_id = 110; UPDATE employees SET department_id = 50 WHERE employee_id = null; UPDATE employees SET job_id = (SELECT job_id FROM employees WHERE employee_id = 205) WHERE employee_id = 113;
  • 106. UPDATE 中的关联子查询 UPDATE table1 alias1 SET column = (SELECT expression FROM table2 alias2 WHERE alias1.column = alias2.column );
  • 107. DELETE DELETE FROM departments WHERE department_name = ‘Finance'; DELETE FROM copy_emp; DELETE FROM employees WHERE department_id = (SELECT department_id FROM departments WHERE department_name LIKE '%Public%');
  • 108. DELETE 中的关联子查询 DELETE FROM table1 alias1 WHERE column operator (SELECT expression FROM table2 alias2 WHERE alias1.column = alias2.column);
  • 109.
  • 110.
  • 111.
  • 112. 事务的显式控制 SAVEPOINT B SAVEPOINT A DELETE INSERT UPDATE INSERT COMMIT 时间轴 Transaction ROLLBACK to SAVEPOINT B ROLLBACK to SAVEPOINT A ROLLBACK
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118. 读一致性的实现 SELECT * FROM userA.employees; UPDATE employees SET salary = 7000 WHERE last_name = 'Grant'; Data blocks Undo segments Changed and unchanged data Before change (“old” data) 用户 A 用户 B Read- consistent image
  • 119.
  • 121. 数据库对象 逻辑上代表一个或多个表的数据子集 View 产生单调递增的数值 Sequence 存放数据行的逻辑存储单元 Table 同义词,一个对象的替代名称 Synonym 用于改进查询性能 Index 描述 对象
  • 122.
  • 123.
  • 124. CREATE TABLE DESCRIBE dept CREATE TABLE dept (deptno NUMBER(2), dname VARCHAR2(14), loc VARCHAR2(13), create_date DATE DEFAULT SYSDATE );
  • 125. 引用其他用户的表 USERB USERA SELECT * FROM userB.employees; SELECT * FROM userA.employees;
  • 126. CTAS (Create Table As Select) CREATE TABLE dept80 AS SELECT employee_id, last_name, salary*12 ANNSAL, hire_date FROM employees WHERE department_id = 80; DESCRIBE dept80
  • 127. 数据类型 未经处理的类型 RAW and LONG RAW 二进制数据类型 (up to 4 GB) BLOB 存储在外部文件的二进制数据类型 (up to 4 GB) BFILE 日期类型 DATE 变长的字符类型 (up to 2 GB) LONG 字符类型 (up to 4 GB) CLOB 代表表中数据行的唯一地址 ROWID 定长的字符数据 CHAR( size ) 变长的数值类型 NUMBER( p , s) 变长的字符类型 VARCHAR2( size ) 描述 Data Type
  • 128. 数据类型 存储时间间隔的类型 INTERVAL YEAR TO MONTH 存储时间间隔的类型 INTERVAL DAY TO SECOND 较精细的日期类型 TIMESTAMP 描述 Data Type
  • 129.
  • 130.
  • 131.
  • 132.
  • 133. 外键约束 FOREIGN KEY Constraint 部门表 员工表 外键 INSERT INTO 操作 允许 ( 部门表的主键列不存在数值 9) 允许 主键 … …
  • 134.
  • 135.
  • 136.
  • 137.
  • 138.
  • 139. 创建其他对象 逻辑上显示一个或多个表的数据子集,不占用存储空间 View 产生单调递增的数值 Sequence 由数据行组成,基本的存储单元 Table 同义词,一个对象的替代名称 Synonym 增强查询性能 Index 描述 对象
  • 140.
  • 141. 创建视图 CREATE [OR REPLACE] [FORCE| NOFORCE ] VIEW view [( alias [, alias ]...)] AS subquery [WITH CHECK OPTION [CONSTRAINT constraint ]] [WITH READ ONLY [CONSTRAINT constraint ]]; CREATE OR REPLACE VIEW empvu80 (id_number, name, sal, department_id) AS SELECT employee_id, first_name || ' ' || last_name, salary, department_id FROM employees WHERE department_id = 80;
  • 142.
  • 143.
  • 144.
  • 145.
  • 146.
  • 147.
  • 148.
  • 149. 创建序列 CREATE SEQUENCE sequence [INCREMENT BY n ] [START WITH n ] [{MAXVALUE n | NOMAXVALUE }] [{MINVALUE n | NOMINVALUE }] [{CYCLE | NOCYCLE }] [{CACHE n | NOCACHE}];
  • 150.
  • 151.
  • 152.
  • 153.
  • 154.
  • 155.
  • 156.
  • 157.
  • 158.
  • 159.
  • 160.
  • 162. 控制用户访问 DB 管理员 用户 用户名、密码 权限
  • 163.
  • 164.
  • 165. 创建用户 CREATE USER demo IDENTIFIED BY demo; CREATE USER user IDENTIFIED BY password ;
  • 166.
  • 167. 角色 Roles 不使用 roles 进行权限分配 使用 roles 进行权限分配 权限 用户 Manager
  • 168. 创建角色 CREATE ROLE manager; GRANT create table, create view TO manager; GRANT manager TO BELL, KOCHHAR;
  • 169. 对象权限 对象 权限 表 视图 序列 ALTER DELETE INDEX INSERT REFERENCES SELECT UPDATE
  • 170.
  • 171.
  • 172.