第2章 使用Transact-SQL语言.

Slides:



Advertisements
Similar presentations
第二章 简单的 SQL 语句. 本章要点  创建一个简单的表  SQL 语句介绍  最简单的查询语句 select  带有限制条件的查询  查询结果的排序显示.
Advertisements

Java 技术与应用 数据库应用 ( 第 14 章 ) 西安交大 卫颜俊 2008 年 12 月 电子信箱: QQ: 网站 : /java.
第 7 章 数据库 1. Overview  数据库概述  数据库管理系统  数据库的体系结构和数据库模型  SQL 语言  数据库技术  构建数据库系统 2.
Chapter 3: SQL.
第6章 数据库管理软件Access 年秋.
第六 章数据库访问页 6.1 数据访问页视图 6.2 创建数据访问页 6.3 编辑数据访问页 6.4 查看数据访问页 退出.
目 录 第 1 章 数据库技术基础 第 2 章 SQL Server基础 第 3 章 数据库管理 第 4 章 查询和视图
第4章 查询数据和修改数据.
第5章 关系数据库标准语言SQL 主讲:张丽芳.
十一 ASP对数据库的访问.
数据库及应用 授课教师:岳静 教学网站: Tel:
第2讲 Transact-SQL语言.
数据库应用技术 SQL Server 2005.
第5章 索引及视图操作 数据库原理应用与实践 SQL SERver2014(第2版) 主编 贾铁军 科学出版社 编著 陈国秦 万程 邢一鸣
数据库技术 实践.
高等院校计算机教材系列 数据库原理与应用(第2版) 任课教师:刘雅莉
Chap 11 SQL基本查詢指令.
第8章 SELECT敘述的基本查詢 8-1 SELECT查詢指令 8-2 SELECT子句 8-3 FROM子句 8-4 WHERE子句
数据库原理及应用 《数据库原理及应用》课程组 荆楚理工学院.
使用SQL Server Management Studio 进行数据查询与维护
第4章 关系数据库标准语言SQL 4.1 SQL语言概述 4.2 SQL数据查询功能 4.3 SQL数据操作功能 4.4 SQL数据定义功能.
第3章 SQL的基础知识 数据库管理及应用 3.1 SQL简介 3.2 SQL的数据模型 3.3 标识符 3.4 使用SQL语句管理数据库
数据库概述 简而言之,数据库(DataBase)就是一个存储数据的仓库。为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上。通过数据库管理系统,可以有效的组织和管理存储在数据库中的数据。如今,已经存在了Oracle、SQL Server、MySQL等诸多优秀的数据库。在这一章中将讲解的内容包括。
文科计算机小公共课规划教材 Access 程序设计.
第一讲 数据查询优化.
计算机应用基础 上海大学计算中心.
Oracle数据库 Oracle 子程序.
请写出下列查询语句并给出结果 1、列出student表中所有记录的sname、sex和class列。
在PHP和MYSQL中实现完美的中文显示
第五讲 利用视图进行查询优化.
第六章 學習SQL語言.
9 SELECT敘述的進階查詢 9-1 SQL的多資料表查詢 9-2 合併查詢 9-3 集合運算查詢 9-4 子查詢
第 8 章 資料的 新增、修改與刪除.
課程名稱:資料庫系統 授課老師:李春雄 博士
Chapter 12 T-SQL 語法與 ASP.NET.
Chap 10 SQL定義、操作與控制指令.
第4章 数据的查询与更新 4.1 SQL查询语句格式 4.2 简单查询 4.3 统计查询 4.4 连接查询 4.5 嵌套查询
彰化縣政府補助辦理網頁設計資料庫應用班 ASP與資料庫介紹 建國技術學院資管系 饒瑞佶.
SQL Injection.
国家“十一五”规划教材 数据库原理与应用教程.
SPARQL若干问题的解释 刘颖颖
第十七章 資料庫SQL 17-1 SELECT 17-2 INSERT 17-3 UPDATE 17-4 DELETE.
数据库基础 1.
第十章 IDL访问数据库 10.1 数据库与数据库访问 1、数据库 数据库中数据的组织由低到高分为四级:字段、记录、表、数据库四种。
第二章 Java语言基础.
SQL Injection (資料隱碼) 學生:a 吳倩瑜 指導教授:梁明章.
数据库技术.
第18章 SQL結構化查詢語言 18-1 SQL語言的基礎 18-2 SQL的查詢指令 18-3 SQL子查詢與合併查詢.
資料庫系統 李翊豪 2017/12/21 Reference
3.2 Mysql 命令行 1 查看数据库 SHOW DATABASES; 2 创建一个数据库test1 CREATE DATABASE test1; 3 选择你所创建的数据库 USE test1; (按回车键出现Database changed 时说明操作成功!) 4 查看现在的数据库中存在什么表.
SQL 范引娣.
3. SQL语言的应用 3.1 SQL历史和优点 3.2 数据查询 3.3 数据操纵.
第14章 SQL数据查询与操纵 内容提要 本章知识点
SQL查询语句 蔡海洋.
VB与Access数据库的连接.
本讲内容 SQL 概述 SQL 的查询功能 SQL 的操作功能 SQL 的定义功能.
第三章 SQL Server数据管理.
Web安全基础教程
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
第4章 Excel电子表格制作软件 4.4 函数(一).
第八讲 SQL语言之数据查询(2) 第三讲 SQL Server 2000 数据库技术.
8 SELECT敘述的基本查詢 8-1 SELECT查詢指令 8-2 SELECT子句 8-3 FROM子句 8-4 WHERE子句
1.把下面的关系模式转化为E-R图 1)系(系号,系名,电话) 2)教师(工号,姓名,性别,年龄,系号)
学习目标 1、了解基本运算符 2、运算符优先级.
学习目标 1、如何对结果进行分组 2、分组函数的一些实用方法.
11 檢視表的建立 11-1 檢視表的基礎 11-2 建立檢視表 11-3 修改與刪除檢視表 11-4 編輯檢視表的內容.
VB与Access数据库的连接.
WEB程序设计技术 数据库操作.
使用ADO访问数据库 李宝智 BonizLee 课程 10564A
第4章 数据查询.
Presentation transcript:

