第五章SQL高级查询和视图

合集下载

第五章 SQL课件

第五章  SQL课件
第五章 表的使用和管理
1
LOGO
本章主题
表的定义 能存储的不同数据类型 如何存储表以及将表存储于何处 使用SSMS和查询编辑器创建表 表的创建中所包含的更高级的部分 图片和大型文本数据
表的使用和管理
数据库是表的集合,表中含有数据和一些其他的一些对象, 数据库是表的集合,表中含有数据和一些其他的一些对象,表是用来 存储数据的对象.用户可以通过多种方式访问数据库中的数据, 存储数据的对象.用户可以通过多种方式访问数据库中的数据,但是归根 到底是访问表中的数据.所以掌握SQL Server的表的管理和使用是非常重要 到底是访问表中的数据.所以掌握SQL Server的表的管理和使用是非常重要 本章将讲解SQL 2005表的管理和使用 主要包括: 表的管理和使用, 的.本章将讲解SQL Server 2005表的管理和使用,主要包括: 表的基本概念. 表的基本概念. 使用Management Studio创建 修改和删除表. 创建, 使用Management Studio创建,修改和删除表. 使用T SQL创建 修改和删除表. 创建, 使用T-SQL创建,修改和删除表. 实现SQL 2005的数据完整性 的数据完整性. 实现SQL Server 2005的数据完整性. 作. 通过本章学习, 通过本章学习,读者可以掌握数据库中表的基本知识和对表的基本操
Classes表 图5.1 Classes表
5
(二) 系统表简介
系统表用来保存一些服务器配置信息数据,和系统数据库一样,用户 系统表用来保存一些服务器配置信息数据,和系统数据库一样, 不能直接查看和修改系统表,这些表在什么地方呢? 2005中的 不能直接查看和修改系统表,这些表在什么地方呢?SQL Server 2005中的 系统数据现在存储在隐藏的"资源"表中, 系统数据现在存储在隐藏的"资源"表中,这个表只能被服务器自身直接 访问. 访问. SQL Server 2005中有很多自带的系统表,这些表都有各自的作用,表 2005中有很多自带的系统表,这些表都有各自的作用, 中有很多自带的系统表 分别描述了系统表的所属及其作用. 5-1分别描述了系统表的所属及其作用.

SQL语言及查询和视图

SQL语言及查询和视图

嵌套查询
查询与职工“e4”工资相等的职工的职工号。 Select 职工号 from 职工 where 工资 =; (select 工资 from 职工 where 职工号=“e4”)
In 和等号“=”嵌套的区别是:子查询返回多条 记录,必须使用in,如果返回一条,两者都可 以用。
嵌套查询
查询所用职工工资都大于1210元的仓库信息 Select * from 仓库 where 仓库号 not in; (select 仓库号 from 职工 where 工资<=1210); And 仓库号 in (select 仓库号 from 职工)
内联接查询
以上命令等价于: Select 仓库.仓库号,城市,供应商名,地址; From 仓库 , 职工 , 订货单 , 供应商; Where 订货单.供应商号=供应商.供应商号; And 职工.职工号=订货单.职工号; And 仓库.仓库号=职工.仓库号 其中,where短语中的三个条件的先后顺序不 影响查询结果。
分组查询
查询各仓库的平均工资,按平均工资降序排列。 Select 仓库号,avg(工资) as 平均工资; From 职工; Group by 仓库号; Order by 2 DESC
分组查询
查询2人以上的各仓库的平均工资和人数,按 平均工资降序排列。 Select 仓库号,avg(工资) as 平均工资,count(*) as 人数; From 职工; Group by 仓库号; Having count(*)>=2; Order by 2 DESC Having 短语必须与group by 短语一起使用。 Where 和having两个短语的区别是:分组前的条件 用where,分组后的条件用having。两者可以同时。

chap05 查询和视图

chap05 查询和视图
用CREATE SQL VIEW命令创建视图
打开数据库,用命令来创建视图:
OPEN DATABASE 数据库名 CREATE SQL VIEW 视图文件名 AS SQL-SELECT
语句
20
视图的使用
利用视图更新源表数据
可在视图设计器的更新条件页面中进行如下设置 来实现对源表数据的更新:
set<fieldname>=<expression> 插入表记录命令:Insert into <tablename> (字段名列表)Values(值列表) 删除表记录命令:Delete From <tablename>
[where<条件表达式>]
22
5.3 SQL命令小结
非SQL命令
建表命令:Create 修改表命令:Modify Structure 修改表记录命令:Replace 插入表记录命令:Append 删除表记录命令:Delete
VFP程序设计教程
南京理工大学紫金学院 计算机系
Chapter05 查询和视图
2
5.1 查询的创建和使用
查询的概念 查询的创建
3
查询的概念
查询:就是向一个数据库发出检索信息的请求, 从中提取符合特定条件的记录。
查询文件:保存实现查询的SELECT-SQL命令的 文件。查询文件保存时,系统自动给出扩展 名.qpr;查询被运行后,系统还会生成一个编 译后的查询文件,扩展名为.qpx。
设置查询结果的排序依据
排序决定查询输出结果中记录显示的顺序。单击排序 依据 → 从选定字段框选中字段 → 选择升序或降序 → 单击添加。
7
查询的创建
设置查询结果的分组依据

