数据库实验报告——多表查询

合集下载

数据库实验报告——多表查询

数据库实验报告——多表查询

集美大学计算机工程学院实验报告一、实验目的1.掌握多表连接查询方法;2.掌握IN 子查询的嵌套查询;3.了解EXISTS嵌套查询方法。

二、实验内容与设计思想1.多表等值连接查询;2.外连接查询;3.IN子查询嵌套;4* EXISTS嵌套查询。

设计思想:1、复习书本上的相关知识,如查阅多表的连接查询、多表的等值连接查询、表自身的连接、IN嵌套子查询和EXISTS嵌套子查询等知识点;2、先建立一个XSDA库,在建立相关表(利用上次验证试验建立好的数据库);3、根据实验要求进行各种查询操作;4、遇到问题,及时问老师或同学,查阅资料,以便得到及时解决;5、认真做好试验报告。

三、实验使用环境操作系统:Win-7编程环境:Microsoft SQL Server 2008四、实验步骤和调试过程###验证性实验1.多表的连接查询(相当于做笛卡儿乘积)SELECT * FROM C XX,SC XX(截图中间有省略)…………2. 表的等值连接查询(1) 查询各学生的选课信息(包括学号、课程名、成绩)因为学号和成绩在SC表中,而课程名在C表中,因此需要多表查询。

SELECT SNO,CNAME,GRADEFROM C XX C,SC XX SCWHERE O=O(2) 查询学生的选课记录,显示学生的学号、姓名、课程号、成绩)SELECT S.SNO,SNAME,CNO,GRADEFROM S XX S,SC XX SCWHERE S.SNO=SC.SNO(3) 查询学生的选课记录,显示学生的学号、姓名、课程号、课程名、成绩SELECT S.SNO,SNAME,O,CNAME,GRADEFROM S XX S,SC XX SC,C XX CWHERE S.SNO=SC.SNO AND O=O3.左外连接查询:当希望左表(第一张表)中所有记录全部显示出来时,需要用左外连接操作。

INSERT INTO S (SNO,SNAME) VALUES(’20000’,’ZXX’)SELECT S.SNO,SNAME,CNO,GRADEFROM S XX SLEFT OUTER JOIN SC XX SC ON S.SNO=SC.SNO观察与下面等值连接的执行结果有何不同?SELECT S.SNO,SNAME,CNO,GRADEFROM S XX S, SC XX SC WHERE S.SNO=SC.SNO4.表自身的连接(1) 查询与‘李勇’同系的学生学号将学生表S与S本身进行等值连接(系部相等),因为S与S做连接操作时不能区分,所以,对表取一个别名。

数据库原理实验4多表查询

数据库原理实验4多表查询

数据库原理实验4多表查询实验四多表查询1 实验目的与要求(1) 熟练掌握SQL语句的使用。

(2) 熟练使用SQL语句进行连接操作。

2 实验内容(1) 找出同一天进入公司效劳的员工。

(2) 查找与“陈诗杰〞在同一个单位工作的员工姓名、性别、部门和职务。

(3) 在Employee表中查询薪水超过员工平均薪水的员工信息。

(4) 查找有销售记录的客户编号、名称和订单总额。

(5) 查询没有订购商品的客户编号和客户名称。

(6) 使用子查询查找32M DRAM的销售情况,要求显示相应的销售员的姓名、性别,销售日期、销售数量和金额,其中性别用“男〞、“女〞表示。

(7) 查询OrderMaster表中订单金额最高的订单号及订单金额。

(8) 在订单主表中查询订单金额大于“E2022002业务员在2022-1-9这天所接的任一张订单的金额〞的所有订单信息。

(9) 查询单价高于400元的商品编号、商品名称、订货数量和订货单价。

(10) 分别使用左外连接、右外连接、完整外部连接查询单价高于400元的商品编号、商品名称、订货数量和订货单价,并分析比拟检索的结果。

(11) 使用左外连接查找每个客户的客户编号、名称、订货日期、订单金额,其中订货日期不要显示时间,日期格式为“yyyy-mm-dd〞,按客户编号排序,同一客户再按订单金额降序排序输出。

(12) 查找每个员工的销售记录,要求显示销售员的编号、姓名、性别、商品名称、数量、单价、金额和销售日期,其中性别使用“男〞和“女〞表示,日期使用“yyyy-mm-dd〞格式显示。

(13) 查找16M DRAM的销售情况,要求显示相应的销售员的姓名、性别,销售日期、销售数量和金额,其中性别用“男〞、“女〞表示。

(14) 找出公司男业务员所接且订单金额超过2000元的订单号及订单金额。

(15) 查询每种商品的总销售数量及总销售金额,要求显示出商品编号、商品名称、总数量及总金额,并按商品号从小到大排列。

大一sql数据库实验报告

大一sql数据库实验报告

大一sql数据库实验报告大一SQL数据库实验报告一、引言SQL(Structured Query Language)是一种用于管理和操作关系型数据库的语言。

在大一的数据库课程中,我们学习了SQL语言的基本语法和常用操作,通过实验来巩固和应用所学知识。

本篇实验报告将对我在大一SQL数据库实验中的学习和实践进行总结和归纳。

二、实验内容本次实验主要涉及以下内容:1. 创建数据库和表:使用CREATE语句创建数据库和表,定义表的结构和字段。

2. 插入数据:使用INSERT语句向表中插入数据,测试数据的正确性和完整性。

3. 查询数据:使用SELECT语句查询数据库中的数据,包括条件查询、排序和限制查询结果数量等。

4. 更新数据:使用UPDATE语句更新表中的数据,修改指定字段的值。

5. 删除数据:使用DELETE语句从表中删除数据,删除指定条件的记录。

6. 数据库连接:使用JOIN语句实现多表连接查询,关联不同表中的数据。

7. 数据库事务:使用BEGIN TRANSACTION、COMMIT和ROLLBACK语句实现事务的管理和控制。

三、实验过程和结果1. 创建数据库和表我使用CREATE DATABASE语句创建了一个名为“学生管理”的数据库。

然后,我在该数据库中创建了两个表,分别是“学生信息表”和“课程信息表”。

学生信息表包括学生ID、姓名、年龄和性别等字段,课程信息表包括课程ID、课程名称和学分等字段。