第2章 使用Transact-SQL语言

使用Transact-SQL语言 学习目标 了解Transact-SQL的用法和作用 学会并能根据需要灵活使用SELECT语句查询用户表的信息 使用INSERT向用户表输入数据 使用UPDATE修改用户表的数据 使用DELETE语句删除用户表的数据。

内容框架

问题: 我们需要对数据进行哪些维护操 作? 如何对数据进行查询、统计? Transact-SQL语言概述

Transact-SQL语言概述 结构化查询语言(Structured Query Language) 尽管不同的关系数据库使用各种略有不同的SQL版本,但多数都执行ANSI SQL标准。 将ANSI SQL-92的扩展集称为Transact-SQL,简写为T-SQL Transact-SQL语言概述

Transact-SQL语言的组成 数据定义语言DDL:用来定义和管理数据库中的对象。 DDL主要的语句有: CREAT TABLE /*创建表*/ ALTER TABLE /*修改表的属性*/ DROP TABLE /*删除表*/ 数据操作语言DML:用来操作数据库中的对象和数据,是 T-SQL中最常用的部分。DML主要的语句有:  SELECT /*从一个表或多个表中查询数据*/ DELETE /*从表中删除数据*/ INSERT /*向一个表中添加数据*/ UPDATE /*修改表中已有的数据*/ 数据控制语言DCL:用来控制用户对数据库对象操作的权 限。主要的命令有: GRANT /*授予权限*/ REMOVE /*回收所授予的权限*/ Transact-SQL语言的组成

查询信息--单表 切换数据库:USE 数据库名 SELECT语句:用于查询数据。 SELECT 选择列表 FROM 表(视图)的列表 WHERE 查询的条件 【问题】从Student表中查询学号为00000001的学生的姓名(StuName)和选课密码(Pwd) 【实训】要求查询系部编号为’01’的班级信息,要求显示班级编号和班级名称 查询信息--单表

查询信息(单表) 1、查询所有列的信息(使用*) 【例】查询课程的所有信息 【例】查询课程的课程类别 2、消除显示结果重复值(使用DISTINCT) 【例】查询课程的课程类别,要求对值相同的那些行只保留一行 3、显示前部分行的数据(使用TOP n [PERCENT]) 【例】从学生表中查询所有信息,要求只显示查询结果的前6行。  查询信息(单表)

