文档详情

结构化查询语言SQL语句的使用课件

风***
实名认证
店铺
PPT
2.30MB
约63页
文档ID:202735739
结构化查询语言SQL语句的使用课件_第1页
1/63

第第4章章T-SQL与可编程对象与可编程对象4.1 T-SQL4.1 T-SQL4.2 4.2 视图视图4.3 4.3 存储过程存储过程4.4 4.4 触发器触发器4.4.1 T-SQL1 T-SQL4.4.1.1 T-SQL1.1 T-SQL概述概述 SQL:结构化查询语言(Structure Query Language)关系型数据库管理系统的标准语言:按照ANSI(美国国家标准协会)的规定,最初由IBM公司在七十年代中期开发成功T-SQL语言是微软公司在SQL Server中对SQL扩展1.T-SQL1.T-SQL语言的特点语言的特点 1 1)非过程化)非过程化 面向过程的程序设计语言,必须一步一步地将解题的全过程描述出来,不仅要告诉计算机“做什么”,而且还要告诉计算机“怎么做”非过程化语言,不必描述解决问题的全过程,只需提出“做什么”,至于“如何做”的细节则由语言系统本身去完成并给出操作的结果2 2)两种不同的使用方式)两种不同的使用方式 联机交互方式:SQL语言既可独立使用嵌入程序设计语言中:例如C#程序设计语言中不论使用何种方式,不论使用何种方式,T-SQLT-SQL语言的语法结构基本相同。

语言的语法结构基本相同3)3)高度一体化高度一体化集数据定义语言(DDL)、数据操纵语言(DML)、数据控制语言(DCL)和T-SQL增加的语言元素于一体,可独立完成数据库生命周期的所有活动4)4)语言简洁、易学易用语言简洁、易学易用2.T-SQL2.T-SQL语言的组成元素语言的组成元素数据定义语言数据定义语言DDL(DataDDL(Data Definition Language)Definition Language)定义数据库结构、各对象及属性的语句例如:Creat DATABASE Student数据库操纵语言数据库操纵语言DML(DataDML(Data Manipulation Language)Manipulation Language)实现对数据库基本操作的语句,主要包括查询、插入、修改、删除等数据库控制语言数据库控制语言DCL(DataDCL(Data Control Language)Control Language)保证数据库一致性和完整性T-SQLT-SQL增加的语言元素增加的语言元素 变量、运算符、函数、流程控制语句和注解等3.T-SQL3.T-SQL书写规则书写规则在T-SQL语句中,不区分字母大小写。

