Oracle开发实用教程_第1页
Oracle开发实用教程_第2页
Oracle开发实用教程_第3页
Oracle开发实用教程_第4页
Oracle开发实用教程_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章SQL语言与查询学习要点基本查询多表联接子查询集合运算聚合函数

本章主要内容SQL语言概述SQL语言的功能种类数据类型、运算符与表达式基本查询多表联接子查询集合运算聚合函数 3.1SQL语言概述SQL(StructuredQueryLanguage)是一种结构化查询语言,简称为SQL。它是1972年在SQUARE(SpecifyingQueriesAsRelationalExpression)语言的基础上由Boyce和Chamberlin提出的一个标准的、通用的结构化查询语言,后来将SEQUEL改为SQL。1989年,美国ANSI采纳了ANSIX3.134—1989报告中定义的关系数据库管理系统的SQL标准语言,称为ANSISQL89。该标准被国际标准化组织(ISO)和美国联邦政府组织所采纳。

3.2SQL语言的功能种类SQL语言按照功能可以分为四大类:(1)数据查询语言,主要用于查询数据,以SELECT语句为主要关键词。(2)数据定义语言DDL,用于定义SQL模式、基本表、视图和索引。(3)数据操纵语言DML,主要用于完成数据修改操作。(4)数据控制语言DCL,用于控制对数据库的访问,服务器的关闭、启动等

