第一篇:数据库学习总结
数据库学习总结
这学期我们学习了数据库应用教程这门课,以前并不知道这门课是干什么的,也不懂得什么是数据库,通过这一学期的学习,虽然了解的不是非常多,但也有了初步的一点认识。
我大概的明白数据库技术是处理信息,管理数据最有效的一种方法。它具有完善的数据管理功能,还具有操作方便,简单实用等特点。因为我是非计算机专业的学生,所以我学起来就感觉很难,在上第一堂课的时候,因为不了解,于是心里充满了对这门课的神秘感,在第一堂课上我听得很认真,我感觉它与其他的课程没有什么联系,不需要其它太多的知识,我想它可能是一门从头开始学的课,就没有太多的担忧,然而事实并不是我想的这样,随着时间的延长,我发现每一堂课都比前一堂课难,逐渐的我听得就越来越吃力,还好书上除了理论知识外还有很多例题和图片,这对我对知识的理解有很大的帮助。
同时老师每堂课都用详细的和书上相似的PPT,并且老师讲的非常细致,书上的每一个知识他都会仔细的给我们讲解,有时遇到比较难的问题他还会很耐心的讲解好几遍直到我们都明白了为止,有时候我们好多人都没有听,但只要有人听,他就会很认真的讲。本书的第一章主要介绍数据库系统的基本概念,VFP的开发环境,项目管理器等知识,还记得上第一章时老师就告诉我们这一门课程对我们来说比较难学,也鼓励我们不要放弃,要慢慢的理解,老师总是态度很和蔼的与我们说话,更减少了我们对这一门课的恐惧感。
为了让我们更好的理解所学的知识,老师还为我们准备了与教学知识相关的实验内容,一般在每堂理论课后都会有实验课,所做的实验都是我们刚学的那些基本的,重点的知识。这种理论与实验相结合的方式加深了我们对教材的理解。刚开始做实验时,因为是初学,所以老师会把所有的步骤都写上,让我们照着做,先熟悉它的基本操作,再慢慢的理解,时间久了,老师就会省去一些简单的步骤,让我们自己练习。并且每次实验之间都有一定的联系,比如下一次实验时当中有的东西就要用到上一次或前几次的实验内容。如果第一次没有做或者没有做完,就会影响到下一次的实验,刚开始我因为不熟就做不完,也不知道与以后的实验是有联系的,偶尔做完了也不知道保存,直到做到下一次实验不会做去问老师时,才知道那是上节课的内容,于是我又从第一次重新开始做起。这样不仅浪费时间,而且赶不上老师的进度,每一节我就会忙于做以前的任务,而不能及时做当天的,从而总觉得自己很忙,但又不知忙了些什么,更不能及时掌握当天所学的知识。使不懂的知识越来越多,自然也就觉得学起来很吃力。
书中第二章给我们介绍了VFP的基础知识及数据运算,这一章内容让我对数据库有了进一步的理解,这也为我以后学习数据库打下了基础,因为基础的东西才是一切学习的前提,没有这些知识又怎能继续学习后面的知识。第三章讲了表的基本操作,如对表结构的认识,如何创建表和修改表操作,排序与索引,数据表的统计,工作区与多表操作,表文件等。这一章内容是数据处理与操作的前提基础。每一章的内容由浅入深,层层相扣,关系密切。这对我们学好这门课有很大帮助。
通过这一学期的学习我了解到数据库有很多优点,对我们的学习和生活非常有用,第一,它可以实现数据共享,所有用户可同时存取数据库中的数据,也可以用各种方式通过接口使用数据库,这样大大方便了我们每一个人的学习与生活。第二,它可以减少数据的冗余度,与其他的一些文件系统相比,因为数据库实现了数据共享,从而避免了用户各自建立应用文件,减少了大量重复数据,减少了数据冗余,这一特点使我们的操作更方便更快捷。减少了时间的浪费,提高了工作的效率。第三,数据库可以确保数据的安全性和可靠性,可以防止数据丢失,保证数据的正确性和有效性,同时数据库可以及时发现故障并修复故障,从而防止数据被破坏。数据库的这一系列特点都决定了它有很强大的功能,可以为我们提供很多方便,提高了我们的学习生活效率和质量,是一门很值得我们去学习的一门课程。我们应该重视它,使其更好地帮助我们。现在想起来还有一点点后悔,当时没有好好听。
在这一学期有限的几次实验课后,我虽然没有学会很多,但也学会了一些简单的操作,我学会了一些简单的数据运算;会建立一些简单的表,修改表的结构和在表中输入简单的记录以及对表记录的定位和修改;创建与编辑数据库等比较容易简单的操作。有时候在做实验时,对于实验中的一些东西我不怎么了解,但我还会去做,因为我想只有多练习才能熟练,也才能理解掌握知识。我不知道这一门课对其他同学来说怎么样,但对我来说却有些难,但我会努力。因为我认为它对我以后考计算机二级有很大的帮助。
很快这一学期马上就要结束了,数据库这一门课也很快就要结束了,但这一学期的学习让我知道了很多,尤其是老师的耐心,老师的敬业精神感动了我,每一次还在午休时就有不想去上课的冲动,但我都克服了,因为我想到老师从那么远来给我们上课,他能来,为什么我不能,所以每次我都会说服自己要好好上课。这不仅仅对我的学习有很大的启示,更重要的是,他也告诉了我在以后的人生中如何去做事,如何去做人。再做任何事时都应该认真负责,任何一个人都应该被尊重。因为有人还是想听,所以每次有人说话时,老师就会说你可以不听,可以睡觉,但不能影响其他人听课。上次清明放假时,好多人想回家,所以大部分人都没有来,老师并没有生气,而是很理解我们,有时候当别人理解我们时,我们应该思考自己有没有去理解过他人,这是相互的,就像老师理解我们一样,我们也应该按时上课,尊重老师,理解老师。经过一个学期的数据库课程的学习,我们掌握了创建数据库以及对数据库的操作的基础知识。数据库这门课涉及到以前的知识不多,是一门从头学起的课程,即使基础不是很好,只要认真听讲、复习功课,还是一门比较容易掌握的课。课堂上讲的知识比较理论化,如果不动手就无法将知识转化为技能,而动手去做能够让我们将学过的知识在实践中运用,找到知识漏洞,并且能学到更多关于实际操作的知识和技巧。并且培养了我们的自学能力。
第一次接触sql语言,虽然陌生,但是可以让我从头开始学,就算没有基础的人也可以学得很好。刚开始练习sql语言的时候,并不是很难,基本上都是按照老师的步骤来做,还很有成就感。我们通过老师的一些ppt,我们可以巩固课内的知识,还可以学习内容相关的知识,更好地完成老师布置的作业。access--中小型数据库开发系统,内嵌vba编程语言,面向对象编程 ,excel--数据表格处理系统,编程能力有限.access是数据库管理软件,内含的是数据库(基本对象),一个数据库包含多张表 主要用于开发系统,日常办公用起来不方便,他主要是做软件的后台的。而excel只是一般的表格处理软件,主要于一些日常的办公而已 两都所用到的地方不一样.access是一个数据库软件,一个access文件由存储特定结构化数据集的表集合组成。表中包含行(有时称作记录或元组)和列(有时称作特性)的集合。表中的每一列都设计为存储某种类型的信息(例如,日期、名称、美元金额或数字)。表上有几种控制(约束、规则、触发器、默认值和自定义用户数据类型)用于确保数据的有效性。表上可以有索引(与书中的索引非常相似),利用索引可以快速地找到行。可将声明引用完整性(dri)约束添加到表上,以确保不同表中相互关联的数据保持一致。
学习数据库对我来说是一直都计划学的,没接触的时候总是觉得它比较深奥或是不可接近的电脑知识,尽管自己对电脑非常感兴趣,其实还是有些心理上的陌生感。学习电脑就和我们平时的其它科目学习一样感觉它有永无止境的知识,在这从初接触电脑时连个电脑的键盘都不敢动到现在连硬盘都也修理,其中的过程是多么长啊,数据库是我在高中时候听过,到了大学渐渐了解了些,但就其原理性的内容还不知道,也就是根本就不清楚什么是数据库,只是知道一个所谓的中国字典里的名词。我认识它是从我接触网页制作开始的,初用FrontPage做网页也就是弄几个框图,没什么东西但还觉得不错,后来听朋友说这是最简单最普通的东东。朋友告诉我真真的网页起码也用到数据库这些东西了,有什么前台的后台的。听我的都晕头转向了,感觉自己是一个长不大的菜鸟了,之后我就去查找相关资料发现在数据库有很多种,这才对它有所了解。
大
一、大二的时候想学可不知道怎么学,从什么地方学起。当时也没注意选课本上有这类的课程,到了大三正式的课程也轻松些了,仔细观摩了选修课发现有数据库,有数据库原理和Oracle数据库。当时感觉Oracle数据库既然是单独一门课程一定会讲的比较细,也能学到真正实用的内容。选上了这门课以后发现和我想的基本是一样的,老师对学生也比较和蔼可亲,对我们要求也不是很紧。让每个人都觉得轻轻松松就能把这门课程学完,没有多么紧张的作业,也没有太苛刻的要求。
当老师在最后说这个课程结束了,回顾一下以前老师给我们讲过的东西,真的有很多是我们应该去注意的。学习完Oracle数据库后感觉Oracle可分两大块,一块是开发,一块是管理。开发主要是写写存储过程、触发器什么的,还有就是用Oracle的Develop工具做form。有点类似于程序员,当然我可不是什么程序员,有几个程序员朋友他们是我的偶像。开发还需要有较强的逻辑思维和创造能力,自己没有真正做过,但感觉应该会比较辛苦,是青春饭;管理则需要对Oracle数据库的原理有深刻的认识,有全局操纵的能力和紧密的思维,责任较大,因为一个小的失误就会down掉整个数据库,相对前者来说,后者更看重经验。这些东西都是从老师哪里和朋友的讨论中得到的心得,也希望其他朋友能多多向老师和朋友请教,如果是个人单独靠自己来完成一个完美的数据库我觉得比较困难,现在基本上都是团队类型的,而且他们的效率高开发的周期也快。在烟台的.NET俱乐部认识几个比较历害的人,他们的团队精神我比较佩服,像我这样一个大学生和他们说起来太菜了。由于数据库管理的责任重大,很少公司愿意请一个刚刚接触Oracle的人去管理数据库。对于我们这些初出茅庐的新手来说,个人认为可以先选择做开发,有一定经验后转型,去做数据库的管理。当然,这个还是要看人个的实际情况来定。其实在烟台大学里学生中有做的好的也是有,只不过通常象这些兄弟们我觉得很少能发现在,因为我只知道一个。在烟雨楼台的BBS版块里有个程序版块,这位版主以前就是学校网络中心的牛人。他曾告诉我学习的方法就是:看书、思考、写笔记、做实验、再思考、再写笔记。我觉得说的很对,对于新手来说就要这样,不断的去努力奋斗,最后一定能得到自己想要的成果。
对于学习Oracle数据库从网络上找资料我认为是比较好的,现在的网络又这么的发达应该去充分利用。我知道Oracle的官方网站:这里有Oracle的各种版本的数据库、应用工具和权威的官方文档。虽然我是个新手,但是常到哪些相关的数据库论坛或是网站觉得每次的收获都不小,网络对我来说可是个重要的东西,除了Oracle数据库对于其它的一些电脑知识都从网络里学习了不少,我常用的一个搜索网站就是大家都熟悉的百度了
以前没接触过它,现在认识了它才知道Oracle的体系很庞大,要学习它,首先要了解Oracle的框架。它有物理结构(由控制文件、数据文件、重做日志文件、参数文件、归档文件、密码文件组成),逻辑结构(表空间、段、区、块),内存分配(SGA和PGA)算机的实际内存中得以分配,如果实际内存不够再往虚拟内存中写,后台进程(数据写进程、日志写进程、系统监控、进程监控、检查点进程、归档进程、服务进程、用户进程),SCN(System Change Number)。这些东西感觉都比较专业,我对它们也就是个知道,想要真真去认识我还得努力去做。虽然懂得还不是很多,起码会了基本的软件操作,老师说我们用的都是客户端,服务端看不到,也不知道服务端是什么样的,只知道客户端就挺多东西的,没有真正的去学习利用是很难掌握的。
Oracle数据库的学习使我对数据库的有了新的进步,以后再看到也就不至于什么也不懂,其实那么多数据库我觉得学好一门就行,只是他们的语言可能不大一样,学好一门后就可去认识其它的,这样应该有事半功倍的效果。就像我学习C语言,当时不能说是学习的棒,但不算差。所以我对以后的语言感觉都不是很困难,了解了VB、C++还有网页中用的Html语言、asp语言都能看懂,起码可以对别人的东西进行了一下修改。因此,我感谢Oracle数据库老师给了我有用的知识,以便我在以后学习或认识更多的内容能有新的方法和思维,也能更加有效和快速的去消化吸收新的东西。希望在今后中,Oracle能给我更多帮助,让我在我熟悉的VB中运用上去,我以前的一个目标是要为学校的选课做一个选课助手来帮助大学,就用我的VB。不过因为种种原因一直没有完成,也包括我对数据库的不了解,因为学了Oracle以后知道第一项内容是通过SQL查询后得到的,如果去把它们联系起来还不是真正明白,不过我相信我的目标能在学习Oracle后得到进展。在这一年中我主要学习的数据库是sql serverXX,在学习的时候过程中,我们首先是从基础开始,比如数据类型、运算符号、关键字等等,然后上升到一些增删改查,还有触发、存储过程等的使用等等。
经过了一学期的学习,我从起初对数据库的认识模糊到后来清晰,深入,我认为我学到了许许多多的东西。当然,在学习中,薛立柱会给我们在网上下很多的学习资料,同时他也会建议我们多读读网上的学习资料。除了这个以外,我在学习数据库课程过程中,接触到的软件工程思想,网上学习经验,以及利用网络的学习资源都很好的改善了我的学习。后来,在学习的深入中,虽然学习有时是十分叫人感到枯燥乏味的,但我庆幸的是我坚持了下来,在最后的考试复习中,薛立柱老师虽然劝诫我学习不要因为考试而停止。是啊!要想学好一门功课我们需要的是持之以恒的精神。
数据库编程,这个是作为一个程序员的基本功,绝大多数软件开发公司数据库编程都是由程序员自己完成的,因为他的工作量不是很大,也不是很复杂。所以作为一个综合的程序员,学习数据库编程,像数据库四大操作,增删改查,还有触发、存储过程等的使用,这些都是基础的基矗很多时候我们会认为数据库没什么作用,学习的时候吊儿郎当,到今年做项目时,还不会连接查询,要想避免这种情况发生就必须打好基础,扎实的掌握每个知识点。
只要你从事计算机行业,就需要学习好数据库的基础知识,不论以后选择哪个方向,数据库的学习都不能放松。古人云:书到用时方恨少,知识学多了不会成为累赘,慢慢的积累,总有用到的时候。给自己明确一个目标,剩下的就是向着这个目标努力,无论遇到什么困难,克服它就向成功迈进了一步。
第二篇:数据库 学习总结
数据库学习总结
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数据库学习总结