Oracle基础知识大全,
Orale数据库必备知识

Oracle 教程记录:1·OracleOraDb10/11g_home1TNSListener:表示监听服务,如果客户端想连接数据库,次服务必须打开,在日后开发中次服务起作用。
2·OracleServeiceMLDN,表示数据库主服务,命名规则:OracleService数据库名称。
次服务必须启动。
负责Oracle根本无法使用。
3·直接通过命令行方式进入SQLPlus的控制中心,进行命令的输入。
4·也可以通过窗口的形式启动命令行工具,及sqlplusw工具。
5·查询、修改、插入、删除等语句必须以分号结束语句及“; ”。
6·进入环境以后首先进行环境设置:<1>设置每行显示的长度:set linesize 长度值;<2>设置每页显示记录的长度:set pagesize 行数值;7·在sqlplusw中因为没法修改输入内容,所以一般会使用本机的记事本程序进行编辑,直接在命令窗口输入“ed 文件名即可”,输入完成之后,会提示用户是否要创建文件,编辑完成以后可以通过@文件名的方式执行命令,除了可以直接简历文件以外也可以通过@找到磁盘上的文件如“@ d:\demo·txt”效果是一样的,如果后缀名是“*·sql”,在查找是可以不注入后缀,系统默认的是“·sql”文件。
8·在sqlplusw/sqlplus中可以使用其他用户连接·sys 是超级管理员·system 是普通管理员·scott 是普通用户*连接格式:conn 用户名/密码[as sysdba|sysoper]·如果现在连接的是超级管理员(sys),则在连接的最后必须写上AS SYSDBA。
以系统管理员的身份进行登陆。
例如:conn sys/xuli564335 as sysdba;注意:如果连接用户下查询某一个用户下表而其连接用户没用此表则必须加上该表所在的用户名,格式:”用户名·表名“9·显示当前连接的用户是那个:show user;10·查看标的完整结构:desc 表名称;11·SQL可以分为以下几组:DML:数据操作语言——用户检索或者修改数据。
ORACLE数据库基础知识总结

ORACLE数据库基础知识总结1、RMAN全备备份⽂件的顺序备份归档⽇志、所有的数据⽂件、控制⽂件、spfile、再次备份归档⽇志2、redo⽇志丢失恢复redo⽇志的三种状态是current、active、inactiveinactive,可以重建 clear logactive、current不能变成inactive,只能通过不完全恢复进⾏恢复,然后重建⽇志⽂件3、⼝令⽂件丢失恢复丢失可重建 orapwd file= password= enfries=重建完成之后ORACLE正常使⽤4、控制⽂件丢失恢复a> rman 可以备份控制⽂件b> 控制⽂件可以cp⼀份备⽤c> 控制⽂件可以重建⼿写5、体系结构物理:ORACLE数据库包括instance、database两部分。
instance包括SGA(系统全局区)跟⼀些后台进程组成的。
SGA包括:share pool、db buffer cache、redo log buffer、流池、⼤型池、JAVA POOL、share pool(共享池) :库缓存:缓存最近执⾏的代码,同样的sql多次执⾏不需要频繁读取数据字典中得数据数据字典缓存:存储oracle中得对象定义PL/SQL区:缓存存储过程、函数触发器等数据库对象。
db buffer cache(数据库缓存区)redo log buffercache(⽇志缓存区)常见的后台进程:DBWn:⽤于数据库缓存写⼊磁盘LGWn:⽤于log⽇志写⼊磁盘CKPT:检查点进程SMON:实例维护进程,系统监视器MMON:AWR主要进程PMON:维护⽤户进程,进程监视器ARCN:归档进程database包括数据⽂件、控制⽂件、⽇志⽂件等。
逻辑:oracle数据块-区-段-表空间-数据库-⽅案多个oracle数据块组成⼀个区,多个区组成⼀个段,多个段组成⼀个表空间,多个表空间组成⼀个数据库表空间和数据⽂件的关系:表空间是由⼀个或多个数据⽂件组成的,⼀个数据⽂件只属于⼀个表空间,表空间的⼤⼩是所有数据⽂件⼤⼩的总和。
数据库oracle基础知识

数据库oracle基础知识数据库Oracle是一款企业级关系数据库管理系统,被广泛应用于大型企业和政府机构。
为了从事Oracle数据库开发工作,需要掌握以下基础知识。
1. SQL语言SQL语言是Oracle数据库最常用的查询和管理语言。
它可以用于创建、修改和删除表格、存储过程和函数等对象。
SQL语言可以通过命令行工具或GUI工具(如Oracle SQL Developer)使用。
2. 数据类型Oracle数据库支持多种数据类型,包括字符型、数值型、日期型和布尔型等。
掌握各种数据类型的特点和使用方法对于正确存储数据非常重要。
3. 约束在Oracle数据库中,约束是定义表列或表之间关系的规则。
包括主键、外键、唯一约束和检查约束等。
理解和正确使用约束可以有效维护数据完整性。
4. 触发器触发器是一种在表上执行的操作,例如在插入、更新和删除时。
掌握触发器的创建和使用可以帮助开发者增强数据的一致性和完整性。
5. 存储过程和函数存储过程和函数是一些预定义的SQL语句,封装起来方便被调用。
存储过程和函数类似,但存储过程是没有返回值的,而函数则需要返回一个值。
掌握存储过程和函数的使用可以提高数据库的性能和效率。
6. 高可用性Oracle数据库提供了许多机制,确保在故障时保持数据库高可用性。
这包括了备份和恢复、灾备等方案。
掌握这些机制可以帮助开发者保障数据可靠性和业务连续性。
通过学习以上基础知识,可以使Oracle数据库开发者理解Oracle数据库的基本原理和概念。
并且可以使用这些知识来开发高效、高可用性、可扩展的Oracle数据库应用程序。
Oracle数据库