数据库应用第5章-1_结构化查询语言SQL_V08_2

数据库应用第5章-1_结构化查询语言SQL_V08_2

第5章 结构化查询语言SQL数据库系统应用Data Base System Application张建国哈工大计算机科学与技术学院2008-10-7哈工大计算机学院 张建国 Slide 5-1第5章 结构化查询语言SQL2008-10-72第5章 结构化查询语言SQL本章主要内容SQL概述 基本表的定义、修改与删除 SQL的数据更新 数据记录的插入 数据记录的修改 数据记录的删除 SQL的数据查询 索引的建立与删除 T-SQL语言2008-10-7哈工大计算机学院 张建国Slide 5-3第5章 结构化查询语言SQL5.1 SQL概述1. SQL的发展 SQL(Structured Query Language)意为结构化查询语言. 1974年由Boyce和Chamberlin提出来. 最初在System R关系数据库中实现.该语言功能丰富、语言简捷、使用灵活方便、深受各界欢迎.1986年成为美国国家标准. 1987年成为国际标准SQL86. 1989年,ISO颁布了增强完整性特征的SQL89标准. 1993年,ISO对SQL89标准进行了大量的修改和扩充,推出 SQL2(SQL92).2008-10-7哈工大计算机学院 张建国 Slide 5-4第5章 结构化查询语言SQL5.1 SQL概述(Cont.)SQL是一种通用的、功能极强的关系数据库语言. 各数据库厂家纷纷推出各自支持SQL的软件或与SQL 接 口软件,使自己的数据库可以运行SQL. 许多其他软件(例如图形处理、人工智能、软件工程工具 、软件开发工具等)也利用SQL语言的数据查询功能,作为 自身的一部分,使其数据查询功能更强大. 许多程序设计语言中也都引入了SQL.2008-10-7哈工大计算机学院 张建国Slide 5-5第5章 结构化查询语言SQL5.1 SQL概述(Cont.)2. SQL的特点 (1) 一体化 非关系模型的数据语言 模式数据定义语言:Schema DDL 外模式(子模式)数据定义语言:SubSchema DDL 存储模式数据定义语言: DSDL(Data Storage Definition Language) 数据操纵语言:DML SQL语言 SQL将数据定义语言DDL、数据操纵语言DML和数据控 制语言DCL集成在一起,各种语言风格统一.2008-10-7哈工大计算机学院 张建国 Slide 5-6第5章 结构化查询语言SQL5.1 SQL概述(Cont.)(2) 高度非过程化 非关系语言 通过存取路径存取数据. SQL语言 SQL是一种面向问题的语言,只需提出“做什么”,不必指出“ 怎么做”.存取路径的选择和SQL的操作过程是由系统自动 完成的. (3) 面向集合的操作方式 非关系语言 一次一个记录 SQL 采用集合操作,操作对象和操作结果都是元组的集合.2008-10-7哈工大计算机学院 张建国 Slide 5-7第5章 结构化查询语言SQL5.1 SQL概述(Cont.)(4) 两种使用方式、统一的语法结构 SQL既是自含式语言,又是嵌入式语言. 自含式语言 能独立地在联机方式下使用(命令方式),用户可以在终端键 盘上直接输入SQL命令对DB进行操作. 嵌入式语言 嵌入到高级语言(VB、PB、Java等)程序中,利用主语言(高 级语言)进行计算处理、利用DB语言进行数据管理. 同一条命令在两种操作方式中的语法结构基本一致.2008-10-7哈工大计算机学院 张建国Slide 5-8第5章 结构化查询语言SQL5.1 SQL概述(Cont.)(5) 语言简捷、易学易用 SQL具有很强的功能,但由于其设计巧妙,使得语言十分简捷. 完成其核心功能只用9个动词:数据查询:SELECT(查询) 数据定义:CREATE(创建表、索引、视图) DROP(删除表、索引、视图) ALTER(修改表) 数据操纵:INSERT(插入) DELETE(删除) UPDATE(修改) 数据控制:GRANT(授权) REVOKE(收回授权)2008-10-7哈工大计算机学院 张建国 Slide 5-9第5章 结构化查询语言SQL5.1 SQL概述(Cont.)3. SQL支持三级模式结构 外模式 外模式对应于视图View和部分基本表Base Table 用户可以用SQL语言对基本表和视图进行操作 从用户的观点看基本表和视图是一样的 模式 模式对应于基本表 基本表是独立存在的表 每个基本表对应一个关系2008-10-7哈工大计算机学院 张建国Slide 5-105.1 SQL概述(Cont.)内模式内模式对应于存储文件存储文件是在计算机存储介质中存放的文件形式一个或若干个基本表对应一个存储文件视图视图是从一个或几个基本表或其他视图导出的表视图并不存放实际的数据,仅保存视图的定义使用视图时,根据视图定义,从基本表中取数据因此,视图实际上是一个虚表5.1 SQL 概述(Cont.)SQL 用户2视图3视图2视图1基本表3基本表2基本表1存储文件3存储文件2存储文件1基本表4外模式模式内模式SQL 用户1SQL 用户35.2 基本表的定义、修改与删除1. 基本表的定义格式:CREATE TABLE 表名(列名1 数据类型1 [列级完整性约束条件1][,列名2 数据类型2 [列级完整性约束条件2]]…[,列名n 数据类型n [列级完整性约束条件n]]);表名:基本表的表名列名:属性名数据类型:属性的数据类型,可参考具体数据库系统的数据类型5.2 基本表的定义、修改与删除列级完整性约束条件:相应属性的完整性约束条件NULL/NOT NULL: 该项是否可以取空值UNIQUE: 该项是否具有唯一性CHECK: 该项的取值范围PRIMARY KEY: 设置主码FOREIGN KEY: 设置外码5.2 基本表的定义、修改与删除(Cont.)例:建立一个”学生”表Student和一个”系”表.Student(Sno,Sname,Birthday,Score,Dno)Dpet(Dno,Dname,Dtel)设:学号Sno:CHAR(10),主码姓名Sname:CHAR(8)性别Sex: CHAR(2),取值范围:”男”或”女”出生日期Birthday:SMALLDATETIME考分Score:SMALLINT,取值范围:500~750系号Dno: CHAR(2),系的主码,学生的外码系名Dname: CHAR(30)系电话Dtel: CHAR(13)5.2 基本表的定义、修改与删除(Cont.) CREATE TABLE Dept(Dno CHAR(2) primary key,Dname CHAR(30),Dtel CHAR(13));CREATE TABLE Student (Sno CHAR(10),Sname CHAR(8),Sex CHAR(2) CHECK (Sex=‘男’or Sex=‘女’),Birthday SMALLDATETIME,Score SMALLINT CHECK(Score>=500 and Score<=750, Dno CHAR(2),PRIMARY KEY(Sno),FOREIGN KEY (Dno) REFERENCES Dept(Dno) );5.2 基本表的定义、修改与删除(Cont.)2. 修改基本表格式:ALTER TABLE 表名[ADD 列名数据类型[完整性约束条件]]| [DROP COLUMN 列名]| [ALTER COLUMN 列名数据类型];其中:ADD子句:增加新列及其完整性约束DROP子句:删除指定的列ALTER子句:修改列的定义,包括列名和数据类型5.2 基本表的定义、修改与删除(Cont.)例:在Student表中加入一列性别”民族”,6位字符.ALTER TABLE Student ADD Nation CHAR(6);例:将”民族”的数据类型改为bit.ALTER TABLE Student ALTER COLUMN NationCHAR(8);例:删除”民族”.ALTER TABLE Student DROP COLUMN Nation;5.2 基本表的定义、修改与删除(Cont.)3. 删除基本表格式:DROP TABLE 表名删除基本表时,该表的数据以及在此表上建立的视图及索引全部删除,因此执行删除操作时应特别小心.例:删除基本表Student.DROP TABLE Student;数据库实例设学生-课程数据库中包含三个表:Student(Sno ,Sname,Sex,Birthday,Score,Dname)SC(Sno,Cno ,Grade)Course(Cno ,Cname,CPno,Credit)其中:Sno: CHAR(10); Sname: CHAR(8); Sex: CHAR(2); Birthday: SMALLDATETIME; Score: INT; Dname: CHAR(30)Grade: SMALLINTCno: CHAR(6); Cname: CHAR(30); CPno: CHAR(6);credit: TINYINT学生课程选课分数m n5.3 SQL的数据更新插入数据插入单个元组插入子查询的结果数据修改修改一个元组的数据修改多个元组的数据根据查询结果修改删除数据删除一个元组删除多个元组删除子查询的结果5.3 SQL的数据更新(Cont.)1. 插入数据(1) 插入单个元组格式:INSERT INTO 表名[(列名1[,列名2>,…)]VALUES (常量1[,常量2],…);例:将一个新学生元组的全部属性插入到Student中.•INSERT INTO Student•VALUES('6053610301','李兰','女','1989-3-5',658,'实验学院');5.3 SQL的数据更新(Cont.)例:将一个新学生元组的部分属性插入到Student中. INSERT INTO Student(Sno,Sname,Dname)VALUES('1030310105','王芳','计算机系');未列出的属性列取空值.(2) 插入子查询结果INSERTINTO 表名([列名1[,列名2,……)]子查询;5.3 SQL的数据更新(Cont.)例:建立一个学生平均成绩表SG,包括学号Sno和平均成绩Gavg CREATE TABLE SG(Sno CHAR(10) NOT NULL UNIQUE, Gavg SMALLINT);INSERTINTO SG(Sno,Gavg)SELECT Sno, AVG(Grade)FROM SCGROUP BY Sno;(3) 插入应注意的问题对于表Student和SC若在SC中插入的记录的Sno在Student不存在,则系统不允许插入.5.3 SQL的数据更新(Cont.)2. 修改数据格式:UPDATE 表名SET 列名1=表达式1[,列名2=表达式2]……[WHERE 条件];对满足条件的元组中的指定列用相应的表达式的值修改.(1) 修改一个元组的值例:将学生“6053610301”的性别改为“男”.•UPDATE Student•SET Sex='男'•WHERE Sno='6053610301';5.3 SQL的数据更新(Cont.)(2) 修改多个元组的值例:将课号为“101001”的所有成绩提高10%. UPDATE SCSET Grade=Grade*1.1 Where Cno=‘101001’;例:计算每种商品的金额.UPDATE 商品SET 金额=单价*数量;例:将选修课号为“101001”的成绩每人提高10分. UPDATE SCSET Grade=Grade+10WHERE Cno=‘101001’;(3) 带子查询的修改例:将“计算机系”全体学生的成绩清零.UPDATE SCSET Grade=0WHERE ‘计算机系’= (SELECT DnameFROM StudentWHERE Student.Sno=SC.Sno);(4) 修改应注意的问题对于表Student和SC若修改Student中的Sno,而未修改SC中对应记录的Sno.若修改SC中的Sno,而未修改Student中对应的Sno.5.3 SQL的数据更新(Cont.)5.3 SQL的数据更新(Cont.)3. 删除数据格式:DELETEFROM 表名[WHERE 条件];删除满足条件的元组.(1) 删除一个元组例:删除“6053610301"的学生记录.DELETE FROM Student WHERE Sno=‘6053610301’;5.3 SQL的数据更新(Cont.)(2) 删除多个元组例:删除所有学生的选课记录.DELETEFROM SC;(3) 删除子查询的结果例:删除“计算机系”学生的全部选课记录.DELETEFROM SCWHERE ‘计算机系’=(SELECT DnameFROM StudentWHERE Student.Sno=SC.Sno);5.3 SQL的数据更新(Cont.)(4) 删除操作注意保持数据的一致性一个学生的各种数据可能存放在多个表中,但一个删除语句只能对一个表进行删除,这样可能会引起数据不一致问题.例:删除学生“6053610301”在Student表中的记录后,学生的基本数据被删除了.但在SC表中仍存在该学生的选课及成绩记录,若不删除,将会使数据不一致.解决办法:执行两次删除操作,既删除Student表中6053610301的记录,又删除SC表中6053610301的相关记录.为了保证数据的完整性和一致性,许多系统的DBMS都提供了相应的处理机制.当主表的记录被删除后,其参照关系的相关记录自动删除.5.4 SQL的数据查询查询功能是数据库系统的核心.格式:SELECT [ALL|DISTINCT] */目标列表达式[,目标列表达式2…]FROM 表名/视图名[WHERE 条件表达式][GROUP BY 列名1 [HAVING 条件表达式]][ORDER BY 列名2 [ASC/DESC]];5.4 SQL的数据查询(Cont.)其中:SELECT:表示查询ALL:显示所有满足条件的元组DISTINCT:消除重复元组*:所有列目标列表达式:查询结果,可以有函数运算FROM:从哪些表或视图中查询WHERE:查询条件GROUP BY:按指定的列分组,例如,计算每个学生平均成绩时,要按学号分组HAVING:GROUP BY分组的条件ORDER BY:输出时按指定列排序ASC:升序(缺省值)DESC:降序5.4 SQL的数据查询(Cont.)1. 单表查询(1) 查询指定列例:查询全体学生的学号和姓名.SELECT Sno,SnameFROM Student;在表Student对Sno,Sname进行投影相当于:Π(Student)Sno,SnameSnameSno5.4 SQL的数据查询(Cont.)(2) 按用户要求的顺序查询指定列例:查询全体学生的姓名,学号和所在系的系名. SELECT Sname,Sno,DnameFROM Student;查询结果列的顺序可以与表中列的顺序不一致.SnameSno Dname5.4 SQL的数据查询(Cont.)(3) 查询全部列例:查询全体学生的全部数据.方法1SELECT Sno,Sname,Sex,Birthday,Score,DnameFROM Student;方法2SELECT *FROM Student;5.4 SQL的数据查询(Cont.) (4) 查询经过计算的值例:查询全体学生的学号,姓名和出生年份.SELECT Sno,Sname,YEAR(Birthday)FROM Student;计算学生的年龄:SELECT Sno,Sname,YEAR(GETDATE( ))-YEAR(Birthday) FROM Student;计算学生出生的月份:SELECT Sno,Sname,MONTH(Birthday)FROM Student;5.4 SQL的数据查询(Cont.)(5) 消除取值重复的元组例:查询所有课程名称.SELECT DISTINCT CnameFROM Course;例:查询所有系名.SELECT DISTINCT DnameFROM Student;(6) 查询满足条件的元组查询条件可以通过WHERE 子句实现,其常用的条件有:IN, NOT IN 集合LIKE, NOT LIKE 字符匹配IS NULL,IS NOT NULL 空值AND,OR 多重条件BETWEEN AND, NOT BETWEEN AND 范围=, >, <, <=, >=, !=(<>), !<,!>比较谓词条件5.4 SQL 的数据查询(Cont.)5.4 SQL的数据查询(Cont.)1) 比较大小例:查询“计算机”系全体学生的学号和姓名.SELECT Sno,SnameFROM StudentWHERE Dname=‘计算机’;例:查询全体21岁以下学生的学号和姓名.SELECT Sno,SnameFROM StudentWHERE YEAR(GETDATE( ))-YEAR(Birthday)<=21;5.4 SQL的数据查询(Cont.)2) 在一个范围内查询例:查询全体年龄在20至23岁的学生的学号和姓名. SELECT Sno,SnameFROM StudentWHERE YEAR(GETDATE( ))-YEAR(Birthday)BETWEEN20 AND23;例:查询全体年龄不在20至23岁的学生的学号和姓名. SELECT Sno,SnameFROM StudentWHERE YEAR(GETDATE( ))-YEAR(Birthday)NOT BETWEEN20 AND23;5.4 SQL的数据查询(Cont.)3) 条件为一个集合例:查询“计算机”系和“电气工程”系全体学生的全部数据. SELECT *FROM StudentWHERE Dname IN(‘计算机’,’电气工程’);括号中的内容为一个集合,相当于:SELECT *FROM StudentWHERE Dname=‘计算机’OR Dname=’电气工程’;若查询不是上述系的学生,可用条件:WHERE Dname NOT IN(‘计算机’,’电气工程’);5.4 SQL的数据查询(Cont.)4)字符匹配用谓词LIKE表示字符串匹配,形式为:[NOT] LIKE ‘匹配串’[ESCAPE ‘换码字符’]匹配串中:%表示任意长度的字符串;_表示任意单个字符例:查询“本科生05级03系”学生的全部数据.SELECT *FROM StudentWHERE Sno LIKE‘10503%’;若查询除“本科生05级03系”学生的全部数据,则条件可改为:WHERE Sno NOT LIKE’10503%’;若查询全校“03系”学生的全部数据,则条件可改为:WHERE Sno LIKE’_ _ _03%’;5.4 SQL的数据查询(Cont.)例:查询姓名中有“伟”字的学生的全部数据.SELECT *FROM StudentWHERE Sname LIKE‘%伟%’;若查询所有姓“王”的且姓名仅为两个汉字的学生的全部数据WHERE Sname LIKE‘王_’;若查询的字符串中包含%或_,可用转意符ESCAPE‘<转换码>’例:查询名称为“DB_Design”课程的课号和学分.SELECT Cno,creditFROM CourseWHERE Cname LIKE‘DB\_Design’ESCAPE‘\’;其中:\为转换码,表示该字符码后面的‘\’或‘%’不再具有匹配符的意义,而表示该字符本身.5.4 SQL的数据查询(Cont.)5)空值查询例:查询所有选课但未参加考试学生的学号和课号. SELECT Sno,CnoFROM SCWHERE Grade IS NULL;成绩为空值若查询所有有成绩的学生的学号和课号:WHERE Grade IS NOT NULL;6)多重条件查询例:查询“计算机”系年龄在21岁以下的学生的学号和姓名. SELECT Sno,Sname FROM StudentWHERE Dname=‘计算机’AND YEAR(GETDATE())-YEAR(Birthday) <=21;5.4 SQL的数据查询(Cont.)(7) 对查询结果排序用ORDER BY子句,ASC表示升序,DESC表示降序.例:查询选修了“101001”号课程的学生学号和成绩,并按成绩从高到低排序.SELECT Sno,GradeFROM SCWHERE Cno=‘101001’ORDER BY Grade DESC;若先按成绩从高到低排序,成绩相同者按学号从小到大排序.ORDER BY Grade DESC,Sno;5.4 SQL的数据查询(Cont.)(8) 集函数统计元组个数:COUNT([DISTINCT|ALL]|*)统计一列中值的个数:COUNT([DISTINCT|ALL]<列名>) 对一列求和:SUM([DISTINCT|ALL]<列名>)对一列求平均值:AVG([DISTINCT|ALL]<列名>)求一列中最大值:MAX([DISTINCT|ALL]<列名>)求一列中最小值:MIN([DISTINCT|ALL]<列名>) DISTINCT: 消除重复元组ALL: 所有元组,缺省值例:统计学生总数.SELECT COUNT (*) FROM Student;例:统计男生人数.SELECT COUNT (*) FROM Student WHERE Sex=‘男’;例:统计选修了课程的学生人数.SELECT COUNT (DISTINCT Sno) FROM SC;在SC 中对Sno 投影,然后统计去掉重复元组后的记录个数.例:查找选修“101001”号课程的学生最高分.SELECT MAX (Grade) FROM SCWHERE Cno=‘101001’;5.4 SQL 的数据查询(Cont.)怎样获得尚未选课的学生人数?怎样获得女生人数?例:计算选修“101001”号课程的学生平均成绩.SELECT AVG (Grade) FROM SC WHERE Cno=‘101001’;若显示课号及平均成绩,则:SELECT Cno,AVG (Grade) FROM SCWHERE Cno=‘101001’GROUP BY Cno;例:统计每个学生的平均成绩.SELECT Sno, AVG (Grade) FROM SCGROUP BY Sno;按课号分组5.4 SQL 的数据查询(Cont.)5.4 SQL的数据查询(Cont.)(9) 对查询结果分组分组方法用GROUP BY子句将查询结果按某一列或多列值分组,值相等的为一组.分组的目的进一步细化集函数的作用对象.例:求各门课程的课号及其选修该课的人数.SELECT Cno,COUNT(Sno) FROM SC GROUP BY Cno;例:求每一个学生的平均成绩.SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno;5.4 SQL的数据查询(Cont.)若分组后还要按一定条件进行筛选, 可以用HAVING短语指定筛选条件.例:查询选修了3门以上课程的学生学号.SELECT Sno FROM SC GROUP BY SnoHAVING COUNT(*)>=3;先用GROUP语句进行分组,对每组用COUNT统计元组个数,对于每组元组个数大于等于3的学号进行输出.注意WHERE与HAVING语句的区别WHERE:作用于基本表或视图,选择满足条件的元组HAVING:作用于GROUP分成的子组,选择满足条件的组。

(完整版)第5章查询和视图测试题

(完整版)第5章查询和视图测试题

(完整版)第5章查询和视图测试题第3章查询和视图⼩测⼀、选择题(每题2分,共70分,答案写在题号前)1.下列利⽤“项⽬管理器”新建查询的操作中,正确的是()。

DA.打开“项⽬管理器”,单击“代码”选项卡,选定“查询”,单击“新建”按钮B.打开“项⽬管理器”,单击“⽂档”选项卡,选定“查询”,单击“新建”按钮C.打开“项⽬管理器”,单击“数据”选项卡,选定“查询”,单击“运⾏”按钮D.打开“项⽬管理器’,单击“数据”选项卡,选定“查询”,单击“新建”按钮2.打开“查询设计器”的命令是()。

CA.OPEN QUERY B.OPEN VIEW C.CREA TE QUERY D.CREATE VIEW3.在“查询设计器”的“字段”选项卡中设置字段时,如果将“可⽤字段”列表框中的所有字段⼀次移到“选定字段”列表框中,可单击()按钮。

DA.“添加”B.“全部移去” C.“移去”D.“全部添加”4.下列关于视图说法错误的是______。

DA.视图是在数据库表基础上创建的⼀种虚拟表B.视图兼有表和查询的特点C.视图分为本地视图和远程视图D.视图可以脱离数据库使⽤5.在“查询设计器”中,⽤来指定是否有重复记录属性的是()选项卡。

AA.“杂项,,B.“字段”C.“联接”D.“筛选”6. 运⾏查询⽂件cx.qpr的命令是()。

CA)USE cx B)USE cx.qpr C)DO cx.qpr D)DO cx7.“查询设计器”中的“筛选”选项卡的作⽤是()。