查询信息(单表) 4、修改查询结果中的列标题 【问题】查询学生表中的学号、班级编号和姓名信息,并修改列标题为汉字标题 方法:  方法: (1)将要显示的列标题用单引号括起来后接等号(=), 后接要查询的列名 (2)将要显示的列标题用单引号括起来后,写在列名后面,两者之间使用空格隔开 (3)将要显示的列标题用单引号括起来后,写在列名后面,两者之间使用AS关键字  【练习】使用其他两种方法 查询信息(单表)

查询信息(单表) 5、在查询结果中显示字符串 【问题】查询课程表的信息,要求给出查询结果为: 思考: 如何查询课程编号是001的课程名称? 课程名称 课程编号 SQL Server实用技术 课程编号为: 001 …… 课程编号为: …… …… 课程编号为: ……   思考: 如何查询课程编号是001的课程名称? 查询信息(单表)

查询信息(单表) 6、使用WHERE限制查询的条件 【例】查询课程编号为001的课程名称。 【例】查询课程编号为001的课程名称。  【练习】查询 “Linux操作系统”课程的任课教师   7、表达式、函数作为SELECT语句的列 【例】查询学生总数、课程总门数。 【例】查询课程信息、报名人数与限选人数之比 思考:能否将上面的查询结果按报名人数和限选人数之比的升序排序? 查询信息(单表)

查询信息(单表) 8、重新排序查询结果(ORDER BY子句) 升序:ASC(默认) 降序:DESC [例]:查询课程信息、报名人数与限选人数之比,要求按报名人数和限选人数之比升序排序查询结果 【例】查询课程表的教师名、课程号、课程名,要求查询结果首先按教师名降序排列,教师名相同时,则按课程号的升序排列 [问题] 查询课程类别为“信息技术”的课程的任课教师、课程名,要求先按教师名升序排列,教师名相同时,按课程名的降序排列,并将显示的列名改为中文。 查询信息(单表)

查询信息(单表) 9、使用IN(NOT IN)关键字 【例】查询课程编号为001’‘004’‘013’的课程名称。 方法一:使用逻辑运算符OR 方法二:使用IN关键字(比使用逻辑运算符更为简单) 查询信息(单表)

