创建一个表salary3,其结构与salary表相同,要求salary3表上创建employee表id列的值来

实验1创建数据库和表
目的与要求:
1) 了解sql server数据库的逻辑结构和物理结构;
2) 了解表的结构特点;
3) 了解sql server的基本数据类型;
4) 了解空值概念;
5) 学会在企业管理器中创建数据库和表;
6) 学会使用T-SQL语句创建数据库和表
创建用于企业管理器的员工管理数据库,数据库名为YGGL,包含员工的信息,部门信息以及员工的薪水信息.数据库YGGL包含三个表:
1) Employees:员工自然信息表
2) Departments:部门信息表
3) Salary:员工薪水情况表
1. 在企业管理器中创建数据库YGGL
2. 在企业管理器中删除创建的yggl数据库
在企业管理器中选择数据库yggl-&在yggl上单击鼠标右键-&删除.
3. 使用T-SQL语句创建数据库yggl
按照实验步骤1的要求创建数据库yggl.
启用查询分析器-&在查询窗口中输入以下T-SQL语句:
create database yggl
单击快捷工具栏中的执行图标,执行上述语句,并在企业管理器中查看执行结果.
4. 在企业管理器中分别创建表Employees,Departments和Salary 在企业管理器中选择数据库yggl-&在yggl上单击鼠标右键-&新建-&表-&输入Employees表各字段信息-&单击保存图标-&输入表名Employees,即创建了表Employees.按同样的操作过程创建表Departments和Salary.
5. 在企业管理器中删除创建的Employees,Departments和Salary表 在企业管理器中选择数据库yggl的表Employees-&在Employees上单击鼠标右键-&删除,即删除了表Employees.按同样的方法删除表Departments和Salary.
6. 使用T-SQL语句创建表Employees,Departments和Salary. 启动查询分析器,在查询窗口中输入以下T-SQL语句:
create table Employees
EmployeeID char(6) not null,
char(10) not null,
Birthday datetime not null,
Sex bit not null,
Address char(20) not null,
Zip char(6) null,
PhoneNumber char(12) null,
EmailAddress char(20) null,
DepartmentID char(3) not null
单击快捷工具栏中的执行图标,执行上述语句,即可创建表Employees,按同样的操作过程创建表Departments和Salary,并在企业管理器中查看结果.
表数据插入、修改和删除
目的与要求:
1)学会在企业管理器中对数据库表进行插入、修改和删除数据操作。
2)学会使用T-SQL语句对数据库表进行插入、修改和删除数据操作。
3)了解数据更新操作时要注意数据完整性
4)了解T-SQL语句对表数据操作的灵活控制功能。
实验内容:
分别使用企业管理器和T-SQL语句,向在以下实验步骤1 建立的数据库YGGL的3个表Employees, Departments和Salary中插入多行数据记录,然后修改和删除一些记录。使用T-SQL进行有限制的修改和删除。
实验步骤:
1.在企业管理器中向数据库YGGL表加入数据。
在企业管理器中选择表Employees-〉在其上单击鼠标右键-〉选择“返回所有行”-〉逐字段输入各记录值,输入完后,关闭表窗口。
依照同样的方法给表Departments和Salary中添加数据。
2.在企业管理器中修改数据库YGGL表数据
1)在企业管理器中删除表Employees的第2,8行和Salary的第2,11行。
注意进行删除操作时,作为两表主键的EmployeeID的值,以保持数据完整性。
在企业管理器中选择表Employees-〉在其上单击鼠标右键-〉选择“返回所有行”-〉选择要删除的行-〉单击鼠标右键-〉删除-〉关闭窗口。
2)企业管理器中删除表Departments的第2行,同时也要删除Employees中
的第2行。方法同上。
3)在企业管理器中将表Employees中编号为020018的记录的部门号改为4。
在企业管理器中选择表Employees-〉在其上单击鼠标右键-〉选择“返回所有行”-〉将光标定位至编号为020018的记录的DepartmentID字段,将值1改为4。
3.1)使用T-SQL命令分别向YGGL数据库Employees,Departments和Salary表中添加1行纪录。
启动查询分析器-〉在查询窗口中输入以下T-SQL语句:
insert into employees values(‘011112’,’罗林’,’’,1,’解放路100
号’,5663,null,5)
insert into Departments values(‘2’,’人力资源部’,null)
insert into Salary values(‘011112’,)
单击快捷工具栏中的执行图标,执行上述语句。
2)使用T-SQL命令修改表Salary中的某个记录的字段值。
启动查询分析器-〉在查询窗口中输入以下T-SQL语句:
update Salary set Income=2890 where EmployeeID=’011112’
3) 修改表Employees和Departments的记录值,仍要注意数据完整性。操作过程同2)。
4)用T-SQL命令修改表Salary中的所有记录的字段值。
启动查询分析器-〉在查询窗口中输入以下T-SQL语句:
update Salary set Income=Income+100
单击快捷工具栏的执行图标,执行上述语句,将所有职工的收入增加100。
5)使用TRANCATE TABLE语句删除表中所有行。
启动查询分析器-〉在查询窗口中输入以下T-SQL语句:
trancate table Salary
单击快捷工具栏中的执行图标,执行上述语句,将删除Salary表中的所有行。 注意:这个操作要谨慎,后面的实验还需要这些数据,可建立一个临时表,来实验该命令的效果。数据库实验六_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
数据库实验六
上传于||文档简介
综合型实验项目索引和数据完整性
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩7页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢君,已阅读到文档的结尾了呢~~
SQL实用教程(第四版)实验六索引数据完整性的使用,实用骨科学第四版 pdf,vb第四版课后实验答案,vb第四版实验答案,实验6 数据库完整性,java2实用教程第四版,vb第四版实验篇答案,实用神经病学第四版,vb第四版实验题答案,实用新生儿学第四版
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
SQL实用教程(第四版)实验六索引数据完整性的使用
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口数据库实验报告_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
数据库实验报告
上传于||暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩19页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢SQL Server 性能优化之——T-SQL 临时表、表变量、UNION - 推酷
SQL Server 性能优化之——T-SQL 临时表、表变量、UNION
这次看一下临时表,表变量和Union命令方面是否可以被优化呢?
一、临时表和表变量
很多数据库开发者使用临时表和表变量将代码分解成小块代码来简化复杂的逻辑。但是使用这个的后果就是可能带来性能的损害
子系统的影响
(存储区域网络
或逻辑存储),这是由于增加了
全局分配映射页
(Global Allocation Map, GAM)
用于跟踪区的使用情况,每个GAM页可以跟踪64000个区或者说4GB的数据。在GAM页中,如果某个位值为0,则表示它所对应的区已经分配给了某个对象使用,值为1时表示这个区是空闲的。
共享全局分配映射页
(Shared Global Allocation Map, SGAM)
功能和GAM是一样的,所不同的就是SGAM是用来管理混合区的。不过它的位图映射关系正好是相反的:在GAM中设置为1的,在SGAM中设置为0——用于代表一个空闲的区。
页可用空间
(Page Free Space, PFS)
,这种页记录了某个页是否分配给了某个对象,并且记录这个页上有多少可用的空间,位图映射值可显示一个页的使用率是50%、85%、95%或是95%以上。SQL Server根据这个信息来决定是否要给一行数据分配新的空间
这是由于Cxpacket在索引不足的临时数据库上等待结果,如果临时表有聚集索引和非聚集索引,这样的现象可以被减缓。
因此,最好有限的使用临时表。
在必须使用临时表的情况下,可以参照一下预防措施:
使用临时表(create table #Temp)而不是使用表变量(Declare @table table),这样做的原因是可以在临时表上使用索引。
使用临时表时,用小型数据量的小表来限制性能影响。
如果临时表中使用inner join , group by , order by 或 where,要确保临时表有聚集索引或非聚集索引。
那么,采用什么办法避免使用临时表和表变量呢?
CTE表达式(
在数据库架构中创建物理表,而不是在历史数据库中创建临时表。
SQL Server 2008以后,表参数是可以用的。
首先,在新数据库MyDemo中创建新表
--创建新表
use MyDemo
CREATE TABLE [dbo].[Employees](
[empid] [int] IDENTITY(1,1) NOT NULL,
[empname] [nvarchar](100) NULL,
[deptid] [int] NULL,
[Salary] [float] NULL,
CONSTRAINT [PK_Employees] PRIMARY KEY CLUSTERED
( [empid] ASC )
(PAD_INDEX
= OFF, STATISTICS_NORECOMPUTE
= OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS
= ON, ALLOW_PAGE_LOCKS
= ON) ON [PRIMARY]
) ON [PRIMARY]
CREATE TABLE [dbo].[Departments](
[deptid] [int] IDENTITY(1,1) NOT NULL,
[deptname] [nchar](10) NULL,
CONSTRAINT [PK_Departments] PRIMARY KEY CLUSTERED
[deptid] ASC
(PAD_INDEX
= OFF, STATISTICS_NORECOMPUTE
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS
= ON, ALLOW_PAGE_LOCKS
= ON) ON [PRIMARY] )
ON [PRIMARY]
使用表变量:
alter procedure Performance_Issue_Table_Variables
SET NOCOUNT ON;
declare @table table(empid int, empname varchar (25),Department varchar (25) ,Salary int)
insert into @table select S.empid,S.empname,T.deptname,S.salary from Employees s inner join Departments T ON S.deptid =T.deptid
SELECT COUNT (empid) ,Department,Salary
FROM @table GROUP BY Department,Salary HAVING Salary&2000
使用临时表:
Create procedure Performance_Issue_Table_Variables
SET NOCOUNT ON;
create table #table (empid int, empname varchar (25),Department varchar (25) ,Salary int)
create clustered index #table_index1 on #table (empid asc )
create nonclustered index #table_index2 on #table (Salary) include (Department,empid )
insert into #table select S.empid,S.empname,T.deptname,S.salary from Employees s
inner join Departments T ON S.deptid =T.deptid
SELECT COUNT (empid) ,Department,Salary
FROM #table GROUP BY Department,Salary HAVING Salary&2000
DROP TABLE #table
使用CTE表达式:
Create procedure Performance_Solution_CTEexpression
SET NOCOUNT ON;
With temp as
select S.empid,S.empname,T.deptname as Department,S.salary from Employees s inner
join Departments T ON S.deptid =T.deptid
SELECT COUNT (empid) ,Department,Salary
FROM temp GROUP BY Department,Salary HAVING Salary&2000
使用表参数
表参数可通过三个步骤实现
第一,创建一个新的数据表:
create type Specialtable as table
(EmployeeID int NULL,
EmployeeName Nvarchar (50) Null )
接下来,创建存储过程,并接受这个表所谓参数输入:
procedure Performance_Solution_Table_Paramters @Temptable Specialtable Readonly
select * from @Temptable
Finally, execute the stored procedure :
declare @temptable_value specialtable
insert into @temptable_value select '1','Jone' union select '2', 'Bill'
exec dbo.SP_Results @temptable=@temptable_value
使用子查询
Create procedure Performance_Solution_SubQuery
SET NOCOUNT ON;
SELECT COUNT (empid) ,S.Department,Salary
(select S.empid,S.empname,T.deptname as Department,S.salary from Employees s inner join Departments T ON S.deptid =T.deptid) S
GROUP BY Department,Salary HAVING Salary&2000
使用物理表
create table schema_table (empid int, empname varchar (25),Department varchar (25) ,Salary int)
create clustered index schema_table_index1 on schema_table (empid asc )
create nonclustered index schema_table_index2 on schema_table (Salary) include (Department,empid )
insert into schema_table select S.empid,S.empname,T.deptname,S.salary from Employees s inner join Departments T ON S.deptid =T.deptid
Create procedure Performance_Solution_PhysicalTables
SET NOCOUNT ON;
SELECT COUNT (empid) ,Department,Salary
FROM schema_table GROUP BY Department,Salary HAVING Salary&2000
二、本次的另一个重头戏
使用Union命令,和使用临时表一样,会影响I/O子系统(如,页和页I/O闩锁等待)。但是很多数据库开发者仍然使用Union命令处理复杂的业务逻辑。
选择/改善Union :
& 使用Case When 子句代替,它们可以做聚合和详细的查询
& 使用动态查询:用强大的sp_executesq来节省每次运行查询执行计划,节省时间消耗。存储过程中使用If Else 语句决定查询语句适合的一组参数,这样可以根据传入存储过程的参数控制Union的数量。
& 选择排序语句内使用Union,使用轻量级的选择查询减少重量级的选择查询消耗的页闩锁等待。
使用性能较差的Union命令:
create procedure Poor_Performing_UnionSP
SET NOCOUNT ON;
select S.empid,S.empname,T.deptname,S.salary from Employees s inner join Departments T ON S.deptid =T.deptid WHERE T.deptid&1 and S.salary
select S.empid,S.empname,'Management deparments' as deptname,S.salary from Employees s inner join Departments T ON S.deptid =T.deptid WHERE T.deptid=1 and S.salary
使用Case When语句:
create procedure PerformantSP_Grid_Results_Using_CaseWhen
select S.empid,S.empname,
case when T.deptid&1 and S.salary
then T.deptname
when T.deptid=1 and S.salary
&10000 then 'Management deparments'
end as deptname
from Employees s inner join Departments T ON S.deptid =T.deptid
使用Union获得聚合结果:
create procedure Poor_Performing_Union_Aggregate_Results
SET NOCOUNT ON;
select count (S.empid)as Employee_count,T.deptname,S.salary from Employees s
inner join Departments T
ON S.deptid =T.deptid WHERE T.deptid&1 and S.salary
group by T.deptname,S.salary
使用Case When获得集合结果:
create procedure PerformantSP_Aggregate_Results_Using_CaseWhen
SET NOCOUNT ON;
select sum (case when
T.deptid&1 and S.salary
then 1 else 0 end)
as Employee_count2
,T.deptname,S.salary
from Employees s inner join Departments T ON S.deptid =T.deptid
group by T.deptname,S.salary
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致

我要回帖

更多关于 创建employee表 的文章

 

随机推荐