Oracle SQL 培训

Oracle SQL 基础知识
展开查看详情

1.1 汉得信息技术有限公司 HAND Enterprise Solutions Company Ltd. www.hand-china.com Oracle_SQL 培训 _V1.0 来源: Oracle 标准培训教材 编写人:  商云方 编写日期: 20101230 版本:   1.0 汉得信息技术有限公司版权所有

2.第一单元: SELECT 语句 SELECT 语句的作用: 列选择: SELECT Column1, Column2 from table1 行选择: SELECT * from table1 多表连接查询: SELECT table1.Column1, table2.Column2 from table1,table2…

3.第一单元: SELECT 语句 3 SELECT 语句语法: SELECT * | {[DISTINCT] column | expression [ alias ],...} FROM table; SELECT 表示要取哪些列 FROM 表示要从哪些表中取 SQL 语句中的数学表达式:对于数值和日期型字段,可以进行 “加减乘除” SELECT last_name , salary, salary + 300 FROM employees; ……

4.第一单元: SELECT 语句 4 关于 NULL 的概念 : NULL 表示 不可用、未赋值、不知道、不适用 , 它既不是 0 也不是空格。 记住:一个数值与 NULL 进行四则运算,其结果是? NULL 在 Select 的时候给列起个别名(注意双引号的作用):

5.第一单元: SELECT 语句 5 字符串连接操作符: “ ||” SELECT last_name || job_id AS "Employees" FROM employees; SELECT last_name || is a || job_id AS "Employee Details" FROM employees; ……

6.第一单元: SELECT 语句 6 DISTINCT 去除重复行: SELECT department_id FROM employees; 默认情况,返回所有行,包括重复行 SELECT DISTINCT department_id FROM employees; 使用 DISTINCT 消除重复结果行

7.第二单元:条件限制和排序 7 SELECT *|{[DISTINCT] column|expression [ alias ],...} FROM table [WHERE condition(s) ]; 条件限制的关键词: WHERE SELECT employee_id, last_name, job_id, department_id FROM employees WHERE department_id = 90 ; 比如 : ……

8.第二单元:条件限制和排序 8 比较操作符: 比较操作符 意义 = 等于 > 大于 >= 大于等于 < 小于 <= 小于等于 <> 不等于 BETWEEN ...AND... 在两个值之间 IN(set) 在一个集合范围内 LIKE 匹配一个字符串样子,可以使用 % 通配符 IS NULL 是一个空值,注意不能使用 = NULL SELECT last_name , salary FROM employees WHERE salary <= 3000; ……

9.第二单元:条件限制和排序 9 SELECT last_name , salary FROM employees WHERE salary BETWEEN 2500 AND 3500; SELECT employee_id , last_name , salary, manager_id FROM employees WHERE manager_id IN (100, 101, 201);

10.第二单元:条件限制和排序 10 使用 LIKE 做模糊匹配: 可使用 % 或者 _ 作为通配符: % 代表 0 个或者多个 字符 . _ 代表一个单个字符 . SELECT last_name FROM employees WHERE last_name LIKE _o%; ……

11.第二单元:条件限制和排序 10 使用 LIKE 做模糊匹配: 可使用 % 或者 _ 作为通配符: % 代表 0 个或者多个 字符 . _ 代表一个单个字符 . SELECT last_name FROM employees WHERE last_name LIKE _o%; ……

12.第二单元:条件限制和排序 12 使用 NULL 条件: SELECT last_name , manager_id FROM employees WHERE manager_id IS NULL; 使用多个条件组合的逻辑操作符: 逻辑操作符 意义 AND 所有条件都满足,返回 TRUE OR 只要有一个条件满足,返回 TRUE NOT 如果条件是 FALSE, 返回 TRUE SELECT employee_id , last_name , job_id , salary FROM employees WHERE salary >=10000 AND job_id LIKE %MAN%; ……

13.第二单元:条件限制和排序 13 SELECT employee_id , last_name , job_id , salary FROM employees WHERE salary >= 10000 OR job_id LIKE %MAN%; SELECT last_name , job_id FROM employees WHERE job_id NOT IN (IT_PROG, ST_CLERK, SA_REP); ……

14.第二单元:条件限制和排序 14 使用 ORDER BY 子句进行排序: ASC :升序 DESC :倒序 SELECT last_name , job_id , department_id , hire_date FROM employees ORDER BY hire_date ; SELECT last_name , job_id , department_id , hire_date FROM employees ORDER BY hire_date DESC ; ……

15.第二单元:条件限制和排序 15 SELECT employee_id , last_name , salary*12 annsal FROM employees ORDER BY annsal ; 按照字段别名排序: SELECT last_name , department_id , salary FROM employees ORDER BY department_id , salary DESC; 按照 多个字段 排序: …… ……

16.第三单元:单行函数 16 SQL 函数类型: 单行函数和多行函数

17.第三单元:单行函数 17 单行 SQL 函数类型:

18.第三单元:单行函数 18 字符函数:

19.第三单元:单行函数 19 函数 结果 LOWER(SQL Course) sql course UPPER(SQL Course) SQL COURSE INITCAP(SQL course) Sql Course 大 小写转换函数: Oracle 数据库中的数据是大小写敏感的 : SELECT employee_id , last_name , department_id FROM employees WHERE last_name = higgins ; no rows selected SELECT employee_id , last_name , department_id FROM employees WHERE LOWER( last_name ) = higgins ; ……