2. 插入数据接下来,我使用INSERT INTO语句向学生信息表和课程信息表中插入了一些测试数据,包括学生的基本信息和课程的相关信息。

插入数据后,我使用SELECT语句确认数据的插入是否成功,并验证了数据的完整性和准确性。

3. 查询数据我使用SELECT语句进行了多种查询操作,包括条件查询、排序和限制查询结果数量等。

例如,我使用WHERE子句实现了根据学生姓名和课程名称进行查询的功能;使用ORDER BY子句对查询结果按照指定字段进行排序;使用LIMIT子句限制查询结果的数量。

数据库查询实验报告doc

数据库查询实验报告doc
3. 发布执行命令,查看查询结果;若是结果不正确,进行修改,直到正确为止。
4. 查询分析器及利用方式。
查询分析器是在开发数据库应用
系统时利用最多的工具。查询分析器的
要紧作用是编辑Transact-SQL,将其发
送到效劳器,并将执行结果及分析显示
出来(或进行存储)。查询分析功能主
要通过测试查询本钱,判定该查询是不是
from 学生表,班级表
where 学生表.班级编号=班级表.班级编号
and 学号 in(
select 学号
from 选课表
where 课程编号 in (
select 课程编号
from 课程表
where 课程名='数据库'
)
);
/*查询学生XX15121选修课程的总学分。*/
SELECT SUM(学分) 总学分
)=(select count(*) from course)
--法三
select Sname
from student
where Sno in
(
selhaving count(*) = (select count(*) from course)
)
--(11)求选修了学生“”所选修的全数课程的学生学号和姓名。
where cno not in
(
select cno from student s,sc
where s.sno=sc.sno and sname like '王%' and co=sco
)
--(10)查询选修了全数课程的学生的姓名。(请至少写出两种查询语句)
--法一
select Sname
from student s

多表查询实验报告

多表查询实验报告

《数据库系统概论》实验报告实验名称:多表查询实验人:实验地点:实验楼317实验日期:2009-10-12一、实验准备1.硬件及软件环境要求为了使该实验顺利进行,需要有一台计算机,计算机必须安装Windows 2000、Windows XP或Windows NT操作系统,还必须安装Microsoft SQL Server 2000 任意一版本(个人版、标准版、企业版)。

实验开始之前,必须将实验1.2节中创建好的SCDB数据库和ShiYan数据库附加到当前SQL数据库服务器中。

2.本实验涉及的主要SQL语句的语法格式及各种操作说明数据库各数据表中存放着不同的数据,用户经常需要用多个表中的数据来组合提炼出所需的数据信息,如果一个查询需要对多个表进行操作,这一查询就称为多表查询(或关联查询)。

多表查询是通过各个表之间共同的关联属性列来实现数据查询的,它是关系数据库查询操作的一种最常见的方法。

多表查询主要表现为连接查询、嵌套查询、集合查询等几种形式。

(1) 连接查询连接查询是关系数据库中最主要的查询,包括等值连接查询、自然连接查询、非等值连接查询、自身连接查询、外连接查询和复合条件连接查询。

1) 等值、非等值和自然连接查询连接查询中用来连接两张表的条件称为连接条件或连接谓词,其语法为:SELECT column_name [ ,...n ][ FROM tablename1,tablename2 ]WHERE [tablename1].<column_name><operator>[tablename2].< column_name >【说明】operator:连接运算符。

当为“=”时,称为等值连接;否则称为非等值连接;在等值连接中,如果将目标列中重复的属性列去掉则称为自然连接。

2) 外连接查询在通常的连接操作中,只有满足条件的元组才能作为结果输出,但如果想以某张表作为主体列出所有的情况,在没有信息的情况下,只能输出其基本情况信息,这时就需要使用外连接查询。

vfp多表查询的例子

vfp多表查询的例子

vfp多表查询的例子全文共四篇示例,供读者参考第一篇示例:Visual FoxPro(VFP)是微软推出的一款结构化查询语言(SQL)和关系数据库管理系统(RDBMS),在数据处理和数据分析方面具有良好的性能和灵活性。

VFP支持多表查询,使用户能够在多个数据表之间进行联合查询,以获取更细致的数据分析结果。

在VFP中,多表查询可以通过使用SQL语句来实现。

SQL语句是一种标准化的数据库查询语言,可以用来访问和操作数据库中的数据。

下面以一个实际案例来介绍VFP多表查询的用法:假设我们有两个数据表,一个是“学生信息表(Student)”,包含学生的姓名、性别和年龄等信息;另一个是“成绩表(Score)”,包含学生的考试科目、考试成绩等信息。

现在我们希望查询每位学生的姓名、年龄和各科成绩的总分,可以通过以下步骤实现:第一步:连接两个数据表在VFP中,我们需要连接两个数据表,以便在查询时能够同时获取学生信息和成绩信息。

可以使用SQL语句中的“JOIN”关键字来实现连接,具体代码如下:```SQLSELECT , Student.Age, SUM(Score.Score) AS TotalScoreFROM StudentJOIN ScoreON Student.ID = Score.StudentIDGROUP BY , Student.Age;```在上面的代码中,我们使用了“SELECT”语句来选择要查询的字段,包括学生的姓名、年龄和总分;使用“JOIN”关键字来连接两个数据表,其中“ON”后面的条件是两个数据表中的关联字段;使用“SUM”函数来计算每位学生的总分;最后使用“GROUP BY”语句来对结果进行分组,以获取每位学生的总分。

第二步:执行查询完成了连接两个数据表和编写查询语句后,我们就可以执行查询了。

在VFP中,可以在查询分析器中输入以上代码并执行,或者将代码嵌入到程序中进行执行。

执行查询后,就可以得到每位学生的姓名、年龄和总分的查询结果。

VF学生实验报告(数据查询)

