![结构化查询语言(SQL)数据功能设计课件_第1页](http://file4.renrendoc.com/view/659837e1e8d22cb144d535920770acee/659837e1e8d22cb144d535920770acee1.gif)
![结构化查询语言(SQL)数据功能设计课件_第2页](http://file4.renrendoc.com/view/659837e1e8d22cb144d535920770acee/659837e1e8d22cb144d535920770acee2.gif)
![结构化查询语言(SQL)数据功能设计课件_第3页](http://file4.renrendoc.com/view/659837e1e8d22cb144d535920770acee/659837e1e8d22cb144d535920770acee3.gif)
![结构化查询语言(SQL)数据功能设计课件_第4页](http://file4.renrendoc.com/view/659837e1e8d22cb144d535920770acee/659837e1e8d22cb144d535920770acee4.gif)
![结构化查询语言(SQL)数据功能设计课件_第5页](http://file4.renrendoc.com/view/659837e1e8d22cb144d535920770acee/659837e1e8d22cb144d535920770acee5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五
章
结构化查询语言(SQL)
1第五章
结构化查询语言(SQL)1本章目录第一节SQL概述第二节数据定义功能第三节数据操纵功能第四节数据查询功能
2本章目录第一节SQL概述2
SQL全称是“结构化查询语言(StructuredQueryLanguage)”,是IBM公司为其关系数据库管理系统开发的一种查询语言。
StructuredQueryLanguage包含4个部分:
数据查询语言DQL-DataQueryLanguage:SELECT
数据操纵语言DML-DataManipulationLanguage:INSERT,UPDATE,DELETE
数据定义语言DDL-DataDefinitionLanguage:CREATE,ALTER,DROP
数据控制语言DCL-DataControlLanguage:GRANT(授权),ERVOKE
(收回权限)第一节SQL概述3SQL全称是“结构化查询语言(StructuredQueSQL语言的特点1、SQL语言是一种一体化语言:它集数据定义(DDL)、数据操纵(DML)、数据管理(DCL)的功能于一体,语言风格统一,可以独立完成数据库的全部操作,包括定义关系模式、录入数据及建立数据库、查询、更新、维护数据、数据库的重新构造、数据库安全性等一系列操作的要求,为数据库应用系统开发者提供了良好的环境。2.高度非过程化3.以同一种语法结构提供两种使用方式4.语言简洁,易学易用。4SQL语言的特点4数据定义语言DDL用于执行数据定义的操作,如创建或删除表、索引和视图之类的对象。由CREATE、DROP、ALTER命令组成,完成数据库对象的建立(CREATE)、删除(DROP)和修改(ALTER)。一、定义(创建)表【格式】CREATETABLE|DBF<表名1>(<字段名1><类型>[(<宽度>[,<小数位数>])][NULL|NOTNULL][CHECK<条件表达式>[ERROR<出错显示信息>]][DEFAULT<表达式>][,<字段名2>…])[PRIMARYKEY|UNIQUE][REFERENCES<表名2>[TAG<标识1>]]
【功能】定义(也称创建)一个表。第二节
数据定义功能5数据定义语言DDL用于执行数据定义的操作,如创建或删除表、索数据类型说明
6数据类型说明6【例5-1】创建一个表STUD(学生信息表),它由以下字段组成:学号(C,10);姓名(C,8);性别(C,2);班级名(C,10);系别代号(C,2);地址(C,50);出生日期(D);是否团员(L);备注(M)。CREATETABLESTUD(学号C(10),姓名C(10),性别C(2),班级名C(10),系别代号C(2),地址C(50),出生日期D,是否团员L,备注M,照片G)LISTSTRUCTURE【例5-2】创建一个表SC(课程成绩表),它由以下字段组成:学号(C,10);课程号(C,2)。CREATETABLESC(学号C(10),课程号C(2))LISTSTRUCTURE7【例5-1】创建一个表STUD(学生信息表),它由以下字段组【例5-3】利用SQL命令建立“图书管理”数据库,其中包含4个表:读者表、作者表、图书表、借书表。操作步骤如下:1.创建数据库:CREATEDATABASE图书管理2.用SQL命令建立“读者”表:CREATETABLE读者(读者编号C(9)NOTNULL;PRIMARYKEY,姓名C(8),性别C(2)CHECK(性别=“;男”OR性别=“女”)DEFAULT“男”,出生日期D,少;数民族否L,籍贯C(10),联系电话C(8),照片G)
说明:该命令在当前打开的图书管理数据库中建立读者表,其中读者编号为主关键字,用CHECK对性别字段值说明了有效性规则,并设定了性别字段默认值为“男”。8【例5-3】利用SQL命令建立“图书管理”数据库,其中包含43.用SQL语句建立“作者”表:CREATETABLE作者(作者编号C(2)PRIMARYKEY,;作者姓名C(10),职称C(10),联系电话C(10),备注M)4.用SQL语句建立“图书”表:CREATETABLE图书(书号C(6)NOTNULLPRIMARYKEY,;作者编号C(2)NOTNULL,书名C(14),价格N(8,2),;数量I,出版社C(18),;FOREIGNKEY作者编号TAG作者编号REFERENCES作者)说明:该命令在当前打开的图书管理数据库中建立图书表,其中书号为主关键字,“FOREIGNKEY作者编号”表示在该表的“作者编号”字段上建立了一个普通索引,同时说明该字段是联接字段,通过引用作者表中的主索引“作者编号”(TAG作者编号REFERENCES作者)与作者表建立联系。93.用SQL语句建立“作者”表:95.用SQL语句建立“借书”表:CREATETABLE借书(读者编号C(6)NOTNULL,读者姓名
C(10),书号C(6),借书日期DDEFAULTDATE(),还书日期DNULL,;FOREIGNKEY读者编号TAG读者编号REFERENCES读者,;FOREIGNKEY书号TAG书号REFERENCES图书)
说明:该命令在当前打开的图书管理数据库中建立借书表,其中“FOREIGNKEY读者编号”在该表的“读者编号”字段上建立了一个普通索引,同时说明该字段是联接字段,通过引用读者表中的主索引“读者编号”(TAG读者编号REFERENCES读者)与读者表建立联系。这里要注意:“FOREIGNKEY读者编号TAG读者编号REFERENCES读者”语句中前后两个“读者编号”的含义不同。
10106.执行完以上命令后可以在数据库设计器中看到如图5-1所示界面。
图5-1数据库设计器—图书管理
116.执行完以上命令后可以在数据库设计器中看到如图5-1所示界【格式1】ALTERTABLE<表名>[ADD|ALTER<新字段名><数据类型>[(<宽度>[,<小数位数>])][NULL|NOTNULL][CHECK<条件表达式>[ERROR<出错显示信息>]][DEFUAULT<表达式1>][PRIMARYKEY|UNIQUE]REFERECES<表名2>[TAG<标识1>]]【功能】修改表结构。【说明】ADD子句用于增加指定表的字段变量名、数据类型、宽度和完整性约束条件;ALTER子句用于修改指定字段的数据类型、宽度和完整性约束条件;但不能用于修改字段名,不能删除字段和规则。【例5-4】在课程成绩表SC中,增加一个成绩字段变量(N,3)。ALTERTABLESCADD成绩N(3)LISTSTRUCTURE二、修改表12【格式1】ALTERTABLE<表名>[ADD|A命令格式2:ALTERTABLE<表名>ALTER<字段名>[NULL|NOTNULL][SETCHECK<条件表达式>[ERROR<出错显示信息>]][SETDEFUAULT<表达式1>][DROPCHECK][DROPDEFUAULT]【功能】设置、修改和删除字段的有效性规则及默认值。命令格式3:ALTERTABLE<表名>[DROP<字段名>][SETCHECK<条件表达式>[ERROR<出错显示信息>]][DROPCHECK][ADDPRIMARYKEY<表达式>TAG<标识名>][DROPPRIMARYKEY][ADDFOREINGKEY<表达式>TAG<标识名>][DROPFOREINGKEY<表达式>TAG<标识名>][SAVE][RENAMECOLUMN<原字段名>TO<新字段名>【功能】删除字段、修改字段名、包括主索引、普通索引与关联字段、候选索引及有效性规则的添加与删除。其中加入SAVE参数将阻止从结构索引中删除索引标识.13命令格式2:ALTERTABLE<表名>13【例5-5】修改表结构综合练习。(1)创建数据库和数据库表CREATEDATABASEtempbaseCREATETABLEtemp1(aaC(2),bbN(5,2),ddD)CREATETABLEtemp2(aa1C(2),bb1N(5,2),dd1I)(2)以字段aa为索引表达式为表temp1增加一个主索引,索引标识为aa_keyALTERTABLEtemp1ADDPRIMARYKEYaaTAGaa_key(3)以字段aa1为索引表达式给表temp2增加一个普通索引,索引标识aa1_key;并且将表temp1的索引aa_key作为temp2关联字段。ALTERTABLEtemp2ADDFOREIGNKEYaa1TAGaa1_key;REFERENCEStemp1TAGaa_key
14【例5-5】修改表结构综合练习。14(4)将表temp1中“dd”的字段名改为“cc”
ALTERTABLEtemp1RENAMECOLUMNddTOcc
(5)删除表temp2中字段名为“dd1”的字段
ALTERTABLEtemp2DROPdd1(6)将(3)所建的普通索引的关联字段删除。
ALTERTABLEtemp2DROPFOREIGNKEYTAGaa1_key;SAVE(7)将(3)所建的普通索引删除。
ALTERTABLEtemp2DROPFOREIGNKEYTAGaa1_key注意:增加普通索引时,必须同时指明与它关联的字段。
15(4)将表temp1中“dd”的字段名改为“cc”15
三、删除表【格式】DROPTALBE<表名>【功能】删除指定表的结构和内容(包括在此表上建立的索引)。【说明】如果只是想删除一个表中的所有记录,则应使用DELETE语句。16三、删除表16
数据操纵语言是完成数据操作的命令,一般分为两种类型的数据操纵,它们统称为DML:●
数据检索(常称为查询):寻找所需的具体数据。●数据修改:添加、删除和改变数据。数据操纵语言一般由INSERT(插入)、DELETE(删除)、UPDATE(更新),SELETE(检索,又称查询)等组成,由于SELETE比较特殊,所以一般又将它以查询(检索)语言单独出现。第三节数据操纵功能17数据操纵语言是完成数据操作的命令,一般分为两种类型【格式1】INSERTINTO<表名>[<字段名表>]VALUES(<表达式表>)【格式2】INSERTINTO<表名>FROMARRAY<数组名>|FROMMEMVAR【功能】在指定的表文件末尾追加一条记录。格式1用表达式表中的各表达式值赋值给<字段名表>中的相应的各字段。格式2用数组或内存变量的值赋值给表文件中各字段。【说明】如果某些字段名在INTO子句中没有出现,则新记录在这些字段名上将取空值(或默认值)。但必须注意的是,在表定义说明了NOTNULL的字段名不能取空值。一、插入记录18【格式1】INSERTINTO<表名>[<字段名<字段名表>:指定表文件中的字段,缺省时,按表文件字段的顺序依次赋值。<表达式表>:指定要追加的记录各个字段的值。【例5-6】在表文件STUD的末尾追加三条记录。***用表达式方式追加第一条记录***INSERTINTOSTUD(学号,姓名,性别,班级名,系别代号,地址,出生日期,是否团员)VALUES("011110","李建国","男","计0121","01","湖北武汉",{^2009-02-28},.T.)19<字段名表>:指定表文件中的字段,缺省时,按表文件字段的顺序DIMENSIONDATA(8)DATA(1)="011103"DATA(2)="李宁"DATA(3)="女"DATA(4)="电0134"DATA(5)="02"DATA(6)="江西九江"DATA(7)={^2005-06-08}DATA(8)=.F.INSERTINTOSTUDFROMARRAYDATA***用数组方式追加第二条记录***20DIMENSIONDATA(8)***用数组方式追加第二学号="011202"姓名="赵娜"性别="女"班级名="英0112"系别代号="03"地址="广西南宁"出生日期={^2002-01-12}是否团员=.F.INSERTINTOSTUDFROMMEMVARLIST***用内存变量方式追加第三条记录***21学号="011202"***用内存变量方式追加第三条记录**【格式】UPDATE<表文件名>SET<字段名1>=<表达式>[,<字段名2>=<表达式>…][WHERE<条件>]【功能】更新指定表文件中满足WHERE条件子句的数据。其中SET子句用于指定列和修改的值,WHERE用于指定更新的行,如果省略WHERE子句,则表示表中所有行。【说明】更新操作又称为修改操作。【例5-7】将成绩表(SC)中,所有课程号为02的成绩各加5分。
UPDATESCSET成绩=成绩+5;
WHERE课程号="02"二、更新记录命令22【格式】UPDATE<表文件名>SET<字段名1>=<三、删除记录【格式】DELETEFROM<表名>WHERE<表达式>【功能】从指定的表中删除满足WHERE子句条件的所有记录。如果在DELETE语句中没有WHERE子句,则该表中的所有记录都将被删除。【说明】这里的删除是逻辑删除,即在删除的记录前加上一个删除标记“*”。【例5-8】删除STUD表中所有性别为男的记录。
DELETEFROMSTUD;WHERE性别=“男”23三、删除记录【格式】DELETEFROM<表名>第四节数据查询功能
数据库中的数据很多时侯是为了查询的,因此,数据查询是数据库的核心操作。而在SQL语言中,查询语言中有一条查询命令,即SELECT语句。命令格式:SELECT[ALL|DISTINCT][<别名>.]<选项>[[AS<显示列名>][,[<别名>.]<选项 >……] FROM<表名>[<别名>][,<表名>[<别名>]……] [WHERE<条件表达式>][AND<条件表达式>……] [GROUPBY<分组选项>[,<分组选项>……]] [HAVING<组条件表达式>] [ORDERBY<排序选项>[ASC|DESC][,<排序选 >[ASC|DESC]……]]功能:查询满足条件的记录数据。24第四节数据查询功能数据库中的数据很多时侯是一、基本查询语句【格式】SELECT[ALL|DISTINCT]<选项>[AS<显示列名>]
……
FROM<表>
【功能】无条件查询。【说明】ALL:表示显示全部查询记录,包括重复记录。
DISTINCT:表示显示无重复结果的记录。【例5-9】显示STUD(学生信息数据表)中的所有记录。SELECT*FROMSTUD命令中的*表示输出显示所有的字段,数据来源是STUD表,表中的内容以浏览方式显示。【例5-10】显示STUD(学生信息数据表)中的所有的学号及与之对应的姓名,同时能去除重名。SELECTDISTINCT学号,姓名FROMSTUD25一、基本查询语句25【例5-11】显示SC(课程成绩表)中的所有记录,并将成绩一项乘以0.7。SELECT学号,课程号,成绩*0.7AS成绩;FROMSC二、带条件(WHERE)的查询语句【格式】SELECT[ALL|DISTINCT]<字段列表>
FROM<表>[WHERE<条件表达式>]【功能】从一个表中查询满足条件的数据。【说明】<条件表达式>由一系列用AND或OR连接的条件表达式组成,条件表达式的格式可以是以下几种:26【例5-11】显示SC(课程成绩表)中的所有记录,并将成绩(1)<字段名1><关系运算符><字段名2>。(2)<字段名><关系运算符><表达式>。(3)<字段名><关系运算符>ALL(<子查询>)(4)<字段名><关系运算符>ANY|SOME(<子查询>)(5)<字段名>[NOT]BETWEEN<起始值>AND<终止值>(6)[NOT]EXISTS(<子查询>)(7)<字段名>[NOT]IN<值表>(8)<字段名>[NOT]IN(<子查询>)(9)<字段名>[NOT]LINK<字符表达式>27(1)<字段名1><关系运算符><字段名2>。27
WHERE子句中的条件运算符
28WHERE子句中的条件运算符28SQL支持的关系运算符如下:=、<>、!=、#、==、>、>=、<、<=。【例5-12】显示STUD表中所有男生记录的学号,姓名和性别字段值。
SELECT学号,姓名,性别;FROMSTUDWHERE性别="男"【例5-13】显示STUD表中出生日期在85~86年之间的学生的学号,姓名,出生日期。SELECT学号,姓名,出生日期;FROMSTUD;WHERE出生日期BETWEEN{^1985-01-01}AND{^1986-12-31}29SQL支持的关系运算符如下:29【例5-14】显示STUD表中姓李的学生的学号,姓名,出生日期。SELECT学号,姓名,出生日期;FROMSTUD;WHERE姓名LIKE“李%”30【例5-14】显示STUD表中姓李的学生的学号,姓名,三、SQL的复杂查询1.多表查询
在一个数据库中的多个表之间一般都存在着某些联系,在一个查询语句中同时涉及到两个或两个以上的表时,这种查询称之为连接查询(也称为多表查询)。在多表之间查询必须处理表与表之间的连接关系。连接查询命令的格式一:格式:SELECT[ALL|DISTINCT]<字段列表>
FROM<表1>[,表2…..]
WHERE<联接条件>AND<过滤条件>
31三、SQL的复杂查询1.多表查询31连接方式:1)等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。方法是首先在表1中找到第1个元组,然后从头开始扫描表2,逐一查找满足连接条件的元组,找到后就将表1中的第1个元组与该元组拼接起来,形成结果表中一个元组。表2全部查找完后,再找表1中第2个元组,然后再从头开始扫描表2,逐一查找满足连接条件的元组,找到后就将表1中的第2个元组与该元组拼接起来,形成结果表中一个元组。重复上述操作,直到表1中的全部元组都处理完毕为止。
例:
查询每个学生及其选修课程的情况。
学生情况存放在Student表中,学生选课情况存放在SC表中,所以本查询实际上涉及Student与SC两个表。这两个表之间的联系是通过公共属性xh实现的。
SELECTStudent.*,SC.*
FROMStudent,SC
WHEREStudent.xh=SC.xh*将Student与SC中同一学生的元组连接起来2)非等值连接:在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。
32连接方式:32【例5-15】显示计算机系学生的成绩。SELECTa.姓名,a.系别代号,c.课程名,b.成绩;FROM学生a,选课b,课程c;WHEREa.学号=b.学号ANDb.课程号=c.课程号ANDa.系别代号="04"【例5-16】显示成绩在80至90之间的学号,姓名,课程名和成绩。SELECTa.姓名,c.课程名,b.成绩;FROM学生a,选课b,课程c;WHEREa.学号=b.学号ANDb.课程号=c.课程号ANDb.成绩BETWEEN80AND9033【例5-15】显示计算机系学生的成绩。332.连接问题在SQL语句中,在FROM子句中提供了一种称之为连接的子句,连接分为内连接和外连接,外连接又可分为左外连接、右外连接和全外连接。(1)内连接(INNERJOIN)内连接是指包括符合条件的每个表的记录,也称之为全记录操作。而上面两个例子就是内连接。【例5-17】查询并显示各个学生的学号,所学课程及课程成绩。
SELECTa.学号,b.课程名,a.成绩;FROM选课aINNERJOIN课程bONa.课程号=b.课程号342.连接问题34(2)外连接外连接是指把两个表分为左右两个表。右外连接是指连接满足条件右侧表的全部记录。左外连接是指连接满足条件左侧表的全部记录。全外连接是指连接满足条件表的全部记录。左外连接:左向外联接的结果集包括LEFTOUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。在FROM子句中可由以下关键字指定:
LEFTJOIN或LEFTOUTERJOIN。右外联接:RIGHTJOIN或RIGHTOUTERJOIN。
右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
全外联接:FULLJOIN或FULLOUTERJOIN。
全外联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。35(2)外连接353.嵌套查询在SQL语句中,一个SELECT-FROM-WHERE语句称为一个查询块。将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询或子查询。【例5-18】显示“张彬”所在班级的学生名单。SELECT学号,姓名,班级名;FROM学生;WHERE班级名=(SELECT班级名FROM学生;WHERE姓名="张彬")363.嵌套查询364.排序、分组与统计查询【格式】SELECT[ALL|DISTINCT]<字段列表>
FROM<表>[WHERE<条件>][GROUPBY<分类字段列表>…][HAVING<过滤条件>][ORDERBY<排序项>[ASC|DESC]]【功能】包括有排序、分组和函数运算的查询问题。374.排序、分组与统计查询37【例5-19】按出生日期降序显示STUD表中的学号,姓名,出生日期。SELECT学号,姓名,出生日期;FROM学生;ORDERBY出生日期DESC【例5-20】按班级分类显示学生的姓名,课程名,成绩,同一班级按分数排序。SELECTa.姓名,a.班级名,c.课程名,b.成绩;FROM学生a,选课b,课程c;WHEREa.学号=b.学号ANDb.课程号=c.课程号;ORDERBYa.班级名,b.成绩38【例5-19】按出生日期降序显示STUD表中的学号,姓名,出【例5-21】显示各班总人数。SELECT班级名,COUNT(班级名)AS总人数;FROM学生;GROUPBY班级名【例5-22】列出平均分80分以上的课程号和该课程的平均成绩。SELECT课程号,AVG(成绩)AS平均成绩
FROM选课GROUPBY课程号;HAVINGAVG(成绩)>=8039395.输出合并
SQL命令的输出合并功能是由UNION子句实现的,其含义是将两个SELECT命令的查询结果合并成一个查询结果。子句格式:[UNION[ALL]<SELECT命令>]
其中ALL表示结果全部合并。若没有ALL,则重复的记录将被自动取掉。合并的规则是:(1)不能合并子查询的结果。(2)两个SELECT命令必须输出同样的列数。(3)两个表各相应列出的数据类型必须相同,数字和字符不能合并。(4)仅最后一个SELECT命令中可以用ORDERBY子句,且排序选项必须用数字说明。405.输出合并40【例5-23】对读者数据表中列出籍贯为湖南、湖北的所有读者编号与姓名。SELECT读者编号,姓名FROM读者;WHERE籍贯="湖南"
UNIONSELECT读者编号,姓名;FROM读者WHERE籍贯="湖北"【例5-24】显示选修了英语或数学科目的学生学号。SELECT学号,课程号FROM选课;WHERE课程号="01"
UNION;SELECT学号,课程号;FROM选课;WHERE课程号="02"41【例5-23】对读者数据表中列出籍贯为湖南、湖北的所有读者编6.重定向输出默认情况下,查询输出到一个浏览窗口,用户在“SELECT”语句中可使用[INTO<目标>|TOFILE<文件名>|TOSCREEN|TOPRINTER]子句选择查询去向:INTOARRAY数组名:将查询结果保存到一个数组中。CURSOR<临时表名>:将查询结果保存到一个临时表中。DBF|TABLE<表名>:将查询结果保存到一个永久表中。TOFILE<文件名>[ADDITIVE]:将查询结果保存到文本文件中。如果带“ADDITIVE”关键字,查询结果以追加方式添加到<文件名>指定的文件,否则,以新建或覆盖方式添加到<文件名>指定的文件。TOSCREEN:将查询结果保在屏幕上显示。TOPRINTER:将查询结果送打印机打印。426.重定向输出42【例5-25】显示选修了01课程而没有选修02课程学生的名单。将查询结果保存到aaa.txt文本文件中。SELECT学号;FROM选课;WHERE课程号="01"AND学号NOTIN;(SELECT学号FROM选课WHERE课程号="02");TOFILEaaa
43【例5-25】显示选修了01课程而没有选修02课程学生的名单结束44结束442-3:452-3:45第五
章
结构化查询语言(SQL)
46第五章
结构化查询语言(SQL)1本章目录第一节SQL概述第二节数据定义功能第三节数据操纵功能第四节数据查询功能
47本章目录第一节SQL概述2
SQL全称是“结构化查询语言(StructuredQueryLanguage)”,是IBM公司为其关系数据库管理系统开发的一种查询语言。
StructuredQueryLanguage包含4个部分:
数据查询语言DQL-DataQueryLanguage:SELECT
数据操纵语言DML-DataManipulationLanguage:INSERT,UPDATE,DELETE
数据定义语言DDL-DataDefinitionLanguage:CREATE,ALTER,DROP
数据控制语言DCL-DataControlLanguage:GRANT(授权),ERVOKE
(收回权限)第一节SQL概述48SQL全称是“结构化查询语言(StructuredQueSQL语言的特点1、SQL语言是一种一体化语言:它集数据定义(DDL)、数据操纵(DML)、数据管理(DCL)的功能于一体,语言风格统一,可以独立完成数据库的全部操作,包括定义关系模式、录入数据及建立数据库、查询、更新、维护数据、数据库的重新构造、数据库安全性等一系列操作的要求,为数据库应用系统开发者提供了良好的环境。2.高度非过程化3.以同一种语法结构提供两种使用方式4.语言简洁,易学易用。49SQL语言的特点4数据定义语言DDL用于执行数据定义的操作,如创建或删除表、索引和视图之类的对象。由CREATE、DROP、ALTER命令组成,完成数据库对象的建立(CREATE)、删除(DROP)和修改(ALTER)。一、定义(创建)表【格式】CREATETABLE|DBF<表名1>(<字段名1><类型>[(<宽度>[,<小数位数>])][NULL|NOTNULL][CHECK<条件表达式>[ERROR<出错显示信息>]][DEFAULT<表达式>][,<字段名2>…])[PRIMARYKEY|UNIQUE][REFERENCES<表名2>[TAG<标识1>]]
【功能】定义(也称创建)一个表。第二节
数据定义功能50数据定义语言DDL用于执行数据定义的操作,如创建或删除表、索数据类型说明
51数据类型说明6【例5-1】创建一个表STUD(学生信息表),它由以下字段组成:学号(C,10);姓名(C,8);性别(C,2);班级名(C,10);系别代号(C,2);地址(C,50);出生日期(D);是否团员(L);备注(M)。CREATETABLESTUD(学号C(10),姓名C(10),性别C(2),班级名C(10),系别代号C(2),地址C(50),出生日期D,是否团员L,备注M,照片G)LISTSTRUCTURE【例5-2】创建一个表SC(课程成绩表),它由以下字段组成:学号(C,10);课程号(C,2)。CREATETABLESC(学号C(10),课程号C(2))LISTSTRUCTURE52【例5-1】创建一个表STUD(学生信息表),它由以下字段组【例5-3】利用SQL命令建立“图书管理”数据库,其中包含4个表:读者表、作者表、图书表、借书表。操作步骤如下:1.创建数据库:CREATEDATABASE图书管理2.用SQL命令建立“读者”表:CREATETABLE读者(读者编号C(9)NOTNULL;PRIMARYKEY,姓名C(8),性别C(2)CHECK(性别=“;男”OR性别=“女”)DEFAULT“男”,出生日期D,少;数民族否L,籍贯C(10),联系电话C(8),照片G)
说明:该命令在当前打开的图书管理数据库中建立读者表,其中读者编号为主关键字,用CHECK对性别字段值说明了有效性规则,并设定了性别字段默认值为“男”。53【例5-3】利用SQL命令建立“图书管理”数据库,其中包含43.用SQL语句建立“作者”表:CREATETABLE作者(作者编号C(2)PRIMARYKEY,;作者姓名C(10),职称C(10),联系电话C(10),备注M)4.用SQL语句建立“图书”表:CREATETABLE图书(书号C(6)NOTNULLPRIMARYKEY,;作者编号C(2)NOTNULL,书名C(14),价格N(8,2),;数量I,出版社C(18),;FOREIGNKEY作者编号TAG作者编号REFERENCES作者)说明:该命令在当前打开的图书管理数据库中建立图书表,其中书号为主关键字,“FOREIGNKEY作者编号”表示在该表的“作者编号”字段上建立了一个普通索引,同时说明该字段是联接字段,通过引用作者表中的主索引“作者编号”(TAG作者编号REFERENCES作者)与作者表建立联系。543.用SQL语句建立“作者”表:95.用SQL语句建立“借书”表:CREATETABLE借书(读者编号C(6)NOTNULL,读者姓名
C(10),书号C(6),借书日期DDEFAULTDATE(),还书日期DNULL,;FOREIGNKEY读者编号TAG读者编号REFERENCES读者,;FOREIGNKEY书号TAG书号REFERENCES图书)
说明:该命令在当前打开的图书管理数据库中建立借书表,其中“FOREIGNKEY读者编号”在该表的“读者编号”字段上建立了一个普通索引,同时说明该字段是联接字段,通过引用读者表中的主索引“读者编号”(TAG读者编号REFERENCES读者)与读者表建立联系。这里要注意:“FOREIGNKEY读者编号TAG读者编号REFERENCES读者”语句中前后两个“读者编号”的含义不同。
55106.执行完以上命令后可以在数据库设计器中看到如图5-1所示界面。
图5-1数据库设计器—图书管理
566.执行完以上命令后可以在数据库设计器中看到如图5-1所示界【格式1】ALTERTABLE<表名>[ADD|ALTER<新字段名><数据类型>[(<宽度>[,<小数位数>])][NULL|NOTNULL][CHECK<条件表达式>[ERROR<出错显示信息>]][DEFUAULT<表达式1>][PRIMARYKEY|UNIQUE]REFERECES<表名2>[TAG<标识1>]]【功能】修改表结构。【说明】ADD子句用于增加指定表的字段变量名、数据类型、宽度和完整性约束条件;ALTER子句用于修改指定字段的数据类型、宽度和完整性约束条件;但不能用于修改字段名,不能删除字段和规则。【例5-4】在课程成绩表SC中,增加一个成绩字段变量(N,3)。ALTERTABLESCADD成绩N(3)LISTSTRUCTURE二、修改表57【格式1】ALTERTABLE<表名>[ADD|A命令格式2:ALTERTABLE<表名>ALTER<字段名>[NULL|NOTNULL][SETCHECK<条件表达式>[ERROR<出错显示信息>]][SETDEFUAULT<表达式1>][DROPCHECK][DROPDEFUAULT]【功能】设置、修改和删除字段的有效性规则及默认值。命令格式3:ALTERTABLE<表名>[DROP<字段名>][SETCHECK<条件表达式>[ERROR<出错显示信息>]][DROPCHECK][ADDPRIMARYKEY<表达式>TAG<标识名>][DROPPRIMARYKEY][ADDFOREINGKEY<表达式>TAG<标识名>][DROPFOREINGKEY<表达式>TAG<标识名>][SAVE][RENAMECOLUMN<原字段名>TO<新字段名>【功能】删除字段、修改字段名、包括主索引、普通索引与关联字段、候选索引及有效性规则的添加与删除。其中加入SAVE参数将阻止从结构索引中删除索引标识.58命令格式2:ALTERTABLE<表名>13【例5-5】修改表结构综合练习。(1)创建数据库和数据库表CREATEDATABASEtempbaseCREATETABLEtemp1(aaC(2),bbN(5,2),ddD)CREATETABLEtemp2(aa1C(2),bb1N(5,2),dd1I)(2)以字段aa为索引表达式为表temp1增加一个主索引,索引标识为aa_keyALTERTABLEtemp1ADDPRIMARYKEYaaTAGaa_key(3)以字段aa1为索引表达式给表temp2增加一个普通索引,索引标识aa1_key;并且将表temp1的索引aa_key作为temp2关联字段。ALTERTABLEtemp2ADDFOREIGNKEYaa1TAGaa1_key;REFERENCEStemp1TAGaa_key
59【例5-5】修改表结构综合练习。14(4)将表temp1中“dd”的字段名改为“cc”
ALTERTABLEtemp1RENAMECOLUMNddTOcc
(5)删除表temp2中字段名为“dd1”的字段
ALTERTABLEtemp2DROPdd1(6)将(3)所建的普通索引的关联字段删除。
ALTERTABLEtemp2DROPFOREIGNKEYTAGaa1_key;SAVE(7)将(3)所建的普通索引删除。
ALTERTABLEtemp2DROPFOREIGNKEYTAGaa1_key注意:增加普通索引时,必须同时指明与它关联的字段。
60(4)将表temp1中“dd”的字段名改为“cc”15
三、删除表【格式】DROPTALBE<表名>【功能】删除指定表的结构和内容(包括在此表上建立的索引)。【说明】如果只是想删除一个表中的所有记录,则应使用DELETE语句。61三、删除表16
数据操纵语言是完成数据操作的命令,一般分为两种类型的数据操纵,它们统称为DML:●
数据检索(常称为查询):寻找所需的具体数据。●数据修改:添加、删除和改变数据。数据操纵语言一般由INSERT(插入)、DELETE(删除)、UPDATE(更新),SELETE(检索,又称查询)等组成,由于SELETE比较特殊,所以一般又将它以查询(检索)语言单独出现。第三节数据操纵功能62数据操纵语言是完成数据操作的命令,一般分为两种类型【格式1】INSERTINTO<表名>[<字段名表>]VALUES(<表达式表>)【格式2】INSERTINTO<表名>FROMARRAY<数组名>|FROMMEMVAR【功能】在指定的表文件末尾追加一条记录。格式1用表达式表中的各表达式值赋值给<字段名表>中的相应的各字段。格式2用数组或内存变量的值赋值给表文件中各字段。【说明】如果某些字段名在INTO子句中没有出现,则新记录在这些字段名上将取空值(或默认值)。但必须注意的是,在表定义说明了NOTNULL的字段名不能取空值。一、插入记录63【格式1】INSERTINTO<表名>[<字段名<字段名表>:指定表文件中的字段,缺省时,按表文件字段的顺序依次赋值。<表达式表>:指定要追加的记录各个字段的值。【例5-6】在表文件STUD的末尾追加三条记录。***用表达式方式追加第一条记录***INSERTINTOSTUD(学号,姓名,性别,班级名,系别代号,地址,出生日期,是否团员)VALUES("011110","李建国","男","计0121","01","湖北武汉",{^2009-02-28},.T.)64<字段名表>:指定表文件中的字段,缺省时,按表文件字段的顺序DIMENSIONDATA(8)DATA(1)="011103"DATA(2)="李宁"DATA(3)="女"DATA(4)="电0134"DATA(5)="02"DATA(6)="江西九江"DATA(7)={^2005-06-08}DATA(8)=.F.INSERTINTOSTUDFROMARRAYDATA***用数组方式追加第二条记录***65DIMENSIONDATA(8)***用数组方式追加第二学号="011202"姓名="赵娜"性别="女"班级名="英0112"系别代号="03"地址="广西南宁"出生日期={^2002-01-12}是否团员=.F.INSERTINTOSTUDFROMMEMVARLIST***用内存变量方式追加第三条记录***66学号="011202"***用内存变量方式追加第三条记录**【格式】UPDATE<表文件名>SET<字段名1>=<表达式>[,<字段名2>=<表达式>…][WHERE<条件>]【功能】更新指定表文件中满足WHERE条件子句的数据。其中SET子句用于指定列和修改的值,WHERE用于指定更新的行,如果省略WHERE子句,则表示表中所有行。【说明】更新操作又称为修改操作。【例5-7】将成绩表(SC)中,所有课程号为02的成绩各加5分。
UPDATESCSET成绩=成绩+5;
WHERE课程号="02"二、更新记录命令67【格式】UPDATE<表文件名>SET<字段名1>=<三、删除记录【格式】DELETEFROM<表名>WHERE<表达式>【功能】从指定的表中删除满足WHERE子句条件的所有记录。如果在DELETE语句中没有WHERE子句,则该表中的所有记录都将被删除。【说明】这里的删除是逻辑删除,即在删除的记录前加上一个删除标记“*”。【例5-8】删除STUD表中所有性别为男的记录。
DELETEFROMSTUD;WHERE性别=“男”68三、删除记录【格式】DELETEFROM<表名>第四节数据查询功能
数据库中的数据很多时侯是为了查询的,因此,数据查询是数据库的核心操作。而在SQL语言中,查询语言中有一条查询命令,即SELECT语句。命令格式:SELECT[ALL|DISTINCT][<别名>.]<选项>[[AS<显示列名>][,[<别名>.]<选项 >……] FROM<表名>[<别名>][,<表名>[<别名>]……] [WHERE<条件表达式>][AND<条件表达式>……] [GROUPBY<分组选项>[,<分组选项>……]] [HAVING<组条件表达式>] [ORDERBY<排序选项>[ASC|DESC][,<排序选 >[ASC|DESC]……]]功能:查询满足条件的记录数据。69第四节数据查询功能数据库中的数据很多时侯是一、基本查询语句【格式】SELECT[ALL|DISTINCT]<选项>[AS<显示列名>]
……
FROM<表>
【功能】无条件查询。【说明】ALL:表示显示全部查询记录,包括重复记录。
DISTINCT:表示显示无重复结果的记录。【例5-9】显示STUD(学生信息数据表)中的所有记录。SELECT*FROMSTUD命令中的*表示输出显示所有的字段,数据来源是STUD表,表中的内容以浏览方式显示。【例5-10】显示STUD(学生信息数据表)中的所有的学号及与之对应的姓名,同时能去除重名。SELECTDISTINCT学号,姓名FROMSTUD70一、基本查询语句25【例5-11】显示SC(课程成绩表)中的所有记录,并将成绩一项乘以0.7。SELECT学号,课程号,成绩*0.7AS成绩;FROMSC二、带条件(WHERE)的查询语句【格式】SELECT[ALL|DISTINCT]<字段列表>
FROM<表>[WHERE<条件表达式>]【功能】从一个表中查询满足条件的数据。【说明】<条件表达式>由一系列用AND或OR连接的条件表达式组成,条件表达式的格式可以是以下几种:71【例5-11】显示SC(课程成绩表)中的所有记录,并将成绩(1)<字段名1><关系运算符><字段名2>。(2)<字段名><关系运算符><表达式>。(3)<字段名><关系运算符>ALL(<子查询>)(4)<字段名><关系运算符>ANY|SOME(<子查询>)(5)<字段名>[NOT]BETWEEN<起始值>AND<终止值>(6)[NOT]EXISTS(<子查询>)(7)<字段名>[NOT]IN<值表>(8)<字段名>[NOT]IN(<子查询>)(9)<字段名>[NOT]LINK<字符表达式>72(1)<字段名1><关系运算符><字段名2>。27
WHERE子句中的条件运算符
73WHERE子句中的条件运算符28SQL支持的关系运算符如下:=、<>、!=、#、==、>、>=、<、<=。【例5-12】显示STUD表中所有男生记录的学号,姓名和性别字段值。
SELECT学号,姓名,性别;FROMSTUDWHERE性别="男"【例5-13】显示STUD表中出生日期在85~86年之间的学生的学号,姓名,出生日期。SELECT学号,姓名,出生日期;FROMSTUD;WHERE出生日期BETWEEN{^1985-01-01}AND{^1986-12-31}74SQL支持的关系运算符如下:29【例5-14】显示STUD表中姓李的学生的学号,姓名,出生日期。SELECT学号,姓名,出生日期;FROMSTUD;WHERE姓名LIKE“李%”75【例5-14】显示STUD表中姓李的学生的学号,姓名,三、SQL的复杂查询1.多表查询
在一个数据库中的多个表之间一般都存在着某些联系,在一个查询语句中同时涉及到两个或两个以上的表时,这种查询称之为连接查询(也称为多表查询)。在多表之间查询必须处理表与表之间的连接关系。连接查询命令的格式一:格式:SELECT[ALL|DISTINCT]<字段列表>
FROM<表1>[,表2…..]
WHERE<联接条件>AND<过滤条件>
76三、SQL的复杂查询1.多表查询31连接方式:1)等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。方法是首先在表1中找到第1个元组,然后从头开始扫描表2,逐一查找满足连接条件的元组,找到后就将表1中的第1个元组与该元组拼接起来,形成结果表中一个元组。表2全部查找完后,再找表1中第2个元组,然后再从头开始扫描表2,逐一查找满足连接条件的元组,找到后就将表1中的第2个元组与该元组拼接起来,形成结果表中一个元组。重复上述操作,直到表1中的全部元组都处理完毕为止。
例:
查询每个学生及其选修课程的情况。
学生情况存放在Student表中,学生选课情况存放在SC表中,所以本查询实际上涉及Student与SC两个表。这两个表之间的联系是通过公共属性xh实现的。
SELECTStudent.*,SC.*
FROMStudent,SC
WHEREStudent.xh=SC.xh*将Student与SC中同一学生的元组连接起来2)非等值连接:在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。
77连接方式:32【例5-15】显示计算机系学生的成绩。SELECTa.姓名,a.系别代号,c.课程名,b.成绩;FROM学生a,选课b,课程c;WHEREa.学号=b.学号ANDb.课程号=c.课程号ANDa.系别代号="04"【例5-16】显示成绩在80至90之间的学号,姓名,课程名和成绩。SELECTa.姓名,c.课程名,b.成绩;FROM学生a,选课b,课程c;WHEREa.学号=b.学号ANDb.课程号=c.课程号ANDb.成绩BETWEEN80AND9078【例5-15】显示计算机系学生的成绩。332.连接问题在SQL语句中,在FROM子句中提供了一种称之为连接的子句,连接分为内连接和外连接,外连接又可分为左外连接、右外连接和全外连接。(1)内连接(INNERJOIN)内连接是指包括符合条件的每个表的记录,也称之为全记录操作。而上面两个例子就是内连接。【例5-17】查询并显示各个学生的学号,所学课程及课程成绩。
SELECTa.学号,b.课程名,a.成绩;FROM选课aINNERJOIN课程bONa.课程号=b.课程号792.连接问题34(2)外连接外连接是指把两个表分为左右两个表。右外连接是指连接满足条件右侧表的全部记录。左外连接是指连接满足条件左侧表的全部记录。全外连接是指连接满足条件表的全部记录。左外连接:左向外联接的结果集包括LEFTOUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2031年中国印花梭织面料行业投资前景及策略咨询研究报告
- 2025至2031年中国2-甲基吲哚行业投资前景及策略咨询研究报告
- 2025至2030年中国高压疏水扩容器数据监测研究报告
- 吊篮方案施工方案
- 2025至2030年中国环氧陶瓷喷涂机数据监测研究报告
- 2025至2030年中国水质稳定器数据监测研究报告
- 2025至2030年中国氨用压力表数据监测研究报告
- 2025至2030年中国径向磁轴承数据监测研究报告
- 2025年中国青蒿油市场调查研究报告
- 乐昌大烟囱防腐施工方案
- 数学-河南省三门峡市2024-2025学年高二上学期1月期末调研考试试题和答案
- 2025年春新人教版数学七年级下册教学课件
- 《心脏血管的解剖》课件
- 心肺复苏课件2024
- 2025年重症医学科(ICU)护理工作计划
- 2024-2030年中国并购基金行业发展前景预测及投资策略研究报告
- 河道清淤安全培训课件
- 四川省名校2025届高三第二次模拟考试英语试卷含解析
- 2024各科普通高中课程标准
- 《垂体瘤规范化诊治》课件
- 7.3.1印度(第1课时)七年级地理下册(人教版)
评论
0/150
提交评论