第2讲 Transact-SQL语言.

Slides:



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

2010 年 6 月课件制作人:王亚楠 1 模块 2 项目开发概论 教学课件 年 6 月课件制作人:王亚楠 2 目录 目标 了解:数据库技术的基本概念与结构 理解:数据模型的分类与结构组成 掌握:关系数据库及 SQL 的基本理论 知识 掌握:数据库设计的方法与步骤 内容 2.1 数据库技术基础.
Data type P64 ‘’ 转义字符 P67 P68 EXE,选出某个教师的学生中最新的一 个,要姓名, ID (,LIMIT ) EXISTS,NOT EXISTS P409 Q,EXISTS 和 in 的区别( 1000 ,查询结果)
Java 技术与应用 数据库应用 ( 第 14 章 ) 西安交大 卫颜俊 2008 年 12 月 电子信箱: QQ: 网站 : /java.
第 7 章 数据库 1. Overview  数据库概述  数据库管理系统  数据库的体系结构和数据库模型  SQL 语言  数据库技术  构建数据库系统 2.
第6章 数据库管理软件Access 年秋.
目 录 第 1 章 数据库技术基础 第 2 章 SQL Server基础 第 3 章 数据库管理 第 4 章 查询和视图
SQL的简单查询.
第5章 关系数据库标准语言SQL 主讲:张丽芳.
十一 ASP对数据库的访问.
第2章 SQL语言初步 2.1 SQL的基本概念 2.2 基本表、索引的创建、删除和修改操作 2.3 SQL的查询语句——SELECT
第5章 索引及视图操作 数据库原理应用与实践 SQL SERver2014(第2版) 主编 贾铁军 科学出版社 编著 陈国秦 万程 邢一鸣
数据库技术 实践.
高等院校计算机教材系列 数据库原理与应用(第2版) 任课教师:刘雅莉
Chap 11 SQL基本查詢指令.
第8章 SELECT敘述的基本查詢 8-1 SELECT查詢指令 8-2 SELECT子句 8-3 FROM子句 8-4 WHERE子句
第3章 SQL语言初步 2017/3/14.
数据库原理及应用 《数据库原理及应用》课程组 荆楚理工学院.
第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 程序设计.
第一讲 数据查询优化.
第三章 管理信息系统的技术基础 主要内容: 数据处理 数据组织 数据库技术 4. 计算机网络.
电子商务师 第二部分 电子商务的技术基础—计算机.
计算机应用基础 上海大学计算中心.
第3章 数据查询与SQL命令.
数据库应用与程序设计.
第五讲 利用视图进行查询优化.
關聯式資料庫.
Oracle数据库入门.
第六章 學習SQL語言.
9 SELECT敘述的進階查詢 9-1 SQL的多資料表查詢 9-2 合併查詢 9-3 集合運算查詢 9-4 子查詢
第 8 章 資料的 新增、修改與刪除.
課程名稱:資料庫系統 授課老師:李春雄 博士
数据库技术 第三章 关系数据库标准语言SQL 中国科学技术大学网络学院 阚卫华.
Chapter 12 T-SQL 語法與 ASP.NET.
二.資料庫系統建立與管理 Access 資料庫:windows下的單機資料庫 Access 操作 Mysql資料庫介紹.
2、掌握SQL中各种查询方法和数据更新方法 3、掌握SQL中视图的定义方法和用法 4、掌握SQL的授权机制
Chap 10 SQL定義、操作與控制指令.
題庫解析:MTA資料庫檢定 授課老師:李春雄 博士
資料庫安全 (Database Security)
彰化縣政府補助辦理網頁設計資料庫應用班 ASP與資料庫介紹 建國技術學院資管系 饒瑞佶.
Transact-SQL 語言設計教學.
实验 2:MS Access QBE Query使用
SQL SERVER 一些经典语句 1.
教 师:曾晓东 电 话: 数据库技术 教 师:曾晓东 电 话:
第十七章 資料庫SQL 17-1 SELECT 17-2 INSERT 17-3 UPDATE 17-4 DELETE.
作业3-点评.
資料庫管理(Access 2003) 第五章 利用查詢來 統計與分析資料 許欽嘉 老師.
iRepor报表设计基础 IReport安装 普通实体报表 数据结果集报表 工作流主从报表 饼状图报表 柱状图,曲线图报表 条形码报表
SQL Injection (資料隱碼) 學生:a 吳倩瑜 指導教授:梁明章.
数据库技术.
数据库应用技术 SQL Server 2005.
数据库技术.
第18章 SQL結構化查詢語言 18-1 SQL語言的基礎 18-2 SQL的查詢指令 18-3 SQL子查詢與合併查詢.
資料庫系統 李翊豪 2017/12/21 Reference
CS, ZJU 4/18/2019 Chapter 7 数据库.
3. SQL语言的应用 3.1 SQL历史和优点 3.2 数据查询 3.3 数据操纵.
第14章 SQL数据查询与操纵 内容提要 本章知识点
SQL查询语句 蔡海洋.
本讲内容 SQL 概述 SQL 的查询功能 SQL 的操作功能 SQL 的定义功能.
第三章 SQL Server数据管理.
8 SELECT敘述的基本查詢 8-1 SELECT查詢指令 8-2 SELECT子句 8-3 FROM子句 8-4 WHERE子句
SQL語法教學 2015/10/15 John.
11 檢視表的建立 11-1 檢視表的基礎 11-2 建立檢視表 11-3 修改與刪除檢視表 11-4 編輯檢視表的內容.
第4章 数据查询.
Web安全基础教程
第 9 章 查詢資料- 善用 SELECT 敘述.
Presentation transcript:

