好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

DSQL语言课件.ppt

47页
  • 卖家[上传人]:壹****1
  • 文档编号:592866831
  • 上传时间:2024-09-23
  • 文档格式:PPT
  • 文档大小:481KB
  • / 47 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 4.3 4.3 Transact-SQLTransact-SQL语言语言 4.3.14.3.1 T-SQLT-SQL语言概述语言概述 ¨SQLSQL:结构化查询语言(:结构化查询语言(Structure Query Structure Query LanguageLanguage))¨关系型数据库管理系统的标准语言:按照关系型数据库管理系统的标准语言:按照ANSIANSI((美国国家标准协会)的规定美国国家标准协会)的规定, ,最初由最初由IBM公司在七十年代中期开发成功公司在七十年代中期开发成功¨T-SQLT-SQL语言是微软公司在语言是微软公司在SQL ServerSQL Server中对中对SQLSQL扩扩展 4.1.2 T-SQL语言的特点语言的特点 1)非过程化)非过程化 ¨面向过程的程序设计语言,必须一步一步地将解题的全面向过程的程序设计语言,必须一步一步地将解题的全过程描述出来,不仅要告诉计算机过程描述出来,不仅要告诉计算机“做什么做什么”,而且还,而且还要告诉计算机要告诉计算机“怎么做怎么做”¨非过程化语言,不必描述解决问题的全过程,只需提出非过程化语言,不必描述解决问题的全过程,只需提出“做什么做什么”,至于,至于“如何做如何做”的细节则由语言系统本身的细节则由语言系统本身去完成并给出操作的结果。

      去完成并给出操作的结果2)两种不同的使用方式)两种不同的使用方式 –联机交互方式联机交互方式: SQL语言既可独立使用语言既可独立使用–嵌入程序设计语言中嵌入程序设计语言中:例如例如VB.net程序设计语言中程序设计语言中¨不论使用何种方式,不论使用何种方式,T-SQL语言的语法结构基本相同语言的语法结构基本相同 3) 高度一体化高度一体化:集数据定义语言(集数据定义语言(DDL)、数据操纵语言)、数据操纵语言((DML)、数据控制语言()、数据控制语言(DCL)和)和T-SQL增加的语言增加的语言元素于一体,可独立完成数据库生命周期的所有活动元素于一体,可独立完成数据库生命周期的所有活动 4) 语言简洁、易学易用语言简洁、易学易用 3 3))T-SQLT-SQL语言的组成元素语言的组成元素¨DDL(Data Definition Language)–数据库定义语言数据库定义语言–定义数据库结构、各对象及属性的语句定义数据库结构、各对象及属性的语句–例如:例如:Creat DATABASE Student¨DML(Data Manipulation Language)–数据库操纵语言数据库操纵语言–实现对数据库基本操作的语句,主要包括查询、实现对数据库基本操作的语句,主要包括查询、插入、修改、删除等插入、修改、删除等¨DCL(Data Control Language)–数据库控制语言数据库控制语言–保证数据库一致性和完整性保证数据库一致性和完整性¨T-SQL增加的语言元素增加的语言元素 变量、运算符、函数、流程控制语句和注解等。

      变量、运算符、函数、流程控制语句和注解等 * * T-SQLT-SQL语言可在语言可在SQL ServerSQL Server查询分析器中直接执查询分析器中直接执行并查看结果,即以交互方式使用行并查看结果,即以交互方式使用在在T-SQLT-SQL语句中,不区分字母大小写为阅读方便,约定语句中,不区分字母大小写为阅读方便,约定: :(1)(1) 用大写字母书写用大写字母书写T-SQLT-SQL语句中关键字;语句中关键字;(2) (2) 用小写字母书写语句中的标识符、表达式以及各种参用小写字母书写语句中的标识符、表达式以及各种参数菜单栏 对象浏览器:进行数据库维护和操作SQL语句编辑器 执行结果显示窗口 工具条 4.3.2 数据定义语言数据定义语言DDL 数据定义语言主要是定义数据库中的对象,包括数据数据定义语言主要是定义数据库中的对象,包括数据库、数据表、视图、索引、存储过程、触发器等的建立或库、数据表、视图、索引、存储过程、触发器等的建立或修改 操作对象操作对象操作方式操作方式创建创建删除删除修改修改使用使用数据库数据库CREATE DATABASEDROP DATABASEALTER DATABASEUSE 基本表基本表CREATE TABLEDROP TABLEALTER TABLE视图视图 CREATE VIEWDROP VIEWALTER VIEW索引索引CREATE INDEXDROP INDEX存储过程存储过程CREATE PROCEDUREDROP PROCEDUREALTER PROCEDURE触发器触发器CREATE TRIGGERDROP TRIGGERALTER TRIGGER表4-11 SQL数据定义语言DDL 1)1)创建一个数据库创建一个数据库SchoolTest SchoolTest ;;2) 2) SchoolTestSchoolTest中只有一个数据文件中只有一个数据文件SchoolTest_DataSchoolTest_Data,,它被默认为它被默认为该数据库的主文件,该文件的大小与系统数据库该数据库的主文件,该文件的大小与系统数据库ModelModel的主文件大的主文件大小相同;小相同;3) 3) SchoolTestSchoolTest数据库所在的物理文件为数据库所在的物理文件为““D:\School_Data.mdf”D:\School_Data.mdf”4)4)系统将自动在系统将自动在““D:\”D:\”中创建一个名称为中创建一个名称为““School_log.LDF”School_log.LDF”、、大小等于主文件大小大小等于主文件大小25%25%的日志文件的日志文件。

      例【例4-134-13】】创建一个只有一个主数据文件创建一个只有一个主数据文件 SchoolTestSchoolTest的的数据库数据库((不指定该文件的大小)不指定该文件的大小) CREATE DATABASECREATE DATABASE SchoolTestON (NAME=SchoolTest_Data, 'D:\ SchoolTest_Data.MDF') 1 1.数据库操作语句.数据库操作语句 (1) (1) 创建数据库语句(创建数据库语句(CREATE DATABASECREATE DATABASE) 例:例:CREATE DATABASE SchoolTest 该该语语句句以以系系统统数数据据库库modelmodel作作为为模模板板在在SQL SQL ServerServer安安装装文件夹的文件夹的DataData文件夹下建立数据库文件和日志文件文件夹下建立数据库文件和日志文件 举例举例¨创建一个创建一个Student1数据库,该数据库的主数据库,该数据库的主文件逻辑名称为文件逻辑名称为Student1_data,物理文,物理文件名为件名为c:\c:\Student1.mdf,初始大小为,初始大小为10MB,最大尺寸为无限大,增长速度为,最大尺寸为无限大,增长速度为10%;数据库的日志文件逻辑名称为;数据库的日志文件逻辑名称为c:\c:\Student1_log,物理文件名为,物理文件名为Student1.ldf,初始大小为,初始大小为1MB,最大尺,最大尺寸为寸为5MB,增长速度为,增长速度为1MB。

      CREATE DATABASE student1ON ( NAME = student1_data, = 'c:\student1.mdf', SIZE = 10MB, = 10%)LOG ON( NAME = student1_log, = 'c:\student1.ldf', SIZE = 1MB, MAXSIZE =5MB, = 1MB)GO ((2 2)打开和删除数据库语句)打开和删除数据库语句 USE 数据库名数据库名 /* /*选择当前要操作的数据库选择当前要操作的数据库 */ */ DROP DATABASE 数据库名数据库名/*/*删除数据库删除数据库 */ */ 2 2.数据表操作语句.数据表操作语句((1 1)建立表语句()建立表语句(CREATE TABLECREATE TABLE)) 【例【例4-144-14】建立学生表】建立学生表T_StudentTestT_StudentTestCREATE TABLECREATE TABLE T_StudentTest (StudentCode CHAR(8) NOT NULL UNIQUE, /*唯一性约束,不许取空值唯一性约束,不许取空值*/StudentName VARCHAR(16) NOT NULL,Sex CHAR(2) NOT NULL,LiveInDorm BIT DEFAULT 1, /*默认值为默认值为1*/Constraint StudentPK Primary Key(StudentCode) /* StudentCode为主键约束为主键约束*/)执行上述语句后,在School数据库中创建一个新的空表T_StudentTest,该表由StudentCode、StudentName、Sex、LiveInDorm等字段组成。

      在字段的定义中确定StudentCode、StudentName、Sex不可取空值,LiveInDorm的默认值为1,并将StudentCode设定为主键约束 ((2 2)删除表语句()删除表语句(DROP TABLEDROP TABLE))当数据表不再需要时,可以使用当数据表不再需要时,可以使用DROP TABLEDROP TABLE语句将其删除语句将其删除例【例4-164-16】】删除删除T_StudentTestT_StudentTest表表 DROP TABLEDROP TABLE T_GradeTest【【例例4-154-15】】建立成绩表建立成绩表T_GradeTestT_GradeTestCREATE TABLE T_GradeTest(StudentCode CHAR(8) NOT NULL , /*不许取空值不许取空值*/Grade REAL DEFAULT 0 , /*默认值为默认值为0*/Constraint GradeCK Check(Grade>=0 AND Grade<=100)/*检查约束检查约束0>= Grade<=100*/)注意:删除数据表要十分谨慎,因为当数据表被删除时,里面的数据也被全部删除。

      3 3.索引的建立与删除.索引的建立与删除((1 1)建立索引语句)建立索引语句( (CREATE INDEX)CREATE INDEX) 【例【例4-174-17】】在在T_StudentT_Student表的姓名(表的姓名(StudentNameStudentName))字段上建立升序索字段上建立升序索引CREATE INDEXCREATE INDEX NameIndex onon T_Student (StudentName) 【例【例4-184-18】】在在T_StudentT_Student表的学号(表的学号(StudentCodeStudentCode))字段上建立唯一降字段上建立唯一降序索引CREATE UNIQUE INDEXCREATE UNIQUE INDEX StudentCodeIndex onon T_Student (StudentCode DESC)((2 2)删除索引语句)删除索引语句( (DROP INDEX)DROP INDEX) 【例】删除【例】删除T_StudentT_Student表中索引名称分别为表中索引名称分别为NameIndexNameIndex和和StudentCodeIndexStudentCodeIndex的两个索引。

      的两个索引DROP INDEXDROP INDEX T_Student.ManyIndex, T_Student.StudentCodeIndex 当使用企业管理器创建数据库对象时可以自动生成其当使用企业管理器创建数据库对象时可以自动生成其SQLSQL语句(脚本),并可将其保存到一个扩展名为语句(脚本),并可将其保存到一个扩展名为. .sqlsql的的文件中文件中 ,在查询分析器中可打开,在查询分析器中可打开. .sqlsql文件,重新执行相文件,重新执行相应的应的SQLSQL脚本 SQLSQL语句自动生成方法语句自动生成方法 脚本生成方法:脚本生成方法:(1) 选中要生成选中要生成SQL脚本的数据库或数据表,右击后在弹出菜单脚本的数据库或数据表,右击后在弹出菜单中选择中选择“所有任务所有任务/生成生成SQL脚本脚本”;;(2) (2) 使用复选框选择要生成使用复选框选择要生成SQLSQL脚本的对象,或者在左下部列表脚本的对象,或者在左下部列表框中选择对象加入到右下部列表框;框中选择对象加入到右下部列表框;(3) (3) 依次进入依次进入““设置格式设置格式””和和““选项选项””选项卡,对对象的语句脚选项卡,对对象的语句脚本选项进行设置;本选项进行设置;(4) (4) 在在““常规常规””选项卡页面,点击【预览】按钮可查看和复制选项卡页面,点击【预览】按钮可查看和复制SQLSQL脚本;脚本;(5)(5)点击点击““选项选项””选项卡页面的【确定】按钮,可生成一个扩展选项卡页面的【确定】按钮,可生成一个扩展名为名为“.“.sql”sql”的用户命名的文本文件用来存放这些的用户命名的文本文件用来存放这些SQLSQL脚本。

      脚本 图4-32 选择生成SQL脚本的对象图4-34 预览SQL脚本图4-35 将脚本保存为文本文件图4-33 SQL脚本的选项卡 4.3.3 数据操纵语言数据操纵语言DML 数据操纵语言实现对数据的查询和更新,主要语句数据操纵语言实现对数据的查询和更新,主要语句及功能如下:及功能如下: 表4-12 SQL数据操纵语言DML命令功能SELECT从一个表或多个表查询数据INSERT向一个表中添加一条记录UPDATE修改表中某一个或几个字段的值DELETE从一个表中删除记录 ¿查查询询数数据据库库表表中中的的数数据据并并返返回回符符合合用用户户查查询询条条件件的的结结果数据数据查询语句是果数据数据查询语句是SQLSQL语言的核心语言的核心¿SelectSelect语句由多个子句构成,其语法形式为:语句由多个子句构成,其语法形式为:SELECT 字段表字段表FROM 表名表名[WHERE 查询条件查询条件][GROUP BY 分组字段分组字段 [HAVING 分组条件分组条件]][ORDER BY 字段名字段名 [ASC/DESC]]¨[ ][ ]表示可选项表示可选项。

      ¨第第2 2行至最后一行称作行至最后一行称作SQLSQL子句,不同的子句完成不同子句,不同的子句完成不同的功能¨在书写在书写SELECTSELECT语句时,字母大小写意义完全相同语句时,字母大小写意义完全相同¨语句可以写在若干行上(如上述语法格式中的描述),语句可以写在若干行上(如上述语法格式中的描述),也可以不换行也可以不换行1 1.查询语句.查询语句SELECTSELECT (1)(1)字段表字段表 ¨字段表位于关键字字段表位于关键字SELECTSELECT后面,这些字段将作为查询后面,这些字段将作为查询的结果被显示使用字段表规则:的结果被显示使用字段表规则: 1) 1) 字段与字段之间用逗号分隔字段与字段之间用逗号分隔 【例【例4-20】】 【例【例4-20】】使用使用SELECT语句查询语句查询T_Student表中的学生姓名(表中的学生姓名(StudentName)和性别()和性别(Sex) SELECT StudentName, Sex FROM T_Student 2) 可以使用通配符可以使用通配符“ * ”表示表中的所有字段表示表中的所有字段。

      【例【例4-21】】 使用使用SELECT语句查询语句查询 T_Student表中所有字表中所有字段的值 SELECT * FROM T_Student 3) 如果字段名或表名中含有空格,则该字段名或表名必如果字段名或表名中含有空格,则该字段名或表名必须用方括号括起须用方括号括起 4) 在字段表中,可以使用以下方式将原字段名以新的字在字段表中,可以使用以下方式将原字段名以新的字段名显示段名显示 字段名字段名 AS 新字段名新字段名 【例【例4-22】】 显示显示T_Class表中班级代号,并将表中班级代号,并将ClassCode字段改为字段改为Class Number((注意,新字段名含有空格)注意,新字段名含有空格) SELECT ClassCode AS [Class Number] FROM T_Class (注意,字段别名[Class Number]含有空格,所以用方括号括起来) 5) 在字段名前可加上一些范围限制,以便进一步优化查询在字段名前可加上一些范围限制,以便进一步优化查询结果常用的范围关键字有:结果。

      常用的范围关键字有:TOP n | m PERCENT :显示前:显示前n条记录或前条记录或前m%的记录例【例4-23】】查询查询T_Course表中的前表中的前3条记录 SELECT TOP 3 * FROM T_Course 【例【例4-24】】查询查询T_Course表中前表中前20%的记录 SELECT TOP 20 PERCENT * FROM T_Course b) 使用DISTINCT的查询结果a) 不使用DISTINCT的查询结果DISTINCT::若多条记录的字段值具有相同数据,只若多条记录的字段值具有相同数据,只显示一条记录显示一条记录 【例【例4-25】】查询查询T_Course表中开课的学院名称表中开课的学院名称Academy((与所开课程无关)与所开课程无关) SELECT DISTINCT Academy FROM T_Course 由于每个学院都开设了多门课由于每个学院都开设了多门课程,因此字段程,因此字段Academy具有部具有部分相同的值在分相同的值在SELECT语句语句的字段的字段Academy前加上关键字前加上关键字DISTINCT,,相同的学院名称相同的学院名称只显示一个。

      只显示一个 6) 为了增强查询功能,在为了增强查询功能,在SELECT语句中还可以使用语句中还可以使用内部聚合函数,它们被用来进行一些简单的统计或计内部聚合函数,它们被用来进行一些简单的统计或计算常用统计函数如表算常用统计函数如表4-13所示常用函数表:所示常用函数表: 【例【例4-26】】计算学生的总分、平均分、最高分、最低分计算学生的总分、平均分、最高分、最低分及学生选课数及学生选课数 SELECT Sum (Grade) as 总分总分, Avg (Grade) as 平均分平均分, Max (Grade) as 最高分最高分, Min (Grade) as 最低分最低分, Count (StudentCode) as 课程人数课程人数 FROM T_Grade 表4-13 常用聚合函数函数名函数功能AVG( [ ALL | DISTINCT ] expression )计算某一字段的平均值(此字段的值必须是数值型)COUNT( [ ALL | DISTINCT ] expression )统计某一字段的个数MAX( [ ALL | DISTINCT ] expression )查找某一字段的最大值MIN( [ ALL | DISTINCT ] expression )查找某一字段的最小值SUM( [ ALL | DISTINCT ] expression )计算某一字段的总和(此字段的值必须是数值型)图4-37 含有计算函数的查询结果 7)使用)使用SELECT语句复制新表。

      在字段名后加上语句复制新表在字段名后加上INTO 表名可将查询结果复制到一张新表中表名可将查询结果复制到一张新表中 【例【例】】将将T_StudentT_Student表中所有记录的学生姓名表中所有记录的学生姓名、、出生日期出生日期两个字段复制一张新表两个字段复制一张新表NewTableNewTable SELECT StudentName, BirthDay INTO NewTable FROM T_Student¨运行后,屏幕显示一对话框,单击【是】按钮,产生运行后,屏幕显示一对话框,单击【是】按钮,产生一张表名为一张表名为NewTableNewTable的新表的新表 (2) FROM子句子句 ¨指定一个或多个需要从中获取数据的表(或查询)指定一个或多个需要从中获取数据的表(或查询)FROM子句一般在子句一般在SELECT之后,其语法格式如下:之后,其语法格式如下: FROM 表名表名1[ ,表名,表名2,,……,表名,表名n ] 1) 在在FROM子句中,表的先后次序可以任意排列子句中,表的先后次序可以任意排列2) FROM子句中若包含多个表名,且不同的表中具有相同子句中若包含多个表名,且不同的表中具有相同的字段,那么的字段,那么SELECT子句的字段名必须表示成子句的字段名必须表示成”<表名表名>.<字段名字段名>” 。

      例例4-27】】查询查询T_Student表和表和T_Grade表,报告表,报告StudentCode、、 StudentName、、 CourseCode和和Grade SELECT StudentCode, StudentName, CourseCode, Grade FROM T_Student,T_Grade 系统会显示出错信息,所以应将此语句改成:系统会显示出错信息,所以应将此语句改成: SELECT T_Student.StudentCode, StudentName, CourseCode, ,Grade FROM T_Student,T_Grade 3.WHERE子句子句 ¨设置查询的条件,它是一个可选的子句在使设置查询的条件,它是一个可选的子句在使用时,用时,WHERE子句必须在子句必须在FROM子句的后面子句的后面¨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-29】】查询未住校的女学生的情况。

      查询未住校的女学生的情况 SELECT StudentCode, StudentName, Sex, LiveInDorm FROM T_Student WHERE Sex='女' and LiveInDorm=01)比较和逻辑运算比较和逻辑运算2) 比较运算用于比较两个表达式的值;比较运算用于比较两个表达式的值;逻辑运算用来连接多个查询条件逻辑运算用来连接多个查询条件例例4-28】】在在T_Student表中查询所有女同学的姓名表中查询所有女同学的姓名 SELECT StudentCode, StudentName, Sex, LiveInDorm FROM T_Student WHERE Sex='女' 2)确定范围确定范围BETWEEN … AND¨BETWEEN 值值1 AND 值值2:确定范围确定范围,其查询结果包括值其查询结果包括值1和值和值2 ¨NOT BETWEEN 值值1 AND 值值2:查询不在指定范围中的记录行查询不在指定范围中的记录行例例4-30】】在在T_Grade表中查询课程代号(表中查询课程代号(CourseCode)为)为“110001”、成绩(、成绩(Grade)在)在70分到分到90分之间的学生代分之间的学生代号(号(StudentCode)及成绩。

      及成绩 SELECT StudentCode, CourseCode, Grade FROM T_Grade WHERE CourseCode='110001' AND Grade BETWEEN 70 AND 90 此例的此例的WHERE子句也可改为:子句也可改为: WHERE CourseCode='110001' AND Grade>= 70 AND Grade<=90【【例例4-31】】查询查询T_Student表中不在表中不在1986年到年到1995年中出年中出生的学生学号和姓名生的学生学号和姓名 SELECT StudentCode, StudentName, Birthday FROM T_Student WHERE Birthday NOT BETWEEN '1986-01-01' AND '1995-12-12' 3)确定集合确定集合IN运算运算 使用使用IN运算可查询某些字段值是否包含在所列运算可查询某些字段值是否包含在所列出的指定值的记录出的指定值的记录.【【例例4-324-32】】查询查询T_StudentT_Student表中班号(表中班号(ClassCodeClassCode)为)为““061121”061121”、、““071221”071221”、、““081221”081221”的学生。

      的学生 SELECT StudentCode, StudentName, Sex, ClassCode FROM T_Student WHERE Classcode IN ('061121','071221','081221')此例的此例的WHEREWHERE子句也可以改为:子句也可以改为:WHERE ClassCode='061121' OR ClassCode='071221' OR ClassCode='081221 4)4)字符匹配字符匹配LIKE ¨指定字段的值是否包含在给定的字符串中,其结果是满指定字段的值是否包含在给定的字符串中,其结果是满足字符串匹配的数据记录足字符串匹配的数据记录¨通配符通配符“_”表示任意单个字符;表示任意单个字符;“%”表示包含零个或表示包含零个或更多字符的任意字符串更多字符的任意字符串例例4-334-33】】查询查询T_CourseT_Course表中课程名称(表中课程名称(CourseNameCourseName)中)中包含包含““化学化学””两个字的课程代号(两个字的课程代号(CourseCodeCourseCode)及课程)及课程名称。

      查询结果如图名称查询结果如图4-404-40所示 SELECT CourseCode,CourseName SELECT CourseCode,CourseName FROM T_Course FROM T_Course WHERE CourseName LIKE '% WHERE CourseName LIKE '%化学化学%'%'图4-40包含“化学”两字的课程 5) 联接查询联接查询 ¨查询操作中涉及多表的查询也称为联接查询查询操作中涉及多表的查询也称为联接查询¨可以用两种方法实现可以用两种方法实现:①①在在WHERE子句中设置查询条件子句中设置查询条件 【例【例4-344-34】】查询未住校学生的选课及成绩情况查询未住校学生的选课及成绩情况 SELECT StudentName, CourseCode, Grade, LiveinDorm FROM T_Grade, T_Student WHERE LiveInDorm=0 AND T_Grade.StudentCode=T_Student.StudentCode“T_Grade.StudentCode=T_Student.StudentCode”指明在指明在T_Student表表 和和T_Grade表中表中StudentCode字段值相同的记录相联字段值相同的记录相联接。

      查询结果有接查询结果有13行,表示行,表示13人次的选课人次的选课及成绩若无此联结条件若无此联结条件,系统会将,系统会将T_Student 中中LiveInDorm为为0的记录(共的记录(共6条)和条)和T_Grade表的任意记录(共表的任意记录(共30条)条)全部联结,查询结果包括全部联结,查询结果包括180条信息,条信息,查询查询结果是没有意义的结果是没有意义的 ②②在在FROM子句中使用子句中使用联接关键字联接关键字将表与表联接将表与表联接在一起 T-SQL查询嵌套在语言中使用时,多查询嵌套在语言中使用时,多采用该方法采用该方法 语法格式:语法格式: FROM 表表1 联接关键字联接关键字 表表2 ON 表表1.字段名字段名1 <比较运算符比较运算符> 表表2.字段名字段名2 其中:其中:Ø表表1 1、表、表2 2是被联接的表名;是被联接的表名; Ø字段名是被联接的字段必须有相同的数据类字段名是被联接的字段必须有相同的数据类型并包含同类数据,但不需要有相同的名称型并包含同类数据,但不需要有相同的名称 Ø比较运算符:比较运算符:= =、、< <、、> >、、<=<=、、>=>=、、<><>Ø联接关键字用于确定联接的方式,常用的有联接关键字用于确定联接的方式,常用的有INNER JOIN (内联接)、(内联接)、LEFT OUTER JOIN(左外联接)、(左外联接)、RIGHT OUTER JOIN(右外联接)、(右外联接)、CROSS JOIN(交叉联接)(交叉联接);; ¨INNER JOIN——INNER JOIN:查询结果仅包含两个表:查询结果仅包含两个表中每对联结匹配的行。

      内连接是系统默认的,可以将关键中每对联结匹配的行内连接是系统默认的,可以将关键字字INNER省略例例4-35】】使用内联接查询未住校学生的选课及成绩情况使用内联接查询未住校学生的选课及成绩情况SELECT StudentName, CourseCode, Grade, LiveinDormFROM T_Student INNER JOIN T_Grade ON T_Student.StudentCode = T_Grade.StudentCode WHERE LiveInDorm=0本句的查询结果与本句的查询结果与【【例例4-34】】结果完全相同结果完全相同SELECT T_Grade.StudentCode, StudentName, CourseCode, Grade FROM T_Grade,T_Student WHERE LiveInDorm=0 AND    T_Grade.StudentCode=T_Student.StudentCode ¨LEFT OUTER JOIN——左外联接,查询结果除了包含左外联接,查询结果除了包含两张表中符合连接条件的记录外,还包含左表(写在关键字两张表中符合连接条件的记录外,还包含左表(写在关键字LEFT OUTER JOIN左边的表)中不符合联接条件、但符左边的表)中不符合联接条件、但符合合WHERE条件的全部记录。

      条件的全部记录 【例【例4-36】】使用左外联接查询未住校学生的选课及成绩情况使用左外联接查询未住校学生的选课及成绩情况SELECT StudentName, CourseCode, Grade, LiveInDormFROM T_Student LEFT OUTER JOIN T_Grade ON T_Student.StudentCode = T_Grade.StudentCodeWHERE LiveInDorm=0 本句的查询结果中有些记录的本句的查询结果中有些记录的CourseCodeCourseCode和和GradeGrade字段的值为字段的值为NULLNULL,也,也就是说这些记录是不符合联接条件的就是说这些记录是不符合联接条件的(即在(即在T_GradeT_Grade中没有找到有相同中没有找到有相同StudentCodeStudentCode的记录),但由于使用了左的记录),但由于使用了左外联接的查询方法,所以左表外联接的查询方法,所以左表((T_StudentT_Student)中的符合)中的符合WHEREWHERE子句条件子句条件的全部记录显示在查询结果中。

      的全部记录显示在查询结果中 ¨RIGHT OUTER JOIN——右外联接,右外联接,查询结果除了包查询结果除了包含两张表中符合联接条件的记录,还包含右表(写在关含两张表中符合联接条件的记录,还包含右表(写在关键字键字RIGHTT OUTER JOIN右边的表)中不符合联接条右边的表)中不符合联接条件、但符合件、但符合WHERE条件的全部记录条件的全部记录 【例【例4-37】】使用右外联接查询未住校学生的选课及成绩情况使用右外联接查询未住校学生的选课及成绩情况SELECT StudentName, CourseCode, Grade, LiveInDormFROM T_Student RIGHT OUTER JOIN T_Grade ON T_Student.StudentCode = T_Grade.StudentCodeWHERE LiveInDorm=0本句的查询结果与使用内联接完本句的查询结果与使用内联接完全相同,但含义不同结果相同全相同,但含义不同结果相同是由于在表设计时,在表是由于在表设计时,在表T_StudentT_Student和和T_GradeT_Grade之间通过外之间通过外键建立了参照完整性约束,表键建立了参照完整性约束,表T_GradeT_Grade中的所有中的所有StudentCodeStudentCode必必须是须是T_StudentT_Student中出现的值。

      中出现的值 【例【例4-384-38】】查询化工学院开设的课程的选修学生和考试成绩查询化工学院开设的课程的选修学生和考试成绩SELECT T_Course.CourseCode, T_Course.CourseName, SELECT T_Course.CourseCode, T_Course.CourseName, StudentCode, Academy, GradeStudentCode, Academy, GradeFROM T_Grade RIGHT JOIN T_Course FROM T_Grade RIGHT JOIN T_Course ON T_Grade.CourseCode = T_Course.CourseCodeON T_Grade.CourseCode = T_Course.CourseCodeWHERE Academy='WHERE Academy='化工学院化工学院' '查询结果中,查询结果中,左表左表T_GradeT_Grade和和右表右表T_CourseT_Course中既符合联接中既符合联接条件又符合条件又符合WHEREWHERE子句条件的子句条件的所有记录都被显示。

      所有记录都被显示右表右表T_CourseT_Course中有中有2 2个记录个记录 ““分析化学概论分析化学概论””和和““物理物理化学化学””符合符合WHEREWHERE子句条件但子句条件但不符合联接条件,同样被显不符合联接条件,同样被显示在查询结果中,说明这两示在查询结果中,说明这两门课程目前没有学生选修门课程目前没有学生选修 ¨CROSS JOIN(交叉联接):查询结果是将两个表进行拼(交叉联接):查询结果是将两个表进行拼接,即第一个表的每行与第二个表的每一行进行拼接,查接,即第一个表的每行与第二个表的每一行进行拼接,查询结果的行数等于两个表行数之积询结果的行数等于两个表行数之积例例4-39】】使用交叉联接列出所有学生需选的所有课程情况使用交叉联接列出所有学生需选的所有课程情况 SELECT StudentName, CourseCode SELECT StudentName, CourseCode FROM T_Student CROSS JOIN T_Grade FROM T_Student CROSS JOIN T_Grade注意:交叉联接不能有条件,且不能带WHERE子句。

      ¨多表联接嵌套:在多表查询时,所涉及的数据表在多表联接嵌套:在多表查询时,所涉及的数据表在3张以张以上,形成联接嵌套嵌套的格式如下:上,形成联接嵌套嵌套的格式如下:FROM FROM 表表1 INNER JOIN1 INNER JOIN表表2 ON 2 ON 表表1.1.字段字段1 <1 <比较运算符比较运算符> > 表表2.2.字段字段2 2 INNER JOIN INNER JOIN 表表3 ON 3 ON 表表2.2.字段字段1 <1 <比较运算符比较运算符> > 表表3.3.字段字段2 2 … … [INNER JOIN [INNER JOIN表表n ON n ON 表表n-1.n-1.字段字段1 <1 <比较运算符比较运算符> > 表表n.n.字段字段2]2] 【【例例4-40】】查查询询班班号号是是“051011”的的学学生生姓名、所选课程名称和成绩姓名、所选课程名称和成绩①①使用使用WHERE子句设置查询条件:子句设置查询条件:SELECT StudentName, CourseName, Grade FROM T_Student,T_Course,T_Grade WHERE T_Course.CourseCode = T_Grade.CourseCode AND T_Student.StudentCode = T_Grade.StudentCode AND ClassCode='051011'在在INNER JOIN 之中,嵌套了一个之中,嵌套了一个INNER JOIN。

      ②②使用联接关键字的语句:使用联接关键字的语句: SELECT StudentName, CourseName, GradeFROM T_Student JOIN T_Grade ON T_Student.StudentCode = T_Grade.StudentCode JOIN T_Course ON T_Grade.CourseCode = T_Course.CourseCodeWHERE ClassCode='051011' (3) GROUP BY(3) GROUP BY子句子句 ¨将指定字段中具有相同值的记录合并成一条记录将指定字段中具有相同值的记录合并成一条记录¨语法格式:语法格式: GROUP BY 分组字段分组字段 [HAVING 分组条件分组条件] HAVING HAVING子句与子句与WHEREWHERE子句的作用类似:在使用子句的作用类似:在使用GROUP BYGROUP BY完成分组后,显示满足完成分组后,显示满足HAVINGHAVING子句中分组子句中分组条件的所有记录条件的所有记录 图4-45 GROUP BY子句查询结果【【例例4-41】】按住校与否统计学生的平均成绩。

      查询按住校与否统计学生的平均成绩查询结果如图结果如图4-45所示SELECT￿LiveInDorm,￿STR(AVG(Grade),5,2)￿AS￿平均成绩FROM￿T_Student￿JOIN￿T_GradeON￿T_Student.StudentCode=T_Grade.StudentCodeGROUP￿BY￿LiveInDorm 【【例例4-42】】统计课程代号(统计课程代号(CourseCode)大于)大于“110006”的各门课程的选课人数查询结果如图的各门课程的选课人数查询结果如图4-47所示SELECT CourseCode, Count (StudentCode) AS 选课人数选课人数FROM T_GradeGROUP BY CourseCodeHAVING CourseCode > '110006'图4-47 按课程代号统计并筛选( (4) ORDER BY4) ORDER BY子句子句¨按指定字段为查询结果排序通常是按指定字段为查询结果排序通常是 SQL SQL 语句最后一项语句最后一项 ¨语法格式为:语法格式为: ORDER BY 字段名字段名 [ASC/DESC] –字段名是排序的依据,也可以是含有字段名的表达式。

      字段名是排序的依据,也可以是含有字段名的表达式 –ASCASC为升序排序为升序排序(Ascending)(Ascending),,DESCDESC为降序为降序(Descending)(Descending)–缺省排列次序为升序缺省排列次序为升序 【【例例4-43】】按成绩(按成绩(Grade)升序显示)升序显示T_Grade表中的所表中的所有数据￿￿SELECT￿*￿￿FROM￿T_Grade￿￿ORDER￿BY￿Grade¨可以指定多个排序的字段多字段排序的规则是:首先可以指定多个排序的字段多字段排序的规则是:首先用指定的第一个字段对记录排序,然后对此字段中具有用指定的第一个字段对记录排序,然后对此字段中具有相同值的记录用指定的第二个字段进行排序,依此类推相同值的记录用指定的第二个字段进行排序,依此类推¨若无若无ORDER BY子句,则按原数据表的次序显示数据子句,则按原数据表的次序显示数据例例4-44】】按姓名(按姓名(StudentName)升序)升序 ++ 出生日期出生日期((Birthday)降序查询学生及其班级信息降序查询学生及其班级信息SELECT￿StudentCode,￿StudentName,￿ClassName,￿BirthdayFROM￿T_Student￿JOIN￿T_ClassON￿T_Student.ClassCode=T_Class.ClassCodeORDER￿BY￿Studentname￿ASC,￿Birthday￿DESC ( (5) 5) 子查询子查询 ¨当一个查询是另一个查询的条件时,称该查询为子查当一个查询是另一个查询的条件时,称该查询为子查询也被称为嵌套查询。

      询也被称为嵌套查询¨可以构造出一条含有多个子查询的可以构造出一条含有多个子查询的SQLSQL语句来完成很复语句来完成很复杂目的的查询杂目的的查询 【【例例4-45】】查询查询“李佳婷李佳婷”同班同学的学号、姓名同班同学的学号、姓名SELECT T_Student.StudentCode, SELECT T_Student.StudentCode, T_Student.StudentName, T_Student.ClassCodeT_Student.StudentName, T_Student.ClassCodeFROM T_Student FROM T_Student WHERE T_Student.ClassCode=WHERE T_Student.ClassCode= (SELECT T_Student.ClassCode (SELECT T_Student.ClassCode FROM T_Student FROM T_Student WHERE T_Student.StudentName=' WHERE T_Student.StudentName='李佳婷李佳婷')')图4-49 子查询的示例 •如果子查询结果返回多值则子查询要与下面介绍的如果子查询结果返回多值则子查询要与下面介绍的ININ、、EXISTEXIST等结合使用。

      等结合使用 1) 1) ININ子查询子查询 ININ子查询用来判断一个给定值是否在子查询的结果集中子查询用来判断一个给定值是否在子查询的结果集中例例4-46】】查询选修了课程代码为查询选修了课程代码为“110001”的学生的学的学生的学号、姓名和班级代号号、姓名和班级代号SELECT StudentCode,StudentName, ClassCodeFROM T_Student WHERE StudentCode IN (SELECT StudentCode FROM T_Grade WHERE CourseCode='110001')图4-50 IN子查询示例 2) 2) EXISTSEXISTS子查询子查询 EXISTSEXISTS子查询用于判断一个子查询的结果集是否为空,如子查询用于判断一个子查询的结果集是否为空,如果为空则返回果为空则返回TRUETRUE,,否则返回否则返回FALSEFALSENOT EXISTSNOT EXISTS的返回值的返回值与与EXISTSEXISTS相反 用用EXISTSEXISTS子查询子查询【【例例4-46】】查询选修了课程代码为查询选修了课程代码为“110001”的学生的学号、姓名和班级代号。

      的学生的学号、姓名和班级代号SELECT StudentCode, StudentName, ClassCodeSELECT StudentCode, StudentName, ClassCodeFROM T_Student FROM T_Student WHERE EXISTSWHERE EXISTS (SELECT * (SELECT * FROM T_Grade FROM T_Grade WHERE T_Student.StudentCode=T_Grade.StudentCode WHERE T_Student.StudentCode=T_Grade.StudentCode AND T_Grade.CourseCode='110001')AND T_Grade.CourseCode='110001') 22. .数据插入语句数据插入语句INSERT INTO INSERT INTO 功能:在指定的表中添加一个新的记录,或一次功能:在指定的表中添加一个新的记录,或一次从其他表提取一组记录插入到目标表中从其他表提取一组记录插入到目标表中。

      语法格式语法格式1 1:在指定的表中添加一个新的记录在指定的表中添加一个新的记录INSERT INTO 数据表数据表[(字段名(字段名1,字段名,字段名2…)]VALUES(表达式(表达式1,表达式,表达式2…]))¨字段可以是某几个字段字段可以是某几个字段¨表达式表达式1、表达式、表达式2分别对应字段名分别对应字段名1、字段名、字段名2,它们,它们是所要添加的记录的值是所要添加的记录的值¨当插入一条完整的记录时,可省略字段名,但字段值当插入一条完整的记录时,可省略字段名,但字段值次序要与表中字段的次序一一对应次序要与表中字段的次序一一对应 【【例例4-47】】向向T_Class表插入一条记录表插入一条记录￿￿￿INSERT￿INTO￿T_Class￿￿￿VALUES￿('081221',￿'软件软件081',￿'120002') ¨如果只给出部分字段的值(表定义时非空字段必须给出值),其他值如果只给出部分字段的值(表定义时非空字段必须给出值),其他值会自动取空值(会自动取空值(NULL)或默认值,这时必须指明相应的字段名,次序)或默认值,这时必须指明相应的字段名,次序可以随意,但表达式值的次序必须和所列字段名次序一一对应。

      可以随意,但表达式值的次序必须和所列字段名次序一一对应例例4-48】】向向T_Student表插入一条记录表插入一条记录INSERT￿INTO￿T_Student(StudentCode,￿Sex,￿StudentName,￿ClassCode)VALUES￿('08011106',￿'女女',￿'张军张军','071221')语法格式语法格式2:从其他表提取一组记录插入到目标表中从其他表提取一组记录插入到目标表中INSERT INTO 数据表数据表[(字段名字段名1,字段名,字段名2…)] SELECT语句语句 注意:数据表必须已经存在,且其结构定义与SELECT语句返回的字段值类型一致 【【例例4-49】】向向T_StudentTest表插入记录表插入记录,数据为数据为T_Student中所有女同学中所有女同学INSERT INTO T_StudentTestSELECT StudentCode, StudentName, Sex, LiveInDorm From T_Student WHERE Sex='女女 3. 数据更新语句数据更新语句UPDATE 对一条或多条符合条件记录中某个或某些字段值的修改,对一条或多条符合条件记录中某个或某些字段值的修改,省略省略WHERE子句,对数据表中的所有记录进行更新。

      子句,对数据表中的所有记录进行更新语法格式:语法格式:UPDATE￿数据表数据表￿SET￿字段名字段名1=表达式表达式1￿[,字段名字段名2=表达式表达式2￿…][WHERE￿<条件表达式条件表达式>]【【例例4-50】】更新更新T_Student表中表中StudentCode为为“08011106”的记录信息,将其字段(的记录信息,将其字段(Telephone)的)的值改为值改为“67792280”￿￿UPDATE￿T_Student￿￿SET￿Telephone='67792280'￿￿WHERE￿StudentCode='08011106'【【例例4-51】】更更新新T_Course表表中中信信息息,,将将所所有有开开课课学学院院(( Academy)) 为为 “计计 算算 机机 学学 院院 ”的的 课课 程程 的的 实实 验验 课课 时时((LabTime)增加)增加10%, 上课课时增加上课课时增加10 UPDATE T_Course SET LabTime=LabTime*(1+0.1), CourseTime=CourseTime+10 WHERE Academy='计算机学院计算机学院' 4. 数据删除语句数据删除语句DELETE功能:删除指定表中满足条件的记录。

      功能:删除指定表中满足条件的记录语法格式:语法格式: DELETE FROM [WHERE <条件表达式条件表达式>]¨如果没有如果没有WHERE子句,即没有指定删除条件,则该子句,即没有指定删除条件,则该语句执行后将删除指定表中的所有记录语句执行后将删除指定表中的所有记录 【【例例4-52】】删除删除T_Student表中表中StudentCode字段值为字段值为“08011106”的记录￿￿DELETE￿FROM￿T_Student￿￿WHERE￿StudentCode='08011106' 【【例例4-53】】删除删除T_Student表中选课平均成绩低于表中选课平均成绩低于60的学的学生信息DELETE￿FROM￿T_StudentWHERE￿StudentCode￿IN￿￿￿￿￿￿￿￿￿￿(SELECT￿StudentCode￿FROM￿T_Grade￿￿￿￿￿￿￿￿￿￿GROUP￿BY￿StudentCode￿￿￿￿￿￿￿￿￿￿HAVING￿AVG￿(Grade)<60) 在进行表的插入、更新和删除时,可能会在进行表的插入、更新和删除时,可能会受到关系完整性的约束,这种约束可以保受到关系完整性的约束,这种约束可以保证数据库中数据的正确性。

      证数据库中数据的正确性。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.