Oracle数据库Oracle数据库是管理数据的一种软件系统,它可以帮助用户快速地存储、管理和检索大量的数据。
Oracle数据库由Oracle公司开发,它是世界上最强大、最可靠的数据库之一,被广泛用于企业级应用程序和数据库管理系统。
一、Oracle数据库的基础知识1. 数据库结构Oracle数据库由一个或者多个表空间组成,每个表空间包含一组数据文件。
一个表空间可以包含多个数据文件,但一个数据文件只能属于一个表空间。
2. 数据库对象Oracle数据库中的每个数据对象都具有一个唯一的名称,例如表(table)、视图(view)、序列(sequence)、索引(index)和存储过程(procedure)等。
它们都被保存在表空间中的数据文件中。
3. SQL语言Oracle数据库主要使用SQL语言来处理数据,包括数据增删改查等常用操作。
二、Oracle数据库的特点1. 效率高Oracle数据库采用高效的管理和存储技术,可以快速访问和操作大量数据。
它具有高速的缓存机制,可以快速地执行查询和更新操作。
2. 可靠性强Oracle数据库拥有高度稳定的系统架构和自动维护机制,可以保证数据的安全性和可靠性。
它可以实现多重备份,在数据发生意外错误时可以快速恢复。
3. Heterogeneous ConnectOracle数据库可以通过网络协议和连接程序实现异构连接,支持其它数据库软件,如MS SQL Server、IBM DB2等。
4. 扩展性强Oracle数据库可扩展性强,可以设计和构建分布式系统,支持跨平台分布式数据库。
5. 多功能性Oracle数据库提供多种功能,包括多种语言的支持,丰富的安全控制和数据库监视等。
6. 可伸缩性Oracle数据库可以支持大量的并发用户,可以处理多种不同的应用程序。
三、Oracle数据库的应用领域Oracle数据库被广泛应用于企业级应用程序和数据库管理系统,主要应用于以下几个领域:1. 金融领域Oracle数据库被广泛用于金融事务处理系统,包括银行、证券、保险和期货等金融机构的资金结算和清算等数据处理。
Oracle数据库入门教程

Oracle数据库入门教程Oracle数据库是目前世界上广泛应用的一种关系型数据库管理系统。
它具有高性能、高稳定性和高安全性的特点,在各种规模的企业和组织中被广泛使用。
本文将介绍Oracle数据库的基本概念、安装和配置、SQL语句以及常用管理工具等内容,帮助读者快速入门Oracle数据库。
一、Oracle数据库基本概念1. 数据库:数据库是一个有组织的数据集合,通过数据库管理系统(DBMS)进行管理和访问。
Oracle数据库是一种关系型数据库管理系统,使用表格来存储数据。
2. 实例:实例是Oracle数据库在内存中运行的副本。
每个实例对应一个特定的数据库,负责连接管理、内存管理、进程管理和数据缓存等。
3. 表空间:表空间是Oracle数据库中用来管理存储空间的逻辑结构,用于存储表、索引、数据文件等对象。
4. 数据文件:数据文件是Oracle数据库中用来存储实际数据的物理文件。
5.表:表是数据库中最基本的数据存储单位,由行和列组成。
6.列:列是表中的一个字段,用于存储不同类型的数据。
7.行:行是表中的一条记录,包含了不同列的数据。
二、Oracle数据库安装和配置2.配置实例:安装完成后,通过配置文件对实例进行配置,包括设置实例名、监听器端口、字符集等参数。
3.创建表空间:使用SQL语句创建需要的表空间,指定数据文件存储路径和大小等参数。
4.创建用户:通过SQL语句创建数据库用户,为用户分配合适的权限。
三、SQL语句1.创建表:使用CREATETABLE语句创建表,指定列的名称、数据类型以及约束等。
2.插入数据:使用INSERTINTO语句插入数据,指定表名和要插入的数据。
3.更新数据:使用UPDATE语句更新数据,指定表名、列名和要更新的值。
4.删除数据:使用DELETEFROM语句删除数据,指定表名和删除条件。
5.查询数据:使用SELECT语句查询数据,可以使用WHERE子句指定查询条件。
6.排序数据:使用ORDERBY子句对查询结果进行排序。
Oracle学习材料