CA.增加或删除查询的表B.观察查询⽣成的SQL代码C.指定查询记录的条件D.选择查询结果的字段组织数据8.默认的表间联接类型是()。

AA.内部联接B.左联接 C.右联接 D.完全联接9.在VisualFoxPro中,查询结果以⽂件的形式保存起来,查询⽂件的扩展名为()。

DA..dbfB..sql/doc/9a14638107.html,D..qpr10.“查询设计器”中的“排序依据”选项卡⽤来设置()。

第五章 SQL语言、查询和视图

第五章 SQL语言、查询和视图

——Visual FoxPro 6.0数据库应用基础第二部分数据库操作第五章SQL 语言、查询和视图5.1 SQL语言5.3 视图第四章查询和统计⏹掌握并熟练运用SQL语言⏹掌握视图的概念学习目标数据库应用基础5. 1 SQL语言返回SQL 是结构化查询语言(Structured Query Language ,SQL )的缩写,它是一个通用的,功能极强的关系数据库的标准语言。

它与VFP 的其它表操作命令相独立,即可以独立使用。

如SQL 操作表时,不用USE 命令打开表1. SQL 语言具有以下特点⏹⏹高度非过程化⏹面向集合的操作方式⏹以同一种语法结构提供两种使用方式⏹语言简洁,易学易用2. SQL 语言具有以下功能(1)数据定义功能:用于定义数据表的结构,如创建、修改或删除数据表命令:CREATE 、ALTER 、DROP(2)数据操纵命令:SELECT(3)数据查询功能:用于查询数据命令:INSERT 、UPDATE 、DELETE(4)数据控制功能:用于控制用户对数据表的访问权限等命令:由于VFP 在安全控制方面的缺陷,没提供数据控制命令。