VF学生实验报告(数据查询)
where图书分类表.分类号=图书表.分类号;
group by图书分类表.分类号;
order by最高价格desc
5)select * from图书表;
where图书名称like "%Java%"
6)select图书编号,出版时间,入库时间,图书名称from图书表;
where入库时间between {^1992-01-01} and {^2000-12-31};
9)select姓名from读者表;
where读者编号not in(;
select读者编号from借阅表;
where是否归还=.F.)
10)select图书名称,库存数量from图书表;
where分类号="001"
11)select图书名称,库存数量from图书表
12)select图书编号,读者编号,借阅日期,归还日期,是否归还from借阅表;
2)select读者编号,姓名,性别from读者表;
where工作单位="江西财经大学国际学院"
3)select读者表.读者编号,姓名,工作单位from读者表,借阅表;
where读者表.读者编号=借阅表.读者编号;
and是否归还=.f.
4)select图书分类表.分类号,max(单价)最高价格,avg(单价)平均价格from图书分类表,图书表;
(4)查询借阅了“清华大学出版社”所出版图书的读者的编号、读者姓名、图书名称、借书日期和归还日期。
(5)查询没有借阅图书的读者的编号、读者姓名和工作单位。
(6)查询至少借阅了3本图书的读者的编号、读者姓名,所借图书编号和图书名称,并按读者编号排序输出。
(7)查询借书时间在2005~2006年间的读者的编号、读者姓名,图书编号和图书名称。

数据库-数据查询实验报告

数据库-数据查询实验报告

实验报告课程名称数据库原理与应用实验名称数据查询系别专业班级指导教师学号姓名实验日期_实验名称:数据查询一、实验目的1.熟悉各种基本的数据查询的含义。

2.掌握数据查询的SQL语句编写方法。

3.能根据要求写出正确的查询语句。

4.掌握基本的调试方法。

二、实验环境1.硬件环境:微机2.软件环境:Windows,Sql server2000或更高版本三、实验内容及步骤题目根据要求编写以下SQL查询语句第一题简单查询1.查询病人表,显示所有病人的病人编号、保险公司名称、电话号码(别名:病人电话)。

2.查询病人表,显示病人编号、病人姓名(病人姓+病人名)、保险公司名称,并在每个“电话号码”前面显示字符串“病人电话:”。

3.查询病人表,要求显示保险公司名称,并消除重复的值。

4.查询病人表,要求只显示前五条的全部病人信息。

5.查询病人表,要求显示最年轻的前6位病人的病人编号,病人姓名,病人年龄6.给医生表取别名:doctors,并显示医生表的所有信息7.要求查询在“人民保险公司”投保的所有病人的信息8.要求查询病人年龄在20~60岁之间的所有病人信息9.要求查询姓“王”、姓“李”或姓“关”的所有病人的信息。

(提示:用“in”或者用“or”两种方法查询。

)10.查询电话号码为空的病人信息11.要求按年龄从大到小显示病人信息12.要求先按病人姓的升序;如果姓一样,再按年龄的降序,来显示病人信息13.要求查询电话号码的最后一个数字为6的病人编号,病人姓名,电话号码14.要求查询倒数第二个数字为7的病人编号,病人姓名,电话号码。

15.要求查询除区号外的第二个数字为2的病人编号,病人姓名,电话号码。

(注:手机号不算。

)16.要求查询电话号码的最后一个数字为6、为3、为1的病人编号,病人姓名,电话号码。

(注:至少两种方法可以实现)17.要求查询电话号码的最后一个数字除1、3、6外的病人编号,病人姓名,电话号码。

步骤(写出以上SQL语句)--1.查询病人表,显示所有病人的病人编号、保险公司名称、电话号码(别名:病人电话)。

数据库实验报告(合工大)

数据库实验报告(合工大)

设计数据库、数据表并编程实现一、实验目的通过“数据库系统概论”书本知识学习和“数据库原理与应用”课程教学所授知识对“教学管理系统”的实验内容进行分析,通过建立数据库、数据表、数据视图以及触发器,利用SQL结构化查询语言提供的数据操纵功能,设计实现对数据的定义、修改、删除、查询、更新以及控制等操作,并按照实验指导书的各项要求完成实验内容。

二、实验内容(1)根据实验建议所示,建立“学生管理”数据库。

(2)建立数据表的方法,建立五个相关的数据表。

完成数据库的建立并定义各表的完整性约束条件。

分别使用企业管理器和SQL 语言来实现。

(3)熟练掌握并应用SQL中的数据表定义、删除和修改等操作命令;(4)熟练掌握为各表常用字段建立索引,以提高数据检索效率。

create database 学生管理;create table student ( sno Char(9),sname Char(10) not null,sbirthday Datetime,ssex Char(2) check(ssex in ('男','女')),sclass Char(20),sremark Char(100),address Char(40),zipcode Char(6),phone Char(15),email Char(40), primary key(sno) );create table course ( cno char(6) primary key,cname char(20),cpno char(6),ctime Numeric(2),credit Numeric(2),foreign key(cpno)references course(cno));create table score(sno char(9), cno char(6),primary key(sno,cno),foreign key(sno)references student(sno),foreign key(cno)references course(cno),score Numeric(3));create table teacher( Tno char(20) primary key,Tname char(20) ,Tsex Char(2) check(Tsex in ('男','女')),Department char(15),tbirthday Datetime);create table Teaching(Tno char(20),cno char(6),tdate datetime,classroom char(10),sclass char(20),primary key(Tno,cno),foreign key(Tno)references teacher(Tno),foreign key(cno)references course(cno));设计数据插入、修改、删除、查询和视图等操作并编程实现一、实验目的(1)熟练掌握数据更新语句,灵活地操作插入数据、修改数据和删除数据;(2)熟练掌握关系数据库中的完整性概念的应用;(3)掌握单表查询的基本方法;(4)掌握多表连接查询的基本方法;(5)熟练掌握以下练习,并进行以下各类查询:①选择表中的若干列、查询全部列、查询经过计算的值;②选择表中的若干元组,即消除取值重复的行与查询满足指定条件的元组(包括:比较大小、确定范围、确定集合、字符匹配、涉及空值和多种条件查询);③对查询结果排序;④使用集函数;⑤对查询结果分组(6)熟练掌握以下练习,并进行下列各类连接查询:①等值与非等值连接查询;②自身连接;③外连接;④复合条件连接;(7)掌握嵌套查询的基本方法;(8)掌握集合查询的基本方法;(9)熟练掌握查询视图操作(10)熟练掌握更新视图操作(11)熟练关系的完整性概念,领会视图的用途(12)练习以下各类查询:①带有IN谓词的子查询;②带有比较运算符的子查询;③带有ANY或ALL谓词的子查询;④带有EXISTS谓词的子查询;⑤视图查询与更新操作;二、实验内容根据以下给定的部分数据表信息,分别对student, course, score, teacher, teching 表进行数据插入以及根据题目要求用SQL语句实现。

