ORACLESQL入门绝对精简.docx
《ORACLESQL入门绝对精简.docx》由会员分享,可在线阅读,更多相关《ORACLESQL入门绝对精简.docx(18页珍藏版)》请在冰豆网上搜索。
ORACLESQL入门绝对精简
orcale的入门知识
第一部分数据库基础
一、基本概念
1.什么是SQL?
SQL即结构化查询语言,是用于关系数据库通迅的标准语言,通过SQL用户可向数据库表达自已的需求。
2.什么是客户机/服务器技术?
在客户机/服务器中,主机叫作服务器,网络通常是局域网(LAN)或是广域网(WAN).服务器通常被个人计算机或是其他的服务器或个人计算机而不是终端访问.每一台PC机都叫做一个客户机,都有访问网络的功能,允许在客户机和服务器之间通信因此叫客户机/服务器技术.
二、数据处理的发展阶段
1、手工处理阶段:
50年代中期,计算机内存、外存容量都很小,外存只有磁带,没有磁盘,硬件性能很差;软件中也没有数据管理部分,因而主要限于科学计算;这一阶段主要是用手工进行数据处理。
2、文件系统阶段:
数据和程序的分离导致了文件系统的诞生。
顺序与随机文件组织并用;
批量与实时处理并存;
物理和逻辑结构有了简单变换;
软件提供存取方法;
数据冗余较多,数据不能共享;
文件或数据属于一个用户;
数据独立性差,数据结构和程序合为一体;
无集中管理,无法用全局观点而只能面向局部应用进行数据结构设计。
3、数据库系统阶段:
数据库技术的目标就是克服文件系统的弊病,解决冗余和数据独立性问题,并通过一软件系统(DBMS)来集中管理所有文件,从而实现数据共享,其本质是通过分层,第一层面向用户,第二层面向全局,第三层面向物理存贮,层和层这间通过两级变换,这样将用户应用文件与物理文件完全分离,分别实现了数据的逻辑和物理独立性。
模型:
为把数据和程序完全分离,分为三种模型:
内模型或物理模型:
面向计算机物理存贮;
概念模型:
面向系统整体;(DBMS)
外模型:
面向用户。
模式:
用DDL精确定义数据模型的程序;
内模式:
定义内模型的模式;
概念模式:
定义概念模型的模式;
外模式:
定义外模型(面向用户)的模式。
数据模型:
表示实体(ENTITY)以及实体间联系(RELATIONSHIP)的模型;有四种形式:
E-R模型:
最直观的描述方式,实体集用长方形表示,属性用椭圆表示,联系用菱形表示;
层次模型:
可表示1-m关系,有唯一根(和父)结点;
网状模型:
可表示m-m关系;
关系模型:
以表来表示数据间的联系,通过表格数据而不是通过指针链接来表示和实现两实体间的关系。
三、ORACLE简介
自1970年CODD发表关系理论后,关系型数据库得到了飞速的发展,如INFORMIX、DB2等;
起初ORACLE是一发展较完善的关系型数据库,已由单一的数据库发展到多种服务,多种产品的;ORACLERDBMS是ORACLE系统的核心,它由数据库管理的核心模块以及帮助用户和数据库管理员DBA维护、监视和使用数据库的一些实用程序组成。
RDBMS的核心模块就是SQL的实现模块,它是所有实用程序的基础。
问:
在三种模式(内、概念、外模式)中ORACLE是对应于哪种模式;
在四种数据模型(E-R、层次、网状、关系型)中ORACLE相应于哪种?
四、SQL命令简介
1、DDL数据定义语言.
CREATETABLE;ALTERTABLE;DROPTABLE;
CREATEVIEW;ALTERVIEW;DROPVIEW;
CREATEINDEX;ALTERINDEX;DROPINDEX;
2、DML数据操纵语言.
INSERT向表中插入新数据行;
UPDATE更新表中现有的数据;
DELETE从表中删除几行数据;
3、DQL数据查询语言.
SELECT从一张或多张表中返回数据;
4、DCL数据控制语言.
ALTERPASSWORD更改用户密码;
GRANT为用户赋予特权;
REVOKE收回用户特权;
CREATESYNONYM创建同义词
5、数据管理命令.
STARTAUDIT
STOPAUDIT
6、事务性控制命令.
COMMIT将事务保存到数据库;
ROLLBACK撤消一个数据库事务;
SAVEPOINT创建在必要时可以撤消事务的保存点;
SETTRANSACTION设置事务。
第二部分建立数据库
一、基本概念
1、数据库和数据库对象?
数据库是数据的集合体;
数据库对象可以是数据库中定义的任何对象,用于存储和参照数据,表是关系数据库最简单的存储形式,还有视图、索引等。
2、什么是模式?
模式数据库对象的集合,并有一个与之相关连着的特定的用户名,一个模式可以包括一张表和没有数量限制的对象.
3、数据结构
定长字符串CHAR变长字符串VARCHAR2数字值NUMBER
小数点数值DECIMAL整型INTEGER浮点小数FLOAT
日期和时间DATE文字串STRINGNULL型数据.
二、表及其基本操作
在关系数据库中,表是数据的主要存储对象,表包含了行和列,存放着实体及其联系,表在数据库中占有的物理空间可以是永久性的,也可是暂时的。
1、创建表的基本语法为:
CREATETABLEtable_name
(field1datatype[notnull]
field2datatype[notnull]
field3datatype[notnull])
storage
(INITIALx初始空间
NEXTx附加空间);
例:
CREATETABLEEMPLOYEE_TBL
(EMP_IDCHAR(9)NOTNULL,
EMP_NAMEVARCHAR(40)NOTNULL,
EMP_ZIPNUMBER(6)NULL,
EMP_PHONENUMBER(10)NULL)
STORAGE
(INITIAL3K
NEXT2K);
2、修改表的语法为:
ALTERTABLEtable_name
[MODIFY][columncolumn_name][datatypenotnull|null)][restrict|cascade]
[DROP][constraintconstraint_name]
[ADD][column]columndefinition;
例:
ALTERTABLEEMPLOYEE_TBL
MODIFY(EMP_PHONENUMBER(11)NULL);
3、从现有表中创建一新表
CREATETABLENEW_TABLE_NAMEAS
SELECT[*|COLUMN1COLUM2]
FROMTABLE_NAME
[WHEREcondition]
例:
CREATETABLEPHONE_TBLAS
SELECT(EMP_ID,EMP_PHONE)
FROMEMPLOYEE_TBL;
4、删除表的语法为:
DROPTABLEtable_name
例:
DROPTABLEPHONE_TBL;
5、ORCALE补:
DESCRIBE显示表的结构及所有表列的概要;
三、完整性约束.
在关系数据库中,完整性约束用于确保数据的准确性和一致性,是通过参照完整性实现的。
1、主键约束:
PRIMARYKEY在表中标识一列或多个列,来使一行数据保持唯一性,用于查询参考,表的联合;
例:
ALTERTABLEEMPLOYEE_TBL
MODIFY(EMP_IDCHAR(9)NOTNULLPRIMARYKEY);
2、唯一性约束:
UNIQUE对应列不存在相同的数值;
例:
ALTERTABLEEMPLOYEE_TBL
MODIFY(EMP_PHONENUMBER(11)NULLUNIQUE);
3、外键约束:
FOREIGNKEYKEY_NAME_FK(KEY_NAME)
REFERENCESTBL_NAME(KEY_NAME)
例:
CREATETABLEEMPLOYEE_PAY_TBL
(EMP_IDCHAR(9)NOTNULL,
POSITIONVARCHAR2(15)NOTNULL,
PAY_RATENUMBER(4,2)NOTNULL)
FOREIGNKEYEMP_ID_FK(EMP_ID)
REFERENCESEMPLOYEE_TBL(EMP_ID));
注:
要在子表中插入值,必须在父表中KEY_NAME首先存在对应的值;
4、NOTNULL约束:
不允许有NULL值;
注:
改变表属性时,NOTNULL->NULL可,
而NULL->NOTNULL值时,要看是否有NUL值;
5、使用Check约束:
用来检查数据有效性;
例:
CREATETABLECUSTOMER_TBL
(CUST_IDCHAR(9)NOTNULL,
CUST_NAMEVARCHAR2NOTNULL,
CUST_CITYVARCHAR2NOTNULL,
CUST_ZIPNUMBER(5)NULL,
CUST_PHONENUMBER(11)),
PRIMARYKEY(CUST_ID),
CONSTRAINTCHK_EMP_ZIPCHECK(EMP_ZIP=‘430079’);
四、规范化过程.
1、什么是规范化?
规范化是数据库中减少数据冗余的过程.除了数据库中,名称,对象名称和形式都需要规范化.
2、将数据库规范化
在数据库规范的过程中,三个常用的范式为:
第一范式:
将基本数据按主键分成称为表的逻辑单元;
第二范式:
使用仅仅部分依赖于主键的数据输入到其他表中;
第三范式:
从表中将不依赖于主键的数据除去;
例:
COMPANY_DATABASE
(emp_idlast_namefirst_namemiddle_name
addresscityzipphone
positionposition_descdate_hirepay_rate
date_last_raisecust_idcust_namecust_address
cust_citycust_zipcust_faxqty
ord_numord_dateprod_idprod_desc
cost)
按第一范式的要求可分为三个表:
EMPLOYEE_TBL
(emp_idlast_namefirst_namemiddle_name
addresscityzipphone
positiondate_hirepay_ratedate_last_raise)
CUSTOMER_TBL
(cust_idcust_namecust_addresscust_city
cust_zipcust_phonecust_faxqty
ord_numord_date)
PRODUCTS_TBL
(prod_idprod_desccost)
按第二范式的要求EMPLOYEE_TBL可分为两张表:
EMPLOYEE_TBL
(emp_idlast_namefirst_namemiddle_name
addresscityzipphone)
EMPLOYEE_PAY_TBL
(emp_idpositionposition_descdate_hire
pay_ratedate_last_raise)
根据第三范式EMPLOYEE_PAY_TBL可分为两个表:
EMPLOYEE_PAY_TBL
(emp_idpositiondate_hisrepay_rate
date_last_raise)
POSITION_TBL
(positionposition_desc)
3、规范式的好处和弊端
大型的总体数据库组织,
减少数据冗余,
数据库中的数据一致性,
更加灵活的数据库设计,
更好的数据库安全处理;
其主要弊端是降低了数据库的可操作性,因而要进行适当的非规范化。
第三部分.操纵数据.
一、数据操纵综述.
数据操纵语言(DML)是SQL的一部分,它允许数据库用户在关系型数据库中进行数据的改变.
在SQL中有三种基本的DML命令
1、INSERT(插入)
2、UPDATE(更新)
3.DELETE(删除)
二、给表中填充数据.
1、往表中插入新数据
INSERTINTOtable_name
VALUES(‘values1’,’values2’)
例:
INSERTINTOEMPLOYEE_TBL
VALUES(‘1’,‘武建军’,‘430079’,‘027111’)
2、往表中有限列中插入数据.
INSERTINTOtable_name(‘column1’,’column2’)
VALUES(‘values1’,’values2’)
例:
INSERTINTOEMPLOYEE_TBL(‘emp_id’,’emp_name’)
VALUES(‘2’,‘大刘’);
3、插入另一张表中的数据
INSERTINTOtable_name
SELECT[*|(‘column1’,’column2’)]
fromtable_name[whereconditions(s)];
例:
INSERTINTOCUSTOMER_TBL
SELECT(‘emp_id’,’emp_name’,’emp_zip’,’emp_phone’)
fromEMPLOYEE_TBL
whereemp_zip=’430079’;
4、插入NULL值.
基本语法为:
Insertintotable_name(‘column1’,NULL,’column3’)
思考:
插入时,值列表中多值、少值行吗?
NULL和‘NULL’是否一样?
,和,‘’,行吗?
三、更新已存在的数据.
1、只更新单独一列的数据
UPDATEtable_name
SETcolumn_name=‘value’
[wherecondition];
2、在一行或多行记录中更新多个列
UPDATEtable_name
SETcolumn1=‘value’,
[column2=‘vlaue’];
四、从表中删除数据
从表中删除一条单独的记录或是被选的多条记录
DELETEfromtable_name
where[condition];
第四部分.数据库事务管理.
一、事务控制命令
事务控制是对在关系数据库中可能发生的不同事务的管理能力.
用于事务控制的命令:
1、COMMIT命令
COMMIT命令是一条事务命令,用于保存数据库中由事务引起的改变.COMMIT命令保存自从上一条COMMIT或ROLLBACK命令以来的所有事务.
语法为:
COMMIT[word];
2、ROLLBACK命令
COMMIT命令是用于撤消那些还没有保存到数据库中由事务的事务控制命令.ROLLBACK命令只能用于撤消上一条COMMIT命令或ROLLBACK命令执行后的事务。
语法为:
ROLLBACK[word];
3、SAVEPOINT命令
SAVEPOINT命令保存点是在事务中,能够进行事务滚回的点,而不需要滚回整个事务
语法为:
SAVEPOINTpoint_name;
ROLLBACKtopoint_name;
二、事务控制和数据库的性能
糟糕的事务控制会破坏数据库的性能,甚至给数据库带来危害。
数据库反复的低性能可能是因为在大量插入,更新或删除操作中缺乏事务控制;当执行大量事务工作时,应频繁使用COMMIT和ROLLBACK命令来释放数据库空间。
第五部分数据查询语言DQL
一、基本的Select语句
SELECT[all|*|[distinct]column1,column2…]
Fromtable1[,table2…]
[WHEREconditons]
[GROUPBYcolumn1,column2,……
[HAVINGconditions]
[ORDERBYcolumn1,colunm2…]
二、使用操作符给数据分类
1、比较操作符(=,<>,<,>)
例:
SELECT*
FROMEMPLOYEE_TBL
WHEREEMP_ZIP=’430079’;
2、逻辑操作符(ISNULL,BETWEEN,IN,LIKE,EXISTS,UNIQUE,ALL,ANY)
ISNULL:
用于比较带有NULL值的值;
BETWEEN:
用于在一个范围中取值;
IN:
用于返回在一系列指定的值中的结果;
LIKE:
取同指定值相似的值(%代表任意个字符,而_代表一个);
EXISTS:
查询是否存在一行符合某条件的数据;
UNIQUE:
测试是否有重复数据;
ALL:
指数据集中的每一个值;
ANY:
指数据集中的任一个值;
例:
SELECT*
FROMEMPLOYEE_TBL
WHEREEMP_SALARY>ALL
(SELECTEMP_SALARY
FROMEMP_SALARY
WHEREEMP_CITY=’武汉’);
3、连接符(AND,OR)
例:
SELECT*
FROMEMPLOYEE_TBL
WHEREEMP_ZIP=’430079’
OREMP_ZIP=’430074’;
4、数学运算符的组合
例:
SELECTEMP_SALARY*12
FROMEMPLOYEE_TBL;
三、统计查询结果数据
1、COUNT:
用于统计行数;
例:
SELECTCOUNT(EMP_ID)
FROMEMPLOYEE_TBL;
2、SUM:
用于返回一组数据行中某列值的总和;
例:
SELECTSUM(EMP_SALARY)
FROMEMPLOYEE_TBL;
3、AVG:
用于确定一组数据的平均值;
例:
SELECTAVG(EMP_SALARY)
FROMEMPLOYEE_TBL;
4、MAX:
用于返回一组数据的最大值;
例:
SELECTMAX(EMP_SALARY)
FROMEMPLOYEE_TBL;
5、MIN:
用于返回一组数据的最小值;
例:
SELECTMIN(EMP_SALARY)
FROMEMPLOYEE_TBL;
四、排序和分组
1、分组:
GROUPBY
例:
SELECTEMPLOYEE_NAME,EMP_CITY
FROMEMPLOYEE_TBL
GROUPBYEMP_CITY,EMPLOYEE_NAME;
注:
如果在SELECT子句中引用的是列名,列名一定也会用于GROUPBY的中;
不能像ORDERBY一样通过使用整数列名来进行排序,除非便用了UNION,并且列名都各自不同。
2、排序:
ORDERBY
例:
SELECTEMP_CITY,COUNT(*)
FROMEMPLOYEE_TBL
GROUPBYEMP_CITY
ORDERBY2,1;
3、HAVING子句:
跟在GROUPBY之后,ORDERBY之前,设置条件;
例:
SELECTEMP_CITY,AVG(PAY_RATE),AVG(EMP_SALARY)
FROMEMP_PAY_TBL
WHERECITY<>‘武汉‘
GROUPBYEMP_CITY
HAVINGAVG(EMP_SALARY)>2000;
第六部分实习题
1请问SQL命令可分为哪六类,每一类都有哪些具体的命令?
2请建立以下五个表格,并用DESC命令检查它们的结构。
表employee_tbl结构
emp_idvarchar2(9)notnull,
last_namevarchar2(15)notnull,
first_namevarchar2(15)notnull,
middle_namevarchar2(15),
addressvarchar2(30)notnull,
cityvarchar2(15)notnull,
statechar
(2)notnull,
zipnumber(5)notnull,
phonechar(10),
pagerchar(10),
constraintemp_pkprimarykey(emp_id)
表employee_pay_tbl结构
emp_idvarchar2(9)notnull,
positionvarchar2(15)notnull,
date_hiredate,
pay_ratenumber(4,2),
date_last_raisedate,
salarynumber(8,2),
bonusnumber(6,2),
constraintemp_fkforeignkey(emp_id)referencesemployee_tbl(emp_id)
表customer_tbl结构
cust_idvarchar2(10)notnullprimarykey,
cust_namevarchar2(30)notnull,
cust_addressvarchar(20)notnull,
cust_cityvarchar2(15)notnull,
cust_statechar
(2)notnull,
cust_zipnumber(5)notnull,
cust_phonenumber(10),
cust_faxnumber(10)
表orders_tbl结构
ord_numvarchar2(10)notnullprimarykey,
cust_idvarchar2(