5.1.1数据定义语言SQL 语言使用数据定义语言(Date Definition Language ,简称DDL )实现其数据定义功能,可对数据库用户、基本表、视图、索引进行定义和撤消。

DDL 的命令及功能1.建立表结构命令CREATE TABLE创建数据表时已经打开了一个数据库,则所创建的数据表将自动添加到该数据库中,否则将生成自由表。

【命令】(<字段名1> <字段类型>[<字段宽度> [,小数位]][CHECK <表达式> [ERROR <提示信息>]][PRIMARY KEY/UNIQUE][,<字段名2> …])5.1.1数据定义语言5.1.1数据定义语言【说明】①FREE 指定创建自由表,当数据库没有打开时,不必指定该项.②命令中常见的字段数据类型和字段宽度及小数位数③NULL/NOT NULL 表示是否允许字段值为空值。

ch5 数据库系统概念(第6版)第五章高级SQL

ch5 数据库系统概念(第6版)第五章高级SQL
函数/过程可以用SQL语言书写,也可以使用其他外部 程序语言. 函数对于特殊新的数据类型,例如图片和几何对象特 别有用. 例如: 用于检查多边形是否重叠,或者比较图片相 似性的函数. 一些数据库系统支持表值函数, 返回一个关系作为结果. 循环, if-then-else, 赋值
SQL:1999 还支持大量的命令式结构,例如
存储过程
存储过程的优点:
使用存储过程可以减少网络流量 增强代码的重用性和共享性 使用存储过程可以加快系统运行速度 使用存储过程保证安全性
存储过程的创建
写SQL语句 测试SQL语句 如得到所需结果,则创建结果 执行过程
触发器
触发器
触发器 是一条语句,当对数据库做修改时,它自动被系 统执行. 要设置触发器机制,必须满足: 指明什么条件下触发器被执行. 指明触发器执行的动作是什么. SQL-92 标准并不包括触发器,但是许多DB系统支持触发 器。 触发器于SQL:1999被引进到SQL标准 , 但是更早就通过非 标准语法被大部分数据库所支持.
SQL允许用if-then-else语句,for和while循环,等等 ,来定义过程.
存储过程
可以在数据库中存储过程 然后通过call语句来执行 允许外部应用程序对数据库进行操作,而无需了解内 部细节
面向对象方面将在22章介绍 (基于对象的数据库)*
函数和过程
SQL:1999 支持函数和过程
过程结构*
注意: 大部分数据库系统对下列标准语法实现了自 己的变种 复合语句: begin … end, While 和 repeat 语句:
end while
repeat
set n = n + 1