基础-多表查询-概述

基础-多表查询-概述

基础-多表查询-概述概述多表查询是数据库中常用的查询方式之一,它可以通过联结多个表来获取更丰富的数据信息。

在数据库设计中,通常会将数据分散存储在多个表中,这样可以更好地遵循数据库的范式规则,提高数据的存储效率和数据的完整性。

然而,在实际应用中,我们常常需要从多个表中提取数据,并将它们进行关联,以满足不同的查询需求。

这时就需要用到多表查询。

联结(Join)在多表查询中,最重要的操作之一就是联结。

联结是通过共享的列将两个或多个表连接起来,以便查询可以同时从这些表中检索数据。

常用的联结方式有内连接(INNER JOIN)、外连接(LEFT JOIN、RIGHT JOIN、FULL JOIN)和交叉连接(CROSS JOIN)等。

内连接是最常用的联结方式之一,它通过匹配两个表中的共享列,返回两个表中符合联结条件的记录。

内连接只返回两个表中匹配的数据,不包括不匹配的数据。

例如,我们可以通过联结“学生表”和“课程表”,来查询某个学生所选修的课程信息。

外连接是另一种常用的联结方式,它可以返回两个表中匹配和不匹配的数据。

左外连接(LEFT JOIN)返回左表中所有的记录和右表中匹配的记录,右表中不匹配的记录用NULL值填充。

右外连接(RIGHT JOIN)与左外连接相反,返回右表中的所有记录和左表中匹配的记录,左表中不匹配的记录用NULL值填充。

全外连接(FULL JOIN)返回两个表中的所有记录,不匹配的记录用NULL值填充。

外连接常用于需要查询两个表中的所有数据的情况,例如查询学生表中的所有学生以及他们所选修的课程信息。

交叉连接是一种特殊的连接方式,它返回两个表中的所有可能组合。

交叉连接适用于需要生成所有可能组合的场景,但要注意,如果表的数据量很大,交叉连接可能会导致查询性能下降。

子查询(Subquery)除了联结,多表查询还可以通过子查询来实现。

子查询是指在一个查询语句中嵌套另一个查询语句。

子查询可以作为主查询的条件、选择项或者表达式等。

数据库实验报告5多表查询

数据库实验报告5多表查询

数据库实验报告5多表查询篇一:数据库实验5实验报告《数据库原理与设计》实验报告报告创建时间:篇二:数据库实验5实验报告淮海工学院计算机工程学院实验报告书课程名:《数据库原理及应用》题目:数据库的完整性班级:软件132 学号:姓名:孙莹莹一.目的与要求1. 掌握索引创建和删除的方法;2. 掌握创建视图和使用视图的方法;3. 掌握完整性约束的定义方法,包括primary key、foreign key等。

二.实验内容1.2.3.4.5.6.7.8.9.10.11.12.13.基于前面建立的factory数据库,使用T-SQL语句在worker表的“部门号”列上创建一个非聚集索引,若该索引已经存在,则删除后重建。

在salary 表的“职工号”和“日期”列创建聚集索引,并且强制唯一性。

建立视图view1,查询所有职工的职工号、姓名、部门名和2004年2月工资,并按部门名顺序排列。

建立视图view2,查询所有职工的职工号、姓名和平均工资;建立视图view3,查询各部门名和该部门的所有职工平均工资;显示视图view3的定义;实施worker表的“性别”列默认值为“男”的约束;实施salary表的“工资”列值限定在0~9999的约束;实施depart表的“部门号”列值唯一的非聚集索引的约束;为worker表建立外键“部门号”,参考表depart的“部门号”列。

建立一个规则sex:@性别=’男’OR @性别=’女’,将其绑定到“性别”上;删除上面第7、8、9和10建立的约束;解除第11题所建立的绑定并删除规则sex。

三.实验步骤1USE factoryGO--判断是否存在depno索引;若存在,则删除之IF EXISTSDROP INDEXGO--创建depno索引CREATE INDEX depno ON workerGOEXEC sp_helpindex workerGO2USE factoryGO--判断是否存在no_date索引;若存在,则删除之IF EXISTSDROP INDEX _dateGO--创建no_date索引CREATE UNIQUE CLUSTERED INDEX no_date ON salaryGOEXEC sp_helpindex salaryGO3USE factoryGO--如果视图viewl存在,则删除IF EXISTSDROP VIEW view1GO--创建视图viewlCREATE VIEW view1AS SELECT TOP 15 worker.职工号,worker.姓名,depart.部门名,salary.工资AS ‘2004年月工资’FROM worker,depart,salaryWHERE worker.部门号=depart.部门号AND worker.职工号=salary.职工号AND YEAR=2004 AND MONTH=2ORDER BY worker.部门号GOSELECT * FROM view1GO4USE factoryGO--如果视图view2存在,则删除IF EXISTSDROP VIEW view2GO--创建视图view2CREATE VIEW view2AS SELECT worker.职工号,worker.姓名,A VG AS ‘平均工资’FROM worker,salaryWHERE worker.职工号=salary.职工号GROUP BY worker.职工号,worker.姓名GOSELECT * FROM view2GO5USE factoryGO--如果视图view3存在,则删除IF EXISTSDROP VIEW view3GO--创建视图view3CREATE VIEW view3AS SELECT depart.部门名,A VG AS ‘平均工资’FROM worker,depart,salaryWHERE worker.部门号=depart.部门号AND worker.职工号=salary.职工号GROUP BY depart.部门名GOSELECT * FROM view3GO6USE factoryGOEXEC sp_helptext ‘view3’GO7USE factoryGOALTER TABLE workerADD CONSTRAINT default_sex DEFAULT ‘男’ FOR 性别GO8USE factoryGOALTER TABLE salaryADD CONSTRAINT check_salary CHECKGO9USE factoryGOALTER TABLE departADD CONSTRAINT unique_depart1 UNIQUE NONCLUSTEREDGOEXEC sp_helpindex depart --显示depart表上的索引GO10USE factoryGOALTER TABLE workerADD CONSTRAINT FK_worker_noFOREIGN KEYREFERENCES departGO11USE factoryGOCREATE RULE sex AS @性别=‘男’ OR @性别=‘女’GOEXEC sp_bindrule ‘sex’,’worker.性别’GO12USE factoryGOALTER TABLE workerDROP CONSTRAINT default_sexGO13USE factoryGOALTER TABLE salaryDROP CONSTRAINT check_salaryGO14USE factoryGOALTER TABLE departDROP CONSTRAINT unique_departGO15USE factoryGOALTER TABLE workerDROP CONSTRAINT FK_worker_noGO16USE factoryGOEXEC sp_unbindrule ‘worker.性别’GODROP RULE sexGO四.测试数据与实验结果第1题图篇三:数据库实验报告5---------------------------------精选公文范文-------------------------- 湖南科技学院电信学院实验报告----------------精选公文范文---------------- 11。