查询信息(单表) 10、模糊查询(使用LIKE(NOT LIKE)) 通配符: % 匹配包括0个或多个字符的字符串 _ 匹配任何一个字符 % 匹配包括0个或多个字符的字符串 _ 匹配任何一个字符 [] 匹配任何在范围内的单个字符,例如:[m-p] [^] 匹配任何不在范围内的单个字符,例如:[^m-p]、[^mnop] 通配符和字符串要括在单引号中  【练习】解释下面的通配符表示的意义 %D% 、 _[^a] 、 [[]、[%]D 如果要查找通配符本身,需要将它们用方括号括起来 【问题】查询以“制作”两字结尾的课程名(使用LIKE) 【练习】查询姓名的第二个字为“丽”的学生信息,要求显示学生学号和姓名 【问题】查询不姓“刘”的学生信息(使用NOT LIKE) 查询信息(单表)

查询信息(单表) 11、使用IS NULL关键字——用于查询列中没有赋值的数据行 【问题】查询课程表中教师未定的课程名称和教师名 12、使用BETWEEN…AND(NOT BETWEEN…AND)关键字 用于查询在某一特定范围内的信息

查询信息(单表) 【问题】查询报名人数大于等于30并且小于等于40的课程信息,要求显示课程名称和报名人数(使用BETWEEN…AND)  [注意]WHERE WillNum BETWEEN 30 AND 40包括30和40这两个值 【问题】对上例使用NOT BETWEEN…AND 也可以在WHERE字句中使用前面讲过的逻辑运算符查询某一范围内的信息 【练习】查询报名人数比限制选课人数多一倍以及一倍以上的课程信息,要求显示课程名称、报名人数和限制选课人数之比,并按该比例的降续排列 查询信息(单表)

查询信息(单表) 13、使用UNION子句——用于将两个或多个查询结果合并成一个结果  【问题】从班级表中查询班级名,从系部表中查询系部名,并将这两个查询结果合并起来  使用时注意: (1)要合并的查询结果的列个数要相同 (2)要合并的查询结果按顺序对应列的数据类型性同或者兼容  [扩展] (1)修改列标题 (2)按新的列标题排序 查询信息(单表)

查询信息(单表) 14、使用COMPUTE子句 ——用来计算总计或进行分组小计 【问题】查询课程表中的课程编号、课程名称、课程类别、报名人数,并计算平均报名人数  [说明] 总计值或小计值作为附加新行出现在查询结果中。该子句用在WHERE子句之后  从查询结果可以看到: 查询结果中有两个结果集 (1)包含选择的列的所有明细行 (2)包含COMPUTE子句中所指定的聚合函数的合计  聚合函数:AVG()、MAX()、MIN()、SUM()  [扩展] (1)只查询课程类别为“信息技术”的课程信息 (2)可以在查询结果中显示多个聚合函数的合计  上面的例子是对显示的所有行进行总计,如何对信息进行分组小计呢? 查询信息(单表)

查询信息--单表 15、使用COMPUTE…BY子句 【例】按类查询课程表中的课程编号、课程名称、课程类别、报名人数,并计算每类课程的平均报名人数   查询结果中有多个组? [注意]必须先使用ORDER BY排序要分组的列 【练习】查询周二上课的课程名称和教师名,并显示课程门数 (提示:先完成前一部分,再使用聚合函数COUNT进行统计) 查询信息--单表

问题 COMPUTE子句是在一个明细行的基础上增加一个总计或小计(有BY时),但如果只想统计每类课程的平均报名人数,该如何处理? 问题

查询信息--单表 16、使用GROUP BY子句 【问题】按课程类别统计每类课程的平均报名人数 与上面例子的区别:只有一个结果集 [说明]   与上面例子的区别:只有一个结果集 [说明] (1)该子句用于将查询结果按照GROUP BY后指定的列进行分组,该子句写在WHERE子句后面 (2)GROUP BY子句经常用于SELECT子句中包含有聚合函数的情况。此时,SELECT子句中选项列表中出现的列,只能是GROUP BY子句中的列或者包含在聚合函数中。 查询信息--单表

查询信息--单表 17、使用HAVING子句 【问题】上面的例子中,如果只统计“信息技术”类课程的平均报名人数  [说明]HAVING经常用在GROUP BY子句之后,用于限定结果集中的分组  也可以使用WHERE子句 可以看到,HAVING子句是对结果进行过滤,而WHERE是对原始记录进行过滤。  [注意]HAVING子句中的列只能是GROUP BY子句中或者聚合函数中的列  【问题】查询平均报名人数大于30人的课程类和每类平均报名人数  【练习】在课程表中,按所开设课程的系部编号分别统计总共报名人数 如果问:系部编号为01的系所开设的课程总共有多少学生报名,如何编程实现? 查询信息--单表

查询信息--单表 18、使用子查询——在一个查询中包含另一个查询 【问题】查询报名人数大于平均报名人数的课程编号、课程名称和报名人数 STEP 1:如何求平均报名人数 STEP 2:完成题目要求 查询信息--单表

查询信息--多表 “计算机应用工程系” 有哪些班级,应该查询哪些表? 如果在多个表中进行查询,结果会怎 样? USE Xk GO “计算机应用工程系” 有哪些班级,应该查询哪些表?  如果在多个表中进行查询,结果会怎 样? USE Xk GO SELECT * FROM Department, Class 结果集中,有54行(3×18),5列(2+3)。 查询信息--多表

查询信息--多表 问题: [笛卡儿积] 运算过程? 在笛卡儿积的结果中,分析存在的问题以及解决方法: (1)两列DepatNo的列值不同 问题: [笛卡儿积] 运算过程?   在笛卡儿积的结果中,分析存在的问题以及解决方法: (1)两列DepatNo的列值不同 解决方法:加连接条件,成为相等连接 【注】为了避免笛卡儿积,必须在WHERE子句中给出表格的连接条件:通常对于N个表格的查询,要有N-1个连接条件 (2)出现了相同的列: 解决方法:去掉相同的列,成为自然连接 (3)加入“计算机应用工程系”的条件,成为带有选择条件的连接 查询信息--多表

查询信息--多表 【问题】查询“01电子商务”班学生选修课程的情况,要求显示班级名称、学号、姓名、课程名称和上课时间.  [分析] 班级名称、学号、姓名、课程名称、上课时间 这些信息是分别在班级表、学生表、学生选课表和课程表中的,因此需要在多个表中进行查询。同时,必须在WHERE子句中给出连接条件。   [注意]在引用的多表中,如果列名在多个表中同名,为了避免列名不明确,在SELECT子句中必须在列名前加上表的前缀,即“表名.列名”。 【练习】查询“林斌”同学的选修课信息(课程编号、课程名称、上课时间) 查询信息--多表

查询信息--多表 【练习】查询每个系所开课程的门数,显示系代码、系名称、开课门数 【练习】显示所有系的班级名称,要求计算各系班级数量,显示要求如下: 查询信息--多表

查询信息--多表 19、非相等连接(比较连接) ——连接条件不是等号,而是比较运算符 【问题】查询各班可以选择的不是本系开设的选修课程的信息(教材的例子)

查询信息--多表 20、自连接 —一个表和自身进行的连接 【问题】查询课程类相同而系部编号不同的课程信息(意味着同一类的课程有多个系部开设),要求显示课程编号、课程名称、课程类别和系部编号(教材上的例子)   21、使用别名 【练习】查询学分大于等于2.5的课程信息,显示课程名称、学分、开设该课程的系部名称、报名人数,要求使用别名 查询信息--多表

查询信息--多表 上面介绍的都是内连接。 以下是外连接:主要解决信息丢失的问题 【问题】查询开设的所有选修课的信息和所有学生选修课程的情况,要求显示学生学号、课程编号、课程名称 自然连接会丢失信息:Course表的‘019’课程、StuCou表的‘020’课程 左外连接 右外连接、全连接 交叉连接 查询信息--多表

使用EXISTS关键字 如果要解决这样的问题: 【问题】查询已经报名选修了课程的学生的学号和姓名 [分析]采用上面所学的方法能否解决? ——测试跟随的子查询的行是否存在   [要点] 一旦找到,立即停止 找到则返回TRUE,否则返回FALSE,而不是返回一些行 使用EXISTS关键字

查询信息--多表 【问题】查询没有选修’001’课程的学生学号和姓名。 使用NOT EXISTS SELECT StuNo,StuName FROM Student WHERE NOT EXISTS (SELECT * FROM StuCou WHERE StuNo=Student.StuNo AND CouNo='001')

查询信息--多表 阅读理解如下语句: IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = 'Xk') DROP DATABASE Xk GO

