当前位置:文档之家› 数据库系统概论——数据操纵语言DML实验报告

数据库系统概论——数据操纵语言DML实验报告

数据库实验报告题目:数据库操纵语言DML 姓名:李军毅日期:2016-4-10实验目的1.熟悉SQL语言中DML的功能。

2.初步了解如何进行查询优化。

3.初步了解SQL语句的查询计划。

实验平台1.OS:Windows XP/72.DBMS:SQL Server 2008实验用时两次上机实验内容一、熟悉SQL语句的DML功能1.创建数据库,建立第二章习题5中的4个表,并插入数据。

2.完成SQL查询。

3.VIEW。

4.UPDATE和DELETE。

二、初步了解查询优化1、配置SQL Server,导入dbcourse数据库2、在原始papers表中查询title属性3、在papers表中的title属性列上建立unique索引4、在papers表中查询文章的作者在authors表中存在且文章发表的期刊在journals表中存在的文章的org5、提交两个对papers表的查询,一个查询输出所有的列,另一个查询只输出title列。

三、初步了解查询处理流程实验中出现的问题预备知识一、数据操纵语言数据库数据操纵语言DML (Data Manipulation Language),它使用户能够查询数据库以及操作已有数据库中的数据的计算机语言。

DML具体包含查询,删除,更新,插入四种操作。

二、SQLSQL(Structured Query Language)结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

SQL语言包括三种主要程序设计语言类别的语句:数据定义语言(DDL),数据操作语言(DML)及数据控制语言(DCL)。

三、SQL Server 临时表SQL Server包含一个自带的系统数据库——tempdb。

它用来存放用户创建的临时对象。

临时对象分为全局临时对象和区域临时对象。

全局临时对象所有用户可见,区域临时对象仅当前连接对象可见。

每当SQL Server重启后,tempdb数据库会被重新创建。

临时表的创建:临时表的创建与表的创建方法一样,只不过本地临时表的名称前面有一个编号符 (#table_name),而全局临时表的名称前面有两个编号符 (##table_name)。

如:CREATE TABLE #Temp (cola INT PRIMARY KEY)将创建一个名为Temp的临时表。

临时表的其他数据操作和表的一致。

实验内容一、熟悉SQL语句的DML功能1.创建数据库,建立第二章习题5中的4个表,并插入数据。

如下图所示:create table S(Sno varchar(5)primary key,Sname varchar(10)null,Status int null,City varchar(10)null);create table P(Pno varchar(5)primary key,Pname varchar(10)null,Color varchar(10)null,Weight int null);create table J(Jno varchar(5)primary key,Jname varchar(10)null,City varchar(10)null);create table SPJ(Sno varchar(5)not null,Pno varchar(5)not null,Jno varchar(5)not null,Qty int null,primary key(Sno,Pno,Jno),foreign key (Sno)references S(Sno), foreign key (Pno)references P(Pno), foreign key (Jno)references J(Jno), );插入数据:insert into Svalues('S1','精益','20','天津'),('S2','盛锡','10','北京'), ('S3','东方红','30','北京'),('S4','丰泰盛','20','天津'),('S5','为民','30','上海');insert into Pvalues('P1','螺母','红','12'),('P2',',螺栓','绿','17'),('P3','螺丝刀','蓝','14'),('P4','螺丝刀','红','14'),('P5','凸轮','蓝','40'),('P6','齿轮','红','30');insert into Jvalues('J1','三建','北京'),('J2','一汽','长春'),('J3','弹簧厂','天津'),('J4','造船厂','天津'),('J5','机车厂','唐山'),('J6','无线电厂','常州'),('J7','半导体厂','南京');insert into SPJvalues('S1','P1','J1','200'),('S1','P1','J3','100'),('S1','P1','J4','700'),('S1','P2','J2','100'),('S2','P3','J1','400'),('S2','P3','J2','200'),('S2','P3','J4','500'),('S2','P3','J5','500'),('S2','P5','J1','400'),('S2','P5','J2','100'),('S3','P1','J1','200'),('S3','P3','J1','200'),('S4','P5','J1','100'),('S4','P6','J3','300'),('S4','P6','J4','200'),('S5','P2','J4','100'),('S5','P3','J1','200'),('S5','P6','J2','200'),('S5','P6','J4','500');2.完成SQL查询。

1)求供应工程J1零件P1的供应商号码SNO。

select Snofrom SPJwhere Jno='J1'and Pno='P1';2)求供应工程J1零件为红色的供应商号码SNO,并按其供应数量之和降序排列显示。

select Snofrom SPJ,Pwhere Jno='J1'and SPJ.Pno=P.Pno and P.Color='红'order by Qty DESC;3)求没有使用天津供应商生产的红色零件的工程号。

select distinct Jnofrom SPJwhere Jno not in(select Jnofrom SPJ,S,Pwhere SPJ.Sno=S.Sno and S.City='天津'and SPJ.Pno=P.Pno and P.Color='红');4)求至少用了供应商S1所供应的全部零件的工程号。

select distinct Jnofrom SPJwhere Pno in(select Pnofrom SPJwhere Sno='S1');5)求对所有工程都提供了同一零件的供应商号码。

select distinct Snofrom SPJ S1where not exists(select*from Jwhere not exists(select*from SPJ S2where S1.Sno=S2.Sno and S1.Pno=S2.Pno and J.Jno=S2.Jno)6)求满足下面要求的供应商号码,该供应商供应给某个工程零件P1的数量大于等于这个工程被供应的零件P1的平均数量。

select x_snofrom (select Sno,AVG(Qty)from SPJwhere Pno='P1'group by Sno)as X(x_sno,x_avg),(select SUM(Qty)from SPJwhere Pno='P1')as Y(y_sum)where Y.y_sum>=X.x_avg;7)求至少有一个供应商或工程所在的城市。

相关主题