数据库实验报告三 多表查询

数据库实验报告三 多表查询

实验三多表查询【实验目的】掌握多张表进行连接查询,主要包括连接查询、子查询和相关子查询等内容。

【实验内容】在实验一的基础上完成下列查询。

(1)(连接查询) 求选修了课程001且成绩在70分以下或成绩在90分以上的学生的姓名、课程名称和成绩。

select sname,cname,score from student,score,coursewhere student.sno=score.sno and o=o and o='001' and scorebetween 70 and 90;(2)(连接查询与表的别名) 求选修了课程001且成绩在70分以下或成绩在90分以上的学生的姓名、课程名称和成绩。

select sname,cname,score from student s1,score s2,course c1where s1.sno=s2.sno and o=o and o='001' and s2.SCOREbetween 70 and 90;(3)(自然连接查询) 求学生学号、姓名以及其选修课程的课程号和成绩。

select s1.sname,s1.sno,o,s2.score from student s1,score s2where s1.sno=s2.sno;(4)(自身连接查询) 求年龄大于'李丽' 的所有学生的姓名、系和年龄。

select s2.sname,s2.sdept,s2.sage from student s1,student s2 where s1.sname=' 李丽' and s2.sage>s1.sage;(4)(外部连接查询) 求未选修任何课程的学生的姓名。

select * from student a left join score b on a.sno=b.snowhere b.sno is null;(6)(子查询) 求与‘李丽’年龄相同的学生的姓名和系。

数据库实验三_查询

数据库实验三_查询

南昌大学实验报告---实验三查询学生姓名:丁金芝学号:6100511080 专业班级:管理科学与工程类112班实验类型:■验证□综合□设计□创新实验日期:实验成绩:一、实验目的1.掌握select语句的基本语法2.了解select语句中各子句的作用和特点3.掌握select语句的统计函数的作用和用法4.掌握子查询的用法5.掌握连接查询的用法二、实验内容与结果(一).简单查询1.select 选择列--1、选择所有列(*),查询学生表中的所有纪录。

--2、选择特定列,查询学生表中全体学生的学号,姓名,性别。

--3、计算列,查询选课表中给每个学生加了20分后的所有课号和成绩末分数显示出来。

重复。

--6、限制返回行数--top n 关键字;只显示表中前面n条记录。

--top n percent 关键字;只显示前n%条记录。

--显示学生表中的前3条记录。

--显示学生表中的前3%条记录2 .where 子句--1、比较运算符:(1)查询分数<80分学生的学号、成绩、课号。

(2)查询学号001学生的情况。

--2、范围运算符:查询学生分数在70-80之间的学生的学号、课号。

(包括70分、80分)--3、列表运算符: (1)查询学号为'001' 、'005'、'007' 、'008'的学生学号。

(2)查询学生成绩不在60-70之间的学生的学号、课号、成绩。

--4、匹配运算符: (1)查询姓刘学生的信息。

(2)查询姓刘单名的学生信息。

(3)查询01-03年级学生的信息。

--5、空值运算符,查询变动情况为空的学生--查询学生课程编号为'05'的课程的成绩,并按成绩的降序进行排列。

4.使用函数:--1、计算学号为001的学生总分数、平均分。

--2、集合函数 avg()、count()、count(*)、max()、min()、sum()(1)查询学期成绩表中的平均分,最大分数,最小分数,总和(前面四项为查询出的相应字段)(2)统计课程表中所有记录数和各个列中值的个数,要求不能重复。

数据库系统原理实验报告多表查询

数据库系统原理实验报告多表查询

《数据库系统原理》实验报告实验名称:多表查询学院:班级:学号:姓名:实验日期:一、实验准备为了使该实验顺利进行,需要有一台计算机,计算机必须安装Windows 2000、Windows XP或Windows NT操作系统,还必须安装Microsoft SQL Server 2000Microsoft SQL Server 2005任意一版本(个人版、标准版、企业版)。

实验开始之前,必须将本章实验四中创建好的SCDB数据库和ShiYan数据库附加到当前SQL数据库服务器中。

二、实验目的(1)了解查询的概念和方法。

(2)掌握查询分析器的使用方法。

(3)掌握复杂查询的实现方法。

(4)掌握多表连接的方法。

(5)掌握嵌套查询与集合查询的基本方法。

(6)掌握SELECT语句在多表查询中的应用。

三、实验内容针对实验数据库ShiYan,完成以下多表查询操作:(1)查询为工程J1供应红色零件的供应商号码SNO。

在查询分析器中输入下面脚本:use ShiYangoselect SNOfrom SPJwhere PNO IN(select PNOfrom Pwhere COLOR='红'and JNO='J1')结果:(2)查询没有使用天津供应商生产的零件并且当前工程所使用零件的颜色全部为红色的工程号JNO。

在查询分析器中输入下面脚本:use ShiYanselect JNOfrom SPJwhere SNO IN(select SNOfrom Swhere city!='天津')and pno in (select pnofrom pwhere color='红')结果:(3)查询至少选用了供应商S1所供应的全部零件的工程号JNO。

在查询分析器中输入下面脚本:use ShiYangoselect DISTINCT JNOfrom SPJwhere EXISTS(select SNOfrom Swhere SNO='S1')结果:(4)找出工程项目J2使用的各种零件的名称及其重量。

数据库查询实验报告

数据库查询实验报告

实验报告课程名称:数据库系统概论学院:工程学院专业:年级:班级:姓名:学号:指导教师:年12 月10 日教务处制:在 INTO 子句中指出了表名 student,并指出了新增长旳元组在哪些属性上要赋值,属性旳次序可以与 CREATE TABLE 中旳次序不一样样。