20.第三单元:单行函数 20 字符串操作函数: 函数 结果 CONCAT(Hello, World) HelloWorld SUBSTR(HelloWorld,1,5) Hello LENGTH(HelloWorld) 10 INSTR(HelloWorld, W) 6 LPAD(salary,10,*) ***** 24000 RPAD(salary, 10, *) 24000***** TRIM(H FROM HelloWorld) elloWorld TRIM( HelloWorld) HelloWorld TRIM(Hello World) Hello World SQL 语句中使用举例: SELECT employee_id , CONCAT( first_name , last_name ) NAME, job_id , LENGTH ( last_name ), INSTR( last_name , a) "Contains a?" FROM employees WHERE SUBSTR( job_id , 4) = REP;

21.第三单元:单行函数 21 函数 结果 ROUND(45.926, 2) 45.93 TRUNC(45.926, 2) 45.92 MOD(1600, 300) 100 数字操作函数: SQL 语句中使用举例: SELECT ROUND(45.923,2), ROUND(45.923,0), ROUND(45.923,-1) FROM DUAL; SELECT TRUNC(45.923,2), TRUNC(45.923), TRUNC(45.923,-2) FROM DUAL; SELECT last_name , salary, MOD(salary, 5000) FROM employees WHERE job_id = SA_REP; ……

22.第三单元:单行函数 22 日期 操作函数: 函数 结果 MONTHS_BETWEEN (01-SEP-95,11-JAN-94) 19.6774194 ADD_MONTHS (11-JAN-94,6) 11-Jul-94 NEXT_DAY (01-SEP-95,FRIDAY) 8-Sep-95 NEXT_DAY (01-SEP-95,1) 3-Sep-95 NEXT_DAY (1995-09-01,1) ORA-01861:literal does not match format string NEXT_DAY (to_date(1995-09-01,YYYY-MM-DD),1) 3 -Sep-95 LAST_DAY(01-FEB-95) 28-Feb-95 ROUND(25-JUL-95,MONTH) 1-Aug-95 ROUND(25-JUL-95 ,YEAR) 1-Jan-96 TRUNC(25-JUL-95 ,MONTH) 1-Jul-95 TRUNC(25-JUL-95,YEAR) 1-Jan-95

23.第三单元:单行函数 23 日期的运算操作: SELECT last_name , (SYSDATE- hire_date )/7 AS WEEKS, sysdate+1 as tomorrow , hire_date + 8/24 FROM employees WHERE department_id = 90; ……

24.第三单元:单行函数 24 不同类型的数据转换函数:

25.第三单元:单行函数 25 从 到 VARCHAR2 or CHAR NUMBER VARCHAR2 or CHAR DATE NUMBER VARCHAR2 DATE VARCHAR2 Oracle 数据类型的 隐私转换规则: 对于赋值操作可以: 对于表达式比较操作仅可以: 从 到 VARCHAR2 or CHAR NUMBER VARCHAR2 or CHAR DATE select * from test1; select * from test1 where column1 = 1234;

26.第三单元:单行函数 26 Oracle 数据类型的 显式转换函数:

27.第三单元:单行函数 27 TO_CHAR() 函数:日期到字符串的转换 TO_CHAR(date, format_model ) ; 日期格式化元素 意义 YYYY 4 位数字表示的年份 YEAR 英文描述的年份 MM 2 位数字表示的月份 MONTH 英文描述的月份 MON 三个字母的英文描述月份简称 DD 2 位数字表示的日期 DAY 英文描述的星期几 DY 三个字母的英文描述的星期几简称 HH24:MI:SS AM 时分秒的格式化 DDspth 英文描述的月中第几天 fm 格式化关键字,可选 SELECT last_name , TO_CHAR( hire_date , fmDD of Month YYYY) AS HIREDATE FROM employees; ……

28.第三单元:单行函数 27 TO_CHAR() 函数:日期到字符串的转换 TO_CHAR(date, format_model ) ; 日期格式化元素 意义 YYYY 4 位数字表示的年份 YEAR 英文描述的年份 MM 2 位数字表示的月份 MONTH 英文描述的月份 MON 三个字母的英文描述月份简称 DD 2 位数字表示的日期 DAY 英文描述的星期几 DY 三个字母的英文描述的星期几简称 HH24:MI:SS AM 时分秒的格式化 DDspth 英文描述的月中第几天 fm 格式化关键字,可选 SELECT last_name , TO_CHAR( hire_date , fmDD of Month YYYY) AS HIREDATE FROM employees; ……

29.第三单元:单行函数 29 TO_NUMBER 应用 正确与否 select TO_NUMBER(4456) from dual; √ select TO_NUMBER(,456) from dual; Ⅹ select TO_NUMBER(,456,,999 )from dual; √ select TO_NUMBER(,456,455.000,,999.999 )from dual; Ⅹ select TO_NUMBER(,456,455.000,,999,999,999,999.999 )from dual; √ TO_NUMBER() 函数:字符串到数字的转换 TO_NUMBER(char[, format_model ]) ; TO_DATE() 函数:字符串到日期的转换 TO_DATE(char[, format_model ]) TO_ DATE 应用 正确与否 select to_date (22-FEB-11) from dual; √ select to_date(2011-2-22) from dual; Ⅹ select to_date(2011-2-22,YYYY-MM-DD) from dual; √ select to_date(2-22-2011,MM-DD-YYYY) from dual; √ select to_date(2011-FEB-22,YYYY-MON-DD) from dual; √