3.3数据类型、运算符与表达式3.3.1简单数据类型常用的简单数据类型分为9个:Number(p,s)、smallint、integer、float、double、char(n)、varchar(n)、date、time,下面一一进行介绍。(1)Number(p,s)。p是数字的整个位数,s是小数点后的位数。如:number(8,4)是一个8位数字,其中小数点后有4位。如果没有特别指定,例如:number,则系统会设为p=5;s=0。(2)smallint。表示16位的整数。(3)integer。表示32位的整数。(4)float。表示32位的实数。(5)double。表示64位的实数。(6)char(n)。表示固定长度为n的字符串,n不能超过254。(7)varchar(n)。表示可变长度的字符串且其最大长度为n,n不能超过4000。(8)date。表示日期,包含年份、月份。(9)time。表示时间,包含小时、分钟、秒。3.3.2运算符SQL的运算符分为如下几种:(1)算术运算符。加(+),减(-),乘(*),除(/)。(2)比较运算符。(3)逻辑运算符(4)范围运算符(5)列表运算符。3.3.3表达式SQL语言的表达式分为三类:①算术表达式;②关系表达式;③逻辑表达式。(1)算术表达式。用算术运算符连接的表达式称为算术表达式。如:sal+2000。(2)关系表达式。用比较运算符连接的表达式称为关系表达式。如:sal>2000。(3)逻辑表达式。用逻辑运算符连接的表达式称为逻辑表达式。如:name='HERY'ANDSAL=2000。3.4基本查询SELECT语句的功能是从指定的数据库的表中提取数据。其语法格式为:SELECT[ALL|DISTINCT]{字段名列表}FROM表名[WHERE{条件表达式}][GROUPBY{group_by_list}][ORDERBY{order_by_list}[ASC/DESC]];说明:这条语句分为三大部分:(1)SELECT:SELECT子句用于指定检索数据库中的哪些列。(2)FROM:FROM子句用于指定从哪一个表或视图中检索数据。(3)WHERE:WHERE字句用于在查询过程中的限制条件。关于DISTINCT子句、GROUPBY子句、ORDERBY子句的使用在本节后面介绍。3.4.1简单查询简单查询格式如下:SELECT{字段名列表}FROM表名;【例】假设关于一个企业信息的数据库中有三个表:职工表EMP、部门表DEPT、岗位(或工种)表JOBLEVEL。其中:表EMP有如下字段:序号字段名称字段类型字段说明1name字符型职工姓名2sex字符型性别3birth日期型出生日期4phone字符型员工个人联系方式5deptname字符型所在部门6salary实型数据工资7job字符型岗位(或工种)8title字符型职务(无职务,可以为空)这个表表主要要描述述企业业的职职工信信息,,数据据如下下namesexbirthdeptnametitlephonesalaryjob欧阳军女1986-09-01办公室867988212500文员底雪洋男1998-10-09软件开发部867988233800软件开发李一岚女1984-10-01软件开发部139123454500软件开发白海燕女1978-02-09市场部867988251700产品销售刘紫羽女1989-01-09办公室主任867988213000文员刘徐贝尔女1989-01-09软件开发部经理867988234500软件开发周楚远男1989-01-09市场部经理867988252000产品销售表DEPT有如下下字段段序号字段名称字段类型字段说明1deptname字符型部门名2manager字符型部门经理姓名3addr字符型部门地址4phone字符型电话号码表JOBLEVEL有如下下字段段:序号字段名称字段类型字段说明1job字符型岗位名字2level1数字型工资等级13level2数字型工资等级24level3数字型工资等级3带条件件的简简单查查询SELECT{字段名名列表表}FROM表名WHERE{条件表表达式式}]这里讲讲的带带条件件的简简单查查询指指单条条件的的查询询和组组合条条件的的查询询。下下面分分别介介绍。。1.单条条件的的查询询【例】查询企企业中中工资资超过过2100元(包包括2100元)的的所有有员工工的姓姓名及及其岗岗位。。SQL语句如如下::SQL>SELECTname,salary,jobFROMEMPWHEREsalary>=2100;2.组合合条件件的查查询组合条条件指指WHERE子句中中的条条件由由多个个条件件组成成,这这些组组合主主要是是由逻逻辑运运算符符(AND、OR、NOT)组成成。看看下面面的例例子。。【例】找出企企业员员工中中做软软件开开发工工作并并且工工资在在4000元以上上的员员工姓姓名和和所在在部门门。SQL语句如如下::SQL>SELECTname,deptname,salary,jobFROMEMPWHEREjob='软件开开发'andsalary>4000;单表查查询应应用1.查询询某些些字段段不同同的记记录在查询询工程程中,,可能能发现现有某某些相相同的的数据据,为为了只只显示示不同同的数数据,,可以以使用用DISTINCT关键字字。【例】查询企企业中中有多多少种种不同同的岗岗位。。SQL语句如如下::SQL>SELECTDISTINCTjobFROMEMP;2.BETWEEN…AND关键字字的使使用BETWEEN…AND关键字字给出出了查查询范范围内内的字字段,,而NOTBETWEEN…AND则给出出了查查询选选择范范围之之外的的某些些列。。【例】找出工工资在在2000元到3500元的所所有员员工。。SQL语句如如下::SQL>SELECTname,salaryFROMEMPWHEREsalaryBETWEEN2000AND3500;3.模糊糊查询询前面的的查询询都是是精确确查询询,但但是我我们平平时查查询时时经常常会使使用模模糊查查询,,比如如“找找姓陈陈的先先生””,““找员员工名名字中中最后后一个个字是是琳的的小姐姐”等等,这这些只只给出出某个个字段段得到到部分分关键键词而而不是是字段段的整整个数数据时时,就就可以以使用用LIKE关键字字了。。而NOTLIKE的意思思正好好相反反。这里介介绍几几个通通配符符,如如表3-3所示。。序号通配符说明1%代表0到多个字符2_代表单个字符4.NULL和NOTNULL关键字字的使使用NULL和NOTNULL主要用用于找找出下下落不不明值值的记记录。。例如如,在在公司司人员员招聘聘过程程中,,查询询出尚尚未安安排面面试的的候选选人名名单。。【例】查询办办公室室中一一般员员工的的基本本信息息(不不带职职务的的员工工)。。SQL语句如如下::SQL>SELECT*FROMEMPWHEREdeptname="办公室室"ANDtitle=null;5.查询询结果果排序序ORDERBY子句使使得SQL在显示示查询询结果果时将将各返返回行行按顺顺序排排列,,返回回行的的排列列顺序序由ORDERBY子句指指定的的表达达式的的值ASC或DESC确定。。SELECT[ALL|DISTINCT]{字段名名列表表}FROM表名[WHERE{条件表表达式式}][GROUPBY{group_by_list}][ORDERBY{order_by_list}[ASC/DESC]];其中::ASC:升序。表表示按照递递增顺序从从低到高对对指定的列列值排序。。DESC:降序。表表示按照递递减顺序从从高到低对对指定的列列值排序。。6.字段运算算查询在数据库查查询时,我我们希望把把表中的数数据进行基基本的算术术运算,然然后显示出出来。常见的算术术运算有::+(加)、-(减)、*(乘)、、/(除)四种种。【例】如果将软件件开发部的的所有员工工工资增加加1000元,请显示示出此部门门的员工姓姓名和工资资。SQL语句如下::SQL>SELECTname,salary+1000FROMEMPWHEREdeptname='软件开发部部';7.rowid和rownumrowid和rownum是很有用的的两个数据据库表中隐隐含的字段段。rowid是数据库内内部的十六六进制的数数据地址,,表明信息息放在第几几块第几行行。rownum是行号,并并且顺序排排列,根据据你的select语句的执行行动态生成成。它表示示是表的逻逻辑上的第第几行【例】区别rowid和rownum。SQL>SELECTrownum,rowid,enameFROMEMP;执行结果::rownumrowidename-----------------------------------------------------------------白海燕周楚远底雪洋欧阳军刘徐贝尔………………………………….8.别名的使使用在前面的查查询中,显显示的结果果都是用字字段名来显显示的,这这样不是很很直观,我我们可以给给显示的字字段名起一一个直观的的名字(叫叫“别名””),以这这个别名来来显示。格格式是:字段名[as]别名在“字段名名”和“别别名”之间间加空格或或者“as”即可,可以以将默认的的字段名以以设定的名名称显示。。【例】显示出软件件开发部的的每个员工工工资增加加1000元后的信息息。SQL>SELECTname员工姓名,salary+1000增加工资FROMEMPWHEREdeptname='软件开发部部';多表查询多表查询是是指查询结结果要从两两个以上的的表中检索索结果。【例】查询员工““刘紫羽””所在的部部门地址。。分析:首先先确定要求求中的关键键字:刘紫紫羽,部门门地址。然然后确定查查询的表有有哪些。““部门名称称”在部门门表DEPT中,但是““刘紫羽””是员工名名称,“员员工名称””在表EMP中。所以我我们确定查查询的表涉涉及两个表表:EMP和DEPT。SQL语句如下::SQL>SELECTd.addrFROMEMPe,DEPTdWHERE='刘紫羽';3.5子查询如果某一个个SELECT命令(查询询1)出现在另另一个SQL命令(查询询2)的一个子子句中,则则称查询1是查询2的子查询,,又称为““嵌套查询询”。在SELECT查询语句里里可以嵌入入SELECT查询语句,,称为嵌套套查询。有有些书中将将内嵌的SELECT语句称为““子查询””,子查询询形成的结结果又称为为父查询的的条件。下面是嵌套套查询的格格式:SELECT字段列表FROM表名WHERE操作符(SELECTselect_listFROMtable);简单子查询询【例】查询员工中中所有高于于员工底雪雪洋薪水的的员工信息息。SQL语句如下::SQL>SELECTname,sex,salaryFROMEMPWHEREsalary>=(SELECTsalaryFROMEMPWHEREname='底雪洋');单行子查询询单行子查询询的结果仅仅返回一行行记录。一一般使用比比较运算符符(<、>、<=、>=、<>)。【例】阅读下面的的SQL语句,并解解释其含义义。SQL>SELECTname,sex,salaryFROMEMPWHEREjob=(SELECTjobFROMEMPWHEREname='底雪洋')ANDsalary>(SELECTsalaryFROMEMPWHEREname='李一岚');3.6集合运算3.6.1UNIONUNION是集合的并并运算,并并运算的结结果是参加加运算的集集合元素的的总和,相相当于数学学的加法。。如图3-1所示。其中中集合A和集合B的交叉部分分为集合C。集合A集合B3.6.2INTERSECTINTERSECT是集合的交交运算。交交运算的结结果是参加加运算的集集合元素的的公共元素素。假设:集合合A={1,2,3},集合B={2,3,5},那么执行行INTERSECT运算的结果果是{2,3}。数学符号记记为:A∩B。在SQL语言中它返返回查询结结果中的相相同部分。。【例】找出account、research、sales中都存在的的工种。SQL>SELECTjobFROMaccountINTERSECTSELECTjobFROMresearchINTERSECTSELECTjobFROMsales;3.6.3MINUSMINUS是集合的差差运算。差差运算的结结果是参加加运算的集集合元素中中从第一个个集合中去去掉二者相相同部分元元素后剩余余的元素,,相当于数数学的减法法。假设:集合合A={1,2,3},集合B={2,3,5},那么执行行MINUS运算的结果果是{1}。数学符号记记为:A-B。在SQL语言中它返返回在第一一次查询结结果中而不不在第二次次查询结果果中的记录录。【例】找出在account中存在而在在research中不存在的的工种。SQL>SELECTjobFROMaccountMINUSSELECTjobFROMresearch;3.7聚合函数常用的聚合合函数包括括如下几种种函数:AVG()、MIN()、MAX()、SUM()、COUNT()。1.MAX格式:MAX(x)返回一个字字段的所有有值中的最最大值。如如果x是VARCHAR2数据类型,,返回一个个字符串;;如果x是一个DATE数据类型,,返回一个个日期;如如果x是number数据类型,,返回一个个数字。【例】查询EMP表中的最高高工资。SQL>SELECTmax(salary)AS最高薪水FROMEMP;2.MIN格式:MIN(x)返回一个字字段的所有有值中的最最小值。如如果字段是是空的,函函数MIN()返回空值。。【例】查询EMP表中的最低低工资。SQL>SELECTMIN(salary)AS最少薪水FROMEMP;【例】查询公司中中工资最高高和工资最最低的员工工。SQL>SELECTename,salFROMEMPHAVINGsal=(SELECTMAX(SAL)FROMEMP)ANDsal=(SELECTMIN(SAL)FROMEMP);3.AVG格式:AVG({x}返回指定字字段中的平平均值。注注意,函数数AVG()只能对数值值型字段使使用,即x的数据类型型只能是数数值型,如如果空值即即AVG(''),忽略不计计。缺省设设置为ALL。【例】查询软件开开发部人员员的平均工工资。SQL>SELECTavg(salary)AS平均工资FROMEMPWHEREdeptname='软件开发部部';4.COUNT格式:COUNT(*)返回查询中中行的数目目,缺省值值是ALL,*表示返返回所有的的行。用来来统计一个个表中有多多少条记录录,包括有有空值的记记录。因此此,不需要要指定要被被计算的特特定字段。。【例】统计EMP表目前有多多少条记录录。SQL>SELECTcount(*)AS记录总数FROMEMP;5.SUM格式:SUM(x)返回选择列列表

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论