INSERT INTO "S-C"."STUDENT"VALUES('','张成民','男','18','CS' );select* from "S-C"."STUDENT":值与属性要一一对应。

INSERT INTO "S-C".sc (sno,cno)VALUES('','1');SELECT*from "S-C".sc;:在新插入旳记录中 GRADE 列自动地赋空值。

或者: INSERT INTO "S-C".scVALUES('','1',null);SELECT*from "S-C".sc;:若直接在 SC 中直接插入选课记录,由于没有指出 SC 旳属性名,在 GRADE 列上要明确给出空值NULL。

创立新表CREATE TABLE dept_age(sdept CHAR (15),avg_age smallint);把系名和平均年龄存入新表insertinto dept_age(Sdept,avg_age) select sdept,avg(sage)from "S-C".studentgroup by sdept;UPDATE "S-C"."STUDENT"SET Sage=22WHERE sno=;select*from "S-C".student;UPDATE "S-C"."STUDENT"SET Sage=sage+1;select*from "S-C".student;UPDATE "S-C"."SC"SET Grade=0where sno in(select snofrom "S-C".studentwhere sdept='cs');SELECT*FROM "S-C".SC;DELETEfrom "S-C".studentWHERE sno='';select*from "S-C".student;DELETEFROM "S-C".SC;SELECT*FROM "S-C".SC;:这条 DELETE 语句将使 SC 成为空表,它删除了 SC 旳所有元组。

数据库实验报告

数据库实验报告

实验一熟悉SQL SERVER的环境(验证型实验2学时)1.目的要求:了解SQL Server management studio的使用2.实验内容:回答下面每一个问题,写出实验步骤1)在“已注册服务器窗口”中注册sql server数据库服务器在视图中点击已注册的服务器,右键点击数据库引擎新建,选择服务器注册,输入服务器名称sql server2)在“对象资源管理器”中创建名字为sc的数据库右击数据库,选择新建数据库,输入数据库名称sc3)在sc数据库中创建一个名字为student的基本表点击sc的数据库,右点击表,新建表,输入相应的属性名称,选择相应的数据类型,保存时输入表名student4)在查询窗口中里创建名为S_C的数据库输入sql语句create database S_C,然后执行5)在查询窗口中使用sql语言创建名字为course的基本表输入sql语句,create table coure3.主要仪器设备及软件:(1)PC(2)Microsoft SQL Server 2005实验二建立表格,并插入若干记录(验证型实验2学时)1.目的要求:学会使用Create Table语句和Insert语句2.实验内容:1)使用sql语言建立student,course和sc共三张表格(包括主键,外码的指定),分析具体情况适当给出一些用户自定义的约束.create database studentcreate table student(Sno char(9) primary key,Sname char(20) unique,Ssex char(2),Sage smallint,Sdept char(20));create table course(Cno char(4) primary key,Cname char(40),Cpno char(4),Ccredit smallint,foreign key (Cpno )references course(Cno));create table sc( Sno char(9),Cno char(4),Grade smallint,primary key(Sno,Cno),foreign key (Sno) references student(Sno), foreign key (Cno) references course(Cno));2)使用Insert语句向这四张表格里添加至少10条记录(数据如教材56页所示),如果出现错误,分析错误原因insert into student(Sno, Sname,Ssex,Sage ,Sdept )values('95001','李勇','男',20,'CS');insert into student(Sno, Sname,Ssex,Sage ,Sdept )values('95002','刘晨','女',19,'IS');insert into student(Sno, Sname,Ssex,Sage ,Sdept )values('95003','王敏','女',18,'MA');insert into student(Sno, Sname,Ssex,Sage ,Sdept )values('95004','张立','男',19,'IS');……插入时遇到的问题:insert语句与表的外键约束发生冲突不能正确插入;输入SQL语言标点符号时必须关掉中文输入法。

数据库实验多表查询实验报告

数据库实验多表查询实验报告

附页实验内容:针对实验数据库shiyan,完成以下单表查询操作:1.查询为工程J1供应红色零件的供应商号码SNO。

2.查询没有使用天津供应商生产的零件并且当前工程所使用零件的颜色全部为红色的工程号JNO。

3.查询至少选用了供应商S1所供应的全部零件的工程号JNO。

4.找出工程项目J2使用的各种零件的名称及其重量。

5.找出上海厂商供应的所有零件号码。

6.找出使用上海产的零件的工程名称。

7.找出没有使用天津产的零件的工程号码。

8.找出重量最轻的红色零件的零件编号PNO。

9.找出供应商与工程所在城市相同的供应商提供的零件号码。

10.找出所有这样的一些<CITY,CITY,PNAME>三元组,使得第一个城市的供应商为第二个城市的工程供应零件的名称为PNAME。

11.重复第15题,但不检索两个CITY值相同的三元组。

12.找出供应商S1为工程名中含有“厂”字的工程供应的零件数量总和。

实验方法、步骤以及实验结果:操作1(1)打开SQL Server查询分析器。

(2)在查询分析器中输入如下所示的SQL脚本:use ShiYangoselect snofrom spjwhere jno='j1'and pno in(select pnofrom pwhere color='红')操作结果:操作2(1)打开SQL Server查询分析器。

(2)在查询分析器中输入如下所示的SQL脚本:use shiyangoselect jnofrom spjwhere sno in (select snofrom swhere city<>'天津')andpno in (select pnofrom pwhere color='红')操作结果:操作3(1)打开SQL Server查询分析器。

(2)在查询分析器中输入如下所示的SQL脚本:select distinct jnofrom spj as xwhere not exists ( select *from spj as ywhere sno='s1'and not exists (select *from spj as zwhere z.pno=y.pno and z.jno=x.jno))操作结果:操作4(1)打开SQL Server查询分析器。

数据库原理与应用 数据库查询操作