VFP SQL查询ppt课件

VFP SQL查询ppt课件

记录1 记录2 记录3 记录4 记录5 记录6
记录2
where
记录4 记录5
限定 记录6
Group by
分组
记录2
记录2
记录5 记录4
Having 记录5
记录6 限定
【例】求各门课程的平均成绩。
SELECT 课程号,AVG(成绩) FROM xkcjb GROUP BY
结果如图所示。
【例】求平均成绩在80分以上的各课程的课程号与 平均成绩。
英语3班
英语3班
机械制造4班 机械制造4班 机械制造4班 机械制造4班
照片
gen gen gen gen gen gen
gen
gen
gen gen gen gen
简历
memo memo memo memo memo memo
memo
memo
memo memo memo memo
(c) 学号 20050010 20050010 20050020 20043567 20043567 20050025 20050010 20050010 20050005 20050025 20045643 20050035 20045643
SELECT * FROM kcb ORDER BY 学分
结果按学分从低到高显示。
【例】 按学号升序,相同学号再按成绩降序查询出 全部学生成绩情况。
SELECT * FROM xkcjb ORDER BY 学号,成绩 DESC
5)带计算函数的查询
在SELECT语句中,使用SQL语言提供的一些 查询计算函数,可以增强查询功能。基本的查询 计算函数的格式及功能如下表所示。