1.数据库的逻辑结构是由块、区、段和表空间组成的。
2.数据库的操作模式包括专用服务器和共享服务器。
3.Oracle关闭数据库的4种方式是正常关闭方式(NORMAL)、事务关闭方式(TRANSACTIONAL) 、立即关闭方式(IMMEDIA TE) 和强制关闭方式(ABORT) 。
4.重做日志文件的内容由重做记录组成,并且是由日志写进程(LGWR)后台进程写入到日志文件中的。
5.表空间有两种区管理方式,分别是本地管理和字典管理。
6.用户的验证方式有口令验证、外部验证和全局验证3种。
7.Oracle将权限分为系统权限和对象权限2种。
8.非系统表空间分为永久表空间、临时表空间和还原表空间三种类型。
9.SQL语句CREA TE TABLESPACE用于创建表空间。
10.Oracle关闭数据库的3个步骤是关闭数据库、卸载数据库和打开数据库。
11.初始化参数文件的两种类型分别是静态参数文件和服务器参数文件。
12.非系统表空间分为永久表空间、临时表空间和还原表空间三种类型。
13.概要文件主要提供资源限制和口令管理功能。
14.创建用户的SQL语句是CREA TE USER ,更改用户的SQL语句是ALTERUSER ,删除用户的SQL语句是DROP USER 。
15.使用OEM控制台创建用户时,系统将自动授予用于CONNECT 角色。
16.PL/SQL语句块分成标题部分、声明部分、执行部分和异常部分17.常用的单行函数可分成以下几类:系统变量、系统变量、_数字_、_字符_、_日期_、_数据类型转换和其他函数。
18.非系统表空间分为、和重做表空间三种类型。
19.Oracle数据库服务器由________和________构成。
20.在SQL语言中,为了数据库的安全性,设置了对数据的存取进行控制的语句,对用户授权使用语句,收回所授的权限使用语第1页,共9页句。
21.当对某一表进行诸如、和这些操作时,oracle 就会自动执行触发器所定义的SQL 语句。
oracle的知识点总结

oracle的知识点总结Oracle是一种关系型数据库管理系统,它提供了一套完整的数据库管理和开发工具。
本文将总结一些Oracle的知识点,希望能够帮助读者更好地理解和应用Oracle。
1. 数据库基础知识在Oracle中,数据库是由表组成的,每个表由多个列组成。
表中的数据以行的形式存储。
在创建表时,需要指定列的名称和数据类型。
常见的数据类型包括整数、字符、日期等。
此外,还可以创建索引来加速数据检索。
2. SQL语言SQL(Structured Query Language)是一种用于管理和操作关系型数据库的语言。
Oracle支持标准的SQL语法,并提供了一些扩展功能。
通过SQL语句,可以实现数据的查询、插入、更新和删除等操作。
常见的SQL语句包括SELECT、INSERT、UPDATE和DELETE。
3. 数据库事务事务是一组数据库操作的逻辑单位,要么全部执行成功,要么全部回滚。
Oracle使用ACID(原子性、一致性、隔离性和持久性)特性来确保事务的正确执行。
可以使用BEGIN、COMMIT和ROLLBACK语句来管理事务。
4. 数据库连接与用户管理在Oracle中,可以通过用户名和密码来连接数据库。
每个用户都有自己的数据库对象(如表、视图、索引等),并且可以授予不同的权限。
可以使用CREATE USER语句创建用户,并使用GRANT语句授予权限。
5. 视图和存储过程视图是数据库中的虚拟表,可以从一个或多个表中检索数据。
视图可以简化数据的查询,隐藏底层表的细节。
存储过程是一段预先编译的代码,可以在数据库中执行。
存储过程可以接受输入参数,并返回结果。
6. 数据库安全性Oracle提供了多种安全功能,用于保护数据库的机密性和完整性。
可以使用角色和权限来限制对数据库对象的访问。
此外,还可以使用透明数据加密来加密敏感数据。
7. 数据库备份与恢复数据库备份是一种重要的数据保护手段,可以防止数据丢失。
Oracle提供了多种备份和恢复工具,如RMAN(Recovery Manager)和Data Pump。
oracle教程