数据库原理与应用 数据库查询操作
ConstraintCcredit_FKForeignKey(Cpno)ReferencesCourse(Cno)
自连接查询
例如:查询学生中年龄相同的学生情况。
SELECTA.Sno,A.Sname,A.Ssex,A.Sage,A.Sdept
FROMStudentAJOINStudentBONA.Sno!=B.SnoANDA.Sage=B.Sage
注意:在自然连接时,对数表必须使用别名。且本题中用自连接时必须指明条件:A.Sno!= B.Sno不然的话会出现很多重名的无用结果。
INTOGradeList
FROMStudentA,SC
WHEREA.Sno=SC.Sno
GROUPBYA.Sno,Sname,Ssex
HAVING(SUM(SC.Grade)>=200)
这句语句的语义是:将Student表中的Sno,Ssex和把SUM值作为新的数据项,存放到GradeList表中,且存放的数据需满足SUM(SC.Grade >= 200)。
2.在FROM子句中用JOIN连接符指定连接条件
例如:查询所有有2号t.Sno,Sname,Grade
FROMStudentINNERJOINSCONStudent.Sno=SC.Sno
WHERECno=2
非等值连接查询
在等值连接条件中不使用等号,而使用其他比较运算符,这就构成了非等值连接查询,可以使用的比较运算度有:> >= < <= !=还可以使用BETWEEN……AND之类的谓词。
SELECTTOP (200) Sno,Sname,Ssex, Sage,Sdept
FROMStudent
③:学习和使用QBE查询

数据库实验报告 简单SQL查询及数据库多表查询

数据库实验报告  简单SQL查询及数据库多表查询
[ HAVING search_condition ]
[ ORDER BY order_expression [ ASC | DESC ] ]
添加语句:
INSERT [INTO] table_or_view [(column_list)] data_values
删除语句:
DELETE [ FROM ] table_name WHERE search_condition
1、首先检查表结构:
图2-1输入检查表结构的语句
注意:
(1)表名称不能以数字开头
(2)sp_help语句只能一次执行一句,不能批量执行
2、单条语句插入样例:
插入后
插入后
插入后
插入后
插入后
请同学们自行练习使用单条SQL语句给自己的各个表进行插入
图2-2 各表插入语句样例
2.6.2操作二:UPDATE(更新)
11、请查询输出:班级编号,班级名称,男生,女生。
图2-15 SELECT语句中CASE语句的用法1
12、请查询输出:班级编号,班级名称,男生,女生,合计。
图2-16 SELECT语句中CASE语句的用法2
13、执行以下查询,解释该查询的含义
解释:第一个
图2-17解释SELECT语句
2.7思考题
1.如何使用UNION子句,它必须符合哪两条基本准则?
图2-8 SELECT语句中函数以及复杂子句的用法
5、查询没有成绩记录的学生,查询输出:学号,姓名、的在班级简称。
图2-9 SELECT语句中not in的用法
6、查询某学生的各课成绩(注意确保该学生有课程成绩),结果格式如下:
查询07号学生成绩如下
图2-10用SELECT语句查询自己的成绩

实验三 SQL的多表数据查询

实验三 SQL的多表数据查询
Cname CHAR(40), Cpno CHAR(4), Ccredit SMALLINT, FOREIGN KEY (Cpno) REFERENCES Course(Cno) ); go /*表 Course 的主码为 Cno,属性列 Cpno(先修课)为外码,被参照表为 Course,被参照列是 Cno*/ create table SC (Sno CHAR(9), Cno CHAR(4), Grade SMALLINT, primary key (Sno, Cno), FOREIGN KEY (Sno) REFERENCES Student(Sno), FOREIGN KEY (Cno) REFERENCES Course(Cno) ); go /*表 SC 的主码为(Sno, Cno), Sno 和 Cno 均为外码,被参照表分别为 Student 和 Course,被参照 列分别为 Student.Sno 和 o*/ insert into student values('200215121','李勇','男',20,'CS'); insert into student values('200215122','刘晨','女',19,'CS'); insert into student values('200215123','王敏','女',18,'MA'); insert into student values('200215125','张立','男',19,'IS'); go /*为表 Student 添加数据*/ insert into course values('1', '数据库', NULL,4); insert into course values('2', '数学', NULL,2); insert into course values('3', '信息系统', NULL,4); insert into course values('4', '操作系统', NULL,3); insert into course values('5', '数据结构', NULL,4); insert into course values('6', '数据处理', NULL, 2); insert into course values('7', 'PASCAL 语言', NULL,4); go update Course set Cpno = '5' where Cno = '1'; update Course set Cpno = '1' where Cno = '3'; update Course set Cpno = '6' where Cno = '4'; update Course set Cpno = '7' where Cno = '5';
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

集美大学计算机工程学院实验报告一、实验目的1.掌握多表连接查询方法;2.掌握IN 子查询的嵌套查询;3.了解EXISTS嵌套查询方法。

二、实验内容与设计思想1.多表等值连接查询;2.外连接查询;3.IN子查询嵌套;4* EXISTS嵌套查询。

设计思想:1、复习书本上的相关知识,如查阅多表的连接查询、多表的等值连接查询、表自身的连接、IN嵌套子查询和EXISTS嵌套子查询等知识点;2、先建立一个XSDA库,在建立相关表(利用上次验证试验建立好的数据库);3、根据实验要求进行各种查询操作;4、遇到问题,及时问老师或同学,查阅资料,以便得到及时解决;5、认真做好试验报告。

三、实验使用环境操作系统:Win-7编程环境:Microsoft SQL Server 2008四、实验步骤和调试过程###验证性实验1.多表的连接查询(相当于做笛卡儿乘积)SELECT * FROM C XX,SC XX(截图中间有省略)…………2. 表的等值连接查询(1) 查询各学生的选课信息(包括学号、课程名、成绩)因为学号和成绩在SC表中,而课程名在C表中,因此需要多表查询。

SELECT SNO,CNAME,GRADEFROM C XX C,SC XX SCWHERE O=O(2) 查询学生的选课记录,显示学生的学号、姓名、课程号、成绩)SELECT S.SNO,SNAME,CNO,GRADEFROM S XX S,SC XX SCWHERE S.SNO=SC.SNO(3) 查询学生的选课记录,显示学生的学号、姓名、课程号、课程名、成绩SELECT S.SNO,SNAME,O,CNAME,GRADEFROM S XX S,SC XX SC,C XX CWHERE S.SNO=SC.SNO AND O=O3.左外连接查询:当希望左表(第一张表)中所有记录全部显示出来时,需要用左外连接操作。