1987-7-2
何芳
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(2)FROM子句列出包含所要查询数据的表;
(3)WHERE子句提供SQL只查询某些行的数据,也就是执 行查询的条件;
(4)GROUP BY用以指定汇总查询,即不是对每一行产生一 个查询结果,而是行记录进行分组,再对每一组产生一 个汇总结果;
(5)HAVING子句告诉SQL只产生由GROUP BY得到的某些 组的结果;
COUNT
SELECT COUNT (*) AS 及格人数 From student_course WHERE grade>=60
13
SQL语言支持五个集合函数 :
函数 AVG(字段名) SUM(字段名)
COUNT([DISTINCT] 字段名)
COUNT(*) MIN(字段名) MAX(字段名)
WHEN balance<100 Tgt; 1000 THEN balance*0.20
WHEN ELSE balance*0.10
缺少配对的END
去掉WHEN
FROM bank WHERE userName='张三‘
GO
3
掌握模糊查询 掌握聚合函数 掌握分组汇总 掌握多表联接查询 掌握简单子查询的用法 掌握IN子查询的用法 掌握EXISTS子查询的用法 应用T-SQL进行综合查询
11
问题
成绩表中存储了所有学生的成绩,我想知道: 学生的总成绩、平均成绩、有成绩的学生总共有多少名 怎么办?
12
SUM SELECT SUM(price) FROM book
5.2聚合函数
AVG、MAX、MIN
SELECT AVG(grade) AS 平均成绩, MAX (grade) AS 最高分, MIN (grade) AS 最低分 From student_course WHERE grade >=60
(6)ORDER BY子句将查询结果按照一列或多列中的数据排 6序。
5.1模糊查询—LIKE
思查考询:时以下,的字S段QL中语的句内: 容并不一定与查询内容完全 匹配,只要字段中含有这些内容
SELECT * FROM 数据表 WHSEELREECT编SN号amLeIKAES 姓'00名[^F8R]%OM[AS,Ctu]d%en‘ ts
4
目标
SELECT语句的语法形式
命令格式:
SELECT [ALL|DISTINCT] 字段名列表[AS 标题名] [INTO [TABLE|CURSOR]新表名]
FROM [数据库名1.]<表1>[AS<表1的别名>][, [数据库名2.]<表2>[AS<表2的别名>][,…]]
[WHERE 筛选条件] [GROUP BY 分组表达式] [HAVING 分组条件] [ORDER BY 排序表达式 [ASC|DESC]]
WHERE SName LIKE '张%'
可能会查询出的编号值为( )。
ABCD、、、、900K800K97880_&CAADCFCF姓D张张张G名果飞扬老 出去
7
模糊查询—IS NULL
把某一字段中内容为空的记录查询出来
猜SE一LE猜CT:s把tudSetnut_dNeanmte表A中s 姓某名些,h行om的e_haoddmr eA_Sa地dd址r字段值删掉后: —FR—OM使St用udIeSntNWUHLELR能E h查om询e_出ad来dr这IS些NU数LL据行吗? —— 怎么查询出这些行来?
功能:对一个或多个表进行查询操作,按其需求将表中的
记录进行筛选、分组、排序,从而生成一个结果集,也 可以将该结果集生成新表。
说明:
5
说明:
(1)SELECT子句列出所有要求SELECT语句查询的数据项, 如指定AS,输出以指定的标题名作为字段名输出。如指 定INTO新表名,则将查询的结果作为新表保存;
学员姓名 李扬 于紫电 李青霜 司马弓 …
10
地址 长沙 江苏 南京 上海

