第一篇:数据库培训学习总结
数据库学习总结
赵县职业中专学校:刘伟娟
转眼间对于数据库的学习结束了。刘老师殷殷的教诲让我感触很深。对于我来说数据库是一个新的概念,因此一开始对这门课程的第一印象就是很抽象,感觉学起来应该会很难很累。可是在学习这门课的过程中,在对数据库的了解过程中,慢慢对数据库有了感观,数据库这一词并不是很难想象,并不是像外人传的很神奇。通过对数据库的学习我明白了各行各业都离不开数据库,可见数据库这门课的广泛性。如果能够认真学好它将来必有成就感。我就抱着这种信念去学习,我从起初对数据库的认识模糊到后来清晰,我认为我学到了许许多多的东西。现就其知识点及其掌握情况进行总结:
数据库主要知识点
我首先了解了数据库的概念,其中有几个重要的知识点,即数据库(DB),数据库管理系统(DBMS)数据模型,关系数据库,关系规范化,安全性,数据库设计等等。首先作为一个数据库管理系统:应该具备以下功能:数据库定义功能;数据库操作功能;数据库查询功能;数据库的控制功能;数据库的通信功能。
通过学习我掌握了创建数据库以及对数据库的操作的基础知识。首先说数据库,简单的说就是建表格,然后把一张一张的表格和在一起,成为一大堆的数据集合。他是依照某种数据结构组织起来并存放二级存储器中的数据集合,基本分为三个层次,物理数据层,概念数据层和逻辑数据层。不同层次间的联系是通过映射来转换的。其次数
据库编程,这个是作为一个程序员的基本功,绝大多数软件开发公司数据库编程都是由程序员自己完成的,因为他的工作量不是很大,也不是很复杂。所以作为一个综合的程序员,学习数据库编程,像数据库四大操作,增删改查,还有触发、存储过程等的使用,这些都是基础的基础。我认为概况起来有以下几点:数据库是相互关联的数据集合,即在数据库中不仅要能够表示数据本身,还要能够表示数据与数据之间的关系;数据库用综合的方法组织数据,保证尽可能高的访问效率。即根据不同的需要按不同的方法组织数据;数据库具有较小的数据冗余,可供多个用户共享,即通过共享共用的数据,降低数据的冗余度,也能保证数据的一致性;数据库具有较高的数据独立性,即数据的组织和存储方法与应用程序互不依赖。数据库能够保证数据的安全、可靠。
通过这次培训学习我懂得了只要我从事计算机专业,就需要学习好数据库的基础知识,不论以后选择哪个方向,数据库的学习都不能放松。古人云:书到用时方恨少,知识学多了不会成为累赘,慢慢的积累,总有用到的时候。给自己明确一个目标,剩下的就是向着这个目标努力,无论遇到什么困难,克服它就向成功迈进了一步。
2013年8月
第二篇:数据库 学习总结
数据库学习总结
XX班 姓名 学号
摘要:在当今信息化的社会里,数据库可以说已经融入到我们生活的方方面面中,如交通运输、银行金融、工商企业等等。只要有大量的数据要管理或者需要有大量数据支持的工作,都要使用到数据库,它为我们的生活带来了便捷。关键词:数据库,功能、SQL Server的特点
在学习《数据库原理及应用》这门课之前,就和课本上提到的一个观点一样,认为它只是存放数据的仓库而已,但是现在我深深体会到这个观点是多么的片面。数据库是长期存储在计算机内,有组织、可共享的大量的数据集合,前者只能表达它的一方面而已。
数据库技术发展到今天已经是一门非常成熟的技术,它的技术水平、应用水平多比初始时都有了很大的改变,但是它的最基本的特征却没有变,概括起来有以下几个方面:
第一点:数据库是相互关联的的数据集合;即在数据库中不仅要能够表示数据本身,还要能够表示数据与数据之间的关系。
第二点:数据库用综合的方法组织数据,保证尽可能高的访问效率;即根据不同的需要按不同的方法组织数据,例如顺序组织方法、索引组织方法、倒排数据组织方法等。
第三点:数据库具有较小的数据冗余,可供多个用户共享;即通过共享共用的数据,降低数据的冗余度,这也能保证数据的一致性。
第四点:数据库具有较高的数据独立性;即令数据的组织和存储方法与应用程序互不依赖,降低应用程序的开发代价和维护代价。
第五点:数据库能够保证数据的安全、可靠;即拥有(1)、安全控制机制,这可以有效地防止数据库中数据被非法使用或非法修改;(2)、完整的备份和恢复机制,这能保证当数据遭到破坏时(软件或硬件故障引起的),能立刻将数据完全恢复,从而保证系统能持续、可靠地运行。
第六点:数据库允许并发地使用,能有效、及时地处理数据,并能保证数据的一致性和完整性;即当多个用户同时使用相同的数据时,数据库能够协调一致,保证不发生冲突和矛盾。那么对于上面数据库的各种功能和特性是如何实现的呢?当然它不是数据库中的数据固有的,是靠管理或支持数据库的系统软件——数据库管理系统(DataBase Management System)提供的。下面我将结合我所学习的内容,谈谈关于数据库管理系统——Mircrosoft SQL Server。
Mircrosoft SQL Server是一个高性能的、多用户的关系型数据库管理系统,它专为客户/服务器计算环境设计,它提供的内置数据复制功能、强大的管理工具和开放式的系统体系结构为基于事物的企业级信息管理方案提供了一个卓越的平台。
首先作为一个数据库管理系统,Mircrosoft SQL Server应该具备如下功能:
1、数据库定义功能:可以定义数据库的结构和数据库的存储结构,可以定义数据库中数据之间的联系,可以定义数据的完整性约束条件和保证完整性的触发机制等;
2、数据库操作功能:可以完成对数据库中数据的操作,可以装入、删除、修改数据,可以重新组织数据库的存储结构,可以完成数据库的备份和恢复等操作;
3、数据库的查询功能:可以以各种方式提供灵活的查询功能,使用户可以方便地使用数据库中的数据;
4、数据库的控制功能:可以完成对数据库的安全性控制、完整性控制、多用户环境下的并发控制等各方面的控制;
5、数据库的通信功能:在分布式数据库或是提供网络操作功能的数据库中还必须提供数据库的通信功能。
其次是Mircrosoft SQL Server中系统数据库的作用,每个SQL Server实例包括四个系统数据库(master、model、tempdb和msdb)以及一个或多个用户数据库。下面是关于四个系统数据库的介绍:
1、master数据库:用于存储SQL Server系统的所有系统级信息,包括所有的其它数据库的信息、所有数据库注册用户的信息以及系统配置设置等。
2、tempdb数据库:用以保存所有的临时表和临时存储过程,还可以满足任何其它的临时存储要求,例如存储SQL Server生成的工作表。
3、model数据库:它是一个模板,当使用CREATE DATABASE命令建立新的数据库时,新的数据库的一部分总是通过复制model数据库中的内容创建,剩余部分由空页填充。
4、msdb数据库:用于SQL Server代理程序调度报警和作业等系统操作。同时在安装SQL Server时,还建立了一个pubs数据库,这是一个用户数据库,是一个可以用于练习的示例数据库。在建立数据库时,每个数据库至少有两个文件:一个主文件(存储数据库的启动信息、用户数据和系统表,以.mdf为扩展名)和一个事物日志文件(用来保存恢复数据库的日志信息,以.ldf为扩展名)。
接下来是SQL Server的数据库结构:
在SQL Server数据库中,数据被组织为用户可以看得见的逻辑组件,主要包括基本表、视图、存储过程、触发器和用户等。SQL Server在发出CREATE DATABASE命令建立数据库时,会同时发出建立操作系统文件、申请物理存储空间的请求;当CREATE DATABASE命令成功执行后,在物理上和逻辑上都建立了一个新的数据库。这就可以在数据库库中建立各种用户所需的逻辑组件,如基本表、视图等。
然后是Mircrosoft SQL Server管理中的几个特点:
1、数据库镜像:通过数据库镜像,将自动失效转移建立到一个待用服务器上增强SQL服务器系统的可用性。
2、在线检索操作:即在指数数据定义语句(DDL)执行期间,允许对基地表格或集簇索引数据和任何相关的检索,进行同步修改。例如,当一个集簇索引正在重建时,可以对基低数据继续进行更新、查询。
3、快速回复:新的、速度更快的恢复选项可以改进SQL服务器数据库的可用性,管理人员将能够在事物日志向前滚动之后,重新连接到正在恢复的数据库。
4、快照隔离:通过快照隔离,使用者能够使用与传统一致的视野观看数据库,存取最后执行的一行数据,这也为服务器提供了更大的可升级性。
5、专门的管理员连接:即即使在一个服务器被锁住,或者因为其他原因不能使用时,管理员可以通过这个连接,接通这个正在运行的服务器。这一功能能让管理员,通过操作诊断或Transact-SQL指令,找到并解决发现的问题。最后是关于学习过程中的体会,数据库能给我们生活带来便捷,但它的学习肯定不会那么一帆风顺,总会遇到问题。我想解决问题最好的方法是理解它,从多方面理解、掌握它。
首先是对概念的理解,例如关于游标的使用,最基本的操作语句如定义游标:DECLARE CURSOR、打开游标:OPEN、从游标中读记录:FETCH、关闭游标:CLOSE、释放游标:DEALLOCATE、执行:EXEC等,如果都不明白这些语句含义,如何掌握它?其次是对数据结构的理解,数据库就象房子,也有地基、承重墙(框架)、门、窗、内部家俱饰品等,对应到数据库里,一样可以找到相应的东东。地基就象数据库的系统表,不论以后要盖多少房子,多高多大的房子,都要在地基上开始;框架(承重墙)可以是每张表,也可以是每张表中的字段,是不可逾越而又相互交叉的;门窗就是数据库中的通道,就是索引、访问权限、视图等;内饰、家具就是最终的用户数据,是放在数据库这所房子里的东西。然后是在思维上的理解,东西方的思维方式上存在差异,比如在多表查询、数据库结构优化时需要多考虑这种理解和实施层面的“差异性”。
第三篇:数据库学习总结(模版)
电子商务数据库技术----SQL Server 篇
学习总结
------60951P南信院这学期我们学习了数据库的SQL Server 篇,具体内容提纲如下:
1、数据库系统的基本概念
2、SQL语言
一、数据库的基本概念
1、数据库
1)数据库是统一管理并长期储存在计算机内优结构的大量共享的数据集合。
2)现在所有的数据库都是关系型数据库(二维表)
3)数据独立性:物理独立、逻辑独立
4)实现数据独立性:三级模式、二级映射
三级模式:外外模式、概念模式、内模式
二级映射:外模式/概念模式
概念模式/内模式
5)逻辑结构:表结构(外模式)
Eg:S(sno,sname)
物理结构:数据库存取的方式位置(内模式)
Eg:P(sno char(8)
Snamechar(10))
逻辑结构比物理结构少了数据类型
2、数据库管理系统(DBMS)功能:
1)数据定义
2)数据操纵
3)安全与备份
3、六个约束
主键约束、非空约束、检查约束、默认约束、外键约束、唯
一性约束
4、任何一张表必须有且只有一个主键(PK),一个主键可以有多个
字段组成5、关系性质
1)每个字段的每个值都是单值
2)每个字段里的值都具有相同的数据类型
3)行顺序无关紧要
4)列顺序无关紧要
5)行不能重复
6)列不能重复
二维表必须满足以上关系性质才是关系
关系:二维表结构
6、数据完整性
1)实体完整性
2)参照完整性
3)用户自定义完整性
二、SQL语言
1、SQL功能:数据定义、数据操纵、数据控制
2、单表查询
固定格式:Select...from…where3、Select子句
*表示一个表中的所有字段
Eg:查询计算机系所有学生的姓名、学号、性别、年龄、专业Select * from students where sdept=”computer”
4、Where子句
1)多条件(And,Or连接)
2)Between...and...3)In(等于期中的某一个)
Like模糊查询(条件不完整)
Eg:查询姓王的学生的学号、姓名、专业
Select sno,sname,sdept from students where sname
like ‘王%’
5、统计函数
Count(*)个数包含null
Count(列名)个数去掉null
Sum(列名)和
Avg(列名)平均值
Max(列名)最大值
Min(列名)最小值
6、分组Group by
1)包含Group by子句的查询语句中Select子句指定的列名,要么是统计函数,要么是包含在Group by子句中的列名。
2)分组条件
Having 必须和Group by一起使用,不可单独。
7、排序Order by
ASC(升序)(默认)
DESC(降序)
8、多表查询
1)内连接(两张表或以上连接)
2)外连接(两张表连接)
Eg:查询所有学生的选课情况,结果包括学号、课程、姓名 内连接:Select students.sno, cno , sname from students ,enrollment where students.sno*=enrollment.sno
外连接:Select students.sno, cno , sname from students
left join enrollment on student.sno=enrollment.sno9、嵌套查询
Eg:查询与Sue选修同样课程学生的学号、课程号、姓名Select students.sno,cno,sname from students,
第四篇:Oracle数据库学习总结
Oracle数据库学习总结
1.set linesize xx;设置行间距,常用数值有100,200,300
2.set pagesize xx;设置每页显示行数
3.ed x;表示新建一个x.sql文件,通过文件编辑SQL语句,然后用@x命令可以调用刚才的命令
4.CONN username/password;命令可以建立用户的连接,需要注意的是sys用户是超级管理员,连接是时需要在末尾加上AS SYSDBA 以系统管理员的身份进行连接
5.如果表是归某个用户特有的,在查询的时候需要加上用户名 即以 用户名.表名 的格式查询
6.SHOW USER;命令可以显示当前连接的用户名
7.SELECT * FROM tab;可以显示当前用户下的所有数据表
8.“ / ”表示重复执行上一次的SQL命令操作
9.SELECT xx别名,xx 别名 FROM xx;搜索指定列名,并指定别名,方便显示
10.关键字DISTINCT 可以消除重复值 如 SELECT DISTINCT xx FROM xx;
11.Oracle中提供的字符串连接操作,使用“||”表示,相当于Java的“+”普通字符用“ ' ” 括起来
如: SELECT'员工姓名是'||ename||'员工卡号是'||empnoFROM emp;
12.查询语句 BETWEEN xx AND xx 是包括边界的13.查询日期的时候要加上''把日期引起来
例如:SELECT * FROM emp WHERE hiredate BETWEEN '1-1月-81' AND '08-9月-81';
14.模糊查询中“%”可以匹配任意长度的内容,“_”可以匹配一个长度的内容,如果没输入模糊查询关键字,那么默认查询全部数据,like关键字可以用在任何地方,可以匹配数字、字符、日期等。
15.SQL中不等于可以用“<>”或者“!=”表示
16.ORDER BY语句中 ASC表示升序,DESC表示降序,在没指定的时候默认按照升序排序
17.Oracle中的单行函数有如下,默认的所有的函数都要到表中执行,加上关键字DUAL只会产生一个临时表
UPPER('xxx')将小写转换为大写
LOWER('xxx')将大写转换为小写
INITCAP('xxx')将首字母大写
CONCAT('','')字符串连接
SUBSTR('xxx',x,x)字符串截取,从0或1开始截取效果是一样的,因为Oracle比较智能,要是输入的参数为负数,则表示倒着截取
LENGTH('xxx')字符串长度
REPLACE('xxx','x','x')字符串替换
ROUND(xxx,xx)四舍五入 xxx需要四舍五入的数值,xx保留的小数位,可以加负数 TRUNC(xxx)截断操作,默认小数点后的全部截断,也可以指定小数点保留位数如TRUNC(789.536,2)得到的结果是789.53,也可以加负数如TRUNC(789.536,-2)结果是700
18.SELECT sysdate FROM DUAL;可以求出当前的日期
19.Oracle 中提供了以下日期函数支持:
MONTHS_BETWEEN()求出给定日期范围的月数
ADD_MONTHS(xxx,xxx)在指定日期加上指定的月数
NEXT_DATE(xxx,'')求出下一个给定日期数
TO_CHAR()可以将年、月、日进行分割
例如
TO_CHAR(hirdate,'yyyy')year,TO_CHAR(hirdate,'mm')months,TO_CHAR(hirdate,'dd')day 还可以对时间进行格式化输出 如TO_CHAR(hirdate,'yyyy-mm-dd')
TO_CHAR(hirdate,'fmyyyy-mm-dd')可以去掉前导0
TO_CHAR()还可以对数字进行格式化 如
SELECT ename,TO_CHAR(SAL,'99,999')FROM emp;
注意:一定要用9来表示
$表示美元符号,L表示Local的缩写,以本地语言进行金额显示
TO_NUMBER()将字符串变为数字
TO_DATE()将字符串变为Date类型 例如 SELECT TO_DATE('2009-12-8','yyyy-mm-dd')FROM dual;
TO_NVL()可以将NULL的内容变为指定的内容
DECODE()相当于Java的if else else语句
例如SELECT DECODE(1,1,'内容是1',2,'内容是2',3,'内容是3')FROM dual;将输入 内容是1
20.左右连接
SELECT e.empno,e.ename,d.deptno,d.dname,d.loc FROM emp e,dept d WHERE
e.deptno(+)=d.deptno;此例中是右连接,以deptno表为准。
21.SQL1999语法
CROSS JOIN 交叉连接 会产生笛卡尔积
NATURAL JOIN 自然连接 自动进行关联字段匹配 可以消除笛卡尔积
USING 子句:直接关联操作列 如 SELECT * FROM emp e JOIN dept USING(deptno)WHERE deptno=30;
ON 子句 用户自己编写连接条件
LETF JOIN/RIGHT JOIN 左右连接
SELECT e.empno,e.ename,d.deptno,d.dname,d.loc FROM emp e right OUTER JOIN dept d ON(e.deptno=d.deptno);
22.分组查询GROUP BY 放在where之后
常见的组函数有
COUNT();
MAX();
MIN();
AVG();
SUM();
用法如下:SELECT deptno,count(empno)FROM emp GROUP BY deptno;
语法:SELECT deptno,empno,count(empno)FROM emp GROUP BY deptno;是错误的,原因是使用分组函数的时候,不能出现分组函数和分组条件以外的字段。
语法:SELECT deptno,count(empno)FROM emp;是错误的,原因是不使用分组的时候,则只能单独使用分组函数
分组函数只能在分组中使用,不允许子啊where语句中个使用,要使用个分组条件可以加上HAVING
例如:SELECT deptno,avg(sal)FROM emp GROUP BY deptno having avg(sal)>2000;注意:分组函数可以嵌套使用,但是在组函数嵌套使用的时候不能再出现分组条件的查询语句
如下语法是错误的:SELECT deptno,max(avg(sal))FROM emp GROUP BY deptno;不能出现deptno
如下语法是正确的:SELECT max(avg(sal))FROM emp GROUP BY deptno;
23.子查询中
>ANY 比里面的最小值大
=ANY 与IN用法相同 >ALL 比里面的最大值大 24.表复制 CREATE TABLE myemp AS SELECT * FROM emp;既复制表结构,又复制表内容 CREATE TABLE myemp AS SELECT * FROM emp where 1=2;后面的条件不可能成立,只复制表结构 25.Oracle 中常用的数据类型 VARCHAR、VARCHAR2 代表一个字符串,有长度限制,为255 NUMBER 分为两种 1)NUMBER(n)代表一个整数,数字的长度是n,可以使用INT 2)NUMBER(m,n)代表一个小数,小数长度为n,整数长度为m-n,可以使用FLOAT DATE 代表日期的类型,日期要按照标准的日期格式进行存放 CLOB 大对象,表示大文本数据,一般可以存放4G的文本 BLOB 大对象,表示二进制数据最大可以存放4G,例如存放歌曲、电影、图片 26.表的创建 CREATE TABLE person(pid VARCHAR2(18),name VARCHAR2(200),birthdate DATE,age NUMBER(4),sex VARCHAR2(2)DEFAULT '男'); 27.插入数据 INSERT INTO person(pid,name,birthdate,age)VALUES('222','里斯 ',TO_DATE('1989-02-09','yyyy-mm-dd'),45); 28.更改表中数据 增加表结构:ALTER TABLE person ADD(address VARCHAR2(50)DEFAULT '暂无地址'); 修改已存在的列:ALTER TABLE person MODIFY(name VARCHAR2(40)DEFAULT '无名氏'); 29.表的重命名(只能在Oracle中使用) RENAME XXX TO XXX; 30.约束(主要分为5类) 1)主键约束 主键表示是一个唯一的标识。本身不能为空 2)唯一约束 在一个表中只允许建立一个主键约束,而其他列如果不希望重复值的话,则可以使用唯一约束 3)检查约束 检出一个列的内容是否合法 4)非空约束 5)外键约束 在两张表中进行约束的操作 删除时应该先删除子表,再删除父表 创建主键: 语法1 CREATE TABLE person(pid VARCHAR2(18)PRIMARY KEY,name VARCHAR2(200),birthdate DATE,age NUMBER(4),sex VARCHAR2(2)DEFAULT '男'); 语法2: CREATE TABLE person(pid VARCHAR2(18),name VARCHAR2(200),birthdate DATE,age NUMBER(4),sex VARCHAR2(2)DEFAULT '男',CONSTRAINT p_id PRIMARY KEY(pid)); 创建非空约束 CREATE TABLE person(pid VARCHAR2(18),name VARCHAR2(200)NOT NULL,birthdate DATE,age NUMBER(4),sex VARCHAR2(2)DEFAULT '男'); 创建唯一约束 语法一 CREATE TABLE person(pid VARCHAR2(18),name VARCHAR2(200)UNIQUE NOT NULL,birthdate DATE,age NUMBER(4),sex VARCHAR2(2)DEFAULT '男'); 语法二 CREATE TABLE person(pid VARCHAR2(18),name VARCHAR2(200)NOT NULL,birthdate DATE,age NUMBER(4),sex VARCHAR2(2)DEFAULT '男',CONSTRAINT p_name UNIQUE(name),); 创建检查约束 语法一 CREATE TABLE person(pid VARCHAR2(18),name VARCHAR2(200)NOT NULL,birthdate DATE,age NUMBER(4)NOT NULL CHECK(age BETWEEN 0 AND 150),sex VARCHAR2(2)DEFAULT '男' CHECK(sex IN('男','女','中')),); 语法二 CREATE TABLE person(pid VARCHAR2(18),name VARCHAR2(200)NOT NULL,birthdate DATE,age NUMBER(4)NOT NULL ,sex VARCHAR2(2)DEFAULT '男' ,CONSTRAINT p_age CHECK(age BETWEEN 0 AND 150),CONSTRAINT p_sex CHECK(sex IN('男','女','中'))); 创建外键约束 --person表 CREATE TABLE person(pid VARCHAR2(18)PRIMARY KEY,name VARCHAR2(200)NOT NULL,birthdate DATE,age NUMBER(4)NOT NULL ,sex VARCHAR2(2)DEFAULT '男'); --book表 CREATE TABLE book(bid NUMBER PRIMARY KEY,bname VARCHAR2(30),bprice NUMBER(5,2),pid VARCHAR2(18),CONSTRAINT b_pid_fk FOREIGN KEY(pid)REFERENCES person(pid)); 对于删除,应该先删除book表再删除person表 也可以使用级联删除,强制删除某张表 DROP TABLE person CASCADE CONSTRAINT; 设置外键约束级联删除 --person表 CREATE TABLE person(pid VARCHAR2(18)PRIMARY KEY,name VARCHAR2(200)NOT NULL,birthdate DATE,age NUMBER(4)NOT NULL ,sex VARCHAR2(2)DEFAULT '男'); --book表 CREATE TABLE book(bid NUMBER PRIMARY KEY,bname VARCHAR2(30),bprice NUMBER(5,2),pid VARCHAR2(18),CONSTRAINT b_pid_fk FOREIGN KEY(pid)REFERENCES person(pid)ON DELETE CASCADE); 31.修改约束 如果一张表已经建立完成之后,则可以为其添加约束 ALTER TABLE 表名称 ADD CONSTRAINT 约束名称 约束类型(约束字段); 关于约束名称的命名最好要统一: PRIMARY KEY :主键字段_PK UNIQUE:字段_UK CHECK:字段_CK FOREIGH KEY:父字段_子字段_FK 例如: DROP TABLE person; CREATE TABLE person(pid VARCHAR2(18),name VARCHAR2(200)NOT NULL,birthdate DATE,age NUMBER(4)NOT NULL ,sex VARCHAR2(2)DEFAULT '男'); ALTER TABLE person ADD CONSTRAINT pid_PK PRIMARY KEY(pid); ALTER TABLE person ADD CONSTRAINT name_UK UNIQUE(name); ALTER TABLE person ADD CONSTRAINT age_CK CHECK(age BETWEEN 1 AND 150);CREATE TABLE book(bid NUMBER ,bname VARCHAR2(30),bprice NUMBER(5,2),pid VARCHAR2(18)); ALTER TABLE book ADD CONSTRAINT book_PK PRIMARY KEY(bid); ALTER TABLE book ADD CONSTRAINT pid_FK FOREIGN KEY(pid)REFERENCES person(pid);删除约束 ALTER TABLE person DROP CONSTRAINT name_UK; ALTER TABLE person DROP CONSTRAINT age_CK; 数据库学习总结-Marlon 目录一、二、三、四、五、六、七、八、ORACLE_简介.............................................................................................................................................................1 ORACLE_简单查询.....................................................................................................................................................3 ORACLE标量函数和算数运算..................................................................................................................................5 ORACLE_多表查询.....................................................................................................................................................9 ORACLE_列函数和分组...........................................................................................................................................10 ORACLE_子查询.......................................................................................................................................................12 ORACLE_表的更新操作...........................................................................................................................................13 ORACLE_表与视图的管理.......................................................................................................................................15 一、ORACLE_简介 Oralce数据库发展 Oracle 8 Oracle 8i:i表示internet,标识着Oracle公司正式进军互联网。Oracle9i Oracle10g:g表示grid,即网络技术。Oracle11g Oracle体系结构一 物理结构: 文件系统 控制文件 数据文件 日志文件 参数文件(不是数据库的组成成分) Oracel体系结构三 逻辑结构: block 快 extent 盘区 segment 段 tablespace 表空间 datafile 数据文件 SQL * Plus下的常用命令 连接到SQL*PLUS sqlplus user/password[as sysdaba|sysoper] sqlplus/nolog 启动数据库 startup mount 启动实例,打开控制文件,但不打开数据文件 startup nomount 只启动实例 关闭数据库 shutdown immediate 迫使每个用户执行为当前的SQL语句,立即断开连接 shutdown transactional 迫使用户执行完当前事务时,断开连接 shutdown abort 强制关闭数据库 常用SQL命令 show user:查看当前连接的用户 connect scott/tiger: 采用scott的用户名/tiger的密码连接数据库 desc table_name:查看tableName表结构 quit|exit:退出 disconnect:断开连接 clear screen:清屏,相当于Windows下的cls命令 select * from tab:列出当前用户下的所有表 @pata 执行pata制定的脚本文件 Oracle常用基本数据类型 varchar2/varchar:变成字符串 char:定长字符串 Integer:整型 number(m,n):数字型 smallint:短整型 float:浮点数 decimal:十进制数字(小数)date:日期型 二、ORACLE_简单查询 SQL结构化查询语言(Structured Query Language) SQL分类 1.数据定义语言(Data Definition Language,DDL):create、alter、drop。 create table 表名;alter table add 新列名 数据类型;drop table 表名;2.数据操纵语言(Data Manipulation Language,DML):insert、update、delete、select。Insert into 表名(字段1,字段2…)values(值1,值2…);update student set sage=22 where sno='200215';(将学生200215的年龄改为22岁)select distinct job from emp;去除重复行 3.数据控制语言(Data Control Language,DCL):commit work、rollback work。 查询雇员的所有信息 select * from emp; *表示所有列 查询语句的格式 select *|列名 from 表名 查询雇员的编号,姓名,工资 select * from empno,ename,sal from emp; 查询所有职位 select job from emp;select distinct job from emp;distinct: 有区别的(去除重复行) 查询工资大于1500的雇员信息,列出编号,用户名,工资 select empno,ename,sal from emp where sal>1500; 带有where条件查询语句的基本格式 select *|列名 from 表名 where 条件; 比较运算符 大于:> 小于:< 等于:= 大于等于:>= 小于等于:<= 不等于:!=或者<> 限定查询 is null 和 is not null 的使用 查询每月可以得到奖金的雇员 select empno,ename,comm from emp where comm is not null; select empno,ename,comm from emp where comm is not null and comm>0; 查询谁没有奖金 select empno,ename from emp where comm is null; 限定查询 and 的使用 查询工资大于1500,并且可以领取奖金的雇员 SQL> select empno,ename,sal,comm from emp where comm is not null and sal>1500; 限定查询 or 的使用 查询工资大于1500和可以领取奖金的雇员 select empno,ename,sal,comm from emp where sal>1500 or comm is not null; 查询没有奖金的雇员 select empno,ename,comm from emp where comm=0 or comm is null; 限定查询 使用not对条件整体取反 查询工资不大于1500并且不能领取奖金的雇员 select empno,ename,sal,comm from emp where sal<=1500 and(comm is null or comm=0);select empno,ename,sal,comm from emp where not(sal>1500 or comm is not null); 限定查询 between...and...的使用 查询基本工资大于等于1500并且小于等于3000的雇员 select empno,ename,sal from emp where sal>=1500 and sal<=3000;select empno,ename,sal from emp where sal between 1500 and 3000; 查询1981年雇佣的所有员工 select empno,ename,hiredate from emp where hiredate between'1-1月 1981' and '31-12月 1981';注:日期格式 日-月 年,要匹配上 限定查询 字符串的比较 查询姓名是'SMITH'员工的所有信息 select * from emp where ename='SMITH';select * from emp where ename='smith';注:列值区分大小写 限定查询 in的使用 查询出编号7369,7499,7521的雇员的具体信息 select * from emp where empno=7369 or empno=7499 or empno=7521;select * from emp where empno in(7369,7499,7521); 限定查询 not in的使用 查询出雇员编号不是369,7499,7521的雇员的具体信息 select * from emp where empno not in(7369,7499,7521); 限定查询 like的使用 查询雇员的名字第二个字符是M的雇员信息 select * from emp where ename like'_M%';注:_匹配一个字符,%匹配0个多个字母(前缀或后缀的代表) 查询1982年入职的所有雇员的信息 select * from emp where hiredate like'%82'; 查询工资中包含5的雇员信息 select * from emp sal where like'%5%'; 对结果排序-Oracle By 查询员工工资大于1500员工的信息,按工资排序 select * from emp where sal>1500 order by sal; 查询工资大于1500员工的信息,按工资降序,按雇佣日期升序排序 select * from emp where sal>1500 order by sal desc,hiredate asc;注:ASC升序,DESC降序,默认ASC。 ascending [ə'sendiŋ]上升的,降序排列(descend [di'send] 的缩写); 三、ORACLE标量函数和算数运算 字符函数的使用 转换为大写字母 select upper('smith')from dual;注:dual是公共表。upper ['?p?] 上面的,上部的 转换为小写字母 select lower('SMITH')from dual;注:lower 放下 每个单词的字母变成大写,其余字母小写 select initcap('hello world')from dual 串连接(concat):可以使用“||”进行串连接 select concat('HELLO','WORLD')from dual;select 'HELLO'||'WORLD' from dual; 求子串(SUBSTR)select substr(ename,1,3)from emp;注:含义为截取ename字段从第一个字符开始,总共三个字符 求长度(LENGTH)select length(ename)from emp; 串替换(REPLACE)select replace('HELLO WORLD','WOR','WEL')from dual;结果: REPLACE('HE-----------HELLO WELLD 注:第一个逗号是原字符,第二个逗号是原字符的一部分,第三部分是替换原字符那个部分。 要求显示所有雇员的姓名和姓名的后三个字符 select ename,substr(ename,length(ename)-2)from emp;select ename,substr(ename,-3)from emp; 四舍五入(Round)select round(789.536)from dual;ROUND(789.536)-------------- 790 四舍五入(Round):指定保留小数位数 select round(789.536,2)from dual;---------------- 789.54 四舍五入(Round):对整数四舍五入 select round(789.536,-2)from dual;ROUND(789.536,-2)----------------- 800 截断小数位(TRUNC)select trunc(789.536)from dual;TRUNC(789.536)-------------- 789 截断小数位(TRUNC):指定保留小数位 select trunc(789.536,2)from dual;TRUNC(789.536,2)---------------- 789.53 截断小数位(TRUNC):对整数截断 select trunc(789.536,-2)from dual;TRUNC(789.536,-2)----------------- 700 除空格(TRIM) SQL> SELECT TRIM(55)FROM DUAL;TRIM(55)--------55 取余数(MOD)select mod(10,3)from dual; 日期函数 运算规律: 日期+数字=日期 日期-数字=日期 日期-日期=数字(天数) 查询当前日期 select sysdate from dual;SYSDATE-------------10-3月-12 显示10部门员工进入公司的星期数 select empno,ename,round((sysdate-hiredate)/7)from emp where deptno=10; 在指定日期上加入指定的月数之后的日期(ADD_MONTHS)select add_months(sysdate,4)from dual;ADD_MONTHS(SYS--------------10-7月-12 求出给定日期范围的月数(months_between)select empno,ename,months_between(sysdate,hiredate)from emp; 下一个给定的星期是那个日期(next_day)select next_day(sysdate,'星期一')from dual;注:表示在当前时间的前提下,下个礼拜一的具体日期 求出给定日期所在月份的最后一天日期(last_day)select last_day(sysdate)from dual; 转换成字符串(to_char)查询雇员号,姓名,以及入职的年份 select empno,ename,to_char(hiredate,'yyyy')from emp;注:yyyy匹配年份,mm匹配月份,dd匹配日 使用to_char设置日期的显示格式 select empno,ename,to_char(hiredate,'yyyy-mm-dd')from emp; 使用fm去掉前导0 select empno,ename,to_char(hiredate,'fmyyyy-mm-dd')from emp;EMPNO ENAME TO_CHAR(HI-------------------------- 7369 SMITH 1980-12-17 7499 ALLEN 1981-2-20 注:正常的值是1981-02-20,02前面的0去掉,变成了1981-2-20. 通过to_char设置数值的格式 select empno,ename,to_char(sal,'99,999')from emp;说明:9代表1位数字 EMPNO ENAME TO_CHAR--------------------------- 7369 SMITH 800 7499 ALLEN 1,600 7521 WARD 1,250 注:把sal的值分成两个部分,后三位为一个部分,前两位为一个部分,用逗号隔开。 显示余额 select empno,ename,to_char(sal,'$99,999')from emp;说明:$代表美元 转换成数字(to_number)select to_number('123')+to_number('123')from dual;TO_NUMBER('123')+TO_NUMBER('123')-- 246 转换成日期(to_date)select to_date('2009-07-31','yyyy-mm-dd')from dual;TO_DATE('2009---------------31-7月-09 算数运算 查询每个员工的年收入 select empno,ename,(sal+comm)*12 from emp;年收入=工资+奖金 查询每个员工的年收入 select empno,ename,(sal+comm)*12 income from emp; 查询每个员工的年收入 select empno,ename,(sal+NVL(comm,0))*12 income from emp;注:NVL(comm,0),当comm的值为null时,用0替换 ORACLE_多表查询 格式: select 列名1 别名1,......from 表名1,表名2,......where 条件 order by 列名 查询员工的编号,姓名,部门编号,部门名称 select empno,ename,emp.deptno,dname from emp,dept where emp.deptno=dept.deptno; 关联查询-为表命别名 查询员工的编号,姓名,部门编号,部门名称 select empno,ename,e.deptno,dname from emp e,dept d where d.deptno=e.deptno;注:这里的e是emp的别名,d是dept的别名 关联查询-自连接 查询出每个雇员的姓名、工作、雇员的直接上级领导的姓名 select e.empno,e.ename,e.job,m.ename mname from emp e,emp m where e.mgr=m.empno;注:mname是m.ename的别名 关联查询-多表关联 四、 查询出每个雇员的姓名,工作,雇员的直接上级领导,以及部门名称 select e.ename,e.job,m.ename,d.dname from emp e,dept d,emp m where e.mgr=m.empno and e.deptno=d.deptno;注:当查询的字段间的关系涉及到n个表时,则n个表之间关联。 左、右外连接 查询员工编号,姓名,所在部门号,部门名称,将没有员工的部门也显示出来 select e.ename,d.deptno,d.dname from emp e,dept d where e.deptno(+)=d.deptno;注:(+)在左边,表示右连接,会列出所有右表中出现但是没有在左表中出现的行。 查询雇员的编号,姓名及其领导的编号,将没有领导的员工也列出来 select e.empno,e.ename,m.empno,m.ename from emp e,emp m where e.mgr=m.empno(+);注:(+)在右边表示左连接,会列出左表中出现但没有在右表中出现的行。 交叉连接(cross join):用来长生笛卡尔积 select * from emp cross join dept; 自然连接(nutural join):自动进行关联字段的匹配 select * from emp natural join dept; using子句:直接指定操作关联列 select * from emp join dept using(deptno) on子句:用户自己编写连接条件 select * from emp join dept on emp.deptno=dept.deptno; left join:左外连接 right join:右外连接 五、ORACLE_列函数和分组 常用的列函数 sum(expression)求和 max(expression)求最大值 min(expression)求最小值 avg(expression)求平均数 count(expression)统计记录数 count(distinct colname)统计去除重复行记录数 nvl(comm,0)当comm为null时,用0替换 列函数的使用 查询员工的记录数,员工工资的总和,平均工资,最高工资,最低工资 select count(*)count_emp,sum(sal)sum_sal, max(sal)max_sal,min(sal)min_sal, avg(sal)avg_sal from emp; 列函数的使用-对null的处理 查询所有员工的年收入 select sum(sal+comm)from emp;SUM(SAL+COMM)------------- 7800 注:当comm为null时,sal+comm是没有结果值的 select sum(sal)+sum(comm)from emp;SUM(SAL)+SUM(COMM)------------------ 31225 select sum(sal+nvl(comm,0))from emp;SUM(SAL+NVL(COMM,0))-------------------- 31225 分组查询 语法格式 select 列名...,列函数 from 表名...where 条件...group by 列名...order by 列名... 查询每个部门的人数 select deptno,count(*)from emp group by deptno;规则:如果在select字句中,有不在列函数中的列,则该列一定要出现在group by之后。 分组查询having字句的使用 显示出平均工资大于2000的部门编号和平均工资 select deptno,avg(sal)from emp group by deptno having avg(sal)>2000; SQL语句的书写顺序 select 列名,列函数 from 表名 where 条件 group by列名 having 条件 order by 列名 SQL语句的执行顺序 from where group by having select order by 查询20,30部门的平均工资,并将平均工资大于2000的输出,输出结果按平均工资排序 select deptno,avg(sal)from emp where deptno in(20,30)group by deptno having avg(sal)>2000 order by avg(sal); 六、ORACLE_子查询 在where子句中使用子查询 查询工资比7654雇员工资高的全部雇员信息 select * from emp where sal>(select sal from emp where empno=7654);子查询-in的使用 查询和smith或jones在同一部门,同一职位工作的员工 select ename from emp where(deptno,job)in(select deptno,job from emp where ename in('SMITH','JONES')); 子查询-any的使用 =any:与in操作符的效果一致 查询和smith或jones在同一部门,同一职位工作的员工 select ename from emp where(deptno,job)=any(select deptno,job from emp where ename in('SMITH','JONES')); >any:只要大于子查询中的任何一个值即可 select * from emp where sal>any(select min(sal)from emp group by deptno); select empno from emp where sal 子查询all的使用 >all:比最大的值大 select * from emp where sal>all (select min(sal)from emp group by deptno);注:select min(sal)from emp group by deptno结果为 MIN(SAL)---------- 950 800 1300 是每个部门当中的最少工资。 七、ORACLE_表的更新操作 创建表副本 create table myemp as select * from emp; 插入 到表中 insert的语法 insert into 表名(字段名1,字段名2,......)values(值1,值2......) 为myemp中增加一条记录 insert into myemp(empno,ename,job,mgr,hiredate,sal,comm,deptno)values(7899,'张三','清洁工','7369','14-2月-2005',9000,300,40);注:给定的值要和指定的字段数一致。 1.如果全部字段都插入值的话,那字段名可以省略。即: insert into 表名 values(值1,值2,.......);2.如果只是部分字段插入值的话,字段名又想省略的话,那么,其余没有数据插入的字段用null填补。 to_date:字符型转换成日期型 批量插入记录 格式: insert into 表名 select 字段列表 from 表名 where 条件 注:insert表和select表列数等都一致 例如: create table test as select * from emp;insert into test select * from emp; 修改记录 update表名set要修改的字段=新值,要修改的字段=新值,...where条件 将雇员号为7896的雇员的奖金修改为100 update myemp set comm=100 where empno=7896;注:执行修改操作时,一定要使用where来指定修改的条件,否则会改变表中的所有记录。 删除记录 delete from 表名 where 条件 删除雇员编号为7896的雇员信息 delete from myemp where empno=7896;注:执行delete操作时,一定要使用where来指定修改的条件,否则会删除表中所有的记录。 Oralce的事务处理 commit:提交事务 rollback:回滚操作 注:操作一旦执行了commit操作,就再也不能回滚操作了。 八、ORACLE_表与视图的管理 oracle中的常见数据类型 varchar、varchar2:表示一个字符串,有长度限制,为255 number: number(n):表示一个整数,数字的长度是n,可以使用int number(n,m):表示一个小数,数字的长度为n,整数长度m-n,可以使用float date:表示日期类型,日期要按照标准格式日期存放。clob:大对象,表示大文本数据类型,可存放4G。 blob:大对象,表示二进制数据,最大可以存放4G,如电影,图片、歌曲 创建表 语法: create table 表名(字段名称1 字段类型[default 默认值], 字段名称1 字段类型[default 默认值],............字段名称1 字段类型[default 默认值],); 复制表 create table 表名 as(子查询);注:当子查询不成立时,如果1=2,则只复制表的结果,不复制表的数据。 删除表 语法: drop table 表名; 修改表结构 增加一列 alter table 表名 add(列名称 列数据类型 default 默认值) 删除列 alter table 表名 drop column 列名称; 修改列的数据类型 alter table 表名称 modify(列的名称 列的类型 default 默认值);注:1.如果是更改数据的长度,则要求更改时,长度不能小于当前表中数据所具有的最大长度。 2.如果是更改数据类型,则要求更改时,该列的所有记录值都为空。 修改表结构 为表重命名 rename 旧表名 to 新表名;注:这是oracle特有的操作 将myemp表改名为iemp SQL> rename myemp to iemp;表已重命名。 截断表 truncate table 表名;意义:清空表中的所有数据,并且立即释放资源,该操作是不可回滚。 约束-约束的分类 主键约束:表示一个唯一的标识,本身不能为空 唯一约束:列值不允许重复 检查约束:检查一个列的内容是否合法 非空约束:不能为空值,如用户不能为空(no null)外键约束:在两张表中进行约束的操作 主键约束(primary key)主键约束一般在id上使用,而且本身已经默认了不能为空,主键约束可以在建表的时候指定 create table person(pid varchar2(18)primary key, name varchar(30), age number(3), sex varchar2(2)default'男'); 使用constraint指定 constraint [kən'streint] 约束;强制 create table person(pid varchar2(18), name varchar(30), age number(3), sex varchar2(2)default'男' constraint person_pid_pk primary key(pid);); 非空约束(not null)create table person(pid varchar2(18)primary key, name varchar(30)not null, age number(3), sex varchar2(2)default'男'); 唯一约束(unique)create table person(pid varchar2(18)primary key, name varchar(30)unique not null, age number(3), sex varchar2(2)default'男'); 视图 概念:一个视图实质是封装了一条复杂的SQL语句 创建视图 语法: create view 视图名称 as 子查询 创建部门20员工的雇员信息 create view empv20 as select * from emp where deptno=20;注:当创建视图以后,可以像操作表一样操作视图。注:视图的操作会影响到表的操作。 with check option 不能更新创建视图的条件 with read only 创建只读视图 删除视图 语法: drop view 视图名称 注:当删除视图所在的表时,则视图也不能被使用 序列 创建序列语法:sequence ['si:kwəns] create sequence 序列名称;create sequence myseq;序列的操作: nextval:取得序列的下一个内容 currval:取得当前序列的内容 创建表验证序列的操作 create table testseq(next number,curr number);insert into testseq values(myseq.currval,myseq.nextval); 创建序列指定每次增长的增量 create sequence myseq increment by 2;注:每次增长2 创建序列指定开始的序列,默认的序列从1开始。create sequence myseq increment by 2 start with 10;注:序列从10开始,每次增长2 创建一个序列1,3,5,7,9.create sequence myseq maxvalue 9 increment by 2 start with 1 cache 2 cycle;注:序列从1开始,每次增长2,最大值为9,循环两次。第五篇:ORACLE数据库学习总结