SQL实验四:数据库的查询和视图
实现SQL Server数据库中的视图和查询
![实现SQL Server数据库中的视图和查询](https://img.taocdn.com/s3/m/915203140b4e767f5acfce24.png)
(9)VIEW_METADATA:指定为引用视图的查询 请求浏览模式的元数据时,SQL Server 将向 DBLIB、 ODBC 和 OLE DB API 返回有关视图的元数据信息, 而不是返回基表或表。浏览模式的元数据是由 SQL Server 向客户端 DB-LIB、ODBC 和 OLE DB API 返 回的附加元数据,它允许客户端 API 实现可更新的客 户端游标。浏览模式的元数据包含有关结果集内的列所 属的基表信息。 对于用 VIEW_METADATA 选项创建 的视图,当描述结果集中视图内的列时,浏览模式的元 数据返回与基表名相对的视图名。当用 VIEW_METADATA 创建视图时,如果该视图具有 INSERT 或 UPDATE INSTEAD OF 触发器,则视图 的所有列(timestamp 除外)都是可更新的。
(3)定义视图的语句是一个 SELECT查询语句。 该语句可以使用多个表或其它视图。若要从创 建视图的 SELECT 子句所引用的对象中选择, 必须具有适当的权限。视图不必是具体某个表 的行和列的简单子集。可以用具有任意复杂性 的 SELECT 子句,使用多个表或其它视图来创 建视图。 (4)在索引视图定义中,SELECT 语句必须是 单个表的语句或带有可选聚合的多表 JOIN。
SELECT子句
SELECT子句用于指定要返回的列,其完整的 语法如下: SELECT [ ALL│DISTINCT ] [ TOP n [PERCENT]] 列名 [[AS] 别名]│别名=表达式 } [ ,...n ]
FROM子句
只要SELECT子句有要查询的列,就必须使 用FROM子句指定进行查询的单个或者多个表。 此外,SELECT语句要查询的数据源除了表以外 还可以是视图,视图相当于一个临时表,其语 法格式如下:
数据库实验4_数据库查询与视图
![数据库实验4_数据库查询与视图](https://img.taocdn.com/s3/m/0daad9242f60ddccdb38a006.png)
在学生选课数据库中完成规定查询,并创建视图。
1.查询线性代数不及格的同学的学号和姓名;SQL语句为:SELECT名单$.学号,姓名FROM名单$,学生选课信息和成绩$,课程$WHERE名单$.学号=学生选课信息和成绩$.学号AND课程$.课号=学生选课信息和成绩$.课号AND课程$.课程名='线性代数'AND学生选课信息和成绩$.成绩<60;执行后结果为:2.查询没有选课记录的同学的所有基本信息;SQL语句为:SELECT*FROM名单$WHERE NOTEXISTS(SELECT*FROM学生选课信息和成绩$WHERE学号=名单$.学号);执行后结果为:3.查询具有简介先修课的课程信息及对应的先修课名;SQL语句为:SELECTFIRST.课号,SECOND.课程名FROM课程$FIRST,课程$SECONDWHEREFIRST.先修课号=SECOND.课号;执行后结果如下:4.统计高等数学(1)的平均成绩;SQL语句为:SELECT AVG(成绩)FROM学生选课信息和成绩$,课程$WHERE学生选课信息和成绩$.课号=课程$.课号AND课程$.课程名='高等数学(1)'; 执行后结果如下:5.统计各门课的选课人数;SQL语句为:SELECT课号,COUNT(学号)FROM学生选课信息和成绩$GROUPBY课号;执行后结果为:6.查询选修5门课以上的学生的学号;SQL语句为:SELECT学号FROM学生选课信息和成绩$GROUPBY学号HAVING COUNT(*)>5;执行后结果为:7.用你的学号查询和你一个班的同学的学号和姓名;SQL语句为:SELECT学号,姓名FROM名单$WHERE班级IN(SELECT班级FROM名单$WHERE学号='201000800145');执行后结果如下:8.查询高等数学(1)成绩比你高出10分以上的同学的姓名和对应成绩;SQL语句为:SELECT姓名,成绩FROM名单$,学生选课信息和成绩$WHERE名单$.学号=学生选课信息和成绩$.学号AND学生选课信息和成绩$.课号='82006010'AND成绩>(SELECT成绩+10FROM学生选课信息和成绩$,课程$WHERE学生选课信息和成绩$.课号=课程$.课号AND课程$.课程名='高等数学(1)' AND学生选课信息和成绩$.学号='201000800145')执行后结果为:9.找到每门课获得最高成绩的同学的学号、姓名、课名和成绩;选做。
数据库的视图操作实验报告
![数据库的视图操作实验报告](https://img.taocdn.com/s3/m/6842ebb5960590c69ec37672.png)
实验(四)数据库的视图操作实验一、实验目的和要求(1)掌握SQL Server中的视图创建向导和图表创建向导的使用方法;(2)加深对视图和SQL Server图表作用的理解。
(3)掌握数据库安全性的操作方法。
二、实验内容和原理1. 基本操作实验(1)在SQL Server企业管理器中调出Create View Wizard(创建图表向导),按下列Transact-SQL描述的视图定义,创建借阅_计算机图书视图。
CREATE VIEW 借阅_计算机图书AS SELECT 图书.*,借阅.*FROM 图书,借阅WHERE图书.编号=借阅.书号AND图书.类别=‘计算机’(2)在SQL server企业管理器中调出Create View Wizard(创建图表向导),完成在图书-读者数据库中建立一个图书_借阅图表操作。
要求该图表包括图书和借阅两个表,并包括图书与借阅之间的“图书.书号=借阅.书号”外码与被参照表之间的关联。
(3)查看上述实验结果。
如果结果有误,予以纠正。
2. 提高操作实验在学生-课程数据库中用Transact-SQL语句描述下列视图定义。
(1)从学生表中建立查询所有男(女)生信息的视图STU_SEX。
视图的列名为SNO、SNAME、SSEX和SAGE。
(2)从课程表中建立查询所有课程先修课信息的视图课程_PRE。
视图的列名为课程号、课程名称和先修课名称。
(3)从选修表中建立查询成绩大于等于80信息的视图STU_CJ1。
视图的列名为学号、课程号和成绩。
(4)从学生、选修和课程三个表建立查询学生选修情况的视图STU_CJ2。
视图的列名为姓名、课程名称和成绩。
(5)从学生、选修和课程三个表建立查询学生选修情况并且成绩小于80的视图STU_CJ3。
视图的列名为姓名、课程名称和成绩。
(6)利用Transact-SQL命令修改视图STU_SEX。
把视图的列名改为学号、姓名、性别和年龄,把加上“WITH CHECK OPTION”选项。
实现SQLServer数据库中的视图和查询
![实现SQLServer数据库中的视图和查询](https://img.taocdn.com/s3/m/ba5a98364431b90d6c85c762.png)
2.视图
视图看上去同表似乎一模一样,具有一组命名的 字段和数据项,但它其实是一个虚拟的表,在物理上 并不实际存在。视图是由查询数据库表产生的,它限 制了用户能看到和修改的数据。视图一旦定义后,就 可以和基本表一样被查询、被删除,也可以在一个视 图基础上再定义新的视图。 视图兼有表和查询的特点:与查询相类似的是, 视图可以用来从一个或多个相关联的表或视图中提取 有用信息;与表相类似的是,视图可以用来更新其中 的信息,并将更新结果永久保存在磁盘上。我们可以 用视图使数据暂时从数据库中分离成为游离数据,以 便在主系统之外收集和修改数据。
3、使用DROP VIEW删除视图 删除视图的语法格式如下。 DROP VIEW 视图名1,…,视图名n 使用该语句一次可以删除多个视图。
§4 通过视图访问数据 使用视图管理表中的数据包括插入、更新 和删除三种操作,在操作时要注意以下几点: 修改视图中的数据时,可以对基于两个以 上基表或视图的视图进行修改,但是不能同时 影响两个或者多个基表,每次修改都只能影响 一个基表。 不能修改那些通过计算得到的列,例如年龄 和平均分等。 若在创建视图时定义了 WITH CHECK OPTION选项,那么使用视图修改基表中的数 据时,必须保证修改后的数据满足定义视图的 限制条件。
二、视图的优缺点
当对通过视图看到的数据进行修改时,相应 的基本表的数据也要发生变化,同时,若基本表 的数据发生变化,则这种变化也可以自动地反映 到视图中。 视图有很多优点,主要表现在: 1、视点集中 视图集中即是使用户只关心它感兴趣的某些 特定数据和他们所负责的特定任务。这样通过只 允许用户看到视图中所定义的数据而不是视图引 用表中的数据而提高了数据的安全性。
数据库实验4 SQL的视图、数据控制
![数据库实验4 SQL的视图、数据控制](https://img.taocdn.com/s3/m/4b428f2c647d27284b7351cb.png)
实验四SQL的视图、数据控制[实验目的]1.理解SQL的视图以及与基本表的区别;2.掌握SQL视图的定义、查询、更新。
3.掌握SQL Server中有关用户、权限的管理方法。
4.掌握SQL语言的控制功能5.加深对数据库安全性的理解[实验时数] 2 学时[实验内容]1.创建、查看、修改和删除视图。
2.创建、编辑和删除数据库图表。
[实验方法]1. 创建视图假设在图书—读者数据库已经建立了图书、读者和借阅3个表,它们的结构为:图书(书号,类别,出版社,作者,书名,定价);借阅(书号,读者书证号,借阅日期);读者(书证号,姓名,单位,性别,电话)。
如果要在上述3个表的基础上建立一个视图,取名为: 读者_VIEW。
其操作用SQL语句表示为:CREATE VIEW 读者_VIEWAS SELECT图书.*,借阅.*FROM 图书,借阅,读者WHERE 图书.书号=借阅.书号AND 借阅.读者书证号=读者.书证号;下面利用SQL Server 2000中提供的视图创建向导,来创建读者_VIEW视图。
1)打开企业管理器窗口,确认服务器,打开数据库文件夹,选中新视图所在的数据库。
2)选择菜单:工具 向导,如图5- 错误!未定义书签。
所示。
3)在如图5-18所示的向导选择对话框中,单击数据库左边的“+”号,使之展开。
选择“创建视图向导”选项,单击[确定]按钮。
4)进入创建视图向导后,首先出现的是欢迎进入创建视图向导对话框,其中简单介绍了该向导的功能,如图5- 错误!未定义书签。
所示。
单击[下一步]按钮后,就会出现如图5-20所示的“选择数据库名称”对话框。
5)在“选择数据库名称”对话框中,选择视图所属的数据库。
本例的数据库为“图书_读者”。
单击[下一步]按钮,则进入如图5- 错误!未定义书签。
所示的选择表对话框。
签。
在向导对话框中选择视图向导图5- 错误!未定义书签。
欢迎进入创建视图向导对话框图5- 错误!未定义书签。
SQL Server2016实用教程 第4章 数据库的查询和视图
![SQL Server2016实用教程 第4章 数据库的查询和视图](https://img.taocdn.com/s3/m/9b897287d1f34693daef3e90.png)
8.聚合函数
(1)SUM和AVG。 SUM和AVG分别用于求表达式中所有值项的总和与平均值,格式为:
SUM /AVG ( [ ALL | DISTINCT ] 表达式 ) 其中,“表达式”可以是常量、列、函数或表达式,其数据类型只能是int、smallint、
tinyint、bigint、decimal、numeric、float、real、money和smallmoney。 【例4.8】 求所有课程的总学分和选修101课程的学生的平均成绩。
1.选择所有列
执行结果如图4.1所示。
2.选择一个表中指定的列
可选择一个表中的部分列,各列名之间要以逗号分隔。 【例4.2】 查询xsb表中计算机专业学生的学号、姓名和总学分。 T-SQL命令如下, SELECT 学号, 姓名, 总学分 FROM xsb WHERE 专业 = '计算机'
3.定义列别名
第4章 数据库的查询和视图
——数据库的查询
数据库的查询
下面介绍SELECT语句,它是T-SQL的核心。语法主体格式如下:
SELECT <输出列> [ INTO 新表 ] [ FROM { <表源> } [ , ... ] ] [ WHERE <条件> ] [GROUP BY <分组条件> ] [ HAVING <分组统计条件>] [ ORDER BY <排序顺序>] [ FOR 子句] [ORVER 子句] [OPTION 子句] /*指定查询结果输出列*/ /*指定查询结果存入新表*/ /*指定查询源:表或视图*/ /*指定查询条件*/ /*指定查询结果分组条件*/ /*指定查询结果分组统计条件*/ /*指定查询结果排序顺序*/ /*指定查询结果 */ /*确定行集的分区和排序 */ /*指定的查询提示 */
实现SQLServer数据库中的视图和查询
![实现SQLServer数据库中的视图和查询](https://img.taocdn.com/s3/m/25428bf3ce2f0066f533226e.png)
1.基本表 基本表是独立存在的表。在SQL Server中 创建了一个基本表,那么可以在表中添加记 录,这些记录存放在硬盘上。“学生表”、 “课程表”、“成绩表”等等,都是基本表。
2.视图
视图看上去同表似乎一模一样,具有一组命名的 字段和数据项,但它其实是一个虚拟的表,在物理上 并不实际存在。视图是由查询数据库表产生的,它限 制了用户能看到和修改的数据。视图一旦定义后,就 可以和基本表一样被查询、被删除,也可以在一个视 图基础上再定义新的视图。 视图兼有表和查询的特点:与查询相类似的是, 视图可以用来从一个或多个相关联的表或视图中提取 有用信息;与表相类似的是,视图可以用来更新其中 的信息,并将更新结果永久保存在磁盘上。我们可以 用视图使数据暂时从数据库中分离成为游离数据,以 便在主系统之外收集和修改数据。
6、安全性 视图可以作为一种安全机制。通过视图用 户只能查看和修改他们所能看到的数据。其它 数据库或表既不可见也不可以访问。如果某一 用户想要访问视图的结果集,必须授予其访问 权限。视图所引用表的访问权限与视图权限的 设置互不影响。 7、视图的缺点 视图的缺点主要表现在其对数据修改的限 制上。
三、使用视图的场合 1)表的行或列的子集。 2)两个或多个表的联合。 3)两个或多个表的连接。 4)其他视图的子集。 5)视图与表的组合。
参数说明: (1)视图名称必须符合标识符规则。可以选择是 否指定视图所有者名称。 (2)CREATE VIEW子句中的列名是视图中显示 的列名。只有在下列情况下,才必须命名 CREATE VIEW 子句中的列名:当列是从算术 表达式、函数或常量派生的,两个或更多的列可 能会具有相同的名称(通常是因为联接),视图 中的某列被赋予了不同于派生来源列的名称。当 然也可以在 SELECT 语句中指派列名。 注意:如果未指定列名,则视图列将获得与 SELECT 语句中的列相同的名称。
SQL查询及视图
![SQL查询及视图](https://img.taocdn.com/s3/m/4323e6492b160b4e767fcf84.png)
• 视图和基本表不同,视图是一个虚表,数据库中只 存储视图的定义(存在数据字典中),实际的数据 不存储。 • 基本表本身是实际存在,一个基本表就是一个关系 ,它不是有其他表导出的表。 • 视图和基本表示相互联系的。 • 视图是从一个或几个基本表(或视图)导出的表, 某一用户可以定义若干个视图,因此对某一用户而 言,它的外模式是由若干个基本表和若干个视图组 成的。
(1)创建视图S1(Sno,Gavg,Cnum)将所 有成绩在80分以上的同学的学号、选修门 数组成一个视图; Create view S1(Sno, Gavg,Cnum) As Select Sno,Avg(grade),Count(Cno) From SC Where Grade>=80 Group by Sno
• [题5] 已知一个关系数据库的模式如下: S(SNO,SNAME,SCITY) P(PNO,PNAME,COLOR,WEIGHT) J(JNO,JNAME,JCITY) SPJ(SNO,PNO,JNO,QTY) 其中S表示供应商,它的各属性依次为供应商号, 供应商名,供应商所在城市; • P表示零件,它的各属性依次为零件号,零件名, 零件颜色,零件重量; • J表示工程,它的各属性依次为工程号,工程名, 工程所在城市; • SPJ表示供货关系,它的各属性依次为供应商号, 零件号,工程号,供货数量。 请用SQL语句分别表示下面两个查询要求: ⑴找出北京的任何工程都不购买的零件的零件号。 ⑵按工程号递增的顺序列ROM P WHERE NOT EXISTS (SELECT * FROM SPJ,S WHERE SPJ.SNO=S.SNO AND SPJ.PNO=P.PNO AND S.SCITY=’北京’); ② SELECT JNO,SUM(QTY) FROM SPJ GROUP BY JNO ORDER BY JNO ASC;
第3-A章 MySQL数据库的查询和视图
![第3-A章 MySQL数据库的查询和视图](https://img.taocdn.com/s3/m/a71991a4f524ccbff1218401.png)
4.2.3 FROM子句 FROM子句
前面介绍了使用SELECT子句选择列,本小节讨论SELECT查询的对象 子句选择列,本小节讨论 前面介绍了使用 子句选择列 查询的对象 即数据源)的构成形式。 的查询对象由FROM子句指定,其格式 子句指定, (即数据源)的构成形式。SELECT的查询对象由 的查询对象由 子句指定 为: FROM table_reference [ , table_reference] … table_reference中可以包含一个或多个表: 中可以包含一个或多个表: 中可以包含一个或多个表 ● 引用一个表: 引用一个表: 可以用两种方式引用一个表,第一种方式是使用USE语句让一个数据库成 可以用两种方式引用一个表,第一种方式是使用 语句让一个数据库成 为当前数据库,在这种情况下,如果在FROM子句中指定表名,则该表应该属 为当前数据库,在这种情况下,如果在 子句中指定表名, 子句中指定表名 于当前数据库。第二种方式是指定的时候在表名前带上表所属数据库的名字。 于当前数据库。第二种方式是指定的时候在表名前带上表所属数据库的名字。 例如,假设当前数据库是db1,现在要显示数据库 里的表tb的内容 例如,假设当前数据库是 ,现在要显示数据库db2里的表 的内容,使 里的表 的内容, 用如下语句: 用如下语句: SELECT * FROM db2.tb; 当然, 当然,在SELECT关键字后指定列名的时候也可以在列名前带上所属数据 关键字后指定列名的时候也可以在列名前带上所属数据 库和表的名字,但是一般来说,如果选择的字段在各表中是唯一的, 库和表的名字,但是一般来说,如果选择的字段在各表中是唯一的,就没有必 要去特别指定。 要去特别指定。
4.2.3 FROM子句 FROM子句
表中检索出所有学生的信息, 【例4.20】 从XS表中检索出所有学生的信息,并使用表别名 】 表中检索出所有学生的信息 并使用表别名STUDENT。 。 使用如下语句: 使用如下语句: SELECT * FROM XS AS STUDENT; 引用多个表: ● 引用多个表: 如果要在不同表中查询数据,则必须在FROM子句中指定多个表。指定多 子句中指定多个表。 如果要在不同表中查询数据,则必须在 子句中指定多个表 个表时就要使用到连接。当不同列的数据组合到一个表中叫做表的连接。例如, 个表时就要使用到连接。当不同列的数据组合到一个表中叫做表的连接。例如, 数据库中需要查找选修了离散数学课程的学生的姓名和成绩, 在XSCJ数据库中需要查找选修了离散数学课程的学生的姓名和成绩,就需要将 数据库中需要查找选修了离散数学课程的学生的姓名和成绩 XS、KC和XS_KC三个表进行连接,才能查找到结果。 三个表进行连接, 、 和 三个表进行连接 才能查找到结果。
实现SQLServer数据库中的视图和查询
![实现SQLServer数据库中的视图和查询](https://img.taocdn.com/s3/m/339d2b6584254b35effd3442.png)
二、视图的优缺点
当对通过视图看到的数据进行修改时,相应 的基本表的数据也要发生变化,同时,若基本表 的数据发生变化,则这种变化也可以自动地反映 到视图中。
参数说明:
(1)视图名称必须符合标识符规则。可以选择是 否指定视图所有者名称。
(2)CREATE VIEW 子句中的列名是视图中显示 的列名。只有在下列情况下,才必须命名 CREATE VIEW 子句中的列名:当列是从算术 表达式、函数或常量派生的,两个或更多的列可 能会具有相同的名称(通常是因为联接),视图 中的某列被赋予了不同于派生来源列的名称。当 然也可以在 SELECT 语句中指派列名。
视图有很多优点,主要表现在:
1、视点集中
视图集中即是使用户只关心它感兴趣的某些 特定数据和他们所负责的特定任务。这样通过只 允许用户看到视图中所定义的数据而不是视图引 用表中的数据而提高了数据的安全性。
2、简化操作
视图大大简化了用户对数据的操作。因为 在定义视图时,若视图本身就是一个复杂查询 的结果集,这样在每一次执行相同的查询时, 不必重新写这些复杂的查询语句,只要一条简单 的查询视图语句即可。可见视图向用户隐藏了 表与表之间的复杂的连接操作。
(4)在索引视图定义中,SELECT 语句必须是 单个表的语句或带有可选聚合的多表 JOIN。
(5)在CREATE VIEW语句中,对于 SELECT 查询语句有如下限制:
创建视图的用户必须对该视图所参照或引用 的表或视图具有适当的权限。
实现SQL Server数据库中的视图和查询
![实现SQL Server数据库中的视图和查询](https://img.taocdn.com/s3/m/915203140b4e767f5acfce24.png)
(6)WITH CHECK OPT须符合由 SELECT查询语句设置的准则。通过视图修改 数据行时,WITH CHECK OPTION 可确保提 交修改后,仍可通过视图看到修改的数据。 ( 7 ) WITH ENCRYPTION : 表 示 SQL Server 加密包含 CREATE VIEW 语句文本的 系统表列。使用 WITH ENCRYPTION 可防止 将视图作为 SQL Server 复制的一部分发布。
(5)在CREATE VIEW语句中,对于SELECT 查询语句有如下限制: 创建视图的用户必须对该视图所参照或引用 的表或视图具有适当的权限。 在查询语句中,不能包含ORDER BY(如果 要包含的话SELECT子句中要用TOP n [percent])、 COMPUTE或COMPUTE BY关键字。也不能包 含INTO关键字。 不能在临时表中定义视图(不能引用临时表)。
FROM { 表名|视图名 } [ ,...n ]
当有多个数据源时,可以使用逗号“,”分隔, 但是最多只能有16个数据源。数据源也可以像 列一样指定别名,该别名只在当前的SELECT语 句中起作用,方法为:数据源名 AS 别名,或 者数据源名 别名。指定别名的好处在于以较短 的名字代替原本见名知意的长名。
二、使用指定的列 select 列名1,列名2,……,列名n from 表名/视图名 返回from中指定的表中的指定列。
三、使用TOP关键字 select top n [percent] 列名
四、使用DISTINCT关键字 使用DISTINCT关键字时, 1、无论遇到多少个空值,只返回一个。 2、表达式只包含一个列名,且不能包含算术 表达式。 3、不能包含text、ntext和image类型字段。 4、是sum、avg和count的可选关键字。
SQLSERVER2008实用教程实验参考答案解析(实验4)
![SQLSERVER2008实用教程实验参考答案解析(实验4)](https://img.taocdn.com/s3/m/240083f1cf2f0066f5335a8102d276a20029607a.png)
SQLSERVER2008实用教程实验参考答案解析(实验4)实验4 数据库的查询和视图一、SELECT语句的基本使用1. 查询Employees表中所有数据2. 查询Employees表中指定字段数据3. 查询Employees表中的部门号和性别,要求使用Distinct消除重复行4. 使用WHERE子句查询表中指定的数据查询编号为’000001’的雇员的地址和查询月收入高于2000元的员工查询1970年以后出生的员工的和住址5. 使用AS子句为表中字段指定别名查询Employees表中女雇员的地址和,并将列标题显示为地址和查询Employees表中男雇员的和出生日期,并将列标题显示为和出生日期6. 使用使用CASE子句查询Employees表中员工的和性别,要求Sex值为1时显示“男”,为0时显示“女”查询Employees表中员工的、住址和收入水平,2000元以下显示为低收入,2000~3000地显示为中等收入,3000元以上显示为高收入。
7. 使用SELECT语句进行简单计算计算每个雇员的实际收入8. 使用置函数获得员工总数计算Salary表中员工月收入的平均数获得Employees表中最大的员工计算Salary表中所有员工的总支出查询财务部雇员的最高和最低实际收入9. 模糊查询找出所有姓王的雇员的部门号找出所有地址中含有“”的雇员的及部门号找出员工中倒数第二个数字为0的员工的、地址和学历10. Between…And…和Or的使用找出收入在2000~3000元之间的雇员编号找出部门为“1”或“2”的雇员的编号11. 使用INTO子句,由源表创建新表由表Salary创建“SalaryNew”表,要求包括编号和收入,选择收入在1500元以上的雇员由表Employees创建“EmployeesNew”表,要求包括编号和,选择所有男员工二、子查询的使用1. 查找在财务部工作的雇员情况2. 用子查询的方法查找所有收入在2500以下的雇员的情况3. 查找财务部年龄不低于研发部雇员年龄的雇员4. 用子查询的方法查找研发部比所有财务部雇员收入都高的雇员的5. 查找比所有财务部的雇员收入都高的雇员的6. 用子查询的方法查找所有年龄比研发部雇员年龄都大的雇员的三、连接查询的使用1. 查询每个雇员的情况及薪水的情况2. 查询每个雇员的情况及其工作部门的情况3. 使用连接的方法查询名字为“王林”的雇员所在的部门4. 使用连接的方法查找出不在财务部工作的所有雇员信息5. 使用外连接方法查找出所有员工的月收入6. 查找财务部收入在2000元以上的雇员及其薪水详情7. 查询研发部在1976年以前出生的雇员及其薪水详请四、聚合函数的使用1. 求财务部雇员的平均收入2. 查询财务部雇员的最高和最低收入3. 求财务部雇员的平均实际收入4. 查询财务部雇员的最高和最低实际收入5. 求财务部雇员的总人数6. 统计财务部收入在2500元以上的雇员人数五、GROUP BY、ORDER BY子句的使用1. 查找Employees表中男性和女性的人数2. 按部门列出在该部门工作的员工的人数3. 按员工的学历分组,排列出本科、大专、硕士的人数4. 查找员工数超过2的部门名称和雇员数量5. 按员工的工作年份分组,统计各个工作年份的人数,例如工作1年的多少人,工作2年的多少人6. 将雇员的情况按收入由低到高排列7. 将员工信息按出生时间从小到大排列8. 在ORDER BY 子句中使用子查询,查询员工、性别和工龄信息,要求按实际收入从大到小排列六、视图的使用1. 创建视图(1)在数据库YGGL上创建视图Departments_View,视图包含Department表的全部列(2)创建视图Employees_Departments_View,视图包含员工、、所在部门名称(3)创建视图Employees_Salary_View,视图包含员工、和实际收入三列2. 查询视图从视图Employees_Salary_View中查询出为“王林”的员工的实际收入3. 更新视图(1)向视图Departments_View中添加一条记录(‘6’,‘广告部’,‘广告业务’)执行完命令后,分别查看Departments_View和Department表中发生的变化(2)尝试向Employees_Departments_View中添加一条记录,看看会发生什么情况(3)尝试向Employees_Salary_View中添加一条记录,看看会发生什么情况(4)将视图Departments_View中,部门号为‘6’的部门名称修改为‘生产车间’(5)删除视图Departments_View中最新增加的的一条记录4. 删除视图Employees_Departments_View5. 在界面工具中操作视图一、SELECT语句的基本使用1. 查询Employees表中所有数据SELECT*FROM Employees;2. 查询Employees表中指定字段数据SELECT EmployeeID,Name,DepartmentID FROM Employees;3. 查询Employees表中的部门号和性别,要求使用Distinct消除重复行SELECT Distinct DepartmentID,Sex FROM Employees;4. 使用WHERE子句查询表中指定的数据查询编号为’000001’的雇员的地址和Select Address,PhoneNumber FROM Employees WHERE EmployeeID='000001';查询月收入高于2000元的员工SELECT EmployeeID FROM Salary WHERE InCome>2000;查询1970年以后出生的员工的和住址SELECT Name,Address FROM Employees WHERE YEAR(Birthday)>'1970';SELECT Name,Address FROM Employees WHERE Birthday>'1970';5. 使用AS子句为表中字段指定别名查询Employees表中女雇员的地址和,并将列标题显示为地址和SELECT Address AS地址,PhoneNumber AS FROM Employees;查询Employees表中男雇员的和出生日期,并将列标题显示为和出生日期SELECT Name AS,Birthday AS出生日期FROM Employees WHERE Sex=1;6. 使用使用CASE子句查询Employees表中员工的和性别,要求Sex值为1时显示“男”,为0时显示“女”SELECT Name AS,CASEWHEN Sex=1 THEN'男'WHEN Sex=0 THEN'女'ENDAS性别FROM Employees;查询Employees表中员工的、住址和收入水平,2000元以下显示为低收入,2000~3000地显示为中等收入,3000元以上显示为高收入。
sql数据库的查询和视图
![sql数据库的查询和视图](https://img.taocdn.com/s3/m/1abdb905a8114431b90dd8d5.png)
第4章数据库的查询和视图一、数据的关系运算:运算的对象和结果都是表(表达方式)包括:选择、投影、连接1.选择(selection):单目运算从行方面分割表记:σF(R)其中:F为条件表达式 R为表例:σF(XS),F为性别=‘男’Λ专业名=‘计算机’2.投影(projection):单目运算从列方向分割表记:ΠA(R)其中:A为列名列表;R为表例:Π姓名,专业名,总学分(XS)3.连接(join):多目运算记:R F S 其中:F为条件表达式;R、S为表①自然连接:R S,按两表的共同属性连接例:XS XS_KC? XS XS_KC KC②条件连接:R F S,两表按下条件连接例:上例中的条件F二、数据库查询使用select 语句实现表的关系运算,用符合条件的数据构成结果表语法:select <select_list>into new_table_nameform table_sourcewhere search_conditiongroup by group_by_expressionhaving search_conditionorder by order_expression [ASC/DESC] 1.选择列①选择表中的列:select列名,列名,……(*)from表名where 条件②在结果表中使用文字串(增强检索结果的可读性)select‘串’,列名,‘串’,列名,……from表名where条件③改变结果列标题(结果表更个性化,可读性强)select列名AS新列标,列名AS 新列标,……(或新列标=列名,新列标=列名,……)from表名where条件④结果表数据替换(使检索结果更能反映出有用信息)select新列标=case when条件1 then‘串’(表达式)when条件2 then‘串’(表达式)……else表达式endfrom 表名where 条件⑤结果表中显示列计算值select表达式,表达式,……from表名⑥消除结果集中的重复行select distinct列名,列名……⑦限制结果集返回行数select top n 列名,列名……2、选择行(用where条件过滤)(紧在from之后)①表达式比较:(比较运算符)比较的表达式之一或两个为NULL时,返回unknown,否则返回true/false②模式匹配:(like谓词)[谓词:返回逻辑值的运算符、关键字]字符串表达式1 [not] like字符串表达式2 [escape‘不匹配字符’](可以使用通配符进行匹配)匹配通配符:%:任意一串字符例:select * from xs where 姓名 like‘王%’_:任意一个字符例:select * from xs where 姓名 like‘王_’[]:指定范围,如[a-z]、[0-9]、[abcde]……[^]:指定不属于范围,如[^a-z]、[^0-9]、[^abcde]③范围比较:表达式[not] between 表达式1 AND表达式2注:表达式1<=表达式2,包括表达式1和2表达式IN(表达式1,表达式2,……,表达式N)④空值比较表达式is [not] NULL⑤contains 谓词:在表中指定字符串的搜索(精确、模糊、加权匹配)contains(列/*,‘匹配串’)注:先为要操作的表建立全文索引(第六章Create Index,企业管理器)⑥freetext 谓词:与contains相似,不如contains精确freetext(列/*,‘匹配串’)⑦子查询:用另一个查询结果做为where条件的一部分,可嵌套★ IN:判断某个值是否在子查询结果中,只能返回一列数据。
视图与数据查询 SQL基本语句范文
![视图与数据查询 SQL基本语句范文](https://img.taocdn.com/s3/m/6e97e3ea0508763231121241.png)
实验四视图与数据查询一、实验目的:熟悉SQL SERVER2000系统开发环境及图形化操作,进一步了解各部分的操作掌握虚拟数据表的原理即实现方法掌握数据查询技术的构成要素及实现方法进一步熟悉企业管理器的操作方法,对比掌握数据表与视图二、实验原理:(一)查询的创建所谓查询就是根据我们的要求,在一张或多张数据表中找出满足一定条件的我们所关注的数据,排除不需要或不关心的信息。
查询的实现方法:在企业管理器中右击你想查看的表,选择“打开表”菜单项下面的“查询”命令,打开“查询设计器”窗口。
1、查询设计器(1)关系图窗格。
此区域以图形方式显示表或视图等对象以及它们之间的连接关系。
(2)网格窗格。
用户可以在此区域中指定查询选项,例如要显示哪些数据列、如何对结果进行排序以及选择哪些行等。
(3)SQL窗格。
显示查询或视图对应的SELECT语句。
(4)结果窗格。
显示满足查询条件的数据。
在查询设计器中,该区域显示最近执行的选择查询的结果。
可以通过编辑该网格单元中的值对数据进行修改,而且可以添加或删除数据。
2、设置查询条件(1)设置显示列。
显示列就是在输出结果中满足条件的记录所显示的列信息。
在网格窗格中,显示列的“输出”栏被标识为√。
如果你查询的数据来至于多张数据表,在“关系图窗格”中单击鼠标右键,选择添加表,将要查询的数据表添加进去。
(2)设置查询条件。
在网格窗格中,单击空白行的“列”栏,从菜单中选择查询条件中的列。
例如要查询所属部门编号等于2的记录,则选择Dep_id,然后在“准则”中输入=2。
注意,将Dep_id所在行中的输出标记去掉,因为结果集中不需要显示所属部门编号。
条件可以设置多个,相与的条件放在同一列,相或的条件放在不同列,假如查询部门编号为2的姓陈的人,则在设置好上述条件后,在姓名后面的“准则”栏写上like ‘陈%’。
(3)设置排列顺序。
设置结果集中的数据按照指定列的升序或降序排列,注意排序可以设置多种规则,比如第一排序按部门,则按部门的拼音顺序排列,如果一个部门的人很多,可以设置第二排序规则,比如按职工号排序。
实验四 - 数据库表的查询操作与视图操作
![实验四 - 数据库表的查询操作与视图操作](https://img.taocdn.com/s3/m/f5cf35c158f5f61fb7366629.png)
实验4.1 连接查询
连接查询
查询所有选课学生的学号、姓名、选课名称 及成绩 查询每门课程的课程号、任课教师姓名及其 选课人数
实验4.1 连接查询
自身连接
查询所有比“刘伟”工资高的教师的姓名、 工资以及刘伟的工资。 查询同时选修了“程序设计”和“微机原理” 的学生的姓名和系名用SQL创建一个课程表视图。视图名称为 VIEW_Course,其数据来源于两个基本表 jx_Tea和jx_Course,包含的数据有 jx_Tea.Tname和jx_ame。
提示:首先将两表建立连接
实验4.3 视图操作
使用交互式方法把视图VIEW_Stu中的字 段Sno删掉 使用SQL给视图VIEW_Course增加一个课 时字段Chour
实验4.3 视图操作
交互式创建一个视图。要求:视图名称为 VIEW_Stu,其数据来源于一个基本表 jx_stu,包含的数据有:Sno、Sname、 Sgender、Sdept 交互式创建一个成绩视图。要求:视图名 称为VIEW_Score,其数据来源于两个基本 表jx_Course和jx_SelCourse及一个已有的 视图View_Stu,包含的数据有 VIEW_Stu.Sname、jx_ame、 jx_SelCourse.Score
实验4.3 视图操作
交互式删除视图VIEW_Stu 使用SQL删除视图VIEW_Course
实验报告
写出以上练习中要求用SQL语句实现的操 作,要求:查询结果显示的字段信息用中 文表达。 写出采用视图机制具有哪些优点? 思考:是否所有的视图都具有可通过其修 改基本表数据的性质?哪些视图不具有这 种性质?
数据库实验4表的查询操作(4学时)
![数据库实验4表的查询操作(4学时)](https://img.taocdn.com/s3/m/f4ec71064531b90d6c85ec3a87c24028905f855f.png)
1 实验四表的查询操作(4学时)【实验目的】了解SQL 语言的使用,进一步理解关系运算,巩固数据库的基础知识。
【实验要求】掌握利用Select 语句进行各种查询操作:单表查询、多表连接及查询、嵌套查询、集合查询等。
【实验内容】在实验三创建并插入数据的表(Student ,Course ,SC ,Teacher ,TC )的基础上,完成以下操作。
1.对实验步骤中所给示例进行验证。
2.参考所给示例,完成下列各种查询操作。
(1)将教师‘罗莉’的名字改为‘罗莉莉’。
(2)将两个同学(数据自己临时设置,用后即删除)的两门课程的成绩以运行sql 程序文件的形式插入score 表中。
该题用以验证、理解和掌握关系模型的完整性规则;(3)求每门课的平均成绩,并把结果存入average 表(自行设计并创建);(4)将学生“马丽”的年龄改为2424;;(5)将所有学生的zipcode 属性列值填补上;(6)将average 表中的所有课程的平均成绩置零;(7)删除average 表中的课程号为‘表中的课程号为‘c007c007c007’的平均成绩记录;’的平均成绩记录;(8)删除所有average 表中平均成绩记录;(9)建立一个临时学生信息表()建立一个临时学生信息表(tstudent tstudent tstudent)),删除该表中的学号含‘101’的所有学生记录。
(1010)查询全体学生的学号与姓名;)查询全体学生的学号与姓名;(1111)查询全体学生的学号、姓名、所属系;)查询全体学生的学号、姓名、所属系;(1212)查询全体学生的详细记录;)查询全体学生的详细记录;(1313)查询全体学生的姓名及其年龄;)查询全体学生的姓名及其年龄;(1414)查询全体学生的姓名、出生年份;)查询全体学生的姓名、出生年份;(1515)查询所有修过课的学生的学号;)查询所有修过课的学生的学号;(1616)查询“计算机系”班全体学生名单;)查询“计算机系”班全体学生名单;(1717)查询查询所有年龄在)查询查询所有年龄在23岁以下的学生姓名及其年龄;(1818)查询考试成绩有不及格的学生的学号;)查询考试成绩有不及格的学生的学号;(1919)查询年龄在)查询年龄在20至22岁之间的学生姓名、系和年龄;(2020)查询年龄不在)查询年龄不在20至22岁之间的学生姓名、系和年龄;(2121)查询“)查询“计算机系”和“电商系”的学生的姓名;(2222)查询既不是“计)查询既不是“计1111”也不是“计”也不是“计6161”班的学生的姓名和班级信息;”班的学生的姓名和班级信息;(2323)查询学号为“)查询学号为“04262002”的学生的详细情况;(2424)查询学号以“)查询学号以“04262”打头的学生信息;(2525)查询所有姓“张”学生的学号、姓名、性别、年龄;)查询所有姓“张”学生的学号、姓名、性别、年龄;(2626)查询名字中第二个字有“海”字的学生的学号、姓名、性别、年龄;)查询名字中第二个字有“海”字的学生的学号、姓名、性别、年龄;(2727)查询所有不姓“刘”学生的姓名;)查询所有不姓“刘”学生的姓名;(2828)查询课程号以“)查询课程号以“C ”开头的最后两个字母为“”开头的最后两个字母为“050505”的课程号和课程名;”的课程号和课程名;(2929)某些学生选修某门课程后没有参加考试,所以有选修课记录,但没有考试成绩,)某些学生选修某门课程后没有参加考试,所以有选修课记录,但没有考试成绩,试查找缺少考试成绩的学生和相应的课程号;(3030)查找全部有成绩记录的学生学号、课程号;)查找全部有成绩记录的学生学号、课程号;(3131)查找“计算机系”年龄在)查找“计算机系”年龄在22岁以下的学生学号、姓名;(3232)查找选修了“)查找选修了“)查找选修了“C001C001C001”号课程的学生学号及其成绩,查询结果按分数降序排序;”号课程的学生学号及其成绩,查询结果按分数降序排序;(3333))查询全体学生情况,查询全体学生情况,查询结果按所在系升序排列,查询结果按所在系升序排列,查询结果按所在系升序排列,对同一系中的学生按年龄降序对同一系中的学生按年龄降序排列;(3434)查询学生总人数;)查询学生总人数;)查询学生总人数;(3535)查询选修了课程的学生人数;)查询选修了课程的学生人数;)查询选修了课程的学生人数;(3636)在所有课程中查询最高分的学生学号和成绩;)在所有课程中查询最高分的学生学号和成绩;)在所有课程中查询最高分的学生学号和成绩;(3737)查询学习“)查询学习“)查询学习“C001C001C001”课程的学生最高分数;”课程的学生最高分数;”课程的学生最高分数;(3838)计算各个课程号与相应的选课人数;)计算各个课程号与相应的选课人数;)计算各个课程号与相应的选课人数;(3939)查询“计算机系”选修了两门课程以上的学生学号、姓名;)查询“计算机系”选修了两门课程以上的学生学号、姓名;)查询“计算机系”选修了两门课程以上的学生学号、姓名;(4040)自然连接)自然连接student 和score 表;表; (4141)使用自身连接查询每一门课程的间接先行课(即先行课的先行课))使用自身连接查询每一门课程的间接先行课(即先行课的先行课))使用自身连接查询每一门课程的间接先行课(即先行课的先行课)(4242)使用复合条件连接查询选修“)使用复合条件连接查询选修“)使用复合条件连接查询选修“c001c001c001”号课程且成绩在”号课程且成绩在90分以上的所有同学;分以上的所有同学;(4343)使用复合条件连接查询每个学生选修的课程名及其成绩;)使用复合条件连接查询每个学生选修的课程名及其成绩;)使用复合条件连接查询每个学生选修的课程名及其成绩;(4444)查询选修了全部课程的学生;)查询选修了全部课程的学生;)查询选修了全部课程的学生;(4545)查询所有选修了)查询所有选修了C001号课程的学生学号、姓名;号课程的学生学号、姓名;(4646)查询选修了课程)查询选修了课程C001或c007的学生学号、姓名;的学生学号、姓名;(4747)查询“计算机系”的学生及年龄不大于)查询“计算机系”的学生及年龄不大于23岁的学生;岁的学生;(4848)查询既选修了课程)查询既选修了课程C001又选修了课程c007的所有学生学号、姓名;的所有学生学号、姓名;(4949)查询选修了课程名为“数据库原理”的学生的学号、姓名、性别、年龄;)查询选修了课程名为“数据库原理”的学生的学号、姓名、性别、年龄;)查询选修了课程名为“数据库原理”的学生的学号、姓名、性别、年龄;(5050)查询其他班中比“计算机系”所有学生年龄都小的学生名单;)查询其他班中比“计算机系”所有学生年龄都小的学生名单;)查询其他班中比“计算机系”所有学生年龄都小的学生名单;(5151)查询与“夏天”在同一个系学习的学生学号、姓名、性别、年龄;)查询与“夏天”在同一个系学习的学生学号、姓名、性别、年龄;)查询与“夏天”在同一个系学习的学生学号、姓名、性别、年龄;(5252)建立“计算机系”学生的视图)建立“计算机系”学生的视图1;(5353)建立“计算机系”学生的视图)建立“计算机系”学生的视图2,并要求进行修改与插入时,仍须保证该视图只有“计算机系”班学生;有“计算机系”班学生;(54)建立“计算机系”选修了“C001”课程的学生的视图,定义视图名为“v_cs_C001_student1v_cs_C001_student1””; (5555)建立“计算机系”班选修了“)建立“计算机系”班选修了“)建立“计算机系”班选修了“C001C001C001”课程且成绩在”课程且成绩在90分以上的学生的视图,定义视图名为“义视图名为“cs_c001_student2cs_c001_student2cs_c001_student2””; (5656)定义一个反映学生年龄的视图,定义视图名为“)定义一个反映学生年龄的视图,定义视图名为“)定义一个反映学生年龄的视图,定义视图名为“v_birth_student v_birth_student v_birth_student””; (5757)将学生表中所有女生记录定义为一个视图,视图名为“)将学生表中所有女生记录定义为一个视图,视图名为“)将学生表中所有女生记录定义为一个视图,视图名为“v_female_student v_female_student v_female_student””; (5858)将学生的学号及其平均成绩定义为一个视图,视图名为“)将学生的学号及其平均成绩定义为一个视图,视图名为“)将学生的学号及其平均成绩定义为一个视图,视图名为“v_average_student v_average_student v_average_student””; (5959)在“计算机系”学生视图中找出年龄小于)在“计算机系”学生视图中找出年龄小于22岁的学生;岁的学生;(6060)利用视图查询“计算机系”选修了“)利用视图查询“计算机系”选修了“)利用视图查询“计算机系”选修了“C001C001C001”课程的学生;”课程的学生;”课程的学生;(6161)通过()通过()通过(525252)中的“计算机系”视图修改某个学生的名字;)中的“计算机系”视图修改某个学生的名字;)中的“计算机系”视图修改某个学生的名字;(6262)通过()通过()通过(535353)中的“计算机系”视图,插入一个新学生记录。
实验四 - 数据库表的查询操作与视图操作
![实验四 - 数据库表的查询操作与视图操作](https://img.taocdn.com/s3/m/f5cf35c158f5f61fb7366629.png)
外连接
查询所有学生的学号、姓名、选课名称及成 绩(没有选课的学生的选课信息显示为空)。
实验4.2 嵌套查询
返回一个值的子查询
查询与“刘伟”教师职称相同的教师号、姓 名和职称(用‘=‘)
实验4.2 嵌套查询
返回一组值的子查询
使用ANY谓词查询讲授课程号为C5的教师姓名 使用IN谓词查询讲授课程号为C5的教师姓名 使用ALL谓词查询其他系中比计算机系所有教 师工资都高的教师的姓名、工资和所在系。 使用EXISTS谓词查询没有讲授课程号为C5的 课程的教师姓名、所在系。
实验4.3 视图操作
使用SQL创建一个课程表视图。视图名称为 VIEW_Course,其数据来源于两个基本表 jx_Tea和jx_Course,包含的数据有 jx_Tea.Tname和jx_ame。
提示:首先将两表建立连接
实验4.3 视图操作
使用交互式方法把视图VIEW_Stu中的字 段Sno删掉 使用SQL给视图VIEW_Course增加一个课 时字段Chour
实验4.3 视图操作
交互式删除视图VIEW_Stu 使用SQL删除视图VIEW_Course
实验报告
写出以上练习中要求用SQL语句实现的操 作,要求:查询结果显示的字段信息用中 文表达。 写出采用视图机制具有哪些优点? 思考:是否所有的视图都具有可通过其修 改基本表数据的性质?哪些视图不具有这 种性质?实验四Leabharlann 数据库表的查询操作与视图操作
【实验目的】
掌握涉及一个以上数据表的查询方法。
多表之间的连接包括等值连接、自然连接、 非等值连接、自身连接、外连接和复合条件 连接
实验训练4视图和索引的构建与使用
![实验训练4视图和索引的构建与使用](https://img.taocdn.com/s3/m/32a4a36ab207e87101f69e3143323968011cf4e5.png)
实验训练4:视图和索引的构建与使用实验目的:1. 了解视图和索引的概念和作用;2. 掌握创建视图和索引的语法和方法;3. 掌握使用视图和索引进行数据查询的方法。
实验环境:MySQL数据库。
实验内容:1. 创建视图视图是一种虚拟表,它是根据SQL 查询语句所定义的结果集生成的。
视图并不存储数据,而是根据需要从基本表中获取数据。
视图的作用是简化常用查询操作,使查询语句更加简洁明了。
创建视图的语法如下:```CREATE VIEW view_name ASSELECT column1, column2, ...FROM table_nameWHERE condition;```例如,我们可以创建一个视图来显示学生的姓名和成绩:```CREATE VIEW student_score ASSELECT name, scoreFROM students;```2. 使用视图查询数据使用视图进行查询时,可以像查询普通表一样进行查询操作。
例如,我们可以查询学生的姓名和成绩:```SELECT * FROM student_score;```3. 创建索引索引是一种数据结构,用于提高数据的查询效率。
索引可以加快查询操作的速度,但会降低插入和更新操作的速度。
通常,我们会在经常使用的列上创建索引,以提高查询效率。
创建索引的语法如下:```CREATE INDEX index_nameON table_name (column1, column2, ...);```例如,我们可以在学生表的姓名列上创建索引:```CREATE INDEX idx_nameON students (name);```4. 使用索引查询数据使用索引进行查询时,可以通过查询计划来查看是否使用了索引。
例如,我们可以查询姓名为张三的学生:```SELECT * FROM students WHERE name = '张三';```可以通过EXPLAIN 命令查看查询计划:```EXPLAIN SELECT * FROM students WHERE name = '张三';```如果查询计划中出现了Using index,则表示使用了索引。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二 〇 一 五 年 四 月题 目:数据库的查询和视图 学生姓名:孙跃 学 院:理学院 系 别:数学系专 业:信息与计算科学 班 级:信计12-2 任课教师:侯睿《数据库原理及应用》实验报告一、练习目的1、数据库的查询(1)掌握SELECT语句的基本语法;(2)掌握子查询的表示;(3)掌握连接查询的表示;(4)掌握SELECT语句的GROUP BY子句的作用与使用方法;(5)掌握SELECT语句的ORDER BY子句的作用与使用方法;2、视图的使用(1)熟悉视图的概念和作用;(2)熟悉视图的创建方法;(3)熟悉如何查询和修改视图。
二、练习准备1、数据库的查询(1)了解SELECT语句的基本语法格式;(2)了解SELECT语句的执行方法;(3)了解子查询的表示方法;(4)了解连接查询的表示;(5)了解SELECT语句的GROUP BY子句的作用与使用方法;(6)了解SELECT语句的ORDER BY子句的作用;2、视图的使用(1)了解视图的概念;(2)了解创建视图的方法;(3)了解并掌握对视图的操作。
三、实验程序实验4.1 数据库的查询1、(1)对于实验2给出的数据库结构,查询每个雇员的所有数据.USE YGGLGOSELECT*FROM Employees(2)用SELECT语句查询Employees表中每个雇员的地址和电话.SELECT Address,PhoneNumberFROM Employees(3)查询EmployeeID为000001的雇员的地址和电话.SELECT Address,PhoneNumberFROM EmployeesWHERE EmployeeID='000001'GO(4)查询Employees表中女雇员的地址和电话,使用AS子句将结果中各列的标题分别制定地址和电话. SELECT Address AS地址,PhoneNumber AS电话FROM EmployeesWHERE Sex=0(5)查询Employees表中员工姓名和性别,要求Sex值为1时显示为“男”,为0时显示为“女”. SELECT Name AS姓名,CASEWHEN Sex=1 THEN'男'WHEN Sex=0 THEN'女'END AS性别FROM Employees(6)计算每个员工的实际收入.SELECT EmployeeID,实际收入=InCome-OutComeFROM Salary(7)获得员工总数.SELECT COUNT(*)FROM Employees(8)找出所有姓王的雇员的部门号.SELECT DepartmentIDFROM EmployeesWHERE Name LIKE'王%'(9)找出所有收入在2000~3000之间的员工号码.SELECT EmployeeIDFROM SalaryWHERE InCome BETWEEN 2000 AND 3000(10)使用INTO子句,由表Salary创建“收入在1500以上的员工表”,包括编号和收入. SELECT EmployeeID as编号,InCome as收入INTO收入在以上的员工FROM SalaryWHERE InCome>15002、子查询的使用.(1)查询在财务部工作的雇员的情况.SELECT*FROM EmployeesWHERE DepartmentID=(SELECT DepartmentIDFROM DepartmentsWHERE DepartmentName='财务部')(2)查询财务部年龄不低于研究部雇员年龄的雇员的姓名.SELECT NameFROM EmployeesWHERE DepartmentID IN(SELECT DepartmentIDFROM DepartmentsWHERE DepartmentName='财务部')ANDBirthday!>ALL(SELECT BirthdayFROM EmployeesWHERE DepartmentID IN(SELECT DepartmentIDFROM DepartmentsWHERE DepartmentName='研发部'))(3)查找比所有财务部的雇员收入都高的雇员的姓名.SELECT NameFROM EmployeesWHERE EmployeeID IN(SELECT EmployeeIDFROM SalaryWHERE InCome>ALL(SELECT InComeFROM SalaryWHERE EmployeeID IN(SELECT EmployeeIDFROM EmployeesWHERE DepartmentID=(SELECT EmployeeIDFROM DepartmentsWHERE DepartmentName='财务部')))))3、连接查询的使用(1)查询每个雇员的情况及其薪水的情况SELECT Employees.*,Salary.*FROM Employees,SalaryWHERE Employees.EmployeeID=Salary.EmployeeID(2)使用内连接的方法查询名字为“王林”的员工所在的部门SELECT DepartmentNameFROM Departments JOIN EmployeesON Departments.DepartmentID=Employees.DepartmentID WHERE ='王林'(3)查询财务部收入在2000以上的雇员姓名及其薪水详情. SELECT Name,InCome,OutComeFROM Employees,Salary,DepartmentsWHERE Employees.EmployeeID=Salary.EmployeeIDAND Employees.DepartmentID=Departments.DepartmentID AND DepartmentName='财务部'AND InCome>20004、聚合函数的使用.(1)求财务部雇员的平均收入.SELECT AVG(InCome)AS'财务部平均收入'FROM SalaryWHERE EmployeeID IN(SELECT EmployeeIDFROM EmployeesWHERE DepartmentID=(SELECT DepartmentIDFROM DepartmentsWHERE DepartmentName='财务部'))(2)财务部雇员的平均实际收入.SELECT AVG(InCome-OutCome)AS'财务部平均实际收入'FROM SalaryWHERE EmployeeID IN(SELECT EmployeeIDFROM EmployeesWHERE DepartmentID=(SELECT DepartmentIDFROM DepartmentsWHERE DepartmentName='财务部'))(3)求财务部雇员的总人数SELECT COUNT(EmployeeID)FROM EmployeesWHERE DepartmentID=(SELECT DepartmentIDFROM DepartmentsWHERE DepartmentName='财务部')5、GROUP BY\ORDER BY子句的使用.(1)Emyees表中的男性和女性的人数SELECT Sex,COUNT(Sex)FROM EmployeesGROUP BY Sex;(2)查找员工数超过2人的部门名称和员工数量.SELECT(Employees.DepartmentID),COUNT(*)AS人数FROM Employees,DepartmentsWHERE Employees.DepartmentID=Department.DepartmentIDGROUP BY Employees.DepartmentIDHAVING COUNT(*)>2(3)将各雇员的情况按收入由低到高排列.SELECT Employees.*,Salary.*FROM Employees,SalaryWHERE Employees.EmployeeID=Salary.EmployeeIDORDER BY InCome实验4.2 视图的使用1、创建视图①创建YGGL数据库上的视图DS_VIEW,视图包含Departments表的全部列。
②创建YGGL数据库上的视图Employees_view,视图包含员工号码、姓名和实际收入三列。
2、查询视图(1)从视图DS_VIEW,中查询出部门号为3的部门名称。
(2)从视图Employees_view查询出姓名为“王林”的员工的实际收入。
CREATE VIEW Employees_view(EmployeeID,Name,RealIncome)ASSELECT Employees.EmployeeID,Name,InCome-OutComeFROM Employees,SalaryWHERE Employees.EmployeeID=Salary.EmployeeID3、更新视图在更新视图前需要了解可更新视图的概念,了解什么视图时不可以进行修改的。
更新视图真正更新的是和视图关联的表。
(1)向视图 DS_VIEW中插入一行数据:“6,广告部,广告业务”。
(2)修改视图DS_VIEW,将部门号为5的部门名称修改为“生产车间”。
(3)修改视图Employees_view中员工号为“000001”的员工姓名为“王浩”。
(4)删除视图DS_VIEW中部门号为“1”的一行数据。
SELECT DepartmentNameFROM DS_VIEWWHERE DepartmentID='3'SELECT RealIncomeFROM Employees_viewWHERE Name='王林'INSERT INTO DS_VIEW VALUES('6','广告部','广告业务部')UPDATE DS_VIEWSET DepartmentName='生产车间'WHERE DepartmentID='5'DELETE FROM DS_VIEWWHERE DepartmentID='1'4、删除视图删除视图DS_VIEW。