课堂练习
查询教师表teacher中职称为教授、副教授的记录 查询student表中年龄在20到25岁之间的记录
提示:year(getdate)-year(birth)算出年龄。Between and
查询student表中姓‘李’的记录
第五章 高级查询
ACCP V4.0
回顾
指出下列语句的错误:
CREATE TABLE bank
(
userName VARCHAR(10),
balance MONEY
建表语句后必须添加GO标志
)
INSERT INTO bank(cardNo,userName,balance)
VALUES('张三',500)
2
WHERE userName='张三’
回顾
IF @mymoney<100
多条语句添加BEGIN-END
print '卡上目前余额不足100,请及时充值!'
print '卡上余额为:'+@mymoney
转换:convert(varchar(5), @mymoney)
print '您的年利息为:'
SELECT 利息=CASE
INSERT INTO bank(cardNo,userName,balance)
VALUES('李四',700)
DECLARE @mymoney INT
DECLARE mymoney INT(4)
mymoney=0
SET @mymoney=0
SELECT mymoney=balance FROM bank
Student_ID g9940202 g9940204 g9940205 … …
9
Grade
78 68 78 … …
模糊查询—IN
把某一字段中内容与所列出的查询内容列表匹配 的记录查询出来
SELECT student_Name As 姓名 ,home_addr AS 地址 FROM Student WHERE substring(home_addr,1,2) in('长沙','南京','江苏')
姓名 李红 左群声
地址 NULL NULL
8
模糊查询—BETWEEN
把某一字段中内容在特定范围内的记录查询出来
SELECT Student_ID, grade FROM student_course WHERE course_id='dep04_s002' and grade BETWEEN 60 AND 80
相关文档
最新文档