INSERT INTO S (SNO,SNAME) VALUES(’20000’,’ZXX’)SELECT S.SNO,SNAME,CNO,GRADEFROM S XX SLEFT OUTER JOIN SC XX SC ON S.SNO=SC.SNO观察与下面等值连接的执行结果有何不同?SELECT S.SNO,SNAME,CNO,GRADEFROM S XX S, SC XX SC WHERE S.SNO=SC.SNO4.表自身的连接(1) 查询与‘李勇’同系的学生学号将学生表S与S本身进行等值连接(系部相等),因为S与S做连接操作时不能区分,所以,对表取一个别名。

然后将第二张表S中名字为‘李勇’的记录选择出就可。

SELECT S1.SNOFROM S XX AS S1,S XX AS S2WHERE S1.DEPA=S2.DEPA AND S2.SNAME=’李勇’(2)显示每个学生的非最高分成绩(学生自己的选课成绩中,不是最高分的选课记录显示出来)SELECT SNO, CNO, GRADE FROM SC XX AS SC1WHERE GRADE <(SELECT MAX(GRADE) FROM SC XX AS SC2WHERE SC2.SNO=SC1.SNO)5.IN嵌套子查询(1)不相关的IN 子查询:子查询可以单独执行,与被嵌套的查询无关。

如,查询与‘李勇’同系的学生学号可以先查询出‘李勇’所在的系,然后再到S表中查询与上述结果相同的记录。

SELECT SNOFROM S XXWHERE DEPA IN(SELECT DEPA FROM S XX WHERE SNAME=‘李勇’)查询‘数据库原理’课程的选课人数SELECT COUNT(*)FROM SC XXWHERE CNO IN(SELECT CNO FROM C XX WHERE CNAME=‘数据库原理’)(2)相关的子查询:子查询中要用到父查询表的信息,子查询不能独立执行。

如,查询选修课程号为“C01”课程且成绩至少高于选修课程号为“C02”的同学的Cno、Sno和GRADE。

在子查询中,因为要查找该同学‘C02’课程的成绩,所以,需要父查询表中该学生的学号信息。

SELECT CNO,SNO,GRADEFROM SC XX AS SC1WHERE CNO=’C01’AND GRADE >(SELECT GRADE FROM SC XX AS SC 2WHERE SC2.SNO=SC1.SNO AND O=’C02’)6* EXISTS嵌套子查询(1)执行以下语句,观察显示的两个查询结果SELECT SNO,SNAMEFROM S XXWHERE EXISTS(SELECT * FROM SCV WHERE CNO=‘C03’)GOSELECT SNO,SNAME FROM S XX(2)执行以下语句,观察显示的两个查询结果INSERT INTO C XX VALUES(‘C06’,‘数据库安全’,NULL,3)SELECT SNO,SNAMEFROM S XXWHERE EXISTS(SELECT * FROM SC WHERE CNO=‘C06’)(3)查询‘数据库原理’课程的选课人数SELECT COUNT(*)FROM SC XXWHERE EXISTS( SELECT * FROM C XXWHERE O=O AND CNAME=’数据库原理’)###设计性实验(1)查询“计算机系“学生所教课程的成绩表。

代码:SELECT S.SNO,CNO,GRADEFROM SC12SC,S12SWHERE SC.SNO=S.SNO AND S.DEPA='计算机系'(2)查询成绩比该课程平均成绩低的同学的成绩表。

代码:SELECT SNO,CNO,GRADE FROM SC12SC1WHERE GRADE<(SELECT AVG(GRADE)FROM SC12SC2WHERE O=O)(3)查询选修101 课程的学生学号、课程名、成绩,并要求对查询结果按学号的降序排列,如果学号相同则按成绩的升序排列。

代码:SELECT SNO,CNAME,GRADE FROM SC12SC,C12 CWHERE O='c01'AND O=OORDER BY SNO DESC(4)查询选修两门及两门以上课程的学生学号及姓名。

代码:SELECT S.SNO,SNAME FROM S12SJOIN SC12SC ON S.SNO=SC.SNOGROUP BY S.SNO,SNAMEHAVING COUNT(*)>=2(5)查询年龄在20-22之间的男生的选修的课程号。

代码:SELECT CNO FROM SC12SCWHERE EXISTS(SELECT*FROM S12SWHERE SEX='男'AND AGE BETWEEN 20 AND 22 AND SC.SNO=S.SNO )(6)查询选修‘数据结构’课程的学生人数。

代码:SELECT COUNT(*)FROM SC12SCWHERE EXISTS(SELECT*FROM C12 CWHERE O=O AND CNAME='数据结构')GOSELECT COUNT(*)FROM SC12WHERE CNO IN(SELECT CNO FROM C12WHERE CNAME='数据结构')(7)查询每门选课成绩在80分以上的学生学号、姓名。

代码:SELECT S.SNO,SNAME FROM S12SWHERE (SELECT MIN(GRADE)FROM SC12WHERE S.SNO=SNO)>=80 GOSELECT S.SNO,SNAME FROM S12SWHERE EXISTS(SELECT*FROM SC12SCGROUP BY SNOHAVING MIN(GRADE)>=80 AND S.SNO=SC.SNO)五、实验小结1、在这次实验之前,认真查阅书本上相关知识点和代码;2、通过这次实验基本掌握多表连接查询方法、掌握IN 子查询的嵌套查询、了解EXISTS嵌套查询方法。

3、子句HAVING()必须要与GROUP BY语句使用,这一点非常重要,由于不小心,在实验中有两三次提示这样的错误,切记切记;思考题:1、多表的连接查询是否都可以转换成嵌套查询?什么情况下连接查询不能用嵌套查询表示?多表的连接查询不是都可以转换成嵌套查询的,当查询结果中有从多张表中输出元素时,这种情况下就不能转换的;当涉及左外连接或右外连接时,也不能转换。

2、多表连接查询和IN嵌套子查询从查询效率上来说,哪种查询的效果更好?为什么?关于查询效果的好坏,两者之间没有绝对的好坏,只能根据具体情况而定。

当嵌套子查询为无关嵌套查询时,IN嵌套子查询的查询效率要高,因为无关嵌套查询只对子查询涉及的表扫描一次,而多表连接要做笛卡尔成绩运算,子表要查询多次。

如果嵌套子查询为相关嵌套查询时,两者的查询效率差不多。

六、附录《SQL Server实用教程》。

相关文档
最新文档