oracle教程Oracle教程Oracle是一种关系型数据库管理系统,它提供了强大的功能和灵活性,被广泛应用于企业和组织中。
本教程将介绍Oracle 的基本概念、常用功能和操作方式。
1. 数据库基础1.1 什么是数据库?数据库是指存储数据的集合,可以通过各种操作来管理和处理数据。
1.2 什么是关系型数据库?关系型数据库是一种以表格形式存储数据的数据库,其中的数据通过行和列的方式进行组织。
1.3 什么是Oracle数据库?Oracle数据库是一种关系型数据库管理系统,由Oracle公司开发和提供,具有高度可靠性和安全性。
2. 安装和配置Oracle数据库2.1 系统要求在安装Oracle数据库之前,需要满足一些系统要求,例如特定的硬件和操作系统版本。
2.2 下载和安装Oracle数据库可以从Oracle官方网站上下载Oracle数据库的安装程序,并按照指导进行安装。
3. 数据库管理3.1 连接到数据库通过使用命令行工具或图形化界面,可以连接到Oracle数据库进行管理操作。
3.2 创建和管理用户可以创建多个用户,并为每个用户分配特定的权限和资源。
3.3 创建和管理表可以创建表来存储数据,并定义表的结构和约束条件。
4. 数据操作4.1 插入数据可以使用INSERT语句将数据插入到表中。
4.2 查询数据可以使用SELECT语句从表中检索数据。
4.3 更新数据可以使用UPDATE语句修改表中的数据。
4.4 删除数据可以使用DELETE语句从表中删除数据。
5. 数据查询和优化5.1 查询语句基础了解SELECT语句的基本语法和用法。
5.2 连接表查询可以通过连接多个表进行复杂的数据查询。
5.3 创建索引可以创建索引来提高查询的性能。
6. 数据备份和恢复6.1 数据备份了解如何备份数据库以防止数据丢失。
6.2 数据恢复了解如何从备份中恢复数据。
总结通过本教程,您可以初步了解Oracle数据库的基本概念、安装和配置、数据库管理以及数据操作等方面的知识。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程目标:1. 了解数据库系统在项目开发中的地位2. 了解目前主流数据库系统3. 熟练掌握查询命令4. 熟练掌握数据操作方式5. 熟练使用数据库内置函数6. 掌握pl/sql程序设计语法结构7. 掌握视图8. 掌握存储过程9. 掌握用户自定义函数10. 掌握触发器了解:1.数据库组件:1.1 实施应用集群1.2 Oracle OLAP1.3 数据挖掘1.4 应用程序接口1.5 网络组件1.6 SQL Plus1.7 企业管理器OEM2. 几个版本间的差异:2.1 增加了服务器参数文件SPFILE2.2 使用了OMF免去了手工管理数据库文件的繁琐2.3 支持多种数据库块大小2.4 会话可以自动调整PGA的大小2.5 引入了列表分区课程内容:1. 操作数据之前的准备工作:1.1. 要保证有一个数据库:1.2. 要保证创建一个表空间create tablespace hbjrdatafile 'E:\dbs\hbjr.dbf' size 100M;1.3. 要创建一个用户,用户默认的表空间就是你创建的表空间create user hbjridentified by orcldefault tablespace hbjr;//授权限:grant dba to hbjr;1.4. 用户/密码登录:2. 表名/列字段名起名规范:2.1 使用常规字母和数字2.2 长度不要超过302.3 表名/列名不能重复2.4 不能使用oracle的保留字3. 数据类型3.1 char:定长,存储单位--字节(bite)3.2 varchar2:变长,存储单位--字节3.3 nchar:定长,存储单位--字符3.4 nvarchar2:变长,存储单位--字符3.5 date:日期类型,7个字节,存储着--世纪,年,月,日,时,分,秒3.6 timestamp:日期类型,11个字节,存储着--世纪,年,月,日,时,分,秒,毫秒3.7 number:数据类型(数值类型)3.8 clob:大字段类型,适合存储纯文本信息(例如:*.txt 文件)3.9 blob:大字段类型,适合存储二进制文件(例如:图片)3.10 定义数据类型的意义:3.10.1 能够更有效,更直观的描述外部数据信息3.10.2 从程序运行角度来考虑,定义了一种数据类型,实际就是定义了一种存储格式和在此格式上的运算方式,也就是数据结构+算法,通过这种预先定义的机制,计算机可以加快程序运行的速度。
4. 创建表/修改表/删除表(DDL)4.1 创建表:4.1.1 语句格式:create table tableName(colName dataType,colName dataType);4.1.2 规范:4.1.2.1 列字段至少要有一个4.1.2.2 列字段名称后必须跟着数据类型4.1.2.3 如果有两个及两个以上的字段,那么字段之间用逗号(,)分隔4.1.2.4 列名称不允许重复(在表中不得重复)4.1.2.5 表名称不允许重复(在数据库中不得重复)4.1.3 示例:create table test(tid char(10),tname varchar2(20));4.2 删除表:4.2.1 语句格式:drop table tableName;4.2.2 示例:drop table test;4.3 更改表4.3.1 添加一个列:格式:alter table tableName add columnName dataType;示例:alter table student add addr varchar2(100);4.3.2 删除一个列:格式:alter table tableName drop column columnName;示例:alter table student drop column addr;4.3.3 添加多个列:格式:alter table tableName add(columnName1 dataType,columnName2 dataType,colunmName3 dataType);示例:alter table student add (addr varchar2(100),age int,dept varchar2(50));4.3.4 删除多个列:格式:alter table tableName drop (columnName1,columnName2);示例:alter table student drop (addr,age);4.3.5 更改一个列(更改列的定义--数据类型)格式:alter table tableName modify columnName newDataType;示例:alter table student modify dept varchar2(100);4.3.6 更改多个列:格式:alter table tableName modify(columnName1 newDataType,columnName2 newDataType,colunmName3 newDataType);示例:alter table student modify(stu_no char(20),stu_name varchar2(20),dept varchar2(60));4.3.7 更改列名称:格式:alter table tableName rename column oldColumnName to newColumnName;示例:alter table student rename column dept to sDepartment;注释:alter,drop,create属于DDL语言5. 增加/删除/修改:5.1 往表里插入一条数据:5.1.1 插入若干列的值:格式:insert into tableName(columnName1,columnName2)values ('value1',value2);5.1.2 插入全部列的值:格式:insert into tableNamevalues(有多少个列字段此处就赋值多少个);5.2 从表里删除数据格式:delete from tableName where --- 条件或者:tauncate table table_name <!--tauncate:截断表-->5.3 修改表记录:格式:update tableName set columnName=newValue where --- 条件6. 查询:6.1 查询全部数据格式:select * from tableName--查询全部学生的信息--示例:select * from student;6.2 查找特定的列(若干列)格式:select columnName from tableName;-- 查询所有学生的姓名--示例:select stu_name from student;6.3 查找符合条件的部分数据用where表示过滤的条件格式:select * from tableName where --- 条件-- 查询所有机电系的学生信息--示例:select * from student where sdepartment='jdx';6.4 列别名格式1:columnName alias格式2:columnName as alias格式3:columnName as "alias"示例:select stu_no 学号,stu_name 姓名,sdeaprtment 系别from studnet;6.5 distinct:消除重复行格式:select distinct columnName from tableName;--查询院里都设置了那些系别--示例:select disctinct sdepartment from studnet;6.6 查询常量:格式:select 'finalData' from tableName;示例:select stu_name,'河套大学' from student;6.7 使用表达式(算术表达式/关系表达式/逻辑表达式/连接运算符/模糊查询/范围查询)6.7.1 关系表达式:=,>=,>,<=,<,<>,!=-- 查询所有分数>=60的学生的信息:--示例: select * from student where grade>=60;6.7.2 范围运算符:between and, in-- 查询所有分数在60-80这个范围的学生的信息--select * from student where grade between 60 and 80;-- 查询所有机电系,师范系,艺体系的学生的信息--select * from student where sdepartment in('jdx','sfx','ytx');6.7.3 模糊查询:like一般和like搭配使用的符号:%, _-- 查询所有姓zhao的同学的信息--示例:select * from student where stu_name like 'zhao%';-- 查询所有姓zhao的并且名字只有一个字的同学的信息--示例:select * from studnet where stu_name like 'zhao_';6.7.4 逻辑表达式:and,or,not--- 查询所有机电系或者医学院系的学生的信息---示例:select * from student where sdepartment='jdx' or sdepartment='yxy';--- 查询所有机电系的并且成绩>=60的学生的信息---示例:select * from student wheresdepartment='jdx' and grade>=60;--- 查询所有不是艺体系的学生的信息---示例:select * from student where not (sdepartment='ytx');6.7.5 连接运算符:|| 将若干个字段或者字符串拼接而成一个列--- 将学生的姓名和成绩拼接然后显示---示例:select stu_name || '的成绩是:' || grade 成绩信息from studentwhere stu_no = 5555;6.7.6 null:是未分配的,或者未知的,或者不可用的6.7.6.1 如何插入null值:--- 将学生的姓名和系别分别置空---示例:insert into student values(123,null,null,0);6.7.6.2 如何查询null值:-- 查询所有姓名为空的学生的信息--示例: select * from student where stu_name is null;6.7.6.3 如何修改null值:--- 将所有姓名为空的学生重命名为'待定' ---示例:update student set stu_name ='待定'where stu_name is null;6.7.6.4 如何删除null值:--- 将所有姓名未知的学生记录删除---示例:delete from student where stu_name is null;6.7.6.5 null参与运算的结果:a. 参与数学运算:结果为nullb. 参与关系运算:忽略c. 参与逻辑运算:d. 参与连接运算:为null的字段其值处理为空的字符串e. 参与排序,其值最大6.8 order:排序--asc:升序,默认的,desc--降序6.8.1 order by 总是在where 条件之后出现--- 将所有学生的信息按照分数降序排列---示例:select * from student order by grade desc;6.8.2 当order by 中出现两个或者两个以上的字段排序是先是按照第一个出现的字段整体排序然后在第一个字段值相同的情况下再按照第二个字段进行排序然后在第一个和第二个字段都相同的情况下再按照第三个字段进行排序…………依次类推--- 查询所有的学生信息,按照分数降序,编号升序的顺序进行排列---示例:select * from student order by grade desc, stu_no asc;6.9 系统函数:6.9.1 系统函数无一例外都是提供某种功能的,例如:nvl6.9.2 几乎总是出现在字段名的前面6.9.3 分类:a.字符函数b.数值函数c.日期函数d.转换函数--to_char,to_date,to_numbere.通用函数f. 分组函数f.1 max(), min(), avg(), count(), sum()f2. decode()6.9.4 操作日期函数:1. 插入系统当前时间:示例:insert into emp(empno,ename,hiredate) values(8010,'zhuaoshuai',sysdate);2. 插入指定的时间(按oracle数据库默认格式插入)示例:insert into emp(empno,ename,hiredate) values(8020,'panzhiming','01-2月-11');3. 插入指定格式的日期:示例:insert into emp(empno,ename,hiredate) values(8030,'tudou',to_date('2011/01/01','yyyy/mm/dd'));insert into test1(t2) values(to_date('2013-10-1013:13:13','yyyy-mm-dd hh24:mi:ss'));6.10 group子句:6.10.1 功能:对数据进行分组--- 查询各个岗位的职员人数---示例:select job ,count(job) from emp group by (job); <!--count:计数-->6.11 having:对group by子句再次过滤--- 查询部门人数>=4的所有部门-----示例:select deptno,count(deptno) from emp group by (deptno) having count(deptno)>=4;6.12 连接查询:6.12.1 内连接--边表的数据得匹配上,任何一方如果和对方表没有匹配的数据,则会被过滤掉a. 等值连接:--查询在纽约工作的员工信息:select e.*from emp e,dept dwhere e.deptno = d.deptno and d.loc = 'NEW YORK'--查看员工员工信息及其工作地selectempno,ename,job,sal,comm,e.deptno,dname,locfrom emp e, dept dwhere e.deptno = d.deptno;b. 非等值连接:--查询工资级别是3的员工的信息:select e.*from emp e, salgrade swhere e.sal >= s.losal and e.sal <= s.hisal and s.grade = 3--查看员工编号,姓名,岗位,薪水及其薪水级别select empno,ename,job,sal,gradefrom emp e, salgrade sgwhere e.sal > sg.losal and e.sal <=sg.hisal;6.12.2 外连接--主表数据全部保留,子表数据需要匹配,如果匹配不上,则被过滤a. 左外连接:以左表为主--查看车辆信息及其车主的信息select cid,cname,phone, c1.car_id,producer,price,produe_datefrom cars c1, customers c2where c1.car_id = c2.car_id(+);--查看员工信息,如果有所属部门则显示其部门信息select e.*, d.*from emp e, dept dwhere e.deptno = d.deptno(+);b. 右外连接:以右表为主--查看顾客信息及其所购车的信息select cid,cname,phone, c1.car_id,producer,price,produe_datefrom cars c1, customers c2where c1.car_id(+) = c2.car_id;--查询所有部门信息,如果该部门有员工则显示其员工信息select d.*, e.*from emp e, dept dwhere e.deptno(+) = d.deptnoc. 全连接:左右两表不分主次,保留全部数据--查询所有员工和部门的信息:select e.*, d.*from emp efull outer join dept don e.deptno = d.deptno6.12.3 自连接:将一个表当成多个表用--查询员工的编号,姓名,及其经理编号,姓名selectworker.empno,worker.ename,worker.mg r,manager.enamefrom emp worker, emp managerwhere worker.mgr = manager.empno; selectworker.empno,worker.ename,worker.mgr,manager.enamefrom emp worker, emp managerwhere worker.mgr = manager.empno(+);上述多表连接的另一种写法:55select table1.columnName, table2.columnNamefrom table1[inner | left | right | full] join table2on table1.columnName = table2.columnName注意:如果使用(+)操作符指定外连接,则必须使用where子句指定连接条件如果使用关键字指定内、外连接,则必须使用on 子句指定连接条件6.13 子查询:---- -----示例:select * from emp where deptno=(select deptno from dept where loc='NEW YORK');查询所有在纽约工作的职员的信息6.13.1 单行子查询:返回单个结果,一般和关系运算符结合使用示例:---- 查询所有在纽约工作的职员的信息-----select * from emp where deptno=(select deptno from dept where loc='NEW YORK');6.13.2 多行子查询:返回多个结果,一般和in, all, any, exists 结合使用示例:---- 查询和MARTIN和SMITH同一个部门的职员的信息-----select *from empwhere job in(select jobfrom empwhere ename = 'MARTIN'or ename = 'SMITH');6.13.3 多列子查询:返回多个列值,有可能单行或多行示例:---- 查询和ALLEN同部门且同岗位的职员的信息(单行) -----select *from empwhere (deptno,job) = (select deptno, jobfrom empwhere ename = 'ALLEN');---- 查询和ALLEN同部门且同岗位或者和SMITH同部门且同岗位的职员的信息(多行) -----select *from empwhere (deptno,job) IN (select deptno, jobfrom empwhere ename = 'ALLEN'or ename = 'SMITH');6.13.4 相关子查询:子查询和主查询相互依赖,但是主查询只关心子查询有无返回值,而不关心子查询返回的内容示例:---- 查询至少有一个员工的部门的信息-----select deptno, dnamefrom dept dwhere exists(select 'y'from emp ewhere e.deptno = d.deptno);6.14 联合结果集:union(无条件连接),minus(A减B的结果),intersect (交集), merge(融合)融合:示例:create table day_balance_table(eid char(5),ename varchar2(20),esal number);create table month_balance_table as select * from day_balance_table;insert into day_balance_table values('001','zhang',100);insert into day_balance_table values('002','wang',200);insert into day_balance_table('003','li',300);merge into month_balance_table musing day_balance_table don(m.eid = d.eid)when matched thenupdate set m.esal=d.esalwhen not matched theninsert(m.eid,m.ename,m.esal)values(d.eid,d.ename,d.esal);update day_balance_tableset esal = 400where eid = '001';insert into day_balance_tablevalues('004','eniay',500);merge into month_balance_table musing day_balance_table don(m.eid = d.eid)when matched thenupdate set m.esal=d.esalwhen not matched theninsert(m.eid,m.ename,m.esal)values(d.eid,d.ename,d.esal);6.15 分页查询:将rownum 固化select rn 序号, empno 员工编号, ename 姓名, job 职位, sal 工资from(select rownum rn, empno, ename, job, salfrom(select empno, ename, job, salfrom emporder by sal desc) t1) t2where rn >=4 and rn<=6;6.16 层次查询:select level 层次, empno 编号, ename 姓名, mgr 经理编号from empstart with mgr is nullconnect by mgr = prior empno;select (lpad(' ', 4*(level-1), ' ') || empno || '-' || ename)员工管理层次from empstart with mgr is nullconnect by mgr = prior empno;6.17 top-n:rownum使用时注意select *from empwhere rownum <3order by sal;select *from (select * from emp order by sal) twhere rownum < 37. 各种约束:7.1 not null: 不为空,此列输入的值不允许为空,允许重复7.2 unique: 唯一约束7.2.1 此列不允许输入重复的值,但是允许输入若干次空值7.2.2 有两种定义unique约束的方法:a. 直接在要定义约束的列字段后面写:unique 就可以了b. 不在列字段后紧跟着,而是在表的最后定义约束,格式如下:constraint conName conType(colunmName)--- 为列sid 定义唯一约束---示例:constraint student_sid_uk unique(sid)7.2.3 当定义一个unique同时约束若干个字段时,只要这几个字段的组合不重复就可以7.3 primary key:主键,不允许为空且不允许重复7.3.1 此列不允许为空并且不允许重复7.3.2 有两种定义primary key 的方法:a. 直接在要定义约束的列字段后面写:primary key 就可以了b. 不在列字段后紧跟着,而是在表的最后定义约束,格式如下:constraint conName conType(colunmName)--- 将列sid设置为主键---示例:constraint student_sid_pk primary key(sid)7.3.3 一个表只允许定义一个primary key7.4 check:一般是对列值的取值范围作约束(自定义完整性)constraint conName conType(把列值的取值范围规定好)--- 规定成绩表中的成绩字段取值范围在0--150之间---示例: constraint grade_ggrade_ck check((ggrade>=0) and (ggrade<=150));7.5 foreign key:主要是约束数据完整性的---- 为成绩表做一个外键映射关联到主表学生表,以保证成绩表的学生学号都是已存在的----示例:1. 创建表时做外键映射:create table grade(gid char(10) ,cj number(3),constraint grade_stu_fk foreign key(gid) references student(sid));2. 表创建好后做外键映射的格式:alter table grade add constraint grade_stu_fk foreign key(gid) references student(sid);7.6 default:插入或修改数据时,此列如果没有插入值则为其设置默认值8. 次重要内容:8.1 视图:创建,删除,使用--查询8.1.1 创建:示例:create or replace view salry_viewasselect ename, ((nvl(sal,0)) + (nvl(comm,0))) salary from emp;8.1.2 使用:和查询表的操作是一样的示例:select * from salry_viewwhere ename = 'ALLEN';8.1.3 删除:drop view salry_view;8.1.4 优点:a. 限制对表的数据的访问b. 可以使复杂的查询变得简单c. 提供了数据的独立性d. 提供了对相同数据的不同显示方式8.2 序列:创建,使用,删除用途:每次调用时自动增加一个步长值,然后将增加后的值返回8.2.1 创建:示例:create sequence seq_stu_sidincrement by 3 <!--increment:自增长-->start with 10nomaxvaluenocyclenocache8.2.2 使用:和查询表的操作是一样的示例:select seq_stu_sid.nextval from dual;8.2.3 删除:drop sequence seq_stu_sid;8.3 自定义函数:创建,调用,删除8.3.1 用途:就是提供某种功能的8.3.2 创建:示例:create or replace function salaryFun(eno emp.empno%type)return varchar2asbegin代码;end;8.3.3 使用:和系统函数的用法类似示例:select salaryFun(7369) from dual;8.3.4 删除:drop function salaryFun;8.3.5 示例:--创建一个函数create or replace function salaryFun(eno emp.empno%type) return varchar2 --声明返回值类型asv_salary number; --声明变量beginselect ((nvl(sal,0))+(nvl(comm,0))) into v_salary from emp where empno=eno;return(eno || '的总收入是:' || v_salary);end salaryFun;--- 使用自定义函数select salaryFun(7499) from dual;8.4 存储过程:创建,调用,删除8.4.1 用途:提供某种功能的,往往是一次性执行若干条DML语句的8.4.2 创建:create or replace procedure stuinsertasbegin代码段;end;8.4.3 使用:有两种方法可以调用存储过程8.4.4 删除:drop procedure stuinsert;8.4.5 示例1:无参存储过程--- 创建一个存储过程,一次性插入100条数据------- 1. 创建表---create table student(sid char(10), sname varchar2(20));--- 2. 往student表里一次性插入100条数据---create or replace procedure stuInsertasbeginfor v_temp in 1..500 loopinsert into student values(to_char(v_temp),'dfdf');end loop;end;--- 3. 调用存储过程-------3.1 第一种调用方法----beginstuinsert;end;---3.2 第二种调用方法:命令---execute stuinsert;8.4.6 传入参数:--- 根据员工编号修改其工资信息---create or replace procedure change_salary2(v_empno in number, v_new_sal in number)asbeginupdate empset sal = v_new_salwhere empno = v_empno;commit;end;8.4.7 传出参数:--- 根据员工编号获取其工资信息---create or replace procedure getSalaryByNo(v_empno in number, v_sal out number)asbeginselect sal into v_salfrom empwhere empno = v_empno;end;declarev_sal number;begingetSalaryByNo(7499, v_sal);dbms_output.put_line('员工工资:' || v_sal); end;--- 根据员工编号获取其姓名信息---create or replace procedure getNameByNo(v_empno in number, v_ename out varchar2)asbeginselect ename into v_enamefrom empwhere empno = v_empno;end;declarev_ename emp.ename%type;begingetNameByNo(7900, v_ename);dbms_output.put_line('员工姓名:' || v_ename); end;8.4.8 传入、传出参数:--- 根据员工编号获取其工资信息---create or replace procedure getSalaryByNo2(v_num in out number)asbeginselect sal into v_numfrom empwhere empno = v_num;end;declarev_num number;beginv_num := 7876;getSalaryByNo2(v_num);dbms_output.put_line(v_num || '员工的工资:' || v_num);end;8.4.9 优点:a. 大大增强了sql语言的功能和灵活性b. 可保证数据的安全性和完整性c. 改善sql语句的性能,执行速度快d. 可以降低网络的通信量e. 使提现企业规则的运算程序放入数据库服务器中以便集中控制8.4.10 存储过程与自定义函数的区别:a. 参数模式:前者可以使in,out, 后者只能是inb. return: 前者不包含,后者必须包含c. 执行方式:前者可以用execute语句执行,后者不可以8.5 触发器:创建,删除8.5.1 用途:监控某种事件的发生,一旦事件发生了系统会自动调用8.5.2 创建:create or replace trigger stuinsert_triggerbefore | after insert|delete|update on student(在操作之前/之后触发) (触发代码的操作类型) (操作的表)begin被触发的操作代码段;end;8.5.3 调用:当监控的操作一旦发生则触发器就被系统自动调用8.5.4 删除:drop trigger stuinsert_trigger;8.5.5 示例:--- 创建一个触发器----create or replace trigger stuInsert_triggerafter insert on studentbegindbms_output.put_line('您在学生表上进行了插入操作!');end;---- 触发触发器的-----insert into student values('121','dfdsf');8.5.5.1 语句级别触发器:一条语句触发一次示例:--- 如果在非工作日的非工作时间插入数据则操作不成功---create or replace trigger secure_deptbefore insert on deptbeginif(to_char(sysdate, 'DY') in ('星期六', '星期日'))or (to_char(sysdate, 'HH24:MI') not between '08:00' and '18:00')thenraise_application_error(-20001, 'you can insert into the table of dept only in work time!');end if;end;--向dept表插入数据测试触发器是否工作:insert into deptvalues(2345,'SOFT', 'HZ');8.5.5.2 行级触发器:一行就触发一次示例:--- 如果工作岗位不是MANAGER或者ANALYST,则工资不能超过5000 ---create or replace trigger restrict_salbefore insert or update of sal on empfor each rowbeginif (not(:new.job in ('MANAGER', 'ANALYST'))) and :new.sal > 5000thenraise_application_error(-20002, '普通员工不能赚到这么多薪水');end if;end;--向emp表插入或者修改数据测试insert into emp(empno, ename, job, sal)values(7941, 'Eniyah', 'CLERK', 3000);insert into emp(empno, ename, job, sal)values(7942, 'Phennma', 'CLERK', 5500);update empset sal = 5001where empno = 7941;8.6 同义词:类似于对象的别名,可以代替对象的原名称进行使用8.6.1 创建:create synonym synName for object; --当前用户可用或者:同义词;同义字create public synonym synName for object; --所有用户可用8.6.2 示例:create synonym t1 for test1;为 test1表创建同义词后,则可以把 t1 当成test1表使用8.6.3 用途:a. 可以方便的访问其他对象b. 可以缩短对象名字的长度c. 在分布式数据库中,它可以使用户操作远程对象像操作本地对象一样方便8.6.4 删除:drop synonym t1;8.7 包:8.7.1 用途可以将多个功能或用途相近的程序单元(存储过程或者函数等)组合到一起形成一个逻辑上的集合8.7.2 创建create or replace package tp1asfunction salaryFun(eno emp.empno%type) return varchar2;procedure change_salary2(v_empno in number, v_new_sal in number);procedure getSalaryByNo(v_empno in number, v_sal out number);end tp1;/create or replace package body tp1as-- 根据员工编号获取员工的工资信息:function salaryFun(eno emp.empno%type)return varchar2asv_salary number;beginselect((nvl(sal,0))+(nvl(comm,0))) into v_salary from emp where empno=eno;return(eno || 'µÄ×ÜÊÕÈëÊÇ£º'|| v_salary); end salaryFun;-- 根据员工编号修改其工资信息:procedure change_salary2(v_empno in number, v_new_sal in number)asbeginupdate empset sal = v_new_salwhere empno = v_empno;commit;end change_salary2;-- 根据员工编号获取员工的工资信息:procedure getSalaryByNo(v_empno in number, v_sal out number)asbeginselect sal into v_salfrom empwhere empno = v_empno;end getsalarybyno;end tp1;/8.7.3 使用--调用包中的程序单元:select tp1.salaryFun(7369) from dual;select empno,ename,job,sal, tp1.salaryFun(empno) from emp;begintp1.change_salary2(7369, 3200);end;declarev_sal number;begingetSalaryByNo(7499, v_sal);dbms_output.put_line('员工的工资是:'|| v_sal);end;8.7.4 删除drop package tp1;8.8 索引:8.8.1 用途:提升查询效率9. PL/SQL开发介绍9.1 PL/SQL存在的意义:它是对标准SQL语言的扩展,增加了编程语言的特点,以实现复杂的功能或计算9.2 语法结构a. 程序块署名的声明b. 变量、常量的声明--- declarec. 程序体--- begin end;d. 异常处理--- exception9.3 数据类型9.3.1 数据库中的数据类型它都可以使用9.3.2 %type -- 映射某张表的某个字段的类型%rowtype --- 映射某张表的某行记录的类型9.4 流程控制:9.3.1 分支:if(condition) thenelsif(condition) thenelsif(condition) thenelseend if;9.3.2 循环:a. loopexit [when 退出条件];end loop;b. for 变量in 最小值.. 最大值loopend loop;c. while 条件loopend loop;d. 标签。