向表中输入数据 使用Management Studio 使用INSERT语句 主键值不允许出现重复值 不允许为空的列,必须输入值 注意事项: 主键值不允许出现重复值 不允许为空的列,必须输入值 数据类型要符合列的定义 values值列表的顺序要与表的列顺序一致 向表中输入数据

向表中输入数据(续) 使用SELECT语句 INSERT table_name SELECT column_list FROM table_list WHERE search_conditions 注意事项: INSERT语句中和FROM子句中使用的表可以相同也可以不同,但必须是已经存在的表 SELECT子句得到的结果集一定要和INSERT中指定的表兼容(列的数量和顺序要相同) 向表中输入数据(续)

向表中输入数据 使用SELECT INTO语句 SELECT select_list INTO new_table_name FROM table_list WHERE search_conditions 注意事项: 新表不能存在,否则会产生错误信息 新表中的列和行是基于查询结果集的 向表中输入数据

修改数据 修改表中的数据 问题:把学号为‘00000001’的学生姓名改为‘Alex’ 问题:把课程号在‘002’到‘005’之间的课程的报名人数增加1。 涉及多个表的修改 问题:把学号为’00000001’,选修课为’Java技术的开发应用’的自愿号(WillOrder)改为2。需要用到两个表StuCou和Course。 修改数据

、删除数据 删除表中的数据 DELETE table_name FROM … WHERE … 问题:删除学号‘00000011’的学生的选课记录。 涉及多个表的删除 问题:学号为’00000002’的同学取消了’中餐菜肴制作’课程的选修,请在表StuCou中把他的选课信息删除。

本章小节 能根据实际需要对所自己使用的数据库,进行查询与统计,编辑(输入、修改、删除)。 要掌握对单表、多表的查询与统计 能理解出表与表之间的关系和连接条件 能根据需要使用聚合函数,会进行分组显示并进行统计 本章小节