第2讲 Transact-SQL语言

Transact-SQL语言概述 第1节 单表查询 问题: 第1节 单表查询 问题: 我们需要对数据进行哪些维护操作?如何对数据进行查询、统计? 结构化查询语言(Structured Query Language)。这种语言的语法结构类似于英语,易学易用,书写随意。[例如前面第一章讲过的例子] Transact-SQL语言概述

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

操作数据 打开一个数据库 使用SELECT子句 SELECT子句主要用于检索数据,其基本格式为: SELECT 选择列表 FROM 表的列表 打开一个数据库  使用SELECT子句 SELECT子句主要用于检索数据,其基本格式为: SELECT 选择列表 FROM 表的列表 WHEAR 检索的条件 【问题】从Student表中检索学号为00000001的学生的姓名(StuName),要求显示学生的学号和姓名 【练习】要求检索系部编号为01的班级信息,要求显示班级编号和班级名称

1、*的使用 【例】显示学生表中所有信息 【例】从学生表中检索学生所在班的班级编码 2、使用DISTINCT 【例】从学生表中检索学生所在班的班级编码,要求清除值相同的那些行  3、使用TOP n [PERCENT] 【例】从学生表中检索所有的信息,要求只显示前6行数据 

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

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

6、使用WHERE限制检索的条件 【例】检索课程编码为001的课程名称,要求只显示课程名称   【练习】检索上“Linux操作系统”课程的教师名 7、表达式作为SELECT语句中的列 【例】要求检索课程表的课程信息,并显示报名人数和限制选课人数之比 思考:如何将上面的检索结果按报名人数和限制选课人数之比的升序排列?

8、使用ORDER BY子句重新排列检索结果  【升序例子】 【降序例子】 也可以在ORDER BY子句中指定多个列 【例】检索课程表的教师名、课程号、课程名,要求检索结果首先按教师名降序排列,教师名相同时,则按课程号的升序排列 9、使用IN(NOT IN)关键字 【例】检索课程编码为‘001’‘004’‘013’的课程名称 方法一:使用逻辑运算符OR 方法二:使用IN关键字(比使用逻辑运算符更为简单)

问题 检索开设了“信息技术”类课程的教师名及其所开的课程名,要求先按教师名升序排列,教师名相同时,按课程名的降序排列,并将显示的列名改为中文。

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

2、使用IS NULL关键字——用于检索列中没有赋值的行 【问题】检索课程表中教师未定的课程名称和教师名

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

4、使用UNION子句——用于将两个或多个检索结果合并成一个结果   【问题】从班级表中检索班级名,从系部表中检索系部名,并将这两个检索结果合并起来 使用时注意: (1)所有检索中的列数和列的顺序必须相同 (2)所有检索中按顺序对应列的数据类型必须兼容(相同或者可以明确地转换) [扩展] (1)修改列标题 (2)按新的列标题排序

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

6、使用COMPUTE…BY子句 【例】按类检索课程表中的课程编码、课程名称、课程分类、报名人数,并计算每类课程的平均报名人数   从检索结果可以看到: 检索结果中有多个组,每个组有两个结果集 这两个结果集中的内容同上 [注意]必须使用ORDER BY排序要分组的列 【练习】检索周二上课的课程名称和教师名,并对符合条件的课程门数进行统计 (提示:先完成前一部分,再使用聚合函数COUNT进行统计)

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

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

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

3、使用子查询——在一个查询中包含另一个查询 【问题】检索报名人数大于平均报名人数的课程编码、课程名称和报名人数 STEP 1:如何求平均报名人数 STEP 2:完成题目要求

本节小结 本节小结 SQL语言的组成 SELECT语句的基本格式 介绍了各种单表查询语句  

多表查询 第2节 多表查询 如果问:“计算机应用工程系”下属的班级有哪些,应该查询哪些表格? 这就是多表查询了。   如果在多个表中进行查询,结果会怎样? USE Xk GO SELECT * FROM Department, Class 结果集中,有54行(3×18),5列(2+3)。 多表查询

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

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

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

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

2、自连接 ——自己和自己的连接 【问题】检索课程类相同而系部编码不同的课程信息(意味着同一类的课程有多个系部开设),要求显示课程编码、课程名称、课程分类和系部编码(课本的例子)   [使用别名] 【练习】检索学分大于等于2.5的课程信息,显示课程名称、学分、开设该课程的系部名称、报名人数,要求使用别名

外连接 上面介绍的都是内连接,以下是外连接: 【问题】检索学生的选课信息,要求显示学生学号、课程编码、课程名称 1、左外连接 2、右外连接  2、右外连接  3、全连接  4、交叉连接 外连接

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

【问题】查询没有选修’001’课程的学生学号和姓名。 select stuno,stuname from student 使用NOT EXISTS 【问题】查询没有选修’001’课程的学生学号和姓名。 select stuno,stuname from student where not exists (select * from stucou where stuno=student.stuno and couno='001')

本节小结 多表查询 非相等连接 自连接 使用别名 外连接(左外连接、右外连接、全连接)和交叉连接 使用EXISTS关键字