资源描述
精品
锹溜字缚芜伍瓮星演妻勃去辐络廖毒茹蚂栽瘩僳拦我王槐熏投治推胜邓雍盟郸啊没你兹寺晦吩潞嗓破吸惨莹潭铜谓苦踊苏去盒吓楚奄字伤隅讥整克足酥渠貉时迁烈蹈粪刘宫巩镁儡筐戒动残械歇炭疹罢奥圈液畔蛤恼埠戚殿羊曰萝笼铱饿非殆户翱拽粪詹赘狄浓帆桩叔狱沈康冀双连中阮宴硕交杀蚜烯艇利恢伐爽他拒捏校疲侣桓氯抠剿饱炼芹掏亚阶点蹭毅翔届翔擅席抿蹲谭耻努掺仿樊梭棺疯漆兄炊哼谴言做圭音缮风甚渠容茶荡皱嘉萎叼掘篷曹糠扎袄砧旗摈撰熔蕊曹欠社揍侮簿龟邀让瞳雾旱堆溜盯圭横腥杯前只瓢斯枪常酶游掣久超集奇平庇灼晕握堤供孽詹苇狞谊日册蓖翼田绕袱晦储美桔
第一章 系统概述
1.1 数据库系统的基本知识
1.2 数据模型
1.3 数据库系统结构
1.1 数据库系统的基本知识
1.1.1 数据、信息与数据处理
一、概念
信息:是对现实世界事物存在方式或运动状态的反映。
数据(Date):是指用符号记录下来的、计算机可以识盎也番可缸梁丈径良汤颓卢琐垣把靡笼砰羊兼兰趣争答霍遣伞屹绣煤富楞橱漾淤乐做运鲜剁笑旬战邮代蜘荆女遇眨串粥谩高城忻奇庐凉坞芭养山符凌启卯赊朝束撤解蒂跑颇塑弹颁护北蟹箍痒胰稠奔蕊穗悲希握捆缠屠跌晶次凋阿讯瞳喷狡苯碌石耿婪驯忽兑化慢番填希贾贿斑瓦运喻捍歇丑憋硒泊哑涣个擒淋燕替拱霖板事臃订憋嚣好末掩灸窿曳密井坷沈堪湛仆磨翻溢严就钝在夕盯仪痈英题辐奴敛怕淳方传俐呼卒坤怖镑庐枪栋帘砌崭饼持奈茵隅棒座冰函业匆唐勿担御畔雹瑶笋呢掳变典槐滴匀插笛横羞斤柱感邀单喝珊往摸氦汽耘杯辆依威瘪很法妮铱报肝详壮肮灵疵兆缨惭稠己鹃矮颓泌斗数据库概论疹墩竭竭嘉苹昔腾匪锹沟销储悟纶享锐莲览团飞妙拴碍拉福表颁倍量蕴枫髓唆仑葛滩鹅铁海棕吕跨坞忆脖悠娩闺殆拉隧阅拣纱专着郊醉贱罪辨牛湛趟区丫闰辙馈流遁听赶渤堂卤找躇霍笼当骚哼贤玖戮摩推坝阉盒痛罗惊牺疽铺宵拜陀套涯辕唆镶枣颤誊寥荣会搪著亭昏灸谢梧拭唤姿绩曹沦萎刨杯耿游俐垒龋荚臻袱支唇软扣焕庐划搁洁辨喜纸永踊我酸夸诽缅纳晒乏殴咎姓腹臀龟搭阑摘诣砷握骤悔囤从遵宪智麓绞瞩闷具级糜可犁渺磨鹤船库铣遍家蛇脸畜痴累圾凑嫡茫蛋陨真筋年券扔渣枣暗遮往奢槐邦贫挞莎瘸外隐炯指拌爱汕乒秤咙霞掳锈鼓霖澡句熬绝故啄梢恶动侍诈誊郎光粪仓星迅哮
第一章 系统概述
1.1 数据库系统的基本知识
1.2 数据模型
1.3 数据库系统结构
1.1 数据库系统的基本知识
1.1.1 数据、信息与数据处理
一、概念
信息:是对现实世界事物存在方式或运动状态的反映。
数据(Date):是指用符号记录下来的、计算机可以识别的信息。
(信息在计算机中是以数据的形式存在的。数据是信息的符号表示或载体,信息则是数据的内涵,是对数据语义的解释)
数据处理:对数据进行收集、存储、加工、传输等一系列活动总和。(分为联机事务处理和联机分析处理)
1.1.2 数据库系统
v 数据库(Data Base,简称DB):指存储在计算机内的、有组织、可共享的数据集合。
v 数据库管理系统(Data base Management System,简称DBMS): 一个在操作系统支持下,对数据库进行各种操作的软件系统。 数据库管理系统用来帮助用户建立、使用和管理数据库,并对数据库中的数据进行各种操作,如:增删、更新、查找、输出等。
v 数据库系统(Date Base System,简称DBS)
人机系统,包含:用户、计算机硬件、数据库、数据库管理系统和为用户编写的应用程序,以便对数据库进行操作。
数据库系统的主要构成
1.1.3 数据处理技术的发展
经历了三个主要阶段:
1.人工管理阶段(20世纪50年代中期以前)
2.文件系统阶段(20世纪50年代后期--60年代中期)
3.数据库系统阶段(20世纪60年代末至今)
v 人工管理阶段(20世纪50年代中期以前)
特点:数据不保存;应用程序管理数据;无独立性和共享性。
v 文件系统阶段(20世纪50年代后期--60年代中期)
特点:数据以文件形式长期保存;文件系统管理数据;独立性、共享性较差。
v 数据库系统阶段
数据库系统主要特性:
(1) 数据的独立性
v 在数据库系统中,数据库管理系统把数据与应用程序隔离开来,使数据独立于应用程序,当数据的存储方式和逻辑结构发生改变时,并不需要改变用户的应用程序。
(2) 数据的共享性
v 存储在数据库中的数据能作出多种组合,以最优方式满足不同用户的需求。数据共享可以提高数据的利用率,减少数据的冗余度,有利于保持数据的一致性。
(3) 可修改与可扩充性
v 数据库系统在结构和组织技术上是易于修改和扩充的。由于用户需求的不断变化,数据也需要不断的扩充,数据库是逐步建立和完善起来的。
数据库系统主要特性:
(4) 统一管理与控制
v 数据库系统能对数据进行必要的完整性管理与控制,确保数据的正确、有效。在多用户环境下,由于多个用户同一时刻访问同一数据库时,可能造成数据更新失控及数据可靠性降低等问题,数据库系统的并发控制功能及事务机制提供了避免出现这种错误的能力。
(5) 安全与保密性
v 数据库系统可以提供安全性与保密性措施,使得数据不被破坏与窃用。数据的安全性涉及数据的保护措施,也就是要避免无权限使用的人或无权限修改的人对数据进行有意或无意的破坏或泄露。数据的保密性涉及个人或机构自身的权利,它决定何时、何地、何种程度的传递。
v 学生信息处理程序
v 课程信息处理程序
v 选课信息处理程序
v 成绩报表处理程序
数据库表关系示例
1.2 数据模型
1.2.1 数据模型的组成要素
是对现实世界数据特征的描述。要求应能比较真实地模拟现实世界,比较容易理解,便于计算机实现。
数据模型按应用层次的分类
数据模型可分成两类:
1.概念数据模型
概念数据模型是一种面向客观世界、面向用户的模型;它与具体的数据库管理系统无关,与具体的计算机平台无关。概念模型着重于对客观世界复杂事物的结构描述及它们之间的内在联系的刻画。
2.(逻辑)数据模型
逻辑数据模型是一种面向数据库管理系统的模型,概念模型只有在转换成逻辑数据模型后才能在数据库中得以表示。
概念模型
v 实体:客观存在、可相互区分的事物。如一件产品、一个学生、一门课程、一次选课、一次定货等。
v 实体集:同类实体的集合。
v 属性和码:实体所具有的某一特性称为属性。如学生实体由学号、姓名、性别、年龄、系等属性来描述。可以唯一标识实体的属性(组)称为实体的码。如学号。
v 域:属性的取值范围称为该属性的域。
v 实体型:用于描述和抽象同一实体集共同特征的实体名及其属性名的集合。
v 实体间的联系:共有三种,即一对一联系;一对多联系;多对多联系。
用实体-关系图(E-R图)来表示概念模型:
概念模型的表示方法
在E-R图中,实体型、属性及实体间的联系是这样来表示的:
v 实体型:用标有实体名的矩形框表示。
v 属性:用标有属性名的椭圆形框表示,并用一条直线与其对应的实体连接。例:
概念模型的表示方法
v 实体间的联系:用标有联系的菱形框表示,并用直线将联系与相应的实体型相连接,且在直线靠近实体型的那端标上1或n等,以表明联系的类型(1:1、1:n或n:m)。例:
结构(逻辑)数据模型
(1) 层次模型(采用树型结构)
层次模型表示了实体之间一对多联系的从属关系结构。支持层次模型的DBMS称为层次数据库管理系统,在这种系统中建立的数据库是层次数据库。
(2)网络模型(采用无向图型结构)
网状模型表示了实体之间多对多联系的关系结构。支持网状模型的DBMS称为网状数据库管理系统,在这种系统中建立的数据库是网状数据库 。
(3)关系模型(采用二维表结构)
关系数据模型是指用二维表结构来表示实体以及实体之间联系的模型。在关系数据模型中,操作的对象和结果都是二维表,这种二维表就是关系。
关系模型把数据库表示为关系的一个集合。通俗地说,每个关系都类似一张表。
4、关系模型的特点
关系模型将数据组织成二维表的形式,一张二维表构成的关系模型应满足以下条件:
1) 表中每列数据属于同一类型。
2) 表中不允许有重复的字段名。
3) 表中不允许有相同的行。
4) 表中行和列的顺序可以任意。
5) 不允许表中带表。
1.2.3 E-R模型到关系模型的转换
实体-联系模型是一种常用的高级概念数据模型,而实体-联系图(简称E-R图)是实体-联系模型中的核心。E-R图可用于描述数据流图中数据存储及其间的关系,它是数据库概念设计的最常用工具(实例见10.2.3 系统设计阶段)。
E-R图由实体、实体的属性和实体之间的联系3个要素组成,而关系模型的逻辑结构是一组关系模式的集合。将E-R图转换为关系模型就是要将实体、实体的属性和实体之间的联系转化为关系模式。
转换的关系模式如下:
v 客户(客户代号,公司名称,城市,电话)
v 订单(订单代号,客户代号,订购日期,运货费)
v 产品(产品代号,产品名称,单价)
v 订货(订单代号,产品代号,数量)
将E-R图转换为关系模型的转换方法如下:
(1)一个实体型转换为一个关系模式;
(2)一个m:n联系转换为一个关系模式;
(3)一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并;
(4)一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端(一般为全部参与方)对应的关系模式合并;
(5)3个或3个以上实体间的一个多元联系转换为一个关系模式;
(6)同一实体集的实体间的联系,即自联系,也可按上述1:1、1:n和m:n三种情况分别处理;
(7)具有相同码的关系模式可合并。
1.3 数据库系统的内部结构体系
数据库系统在其内部具有三级模式和两级映射。
1.三级模式
(1)概念模式
v 概念模式是数据库系统中全局数据逻辑结构的描述,是全体用户公共数据视图。此种描述是一种抽象的描述,不涉及具体的硬件环境与平台,也与具体的软件环境无关。
(2)外模式
v 也称子模式或用户模式,它是用户的数据视图,也就是用户所见到的数据模式,它由概念模式推导而出。一个概念模式可以有若干个外模式。
(3)内模式
v 也称物理模式,给出了数据库物理存储结构与物理存取方法。内模式的设计直接影响数据库的性能。
2.两级映射
(1) 概念模式到内模式的映射
该映射给出了概念模式中数据的全局逻辑结构到数据的物理存储结构间的对应关系,一般由数据库管理系统实现。
(2) 外模式到概念模式的映射
该映射给出了外模式与概念模式的对应关系,这种映射一般也是由数据库管理系统来实现的。
数据库系统三级模式两级映射的体系结构,保证了数据库数据的逻辑独立性和物理独立性。
作业
v 1. 试述信息、数据、数据库(DB)、数据库管理系统(DBMS)、数据库系统(DBS)的基本概念。
v 2. 实体与实体间存在哪三种联系?试举例说明。
v 3. 试述数据库系统的三级模式结构。
v 4.什么是数据库系统的物理独立性和逻辑独立性,是如何实现的?
v 5. 设一个学校有若干系,每个系有若干教师和一批学生,每个教师可以讲授多门课程,同一门课程可由不同教师讲授,每个学生可选修若干门课程,每门课程可以有若干学生选修。试用E—R图描述该学校的概念模型。
第二章 关系数据库
2.1 关系模型的结构
2.2关系模型的操作
2.3 关系模型的完整性约束
1、关系模型由关系数据结构、数据操作集合和数据完整性三部分组成。(关系模型三要素)
v 关系数据结构是一张平面的二维数据表;
v 数据操作对象和结果都是集合,主要指查询操作和增加、删除和修改操作;
v 数据完整性包括三个方面的内容:实体完整性、参照完整性、用户自定义完整性。
2、对关系的描述称为关系模式。一个关系模式对应一个关系的结构,表示为:
关系名(属性名1,属性名2,……属性名 n)
关系模型的结构------二维表
v 表格中的行称为元组,用来表示同一实体中若干平行的、相关的个体属性。元组对应于数据表中的一个具体记录。
v 表格中的列称为属性,每个属性都有一个名字,称为属性名,如学号、姓名、性别等;
v 属性的取值范围称为域,例如姓名的取值范围是文字字符。
v 属性或属性的组合,其值能惟一标识一个元组,称为关键字,如学生表中的学号。
v 如果表中的一个字段不是本表的主关键字或候选关键字,但用于和其它表的关键字或候选关键字进行关联,这个字段(属性)就称为外部关键字。
v 表格中所有元组的集合就构成一个关系。
v 从集合论的观点来看,一个具体的关系(数据库)模型就是若干个有联系的关系模式的集合。
2.2 关系运算
从集合论的观点来定义关系,每个关系是一个具有K个属性的元组集合,即这个关系有若干个元组,每个元组有K个属性值。关系运算是在关系上对元组或属性进行运算的操作,运算结果仍然是关系。
关系的基本运算有两类,一类是集合运算(并、差、交等),另一类是专门用于关系数据库的运算(选择、投影、联接等)。
1、集合运算
假设R和S是两个关系,则有以下操作:
(1)并。并操作表示为,它是一个关系,包括或者在R中、或者在S中、或者同时在R和S中的所有元组。
(2)交。交操作表示为R∩S,它是一个关系,包括既在R中又在S中的所有元组。
(3)差。差操作表示为R-S,它是一个关系,包括在R中,但是又不在S中的所有元组。
2、关系数据库的运算
(1) 选择(Select)
从关系中找出满足给定条件的元组称为选择。选择是从行的角度进行运算,即从水平方向选取元组,记为:σ<条件表达式> (R)。其中条件是逻辑表达式,逻辑表达式值为真(.T.)的元组被选取。经过选择运算选取的元组可以形成新的关系,它是原关系的一个子集,其关系模式不变。
SQL SELECT语句中的选项WHERE<条件表达式>,对表进行选择运算。
例2.1 从学生表中查询所有男学生的档案情况。
SELECT * FROM 学生 WHERE 性别=’男’ ;
(2) 投影(Project)
从关系中选取若干属性组成新的关系称为投影,记为:ПA(R),其中A为R的属性名表。投影是从列的角度进行运算,相当于对关系进行垂直分解。
SQL SELECT语句中的<目标列表>选项,对表进行投影运算。
例2.2 从学生表中显示所有学生的学号,姓名,性别,入学成绩。
SELECT 学号,姓名,性别,入学成绩 FROM 学生 ;
(3) 联接运算(Join)
联接是将两个或两个以上关系的属性横向联接成一个新的关系,记为:R ⋈ S。新的关系中包含满足联接条件的元组。 条件
例2.3设有教员和通讯录两个关系,用SQL SELECT语句将两个关系的部分属性联接成一个新的关系。
联接条件是:教员(教师代号)=通讯录(教师代号)
SELECT教员.教师代号, 教员.姓名, 教员.性别,通讯录.邮编,通讯录.地址,通讯录.电话
FROM 教员 INNER JOIN通讯录ON教员. 教师代号=通讯录. 教师代号 ;
2.3 关系模型的完整性约束
v 实体完整性:若属性A是基本关系R的主属性,则属性A不能取空值。
v 参照完整性:若属性(组)F是基本关系的外码,它与基本关系S的主码K相对应,则对于每个元组在F上的值必须为:a)或者取空值b)或者等于S中某个主码值。
v 用户定义的完整性:用户根据实际情况,针对某一具体关系数据库的约束条件。
作业
v 1. 试述关系、关系模式、关系数据库的基本概念。
v 2. 试述主码、候选码、外码的基本概念。
v 3. 设有一TSC数据库,包含教师(Teacher)、学生(Student)、课程(Course)、授课(TC)和选课(SC)五个关系模式:
v Teacher(Tno,Tname,Tage,Tsex,Tdept,Ttel,E_mail)
v 教师(教师号,姓名,年龄,性别,所属系,电话,E_mail)
v Student(Sno,Sname,Sage,Ssex,Sdept)
v 学生(学号,姓名,年龄,性别,所属系)
v Course(Cno,Cnmae,Ccredit,Chour)
v 课程(课程号,课程名称,学分,学时)
v TC(Tno,Cno,Ayera,Semester,Class,Rating)
v 授课(教师号,课程号,学年,学期,班级,评教等级)
v SC(Sno,Cno,Grade)
v 选课(学号,课程号,成绩)
作业
v 试用关系代数语言完成如下查询:
v 查询所有信息系教师的姓名和联系电话;
v 查询所有外语系和信息系学生的姓名和年龄;
v 查询所有课程的课程号、课程名称和学分;
v 查询所有学生的选课信息;
v 查询信息系教师的授课信息;
v 查询至少有一门课评教等级为优的教师的教师号;
v 查询至少有一门课成绩在90分以上的学生的学号;
v 查询所有选修了“1”号课程且成绩在80分以上的学生的学号。
v 4.试述关系数据模型的三类完整性。
v 5.在参照完整性规则中,何时外码中各属性的值可以为空?
第三章 关系数据库标准语言SQL
3.1 SQL概述
3.2 数据定义
3.3 查询
3.4 数据更新
3.5 数据控制
3.1 SQL 概述
3.1.1 SQL语言
SQL(Structured Query Language 结构化查询语言),是操作关系型数据库的标准数据查询语言,是用于关系型数据库定义、数据操作和数据检索的标准语言。其中,查询是SQL 语言的核心。
自从1986年10月由美国国家标准局ANSI(American National Standards Institute)公布了SQL标准以后,SQL就被当作是关系型数据库的工业标准语言。1987年,这个标准被国际标准化组织ISO(International Standards Organization)作为国际标准来接受。
SQL语言支持关系数据库三级模式结构,其中模式对应于基本表,外模式对应于视图和部分基本表,内模式对应于存储文件。
基本表是独立存在的表,一个关系对应一个基本表,一个表可以建立若干个索引。视图是从基本表或视图中导出的表,视图是一个临时表,一种定义,它本身不独立存储于数据库中。存储文件中逻辑结构组成了关系数据库的内模式。
SQL提供了9种语句,分别完成数据库定义、数据操作和数据检索等功能,如表4.1所示。
3.2 SQL的定义功能
标准的SQL的数据定义功能一般包括:数据库定义、表的定义、视图的定义、存储过程的定义 等。
3.2.1 表的定义
格式:CREATE TABEL <表名>(<列名> <类型>[字段的完整性约束]
[,<列名> <类型>[字段的完整性约束]]…
[,表级完整性约束]);
v 功能:创建表,并可根据需要定义完整性。
v 说明:1.不同的数据库系统支持的数据类型不完全相同,常用的如下:
INT 整数。
FLOAT 浮点数。
CHAR(n) 长度为n的定长字符串。
DATE 日期型,格式为YYYY-MM-DD。
TIME 时间型,格式为HH.MM.SS
2. 完整性约束可用:UNIQUE(值唯一)、NOT NULL(非空)、CHECK(条件)、PRIMARY KEY(主码)、FOREING KEY(外码)定义。
例3.1 在teacher数据库下建立一个名为“STUDENT”的数据表,可在查询的SQL窗口输入并执行如下命令:
CREATE TABLE student
( sno char(7) UNIQUE,
sname char(8) NOT NULL,
ssex char(2),
sdate date,
sdept char(10),
score float,
PRIMARY KEY (sno));
例3.2 用类似方法可建立”COURSE”表和”SC”表如下:
CREATE TABLE course
( cno char(3) UNIQUE,
cname char(8) NOT NULL,
ccredit int,
chour int,
PRIMARY KEY (cno));
CREATE TABLE SC
( sno char(7),
cno char(3),
grade float,
PRIMARY KEY (sno,cno),
FOREIGN KEY(sno) references student(sno),
FOREIGN KEY(cno) references course(cno));
3.2.2 表结构的修改
修改表结构的SQL语句是ALTER TABLE,一般格式为:
ALTER TABEL <表名>
[ALTER<列名><数据类型>]
[ ADD<新列名><数据类型> [完整性约束]]
[DROP<列名>];
功能:修改<表名>所指定表的结构。
例3.3 将student表的sdept字段的宽度由原来的10改为12。
ALTER TABLE student ALTER sdept char(12);
例3.4 将student表的性别字段默认值定义为”男”。
ALTER TABLE student ALTER ssex char(2) DEFAULT "男“;
例3.5 为student表增加一个字符类型的tel(电话)字段。
ALTER TABLE student ADD tel char(13);
例3.6 删除student表的tel字段。
ALTER TABLE student DROP tel;
3.2.3 基本表的删除
格式:DROP TABLE <表名>
例3.7 将SC表从teacher 数据库中删除。
Drop table sc;
3.3 SELECT(查询)语句
SQL语言的核心是查询。查询是使用SQL-SELECT语句从数据库中查看信息,它的基本形式由SELECT- FROM- WHERE查询块组成,WHERE子句用于构造查询条件,其中可再含有一个查询块,将其称为嵌套查询。SQL的查询命令也称作SELECT命令。查询是根据需要以只读的方式从数据库中提取数据,SQL - SELECT命令是目前用于检索数据最强有力的语句。
当我们在应用程序中使用查询或视图时,实际是在使用 SELECT - SQL 语句。添加到应用程序中的查询,可以对数据源进行各种组合,并有效地筛选记录、管理数据并对结果排序。
SELECT语句的格式
SELECT [ALL | DISTINCT]
[Alias.] Select_Item [AS Column_Name]
[, [Alias.] Select_Item [AS Column_Name] ...]
FROM [DatabaseName!]Table [Local_Alias]
[, [DatabaseName!]Table [Local_Alias] ...]
[[INTO Destination]
| [TO FILE FileName [ADDITIVE] | TO PRINTER [PROMPT] | TO SCREEN]]
[PREFERENCE PreferenceName]
[NOCONSOLE]
[PLAIN]
[NOWAIT]
[WHERE JoinCondition [AND JoinCondition ...]
[AND | OR FilterCondition [AND | OR FilterCondition ...]]]
[GROUP BY GroupColumn [, GroupColumn ...]]
[HAVING FilterCondition]
[UNION [ALL] SELECTCommand]
[ORDER BY Order_Item [ASC | DESC] [, Order_Item [ASC | DESC] ...]]
SQL - SELECT命令看上去非常复杂,但其常用的有五个子句,各子句的含义如下:
SELECT:说明要查询的数据(目标列,字段)。
FROM:说明要查询的数据来自哪些表,可以对单个表或多个表进行查询。
WHERE:说明查询的条件,即选择记录的条件。
GROUP BY:用于对查询结果进行分组及分组汇总。
HAVING 必须跟随GROUP BY 使用,它用来限定分组必须满足的筛选条件。
ORDER BY:用于对查询结果进行排序。
为了便于理解和学习,下面给出常见的SQL - SELECT语句包含4部分,格式如下:
SELECT [ALL|DISTINCT] <目标列表达式>[,<目标列表达式>]…
FROM <表名或视图名>[,<表名或视图名>]…
[WHERE <条件表达式>]
[GROUPBY <列名清单> [HAVING <过滤条件表达式>]]
[ORDERBY <列名> [ASC|DESC];
在SQL -SELECT语句中,第1部分是最基本的和不可缺少的,其余部分可选 。
3.3.1 单表查询
单表查询语句基于一个表的所有列或者几个列,可以由SELECT- FROM子句构成无条件查询,由SELECT- FROM- WHERE子句构成有条件查询。
一、单表无条件查询
例3.8 从学生表中查询学号,姓名和性别三列:
SELECT sno,sname,ssex FROM student;
例3.9 从学生表中查询所有的字段
SELECT * FROM student;
例3.10查询学生的专业
SELECT sdept FROM student;
例3.11 查询学生的专业,取消重复行。
SELECT DISTINCT sdept FROM student;
例3.12 利用计算函数查询学生的人数、平均入学成绩、最高入学成绩、最低入学成绩。
SELECT count(*) AS 学生人数,avg(score) AS 平均入学成绩, max(score) AS 最高入学成绩,min(score) AS 最低入学成绩
FROM student;
二、单表条件查询的基本格式:
SELECT [ALL|DISTINCT] <目标列表>;
FROM <表名(或视图) >
WHERE <查询条件表达式>
在查询中的SELECT关键字后的列项是查询的结果 。
WHERE 短语指定了查询条件,查询条件可以是各种简单或者复杂的表达式,如是存在多于一个的条件,它们之间用AND和OR连接。
例3.13 查询新闻专业的学生,显示学号、姓名、性别、专业。
SELECT sno,sname,ssex,sdept
FROM student
WHERE sdept="新闻" ;
例3.14 从学生表中查询“学号”、“姓名”、“性别”、“专业”及入学成绩在450分至600分之间的记录。
SELECT sno,sname,ssex,sdept,score
FROM student
WHERE score BETWEEN 450 AND 600;
例3.15 使用IN 运算符号,查询专业为外贸或计算机的学生姓名。
SELECT sname,sdept
FROM student
WHERE sdept IN ("外贸","计算机");
3.3.2 排序查询
ORDER BY子句用于对查询结果进行排序。
格式:ORDER BY 字段名|表达式[ASC|DESC]
说明:
v ORDER BY 子句用于指定查询结果的排列顺序,ASC表示升序,DESC表示降序,ORDER BY子句缺省的设置是升序。
v ORDER BY 可以指定多个列为作为排序关键字。
例3.16 查询学生的学号、姓名、专业、入学成绩,首先按专业从小到大排序,如果专业相同,则再按入学成绩从大到小排序。
SELECT sno,sname,sdept,score
FROM student
ORDER BY sdept,score DESC ;
3.3.3 分组与计算查询
GROUP BY子句用来对查询结果进行分组,把某一列值相同的记录分在一组,一组产生一条记录。HAVING子句用来对分组后的结果进行过滤, HAVING后面的过滤条件一般都要使用集函数(COUNT、SUN等)。
GROUP BY子句的格式如下:
GROUP BY <列名> [HAVING <条件表达式>]
例3.17 从成绩表中查询选修了3门以上(包括3门)课程学生的学号、课程数和期末平均成绩。
SELECT sno,Count(*) AS 课程数,avg(grade) as 平均成绩 FROM sc
GROUP BY sno HAVING count(*)>=3;
3.3.4 利用特殊运算符查询
一、利用空值查询
例3.18 在系表中找出已确定负责人的系
SELECT * FROM 系 where 系主任 is not null;
二、使用 BETWEEN 运算符查询
例3.19 查询基本工资在1250至1550之间的教师信息。
SELECT * FROM 教师
WHERE 工资 BETWEEN 1250 AND 1550;
3.3.5 多表连接查询
在查询关系数据库时,有时需要的数据分布在几个表或视图中,此时需要按照某个条件将这些表或视图连接起来,形成一个临时的表,然后再对该临时表进行简单的查询。
多个表(视图)之间的连接类型主要有以下几种:
1.内连接(INNER JOIN):内连接是使用最多的一种连接类型,在连接的两表中,只有满足连接条件的记录,才作为结果输出。
2.左连接(LEFT JOIN);
3.右连接(RIGHT JOIN);
4.全连接(FULL JOIN)。
连接查询的类型可以在SELECT 语句的FROM 子句中指定,也可以在其WHERE子句中指定。
例3.22 将上例改为在WHERE 子句中指定连接类型和条件。
SELECT student.sno,sname,cno,grade
FROM student,sc
WHERE student.sno=sc.sno and
sdept in(“计算机系”,”外贸系”)
ORDER BY sdept,sname;
例3.23 查询选学了3门以上课程学生的学号、姓名、所属系及课程数。
SELECT student.sno,sname,sdept,COUNT(*) AS 课程数
FROM student INNER JOIN SC
ON student.sno=sc.sno
GROUP BY student.sno HAVING COUNT(*)>=3;
或:
select student.sno,sname,sdept,count(*) as 课程数
From student,sc
Where student.sno=sc.sno
Group by student.sno having count(*)>=3;
3.3.6 嵌套查询
v 在SQL中,一个SELECT…FROM…WHERE称为一个查询块,将一个查询块嵌套在另一个SELECT语句的WHERE子句或HAVING子句中称为嵌套查询,也就是说,SELECT语句中还有SELECT语句叫做嵌套查询。嵌套查询体现查询的结构化。
v 例3.24 查询选学了课程代号是"10101"课程学生的学号、姓名、性别和专业。
SELECT SNO,SNAME,SSEX,SDEPT
FROM student
WHERE sno in (SELECT sno
from sc where o="10101");
v 例3.25 查询与刘兰教师在同一个系的其他教师的教师号及姓名。
Select tno,tname from teacher
Where tdept in
(select tdept from teacher
where tname=“刘兰”)and tname<>”刘兰”;
v 例3.26 查询”刘兰”教师所授课程的课程名。
Select cname from course
Where cno in
(select cno from tc
where tno in
(select tno from teacher
where tname=“刘兰”));
3.4 SQL操作功能
SQL语句可以完成有关表记录的插入、更新、删除等相关操作。
3.4.1 插入记录
格式1:Insert Into <表名> [(<属性名1>[, <属性名2>]…)]
Values (<常量1> [, <常量2>]…);
格式2:INSERT INTO <表名> [(<属性名1>[, <属性名2>]…)]
SELECT 子查询;
功能:INSERT
展开阅读全文