oracle复习
第二章
1.SQL称结构化查询语言;SQL是操作和检索关系型数据库的标准语言
2.使用SQL语言,程序员和数据库管理员可以完成如下的任务:改变数据库的结构;更改系统的安全设置;增加用户对数据库或表的许可权限;在数据库中检索需要的信息
3.SQL语句分类:DQL语句(数据查询语言):Select
DML语句(数据操作语言):Insert/Update/Delete/Merge
DDL语句(数据定义语言):Create/Alter/Drop/Truncate
DCL语句(数据控制语言):Grant/Revoke--了解
TCL语句事务控制语句:Commit/Rollback/Savepoint
4.SQL语句的书写规则:关键字(Keyword):SQL语言保留的字符串,在自己的语法使用。例如关键字(Keyword) :SQL语言保留的字符串,在自己的
语法使用。例如,SELECT 和FROM 是关键字。
语句(statement):一条完整的SQL命令。例如,SELECT * FROM departments;是一条语句。
子句(clause):部分的SQL语句,通常是由关键字加上其他语法元素构成。例如,SELECT *是子句,FROMdepartments也是子句。
不区分大小写
可以单行来书写,也可以书写多行,建议分多行数学,增强代码的可读性。通常以字句分行。
关键字不可以缩写、分开以及跨行书写
每条语句需要以分号(;)结尾
5.算术表达式的使用:对NUMBER型数据可以使用算术操作符创建表达式(+ - * /)
对DATE型数据可以使用部分算术操作符创建表达式(+ -)
6.空值(NULL):表示未定义的,未知的。空值不等于零或空格。任意类型都可以支持空值。
空值的连接表达式(||)等于与空字符串连接,也就是原来的字符串
7.使用列别名得方法:空格或加AS,后面跟列别名
下面三种情况,列别名两侧需要添加双引号(""):
列别名中包含有空格;列别名中要求区分大小写;列别名中包含有特殊字符
别名能用在order by后,where中不能用别名
8.连接运算符(||)的使用:
SELECT first_name||''||last_name||''(此单引号是转义字符)'s phone number is'||phone_number""employee Phone number"
FROM employees;
9.DISTINCT取消重复行:SELECT DISTINCT department_id
FROM employees;
第三章 限制数据和对数据排序
1.比较运算符:<>不等于 >=大于等于 <=小于等于
遵循规则:字符及日期类型需要在两端用引号;字符类型大小写敏感;日期类型格式敏感,默认格式'DD-MON-RR'
SELECT last_name, hire_date
FROM employees
WHERE hire_date >= '01-1月-1999';
转换成英文环境:ALTER SESSION SET nls_language='american';
SELECT last_name, hire_date
FROM employees
WHERE hire_date >= '01-JAN-1999';
2.特殊比较运算符:BETWEEN....AND....;IN;LIKE;IS NULL
3.使用LIKE运算符:完成模糊查询功能
使用通配符来代替未知的信息。常用的通配符有%和_(下划线)
%可以代替任意长度字符(包括长度为0)
_(下划线)可以代替一个字符
如:WHERE last_name LIKE '%a%';--含有字母a
WHERE last_name LIKE 'A%' ;--首字母是A
WHERE last_name LIKE '_a%';--第二个字母是a
使用ESCAPE 标识符来查找带特殊符号的字符号
如:SELECT employee_id, last_name, job_id, salary
FROM employees
HERE job_id LIKE 'FI\_%' ESCAPE '\';--\是转义字符
4.逻辑运算符:AND OR NOT
5. 运算符优先级:1数学运算符:*,\,+,-
2连接运算符;||
3通用比较运算符:=,<>,<,>,>=,<=
4其他比较运算符:IS[NOT]NULL,LIKE,[NOT]BETWEEN,[NOT]IN
5逻辑非:NOT
6逻辑与:AND
7逻辑或:OR
6.ORDER BY特殊使用:ORDER BY salary;--升序排列--ORDER BY salary DESC--降序排列
ORDER BY子句可以出现在SELECT子句中没有出现过的列;
ORDER BY子句后的列名,可以用数字来代替。这个数字是
SELECT语句后列的顺序号。
NULL在升序中排最后,降序排最前
第四章 单行函数
1.单行函数的特征:当行函数对单行操作;每行返回一个结果;有可能返回值与原参数数据类型不一致(转换函数);
单行函数可以写在SELECT、WHERE、ORDER BY子句中;有些函数没有参数,有些函数包括一个或多个参数;函数可以嵌套
2.字符函数:
SELECT initcap('sbYon'), --首字母大写
concat('an','ne'), --连接两个值
SELECT substr('abjopjog',2,4),--从第二个字符开始取5个字符长度的子串
substr('abjopjog',2),取从b开始之后的所有字符
substr('abjopjog',-4,2),从后向前数4位,结果是pj
length('ajh;aj'), --求长度
instr('afvafgsd','af',2), --查找母串中,某子串的位置(第二个af子串)
lpad('aa',5,'bb'), --用bb左填充aa到长度为5
rpad('aa',5,'bb'),--用bb右填充aa到长度为5
TRIM(leading'a' FROM 'abcdef'), --去除字符串abcdef中的串头a(注意,只能截取一个字符,如果有相同的字符则全部去除)
(ltrim或者rtrim表示删除左边或者右边的字符)
REPLACE('abcd','b','c') --用c替换abcd中的b...
FROM dual
3.数字函数:
SELECT round(6.66257,3),--不输入位数时,默认为小数点后第一位6.663
ceil只能向上取整数,不能取小数
ceil(6.66257)--6
round(6.66257),--7
round(65.654,-1),--70
trunc(6.66257,3),--截取掉小说点后3位以外的值6.662
MOD(25,3) --25/3取余1
sqrt(25) --25开方
FROM dual
4.日期函数:
select SYSDATE, --系统日期
months_between(to_date('2002/08/06','yyyy/mm/dd'),to_date('2002/09/07','yyyy/mm/dd')),
months_between('19-12月-1999','19-3月-1999'), --两个日期间的月份
add_months(to_date('2002/08/06','yyyy/mm/dd'),2), --在原日期上增加2个月
last_day(sysdate), --给定日期月份的最后一天的日期
next_day('18-5月-2001','星期五'), --给定日期和星期五,计算下一个星期五的日期
trunc(sysdate,'mm'), --保留月,截取掉天。不能以此格式:trunc('18-5月-2001','dd')(格式码:世纪CC,年YY,月MM,日DD,小时HH24,分MI,秒SS)
round(to_date('2001/02/09 11:56:23','yyyy/mm/dd hh:mi:ss'),'mi'), --四舍五入方式取舍时间,其中为保留分,四舍五入秒。 (格式码同上)
extract(MONTH|YEAR|DAY FROM SYSDATE) --从给定日期中获取年或月或日
from dual
5.转换函数:
1.to_char函数把日期类型、数字类型的表达式或列转换成字符类型
注意:进行数字类型到字符型转换,格式中的宽度一定要超过实际列宽度,否则会显示为###
例子:SELECT last_name, TO_CHAR(salary, '$99,999.00') salary
FROM employees
WHERE last_name = 'King';
2.to_number把字符型列或表达式转换为数字类型;
to_date把字符类型列或表达式转换为日期类型
3.RR:两位数字表示年份,有世纪转换,YY:2位数字表示年份,但无世界转换(第四章37页)
select rowidtochar(ROWID), --将ROWID类型转换为字符数据类型
convert('strutz','we8hp','f7dec'), --将源字符串从f7dec字符集转换到we8hp字符集
to_char(SYSDATE,'yy/mm/dd hh24:mi:ss'), --将系统时间装换为目标格式 (特殊格式:th 数字的英文序数词,sp 数字表示的英文拼写)
to_date('2010-10-09','yyyy/mm/dd'), --日期转换
to_number('19886859'), --转换为数字
greatest('AA','AB','AC'), --返回一组表达式中的最大值,即比较字符的编码大小。(与此相对的为least,取最小)
NVL(job_id,'No Job Yet'), --空值转换,当job_id为空时,用后面字符串替换
NVL2(表达式1,表达式2,表达式3)函数是对第一个参数进行检查。如果第一个参数不为空,则输出第二个参数;如果第一个参数为空,则输出第三个参数。
NULLIF(LENGTH(last_name), LENGTH(email)), --两个参数的比较,当参数不相等时,返回第一个参数,当相等时,返回为空值
SELECT last_name, commission_pct,
(CASE commission_pct
WHEN 0.1 THEN '低'
WHEN 0.2 THEN '中'
WHEN 0.3 THEN '高'
ELSE '无'
END), --
decode( commission_pct,
0.1,'低',
0.2,'中',
0.3 , '高',
'无') --缺省值“无”
from dual
4.函数的嵌套:当行函数可以嵌套在任何层,嵌套的函数是从最里层向最外层德尔顺序计算的。F3(F2(F1(col,arg1,arg2),arg3)
第五章 多表查询
1.等值连接又称为简单连接或内连接。就是当两个表的公共字段相等的时候把两个表连接在一起。公共字段是两个表中有相同含义的列;Foreign key=Primary key
多表连接中,记录筛选语句同样写在WHERE语句中,
2.表别名的书写:表别名长度不超过30个字符;表别名定义在FROM子句中;如果已经定义了表别名,那么只能使用表别名而不能使用原表名;表别名的有效范围只是当前语句
SQL语句的书写顺序是:SELECT FROM WHERE ORDER BY而实际的执行顺序是:FROM WHERE SELECT ORDER BY
3.不等值连接: (通过between···and 或者是in、like建立非等值关系的连接)
4.外连接
右外连接:以右表为基准,右表中的每个记录都必须显示,即使左表中没有与之相匹配的记录。
eg:所有部门信息,不管部门是否有员工。
SELECT e.last_name,
e.job_id,
e.department_id,
d.department_name
FROM employees e, departments d
WHERE e.department_id(+) = d.department_id;
左外连接:以左表为基准,左表中的每个记录都必须显示,即使左表中没有与之相匹配的记录。