环境变量
ORACLE_SID
sqlplus 客户端
user_name:amdin
password:admin
sqlplus command:
desc/describe --
--buffer sql 语句
list
edit --vi 编辑器来修改 sql 语句
clear screen--清屏
set pause on --可实现分屏显示
set pause off --取消分屏显示
set pause “Please enter Enter Key”--增加提示信息
col{umn}---定义选择的宽度,格式等。
sql 语句:
select first_name,salary from s_emp;
运行:;回车
当上一天语句没有以;结束,既未运行。可用/运行。
例:
SQL> select first_name
2 form e_emp
SQL>/-----此时可运行最后执行的那个 sql 语句
select 语句可用+ - * /
要防止空值,所以要使用空值转换
NVL(start_date,'01-JAN-95')
NVL(title, 'No Title Yet')
NVL(salary,1000);
例算年薪
SQL>select first_name,salary*12*(1+nvl(commission_pct,0)/100) from s_emp;
给列取别名:
select first_name,salary*12 “annual salary”from s_emp;
|| 拼接字符
取别名时用双引号,拼字符时用单引号
select first_name||''||last_name
拼接可自动生成一些 sql 脚本。
Select 'select * from'||table_name from user_tabels;
Distinct --排序功能,联合唯一?
Order By 字段名(别名,字段位置) DESC(降序)
where 子句 跟条件表达式。
比较运算符 = > >= < <=
字符串单引 字符串大小写敏感
注意:数据类型,逻辑关系,where 子句的关系。
Between and 是一个闭区间 [ ]
IN 后跟集合,相当于 or 的意思 =any
where (dept_id=41 or dept_id=42) and salary>1000
Like 通配符 %0或多个符 _任意一个字符
转义字符\
select table_name from user_tables where table_name like 'S\_%' escape '\';
IS NULL 判断一个字段为空
single Row Functions
字符函数:LOWER(‘SQL COURTSE’)转小
UPPER
INITCAP
CONCAT('GOOD','String') GoodString;
SUBSTR('String',1,3) Str
LENGTH('String') 6
数值函数:ROUND 四舍五入
TRUNC 截取
multiple row functions
日期处理:Century year,month,day,hours,minutes,seconds
default date display is DD-MON-RR
alter session set nls_date_format='yyyy mm dd hh24:mi:ss';设置 oracle 时间格式
十分钟之后的时间
select sysdate+1/144 from dual;
日期函数:
MONTHS_BETWEEN(日期一,日期二)
ADD_MONTHS(日期,加的天数)
NEXT_DAY(日期,星期)例:next_day(‘’,‘friday');
LAST_DAY(日期)
ROUND(显示的日期,按年或月截取)什么都无就截掉时分秒
TRUNC (显示的日期,按年或月截取)
将日期转成字符 fmt—转换的格式 YEAR DAY,MM,HH24:MI:SS
TO_CHAR(DATE,'fmt')
AM
ddspth DD “of” MONTH
select to_char(start_date,'YEAR') from s_emp
将字符转为日期
TO_DATE('','fmt')
insert into test values(to_date('2009 01 10 20:29:40','yyyy mm hh24:mi:ss')
日期是格式敏感的 那么 钱呢? 货币?
千年虫 RR 格式在跨世纪时将不会出现问题。YY 就会出现问题!
Y2K
字符和数字的转换: 格式有:9,0,$ L . ,
to_char(number,'fmt')
TO_NUMBER('字符',格式)
业务需求要变成 sql 语句
Oracle
vi 关键命令
a 下一字符编辑
i 插入
o 换行输入
左,下,上,右
h,j,k,l
r 替换
d 删除,dd 删除一行
u 撤消
:wq 保存退出
执行脚本:sqlplus asd0811/asd0811 @demobld.sql
Join
内连接:严格匹配
等值连接:
表里数据要对应能找到
select e.ename,s.grade from emp e,salgrade s where e.salary between s.hightsal and
s.lowsal
自连接:select e.first_name “Employee”,m.first_name “Manager”
from s_emp e,s_emp m
where e.manager_id(+)=m.id
外连接:一个也不能少 (+)
连接要注意表结构和表关系,很重要!
Group Functions 多行函数 所有组函数处理的都是非空值
AVG(DISTINCT|ALL|n)
COUNT(DISTINCT|ALL|expt|*)
MAX(DISTINCT|ALL|expr)
MIN(DISTINCT|ALL|expr)
SUM(DISTINCT|ALL|expr)
处理非空值
COUNT(dept_id)
COUNT(distinct dept_id) 处理非空的且排除重复的
group by 字段 按字段分组 字段越多分的粒度越细,结果集越少!
有了 Group by 子句 select 后跟字段与 group by 后字段一样
<>不等
过滤方式
having
与 where 区别。where 过滤的是一行一行的记录。单行函数
having 过滤的是分组后的结果。组函数
group by 与 having 有严格顺序
子查询:select last_name,title from s_emp where title = (select title from s_emp
where last_name='Smith')
and last_name<>'Smith'
查询平均公资大于部门号是 32 号的部门
select dept_id,avg(salary) from s_emp group by dept_id
having avg(salary) > (select avg(salary) from s_emp where dept_id=32)
select table_name from user_tables;查看有多少表
distinct 排重
数字+ - * / 字符 拼接 ||
% 任 0 个或多个 _任一个
转义字符 \
order by 默认是升序 desc 表降序
后跟字段。或字段的序号 order by 2 表选择的第二个字段
select e.first-aname,m.first_name from s_emp e left outer join s_emp m on
e.manager=m.id;
left outer join; full outer join right outer join;inner join
组函数忽略空值,但不排重!
数据库的设计
懂业务,懂技术,B/S,C/S 设计。
Design E-R 实体关系图--->表(sql 脚本)---->存数据库
通过流程帮助客户提出需求。
Build and Document
Database Design
Performance 性能 Integrated application 集成 Intergration with other system
选型
。。。
Entity 实体 一个抽象的概念
Examples: customers,sales
属性 描述实体
Attribute
Relationship 关系
Examples: orders and items,customers and sales
表名大写,属性小写。 Unique Identifier # 表不能重复 唯一 Mandatory marked with *
必需要有。非空
Primary marked with #
可有可无,
Opitonal marked with o
虚线表 may be 实线表 must be
one to one one to many many to many
范示:
第一范示(first normal form):all attributes must be single-valued 每一个属性只
有一个值 会有数据冗余
第二范示(second normal form):an attribute must depend upon its entity's entire
UID 在第一范示基础上增加了一个主属性标识。会有数据冗余。非主属性不完全依懒于主
属性,非主属性与非主属性之间存在依懒关系。
第三范示(three normal form):No mon-UID attribute can be dependent upon another
non-UID attribute 在第二范示基础上,非主属性严格依懒于主属性
看需求来确定使用何种范示
完整性约束
primary key ,unique key ,foreign key
主键约束---唯一且非空。用来标识一条记录。一张表只能有一个主键。
联合主键 composite primary key
外键---foreign key 唯一可非空。外键是主键一部分时,不能为空。If an FK is
part of a PK,then it cannot be NULL.
唯一性约束,非空约束,检查性约束。
PK,UK,FK,CK,NN
用户自定义约束 触发器
数据库设计步骤:
约定命名习惯
设计索引 design the indexes
定义视图 establish view definitions
数据空间存储 plan the physical storage space
定义约束 redefine integrity constraints
E-R 图转换成数据表:
Map Entities to Tables table
Map the attributes to Columns
Map Unique Identifiers to Primary Keys
Map Relationships to Foreign Keys
TABLE
create table
datatype: varchar2 char,number,
char 定长,varchar2 变长。
没有指定数字宽度 number(4,2) 4 表示有效位数,3 表示多少位小数(四舍五入)。
Insert into test(c2) values (123)---错误。超出了有效位。
字符串用单引号引起 空用 NULL,
CLOB---Character date up to 4GB
BLOB—Binary data up to 4GB
DATE
dual is a dummy table used to view sysdate.
Default date display is DD-MON-RR
YYYY YEAR MM MONTH DY DAY
函数:
to_date
to_char
select first_name,to_char(start_date) from s_emp where to_char(start_date,'MM'))='03'
to_char(start_date,'fmmm')=
'3'
RR 时间保证跨世纪: 0-49 50-99
当前
0-49 Before
当前
50-99 After
has an fm element to remove padded blanks or suppress leading zeros 前导零
select to_char(trunc(last_day(sysdate)+1),'yyyy-mm-dd hh24:mi:ss') from dual; 下个月的
第一天。
INDEX 索引
每条记录的地址
创建 1:自动创建 define a PRIMARY KEY or UNIQUE constraint
创建 2:手工创建 create non-unique indexes
CREATE INDEX test_ind_name ON test(name);
user_indexes 系统索引表 user_ind_columns 约束索引字段表
适合建索引的情况:字段列常用作查询,字段列值范围广,大量的空值,有时要使用联合
索引,并非越多索引效率越好。
不适合建情况:表太小,字段列不常用作查询条件,常更新
UNIQUE 唯一性索引
Non-unique 非唯一性索引,加快查询速度
单值索引
Single column
多值索引
Concatenated or composite
DROP INDEX 删除索引
视图:CREATE VIEW myview AS SELECT * FROM test WHERE id<10;
视图不占空间, 可简化查询操作。
CREATE OR REPLACE VIEW empinfo(id,enam,rname) AS SELECT e.id,e.first_name,r.name
FROM s_emp e,s_region r WHERE ....; 创建或替换
视图里是聚合信息时不能插入单个细节记录。
基表不存在也可以创建视图用 CREATE FORCE VIEW myview 默认是 NOFORCE。
CREATE OR REPLACE VIEW myview AS SELECT ...FROM WHERE .
WITH CHECK OPTION CONSTRAINT emp_ck. 视图添加约束。约束为 WHERE 条件。 符号 V
WITH READ ONLY 只读视图。O
字查询里不能用 ORDAR BY。
Inline view 内联视图
哪些员工的工资比本部门的平均工资高?
SELECT first_name,salary,avg
2 FROM s_emp,(SELECT dept_id,avg(salary) avg
3 FROM s_emp
4 GROUP BY dept_id) a
5 WHERE s_emp.dept_id=a.dept_id
6* AND salary>avg
rownum 记录的位置,必须等于 1 或<=一个数
工资排名前五名
1 SELECT first_name,salary
2 FROM (SELECT rownum,first_name,salary
3 FROM s_emp
4 ORDER BY salary DESC) a
5* WHERE rownum<=5
分页显示
SELECT r,a.*
FROM (SELECT rownum r,aa.*
FROM (SELECT *
FROM s_emp) aa
)a
WHERE r BETWEEN 1 AND 10
例 2:
SELECT r,first_name,salary
FROM ( SELECT rownum r,first_name,salary
FROM ( SELECT first_name,salary
FROM s_emp
ORDER BY salary DESC
)
WHERE rownum<=20
)
WHERE r BETWEEN 16 AND 20
排名相同的情况
去除掉重复后的排名,有两个 3 名就无第四名。
rank() over
dense_rank() over() 按顺序排名 有两个 3 名。第五名就将成为第四名
SELECT dense_rank() over(ORDER BY salary DESC) r,first_name,salary FROM s_emp;
limit
关联子查询:
who earn more than the average salary in their department 思路:将部门号传给子查
询取到部门的平均值。
SELECT last_name,salary,dept_id
2 FROM s_emp outer
3 WHERE salary > (SELECT AVG(salary)
4 FROM s_emp
5 WHERE dept_id=outer.dept_id)
6 ;
子查询是否存在。存在为真,不存在为假。
EXISTS
不存在为真,存在为假。
NOT EXISTS
SELECT first_name
2 FROM s_emp outer
3 WHERE EXISTS (
4 SELECT manager_id/常量。
5 FROM s_emp inner
6 WHERE outer.id=inner.manager_id);
chooes all courses
SELECT name FROM students s WHERE NOT EXISTS (SELECT 'x' FROM courses c WHERE
NOT EXISTS (SELECT 'x' FROM stu_cou sc WHERE s.id=sc.sid AND c.id=sc.cid) )
1 查询 zhaojun 同学有哪些课程没有选择
2 查询哪些同学 选择了 zhaojun 同学选的课程
3 查询哪些同学选择了和 zhaojun 同学相同的课程
1 查询 zhaojun 同学有哪些课程没有选择
SELECT name
FROM course c
WHERE NOT EXISTS (SELECT 1
FROM stu_course sc,student s
WHERE sc.s_id=s.sid AND s.name='zhaojun' AND sc.c_id=c.cid);
2 查询哪些同学(name) 选择了 zhaojun 同学选的课程
SELECT DISTINCT s_id
FROM stu_course outer
WHERE c_id IN (SELECT c_id
FROM stu_course sc WHERE sc.s_id=2)
SELECT DISTINCT s_id
FROM stu_course outer
WHERE EXISTS (SELECT 1
FROM stu_course sc WHERE sc.s_id=2 AND outer.c_id=sc.c_id);
3 查询哪些同学选择了和 zhaojun 同学相同的课程
SELECT s_id
FROM stu_course a
WHERE NOT EXISTS(SELECT DISTINCT s_id
FROM stu_course outer
WHERE NOT EXISTS (SELECT 1
FROM stu_course sc WHERE sc.s_id=2 AND
outer.c_id=sc.c_id) AND a.c_id=sc.c_id));
4 查询哪些同学选的课程不合 zhaojun 一样。
SELECT DISTINCT s_id
FROM stu_course outer
WHERE NOT EXISTS (SELECT 1
FROM stu_course sc WHERE sc.s_id=2 AND outer.c_id=sc.c_id);
也可以用 NOT IN
SELECT DISTINCT s_id
FROM stu_course outer
WHERE c_id NOT (SELECT c_id
FROM stu_course sc WHERE sc.s_id=2)
但此时如果有 zhaojun 同学一门课也没选,空记录将查不到
UNION 排重/UNION ALL 不排重。 联合 联合类型要一致。
交集。
INTERSECT
集合相减。
MINUS
ALTER 修改表结构。
ALTER TABLE ADD column 增加一个字段
ALTER TABLE test DROP 字段
修改字段名;
ALTER TABLE test RENAME COLUMN
。。MODIFY (title varchar2(50)) 修改字段类型
ALTER TABLE
ALTER TABLE s_emp ADD CONSTRAINT s_emp_manager_id_fk
增加约束
FOREIGN KEY (manager_id) REFERENCES s_emp(id)
ALTER TABLE s_emp DROP CONSTRAINT s_emp_manager_id_fk; 删除约束
级联删除主键。
ALTER TABLE s_dept DROP PRIMARY KEY CASCADE;
使约束失效
ALTER TABLE s_emp DISABLE CONSTRAINT s_emp_id_pk CASCADE
使约束恢复有效
ALTER TABLE s_emp ENABLE CONSTRAINT s_emp_id_pk;
分享到:
相关推荐
Oracle知识库是一个全面涵盖Oracle数据库管理系统相关知识的资源集合,主要针对希望学习和掌握Oracle技术的用户。这个中文版的教程以CHM(Compiled Help Manual)格式提供,方便用户在无需互联网连接的情况下离线...
这份"Oracle知识库,手册"集合提供了全面的Oracle学习和参考资源,特别适合DBA(数据库管理员)、开发人员以及对Oracle系统感兴趣的任何人。CHM版的手册意味着这些资料是以Windows帮助文件的格式存在,便于离线查阅...
oracle知识体系结构,
Oracle数据库系统是全球广泛使用的大型关系型数据库...本Oracle知识库涵盖了上述各方面的内容,旨在帮助用户全面理解和掌握Oracle数据库系统,无论你是初学者还是经验丰富的DBA,都能从中获取宝贵的知识和实践经验。
虽然这些知识来源于2004年的资源,但Oracle的基本原理和最佳实践并未发生根本变化。因此,对于初学者和经验丰富的数据库管理员来说,这些内容仍然是宝贵的参考资料。通过深入学习和实践,你可以更好地理解和运用...
oracle知识点总结.txt 个人对oracle的一些总结
本“Oracle知识库”包含了一系列关于Oracle的相关资料,旨在帮助用户深入理解和掌握Oracle的各个方面。 1. **Oracle体系结构** Oracle数据库的架构由多个组件构成,包括服务器进程、客户端进程、内存结构(如SGA和...
Oracle知识大全PPT合集是一份综合性的学习资源,涵盖了Oracle数据库从安装、配置到管理、优化等全方位的知识。这份合集特别适合Oracle初学者以及准备OCP(Oracle Certified Professional)考试的人员进行深入学习。 ...
4. **全面的Oracle知识**:涵盖Oracle的安装与配置、数据库设计、SQL查询语言、存储过程和函数、触发器、视图、索引、分区、数据库性能调优、数据库复制技术(如GoldenGate)、数据库安全、备份与恢复策略、故障诊断...
该资源是系统学习Oracle后做的整理,方便后来学者更好,更快的学习Oracle知识,资源里面有Oracle学习资料,以及学习期间整理辅助学习资料,此资源内容是Oracle知识点整理笔记的下篇,Oracle的初学篇知识学习可以查看...
Oracle的技术广泛应用于各行各业,其中电信、电力、金融、政府及大量制造业都需要Oracle技术人才,Oracle公司针对职业教育市场在全球推广的项目,其以低廉的成本给这部分人群提供Oracle技术培训,经过系统化的实训,...
Oracle知识库是一个全面涵盖Oracle数据库管理系统相关知识的资源集合,对于数据库管理员(DBA)、开发人员和IT专业人员来说,是提升技能和解决问题的重要参考资料。CHM文件是一种Microsoft编写的帮助文档格式,它将...
"Oracle知识概览.rar"这个压缩包文件显然提供了一个全面的学习路线图,帮助初学者或有经验的用户更好地理解和掌握Oracle的相关知识。以下是Oracle学习的一些关键点: 1. **Oracle数据库基础**:首先要了解Oracle...
割接 常用 Oracle 知识,主要是一些常用的技术,及ORACLE调优方面的知识,有利大家在平时工作中,使用到。
总之,Oracle知识不仅包括数据库的基本架构、内存与进程结构、物理存储结构,还涉及到安装、管理、备份恢复以及性能监控等实际操作技能。对于那些希望深入学习Oracle数据库的朋友来说,了解这些知识点是不可或缺的,...
Oracle知识点总结 本文档旨在总结Oracle数据库的相关知识点,涵盖了Oracle数据库的安装和配置、开发工具、数据库设计、事务处理、函数和存储过程等方面的内容。 一、Oracle数据库的安装和配置 Oracle数据库的安装...
本文将对一些常见的Oracle知识进行浅析,主要包括数据库的概念、实例结构、环境变量、连接方式、以及一些基础的SQL函数。 首先,我们需要理解数据库和Oracle实例的区别。数据库是存储数据的物理结构,包括数据文件...
"Oracle知识点滴"显然是一份汇聚了关于Oracle数据库关键概念和技术的资料,适合Oracle用户进行学习和参考。以下是根据标题、描述以及文件名所推测的一些关键知识点: 1. **Oracle数据库架构**:Oracle数据库采用...
Oracle知识点总结,适合初学者,平时多联系,放在手机上,当做电子书来看。