为阅读方便,约定:(1)用大写字母书写T-SQL语句中关键字;(2)用小写字母书写语句中的标识符、表达式以及各种参数4.4.注释注释(1)单行注释(2)多行注释/*/4.4.1.2 1.2 数据定义语言数据定义语言DDLDDL 1.数据定义语言用于定义数据库中的对象,包括数据库、表、视图、索引、存储过程、触发器等的建立或修改操作对象操作对象操作方式操作方式创建创建删除删除修改修改使用使用数据库数据库CREATE CREATE DATABASEDATABASEDROP DATABASEDROP DATABASE ALTER ALTER DATABASEDATABASEUSE USE 基本表基本表CREATE TABLECREATE TABLEDROP TABLEDROP TABLEALTER TABLEALTER TABLE视图视图 CREATE VIEWCREATE VIEWDROP VIEWDROP VIEWALTER VIEWALTER VIEW索引索引CREATE INDEXCREATE INDEXDROP INDEXDROP INDEX存储过程存储过程CREATE CREATE PROCEDUREPROCEDUREDROP DROP PROCEDUREPROCEDUREALTER ALTER PROCEDUREPROCEDURE触发器触发器CREATE TRIGGERCREATE TRIGGERDROP TRIGGERDROP TRIGGERALTER TRIGGERALTER TRIGGER表表4-1 SQL4-1 SQL数据定义语言数据定义语言DDLDDL4.4.1.2 1.2 数据定义语言数据定义语言DDLDDL2.2.使用使用SSMSSSMS生成生成SQLSQL脚本脚本(1)(1)右击要生成脚本的数据库对象,在右键菜单右击要生成脚本的数据库对象,在右键菜单中选择中选择“编写编写脚本脚本”-“CreateCreate到到”-“新查询编辑窗口新查询编辑窗口”(2)(2)在在“查询编辑查询编辑”窗口中可查看、复制、保存窗口中可查看、复制、保存脚本脚本(3)(3)使用使用“文件文件”-“打开打开”可打开脚本文件可打开脚本文件1)创建一个数据库SchoolTest;2)数据库主数据文件SchoolTest,物理文件为“D:SchoolTest.mdf”,大小为3MB;3)系统将自动在“D:”中创建大小为1MB、名为“SchoolTest_log.LDF”的日志文件。

例【例4-14-1】创建一个只有一个主数据文件创建一个只有一个主数据文件 SchoolTestSchoolTest的的数据库数据库(不指定该文件的大小)不指定该文件的大小)CREATE DATABASE SchoolTestON(NAME=SchoolTest,FILENAME=D:SchoolTest.MDF)3 3常用常用DDLDDL语句语句 (1)(1)创建数据库语句(创建数据库语句(CREATE DATABASECREATE DATABASE)4.4.1.2 1.2 数据定义语言数据定义语言DDLDDL(2 2)打开和删除数据库语句)打开和删除数据库语句 USE USE 数据库名数据库名/*/*选择当前要操作的数据库选择当前要操作的数据库*/*/USE USE SchoolTestSchoolTestDROP DATABASE DROP DATABASE 数据库名数据库名/*/*删除数据库删除数据库*/*/USE SchoolUSE School-当前数据库必须更改!当前数据库必须更改!DROP DATABASE DROP DATABASE SchoolTest4.4.1.2 1.2 数据定义语言数据定义语言DDLDDL(3 3)建立表语句()建立表语句(CREATE TABLECREATE TABLE)【例【例4-4-2 2】建立学生表建立学生表T_StudentTestT_StudentTest。

CREATE TABLECREATE TABLE T_StudentTestT_StudentTest(StudentCodeStudentCode CHAR(8)NOT NULL UNIQUE,CHAR(8)NOT NULL UNIQUE,StudentNameStudentName VARCHAR(16)NOT NULL,VARCHAR(16)NOT NULL,Sex CHAR(2)NOT NULL,Sex CHAR(2)NOT NULL,LiveInDormLiveInDorm BIT DEFAULT 1,BIT DEFAULT 1,Constraint Constraint StudentPKStudentPK Primary Primary Key(StudentCodeKey(StudentCode)在School数据库中创建一个新的空表T_StudentTest在字段的定义中确定StudentCode、StudentName、Sex不可取空值,LiveInDorm的默认值为1,并将StudentCode设定为主键约束4.4.1.2 1.2 数据定义语言数据定义语言DDLDDL(4 4)删除表语句()删除表语句(DROP TABLEDROP TABLE)【例【例4-34-3】删除删除T_StudentTestT_StudentTest表表 DROP TABLEDROP TABLE T_StudentTest注意注意:删除数据表要十分谨慎,因为当数据表被删除时,里面的数据也被全部删除。

4.4.1.2 1.2 数据定义语言数据定义语言DDLDDL(5 5)建立索引语句)建立索引语句(CREATE INDEX)CREATE INDEX)CREATE INDEX CREATE INDEX 索引名索引名 ON ON 数据表名数据表名(字段字段 ASC|DESC)ASC|DESC)【例【例4-44-4】在在StudentStudent表的姓名(表的姓名(StudentNameStudentName)字段上建字段上建立升序索引立升序索引CREATE INDEXCREATE INDEX NameIndexNameIndex onon Student(StudentNameStudent(StudentName)(6 6)删除索引语句)删除索引语句(DROP INDEX)DROP INDEX)4.4.1.3 1.3 数据操纵语言数据操纵语言DMLDML 数据操纵语言实现对数据的查询和更新,主要语句数据操纵语言实现对数据的查询和更新,主要语句及功能如下:及功能如下:表表4-2 SQL4-2 SQL数据操纵语言数据操纵语言DMLDML命令功能SELECT从一个表或多个表查询数据INSERT向一个表中添加一条记录UPDATE修改表中某一个或几个字段的值DELETE从一个表中删除记录查询数据库表中的数据并返回符合用户查询条件的结果数据。

数据查询语句是SQL语言的核心Select语句由多个子句构成,其语法形式为:SELECT SELECT 字段表字段表FROM FROM 表名表名WHERE WHERE 查询条件查询条件 GROUP BY GROUP BY 分组字段分组字段 HAVING HAVING 分组条件分组条件ORDER BY ORDER BY 字段名字段名 ASC/DESCASC/DESC 表示可选项在书写SELECT语句时,字母大小写意义完全相同语句可以写在若干行上(如上述语法格式中的描述),也可以不换行1 1查询语句查询语句SELECTSELECT 4.4.1.3 1.3 数据操纵语言数据操纵语言DMLDML(1)(1)字段表字段表 字段表位于关键字SELECT后面,这些字段将作为查询的结果被显示使用字段表规则:1)1)字段与字段之间用逗号分隔字段与字段之间用逗号分隔例【例4-54-5】使用使用SELECTSELECT语句查询语句查询StudentStudent表中的学生姓名表中的学生姓名(StudentNameStudentName)和性别()和性别(SexSex)SELECT SELECT StudentNameStudentName,Sex,Sex FROM Student FROM Student 2)2)可以使用通配符可以使用通配符“*”表示表中的所有字段。

表示表中的所有字段例【例4-64-6】使用使用SELECTSELECT语句查询语句查询 StudentStudent表中所有字段表中所有字段的值SELECT *FROM StudentSELECT *FROM Student 4.4.1.3 1.3 数据操纵语言数据操纵语言DMLDML3)如果字段名或表名中含有空格,则该字段名或表名必须用方括号括起4)在字段表中,可以使用以下方式将原字段名以新的字段名显示字段名字段名 AS AS 新字段名新字段名 【例【例4-74-7】显示显示ClassInfoClassInfo表中班级代号,并将表中班级代号,并将ClassCodeClassCode字段改为字段改为Class NumberClass NumberSELECT SELECT ClassCodeClassCode AS Class Number AS Class Number FROM FROM ClassInfoClassInfo 注意注意:字段别名Class Number含有空格,所以用方括号括起来 4.4.1.3 1.3 数据操纵语言数据操纵语言DMLDML(1 1)字段表)字段表5)5)在字段名前可加上一些范围限制,以便进一步优化查询在字段名前可加上一些范围限制,以便进一步优化查询结果。

常用的范围关键字有:结果常用的范围关键字有:TOP n TOP n:显示前:显示前n n条记录条记录TOP m PERCENTTOP m PERCENT :显示前:显示前m%m%的记录的记录例【例4-8】查询查询Course表中的前表中的前3条记录SELECT TOP 3 *FROM CourseSELECT TOP 3 *FROM Course【例【例4-9】查询查询Course表中前表中前30%的记录SELECT TOP 30 PERCENT *FROM CourseSELECT TOP 30 PERCENT *FROM Course4.4.1.3 1.3 数据操纵语言数据操纵语言DMLDML(1 1)字段表)字段表DISTINCTDISTINCT:若多条记录的字段值具有相同数据,只显若多条记录的字段值具有相同数据,只显示一条记录示一条记录例【例4 4-10-10】查询查询CourseCourse表中开课的学院代码表中开课的学院代码AcademyCodeAcademyCode(与所开课程无关)与所开课程无关)SELECT DISTINCT SELECT DISTINCT AcademyCodeAcademyCode FROM Course FROM Course 4.4.1.3 1.3 数据操纵语言数据操纵语言DMLDML(1 1)字段表)字段表6)6)为了增强查询功能,在为了增强查询功能,在SELECTSELECT语句中还可以使用内语句中还可以使用内部聚合函数,它们被用来进行一些简单的统计或计算。

部聚合函数,它们被用来进行一些简单的统计或计算常用统计函数如下表所示常用统计函数如下表所示表4-13 常用聚合函数函数名函数功能AVG(ALL|DISTINCT expression)计算某一字段的平均值(此字段的值必须是数值型)COUNT(ALL|DISTINCT expression)统计某一字段的个数MAX(ALL|DISTINCT expression)查找某一字段的最大值MIN(ALL|DISTINCT expression)查找某一字段的最小值SUM(ALL|DISTINCT expression)计算某一字段的总和(此字段的值必须是数值型)表表4-3 4-3 常用聚合函数常用聚合函数4.4.1.3 1.3 数据操纵语言数据操纵语言DMLDML(1 1)字段表)字段表【例【例4-11】计算学生的总分、平均分、最高分、最低分及计算学生的总分、平均分、最高分、最低分及学生选课数学生选课数SELECT Sum(Grade)as SELECT Sum(Grade)as 总分总分,AvgAvg(Grade)as (Grade)as 平均分平均分,Max(Grade)as Max(Grade)as 最高分最高分,Min(Grade)as Min(Grade)as 最低分最低分,Count(Count(StudentCodeStudentCode)as)as 课程人数课程人数 FROM Grade FROM Grade 表4-13 常用聚合函数4.4.1.3 1.3 数据操纵语言数据操纵语言DMLDML(1 1)字段表)字段表4.4.1.3 1.3 数据操纵语言数据操纵语言DMLDML(1 1)字段表)字段表7 7)使用)使用SELECTSELECT语句复制新表。

在字段名后加上语句复制新表在字段名后加上INTO INTO 表表名可将查询结果复制到一张新表中名可将查询结果复制到一张新表中例【例】将将StudentStudent表中所有记录的学生姓名表中所有记录的学生姓名、出生日期两出生日期两个字段复制一张新表个字段复制一张新表NewTableNewTableSELECT SELECT StudentNameStudentName,BirthDayBirthDay INTO INTO NewTableNewTable FROM Student FROM Student运行后,产生一张表名为NewTable的新表4.4.1.3 1.3 数据操纵语言数据操纵语言DMLDML(1 1)字段表)字段表(2)FROM(2)FROM子句子句 FROM FROM 表名表名1 1,表名,表名2 2,表名,表名n n 1)1)在在FROMFROM子句中,表的先后次序可以任意排列子句中,表的先后次序可以任意排列2)2)FROMFROM子句中若包含多个表名,且不同的表中具有相同的子句中若包含多个表名,且不同的表中具有相同的字段,那么字段,那么SELECTSELECT子句的字段名必须表示成子句的字段名必须表示成 “.”。

例例4-124-12】查询查询StudentStudent表和表和GradeGrade表,报告表,报告StudentCodeStudentCode、StudentNameStudentName、CourseCodeCourseCode和和GradeGradeSELECT SELECT StudentCodeStudentCode,StudentNameStudentName,CourseCodeCourseCode,Grade,Grade FROM Student,GradeFROM Student,Grade 正确语句:正确语句:SELECT SELECT Student.StudentCodeStudent.StudentCode,StudentNameStudentName,CourseCodeCourseCode,Grade ,Grade FROM Student,Grade FROM Student,Grade 4.4.1.3 1.3 数据操纵语言数据操纵语言DMLDML (3)WHERE(3)WHERE子句子句设置查询的条件,它是一个可选的子句在使用时,设置查询的条件,它是一个可选的子句。

在使用时,WHEREWHERE子句必须在子句必须在FROMFROM子句的后面子句的后面WHEREWHERE子句的语法格式:子句的语法格式:WHERE WHERE 查询条件查询条件 查询条件是一个逻辑表达式常用的运算符有:查询条件是一个逻辑表达式常用的运算符有:表4-14 T-SQL中常用的关系和逻辑运算查询条件谓词比较、=、=、=(等于)、(不等于)确定范围BETWEEN AND、NOT BETWEEN AND确定集合IN、NOT IN字符匹配LIKE、NOT LIKE空值IS NULL、IS NOT NULL否定NOT逻辑运算AND、OR【例例4-144-14】查询未住校的女学生的情况查询未住校的女学生的情况SELECT StudentCode,StudentName,Sex,LiveInDormFROM StudentWHERE Sex=女 and LiveInDorm=01)比较和逻辑运算比较和逻辑运算比较运算用于比较两个表达式的值;逻辑运算用来比较运算用于比较两个表达式的值;逻辑运算用来连接多个查询条件连接多个查询条件例例4-134-13】在在StudentStudent表中查询所有女同学的姓名。

表中查询所有女同学的姓名SELECT StudentCode,StudentName,Sex,LiveInDormFROM StudentWHERE Sex=女4.4.1.3 1.3 数据操纵语言数据操纵语言DMLDML2)2)确定范围确定范围BETWEEN BETWEEN AND ANDBETWEEN BETWEEN 值值1 AND 1 AND 值值2:2:查询值在值查询值在值1 1至值至值2 2之间的记录之间的记录 NOT BETWEEN NOT BETWEEN 值值1 AND 1 AND 值值2:2:查询不在指定范围中的记录查询不在指定范围中的记录【例例4-154-15】在在GradeGrade表中查询课程代号(表中查询课程代号(CourseCodeCourseCode)为)为“110001110001”、成绩(、成绩(GradeGrade)在)在7070分到分到9090分之间的学生分之间的学生代号(代号(StudentCodeStudentCode)及成绩SELECT SELECT StudentCodeStudentCode,CourseCodeCourseCode,Grade,Grade FROM GradeFROM GradeWHERE WHERE CourseCodeCourseCode=110001=110001 AND Grade BETWEEN 70 AND 90AND Grade BETWEEN 70 AND 90 此例的此例的WHEREWHERE子句也可改为:子句也可改为:WHERE WHERE CourseCodeCourseCode=110001=110001 AND Grade=70 AND Grade=70 AND Grade=90【例例4-164-16】查询查询StudentStudent表中不在表中不在19861986年到年到19951995年中出生年中出生的学生学号和姓名。

的学生学号和姓名SELECT SELECT StudentCodeStudentCode,StudentNameStudentName,Birthday ,Birthday FROM StudentFROM StudentWHERE Birthday NOT BETWEEN 1986-01-01 AND WHERE Birthday NOT BETWEEN 1986-01-01 AND 1995-12-121995-12-124.4.1.3 1.3 数据操纵语言数据操纵语言DMLDML3)3)确定集合确定集合ININ运算运算使用使用ININ运算可查询某些字段值是否包含在所列出的指定值运算可查询某些字段值是否包含在所列出的指定值的记录的记录.【例例4-174-17】查询查询StudentStudent表中班号(表中班号(ClassCodeClassCode)为)为“153030301153030301”、“153030302153030302”的学生SELECT SELECT StudentCodeStudentCode,StudentNameStudentName,Sex,Sex,ClassCodeClassCodeFROM StudentFROM StudentWHERE WHERE ClasscodeClasscode IN(IN(153030301153030301,153030302153030302)此例的此例的WHEREWHERE子句也可以改为:子句也可以改为:WHERE WHERE ClassCodeClassCode=153030301153030301 OR OR ClassCodeClassCode=153030302153030302 4.4.1.3 1.3 数据操纵语言数据操纵语言DMLDML4)4)字符匹配字符匹配LIKE LIKE 指定字段的值是否包含在给定的字符串中,其结果是满指定字段的值是否包含在给定的字符串中,其结果是满足字符串匹配的数据记录。

足字符串匹配的数据记录通配符通配符“_ _”表示任意单个字符;表示任意单个字符;“%”表示包含零个或表示包含零个或更多字符的任意字符串更多字符的任意字符串例例4-184-18】查询查询CourseCourse表中课程名称(表中课程名称(CourseNameCourseName)中包)中包含含“化学化学”两个字的课程代号(两个字的课程代号(CourseCodeCourseCode)及课程名)及课程名称SELECT SELECT CourseCode,CourseNameCourseCode,CourseName FROM CourseFROM CourseWHERE WHERE CourseNameCourseName LIKE%LIKE%化学化学%4.4.1.3 1.3 数据操纵语言数据操纵语言DMLDML5)5)联接查询联接查询 查询操作中涉及多表的查询也称为联接查询查询操作中涉及多表的查询也称为联接查询可以用两种方法实现可以用两种方法实现:在在WHEREWHERE子句中设置查询条件子句中设置查询条件例【例4-194-19】查询未住校学生的选课及成绩情况查询未住校学生的选课及成绩情况 SELECT SELECT StudentNameStudentName,CourseCodeCourseCode,Grade,Grade,LiveinDormLiveinDormFROM Grade,StudentFROM Grade,StudentWHERE WHERE LiveInDormLiveInDorm=0 AND=0 AND Grade.StudentCodeGrade.StudentCode=Student.StudentCodeStudent.StudentCode4.4.1.3 1.3 数据操纵语言数据操纵语言DMLDML5)5)联接查询联接查询在在FROMFROM子句中使用子句中使用联接关键字联接关键字将表与表联接在一起。

将表与表联接在一起T-SQLT-SQL查询嵌套在语言中使用时,多采用该方法查询嵌套在语言中使用时,多采用该方法 语法格式:法格式:FROM FROM 表表1 1 联接关键字联接关键字 表表2 2 ON ON 表表1.1.字段名字段名1 1 表表2.2.字段名字段名2 2 其中:其中:表表1 1、表、表2 2是被联接的表名;是被联接的表名;字段名是被联接的字段必须有相同的数据类型并包字段名是被联接的字段必须有相同的数据类型并包含同类数据,但不需要有相同的名称含同类数据,但不需要有相同的名称比较运算符:比较运算符:=、=、联接关键字用于确定联接的方式,常用的有联接关键字用于确定联接的方式,常用的有INNER INNER JOIN JOIN(内联接)、(内联接)、LEFT OUTER JOINLEFT OUTER JOIN(左外联接)、(左外联接)、RIGHT OUTER JOINRIGHT OUTER JOIN(右外联接)、(右外联接)、CROSS JOINCROSS JOIN(交(交叉联接);叉联接);4.4.1.3 1.3 数据操纵语言数据操纵语言DMLDMLINNER JOININNER JOININNER JOININNER JOIN:查询结果仅包含两个表中:查询结果仅包含两个表中每对联结匹配的行。

内连接是系统默认的,可以将关键字每对联结匹配的行内连接是系统默认的,可以将关键字INNERINNER省略例例4-204-20】使用内联接查询未住校学生的选课及成绩情况使用内联接查询未住校学生的选课及成绩情况SELECT SELECT StudentNameStudentName,CourseCodeCourseCode,Grade,Grade,LiveinDormLiveinDormFROM Student FROM Student INNER JOININNER JOIN Grade Grade ONON Student.StudentCodeStudent.StudentCode=Grade.StudentCodeGrade.StudentCode WHERE WHERE LiveInDormLiveInDorm=0=0本句的查询结果与本句的查询结果与【例例4-194-19】结果完全相同结果完全相同4.4.1.3 1.3 数据操纵语言数据操纵语言DMLDMLLEFT OUTER JOINLEFT OUTER JOIN左外联接,查询结果除了包含两张左外联接,查询结果除了包含两张表中符合连接条件的记录外,还包含左表(写在关键字表中符合连接条件的记录外,还包含左表(写在关键字LEFT LEFT OUTER JOINOUTER JOIN左边的表)中不符合联接条件、但符合左边的表)中不符合联接条件、但符合WHEREWHERE条条件的全部记录。

件的全部记录例【例4-214-21】使用左外联接查询未住校学生的选课及成绩情况使用左外联接查询未住校学生的选课及成绩情况SELECT SELECT StudentNameStudentName,CourseCodeCourseCode,Grade,Grade,LiveInDormLiveInDormFROM Student FROM Student LEFT OUTER JOINLEFT OUTER JOIN Grade Grade ONON Student.StudentCodeStudent.StudentCode=Grade.StudentCodeGrade.StudentCodeWHERE WHERE LiveInDormLiveInDorm=0=0本句的查询结果中有些记录的本句的查询结果中有些记录的CourseCodeCourseCode和和GradeGrade字段的值字段的值为为NULLNULL,也就是说这些记录是不符合联接条件的(即在,也就是说这些记录是不符合联接条件的(即在GradeGrade中没有找到有相同中没有找到有相同StudentCodeStudentCode的记录),但由于使的记录),但由于使用了左外联接的查询方法,所以左表(用了左外联接的查询方法,所以左表(StudentStudent)中的符合)中的符合WHEREWHERE子句条件的全部记录显示在查询结果中。

子句条件的全部记录显示在查询结果中4.4.1.3 1.3 数据操纵语言数据操纵语言DMLDMLRIGHT OUTER JOINRIGHT OUTER JOIN右外联接,查询结果除了包含右外联接,查询结果除了包含两张表中符合联接条件的记录,还包含右表(写在关键两张表中符合联接条件的记录,还包含右表(写在关键字字RIGHTT OUTER JOINRIGHTT OUTER JOIN右边的表)中不符合联接条件、右边的表)中不符合联接条件、但符合但符合WHEREWHERE条件的全部记录条件的全部记录例【例4-224-22】使用右外联接查询未住校学生的选课及成绩情使用右外联接查询未住校学生的选课及成绩情况SELECT SELECT StudentNameStudentName,CourseCodeCourseCode,Grade,Grade,LiveInDormLiveInDormFROM Student FROM Student RIGHT OUTER JOINRIGHT OUTER JOIN Grade Grade ONON Student.StudentCodeStudent.StudentCode=Grade.StudentCodeGrade.StudentCodeWHERE WHERE LiveInDormLiveInDorm=0=0本句的查询结果与使用内联接完全相同,但含义不同。

结果本句的查询结果与使用内联接完全相同,但含义不同结果相同是由于在表设计时,在表相同是由于在表设计时,在表StudentStudent和和GradeGrade之间通过外键之间通过外键建立了参照完整性约束,表建立了参照完整性约束,表GradeGrade中的所有中的所有StudentCodeStudentCode必须必须是是StudentStudent中出现的值中出现的值4.4.1.3 1.3 数据操纵语言数据操纵语言DMLDML【例【例4-234-23】查询化工学院开设的课程的选修学生和考试成查询化工学院开设的课程的选修学生和考试成绩SELECT Course.CourseCode,Course.CourseName,SELECT Course.CourseCode,Course.CourseName,StudentCode,AcademyName,GradeStudentCode,AcademyName,GradeFROM Grade RIGHT JOIN Course FROM Grade RIGHT JOIN Course ON Grade.CourseCode=Course.CourseCodeON Grade.CourseCode=Course.CourseCodeJOIN Academy ON JOIN Academy ON Course.AcademyCode=Academy.AcademyCodeCourse.AcademyCode=Academy.AcademyCodeWHERE AcademyName=WHERE AcademyName=化工学院化工学院 4.4.1.3 1.3 数据操纵语言数据操纵语言DMLDMLCROSS JOINCROSS JOIN(交叉联接):查询结果是将两个表进行拼接,(交叉联接):查询结果是将两个表进行拼接,即第一个表的每行与第二个表的每一行进行拼接,查询结即第一个表的每行与第二个表的每一行进行拼接,查询结果的行数等于两个表行数之积。

果的行数等于两个表行数之积例例4-244-24】使用交叉联接列出所有学生需选的所有课程情况使用交叉联接列出所有学生需选的所有课程情况SELECT SELECT StudentNameStudentName,CourseCodeCourseCode FROM Student CROSS JOIN Course FROM Student CROSS JOIN Course多表联接嵌套:在多表查询时,所涉及的数据表在多表联接嵌套:在多表查询时,所涉及的数据表在3 3张以张以上,形成联接嵌套嵌套的格式如下:上,形成联接嵌套嵌套的格式如下:FROM FROM 表表1 1 JOIN JOIN 表表2 ON 2 ON 表表1.1.字段字段1 1 表表2.2.字段字段1 1 JOIN JOIN 表表3 ON 3 ON 表表2.2.字段字段2 2 表表3.3.字段字段2 2 JOIN JOIN 表表n ON n ON 表表n-1.n-1.字段字段n n 表表n.n.字段字段nn4.4.1.3 1.3 数据操纵语言数据操纵语言DMLDML【例例4-254-25】查查询询班班号号是是“051011051011”的的学学生生姓姓名名、所所选选课课程名称和成绩。

程名称和成绩使用使用WHEREWHERE子句设置查询条件:子句设置查询条件:SELECT SELECT StudentNameStudentName,CourseNameCourseName,Grade ,Grade FROM Student,FROM Student,Course,GradeCourse,Grade WHERE WHERE Course.CourseCodeCourse.CourseCode=Grade.CourseCodeGrade.CourseCode AND AND Student.StudentCodeStudent.StudentCode=Grade.StudentCodeGrade.StudentCode AND AND ClassCode=ClassCode=153030301153030301 使用联接关键字的语句:使用联接关键字的语句:SELECT SELECT StudentNameStudentName,CourseNameCourseName,Grade,GradeFROM StudentFROM Student JOIN JOIN Grade Grade ONON Student.StudentCode=Grade.StudentCode Student.StudentCode=Grade.StudentCode JOINJOIN Course Course ON ON Grade.CourseCode=Grade.CourseCode=Course.CourseCodeCourse.CourseCodeWHERE WHERE ClassCodeClassCode=153030301=1530303014.4.1.3 1.3 数据操纵语言数据操纵语言DMLDML(3)GROUP BY(3)GROUP BY子句子句 将指定字段中具有相同值的记录合并成一条记录。

将指定字段中具有相同值的记录合并成一条记录语法格式:语法格式:GROUP BY GROUP BY 分组字段分组字段 HAVING HAVING 分组条件分组条件 HAVING HAVING子句与子句与WHEREWHERE子句的作用类似:在使用子句的作用类似:在使用GROUP BYGROUP BY完成分组后,显示满足完成分组后,显示满足HAVINGHAVING子句中分组条件的所有记录子句中分组条件的所有记录例例4-264-26】按住校与否统计学生的平均成绩按住校与否统计学生的平均成绩SELECT SELECT LiveInDormLiveInDorm,STR(AVG(Grade),5,2)AS,STR(AVG(Grade),5,2)AS 平均成绩平均成绩FROM Student JOIN GradeFROM Student JOIN GradeON ON Student.StudentCodeStudent.StudentCode=Grade.StudentCodeGrade.StudentCodeGROUP BY GROUP BY LiveInDormLiveInDorm4.4.1.3 1.3 数据操纵语言数据操纵语言DMLDML【例例4-274-27】统计课程代号(统计课程代号(CourseCodeCourseCode)大于)大于“110006110006”的各门课程的选课人数。

的各门课程的选课人数SELECT SELECT CourseCodeCourseCode,Count(,Count(StudentCodeStudentCode)AS)AS 选课人数选课人数FROM GradeFROM GradeGROUP BY GROUP BY CourseCodeCourseCodeHAVING HAVING CourseCodeCourseCode 110006 110006(4)ORDER BY4)ORDER BY子句子句按指定字段为查询结果排序通常是按指定字段为查询结果排序通常是 SQL SQL 语句最后一项语句最后一项语法格式为:语法格式为:ORDER BY ORDER BY 字段名字段名 ASC/DESCASC/DESC 字段名是排序的依据,也可以是含有字段名的表达式字段名是排序的依据,也可以是含有字段名的表达式ASCASC为升序排序为升序排序(Ascending)(Ascending),DESCDESC为降序为降序(Descending)(Descending)缺省排列次序为升序缺省排列次序为升序4.4.1.3 1.3 数据操纵语言数据操纵语言DMLDML【例例4-284-28】按成绩(按成绩(GradeGrade)升序显示)升序显示GradeGrade表中的所有表中的所有数据。

数据SELECT*FROM Grade SELECT*FROM Grade ORDER BY Grade ORDER BY Grade可以指定多个排序的字段多字段排序的规则是:首先可以指定多个排序的字段多字段排序的规则是:首先用指定的第一个字段对记录排序,然后对此字段中具有用指定的第一个字段对记录排序,然后对此字段中具有相同值的记录用指定的第二个字段进行排序,依此类推相同值的记录用指定的第二个字段进行排序,依此类推若无若无ORDER BYORDER BY子句,则按原数据表的次序显示数据子句,则按原数据表的次序显示数据例例4-294-29】按姓名(按姓名(StudentNameStudentName)升序)升序 班名班名(ClassNameClassName)降序查询学生及其班级信息降序查询学生及其班级信息SELECT SELECT StudentCodeStudentCode,StudentNameStudentName,ClassNameClassName,Birthday,BirthdayFROM Student JOIN FROM Student JOIN ClassInfoClassInfoON Student.ClassCode=ClassInfo.ClassCodeON Student.ClassCode=ClassInfo.ClassCodeORDER BY ORDER BY StudentnameStudentname ASC,ASC,ClassNameClassName DESC DESC4.4.1.3 1.3 数据操纵语言数据操纵语言DMLDML(5)5)子查询子查询 当一个查询是另一个查询的条件时,称该查询为子查当一个查询是另一个查询的条件时,称该查询为子查询也被称为嵌套查询。

询也被称为嵌套查询可以构造出一条含有多个子查询的可以构造出一条含有多个子查询的SQLSQL语句来完成很复语句来完成很复杂目的的查询杂目的的查询例例4-294-29】查询查询“张三张三”同班同学的学号、姓名同班同学的学号、姓名SELECT Student.StudentCode,Student.StudentName,SELECT Student.StudentCode,Student.StudentName,Student.ClassCodeStudent.ClassCodeFROM Student FROM Student WHERE WHERE Student.ClassCodeStudent.ClassCode=(=(SELECT SELECT Student.ClassCodeStudent.ClassCode FROM Student FROM Student WHERE WHERE Student.StudentNameStudent.StudentName=张三张三)4.4.1.3 1.3 数据操纵语言数据操纵语言DMLDML如果子查询结果返回多值则子查询要与下面介绍的如果子查询结果返回多值则子查询要与下面介绍的ININ、EXISTEXIST等结合使用。

等结合使用1)1)ININ子查询子查询 ININ子查询用来判断一个给定值是否在子查询的结果集中子查询用来判断一个给定值是否在子查询的结果集中例例4-30】查询选修了课程代码为查询选修了课程代码为“110001”的学生的学的学生的学号、姓名和班级代号号、姓名和班级代号SELECT StudentCode,StudentName,ClassCodeSELECT StudentCode,StudentName,ClassCodeFROM Student FROM Student WHERE StudentCode IN(WHERE StudentCode IN(SELECT StudentCode SELECT StudentCode FROM Grade WHERE CourseCode=110001 FROM Grade WHERE CourseCode=110001)4.4.1.3 1.3 数据操纵语言数据操纵语言DMLDMLSELECT Student.StudentCode,StudentName,ClassCodeSELECT Student.StudentCode,StudentName,ClassCodeFROM Student JOIN Grade FROM Student JOIN Grade ON Student.StudentCode=Grade.StudentCodeON Student.StudentCode=Grade.StudentCodeWHERE Grade.CourseCode=110001WHERE Grade.CourseCode=1100012)2)EXISTSEXISTS子查询子查询 EXISTSEXISTS子查询用于判断一个子查询的结果集是否为空,如子查询用于判断一个子查询的结果集是否为空,如果为空则返回果为空则返回TRUETRUE,否则返回否则返回FALSEFALSE。

NOT EXISTSNOT EXISTS的返回值的返回值与与EXISTSEXISTS相反例例4-314-31】查询选修了课程代码为查询选修了课程代码为“110001110001”的学生的学生的学号、姓名和班级代号用的学号、姓名和班级代号用EXISTSEXISTS子查询实现子查询实现SELECT SELECT StudentCodeStudentCode,StudentNameStudentName,ClassCodeClassCodeFROM Student FROM Student WHERE EXISTS(WHERE EXISTS(SELECT*SELECT*FROM Grade FROM Grade WHERE WHERE Student.StudentCodeStudent.StudentCode=Grade.StudentCodeGrade.StudentCode AND AND Grade.CourseCodeGrade.CourseCode=110001=110001)4.4.1.3 1.3 数据操纵语言数据操纵语言DMLDML.数据插入语句数据插入语句INSERT INTO INSERT INTO 功能:在指定的表中添加一个新的记录,或一次从其他表功能:在指定的表中添加一个新的记录,或一次从其他表提取一组记录插入到目标表中。

提取一组记录插入到目标表中语法格式语法格式1 1:在指定的表中添加一个新的记录在指定的表中添加一个新的记录INSERT INTO INSERT INTO 数据表数据表(字段名(字段名1 1,字段名,字段名2 2)VALUESVALUES(表达式(表达式1 1,表达式,表达式2 2)字段可以是某几个字段字段可以是某几个字段表达式表达式1 1、表达式、表达式2 2分别对应字段名分别对应字段名1 1、字段名、字段名2 2,它们,它们是所要添加的记录的值是所要添加的记录的值当插入一条完整的记录时,可省略字段名,但字段值当插入一条完整的记录时,可省略字段名,但字段值次序要与表中字段的次序一一对应次序要与表中字段的次序一一对应例例4-324-32】向向ClassInfoClassInfo表插入一条记录表插入一条记录INSERT INTO ClassInfoINSERT INTO ClassInfo VALUES(143030301,VALUES(143030301,自动化自动化1414级级301301班班,303003,),303003,)4.4.1.3 1.3 数据操纵语言数据操纵语言DMLDML如果只给出部分字段的值,必须指明相应的字段名,表达如果只给出部分字段的值,必须指明相应的字段名,表达式值的次序必须和所列字段名次序一一对应。

式值的次序必须和所列字段名次序一一对应例例4-334-33】向向ClassInfoClassInfo表插入一条记录表插入一条记录INSERT INTO ClassInfoINSERT INTO ClassInfo(ClassCodeClassCode,ClassNameClassName,MajorCodeMajorCode)VALUES(14303030VALUES(143030302 2,自动化自动化1414级级302302班班,303003),303003)语法格式语法格式2 2:从其他表提。

下载提示
相关文档
正为您匹配相似的精品文档