SQL server实验操作语句汇总
Posted Zeker62
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL server实验操作语句汇总相关的知识,希望对你有一定的参考价值。
实验二:数据库文件操作
drop database S_T;
create database S_T;
-- 修改mdf
create database company
on
(
name=company_data,
filename='V:\\学习文件\\数据库\\生成文件\\company_data.mdf',
size=5MB,
maxsize=15MB,
filegrowth=1MB
)
-- 修改ndf
alter database company
add file
(
NAME=company2_data,
FILENAME='V:\\学习文件\\数据库\\生成文件\\company2_data.ndf',
SIZE=1MB,
MAXSIZE=5MB,
FILEGROWTH=1MB
)
-- 修改ldf
alter database company
log on
(
NAME=company_data_log,
FILENAME='V:\\学习文件\\数据库\\生成文件\\company_data_log.ldf',
SIZE=3MB,
MAXSIZE=15MB,
FILEGROWTH=2MB
)
alter database company
add FILEGROUP TempGroup
alter database company
add file
(
NAME=company3_data,
FILENAME='V:\\学习文件\\数据库\\生成文件\\company3_data.ndf',
SIZE=3MB,
MAXSIZE=10MB,
FILEGROWTH=1MB
)to filegroup TempGroup
alter database company
remove file company2_data
-- 删除数据库
USE MASTER
GO
DECLARE @dbname SYSNAME
SET @dbname = 'company'
DECLARE @s NVARCHAR(1000)
DECLARE tb CURSOR LOCAL
FOR
SELECT s = 'kill ' + CAST(spid AS VARCHAR)
FROM MASTER..sysprocesses
WHERE dbid = DB_ID(@dbname)
OPEN tb
FETCH NEXT FROM tb INTO @s
WHILE @@fetch_status = 0
BEGIN
EXEC (@s)
FETCH NEXT FROM tb INTO @s
END
CLOSE tb
DEALLOCATE tb
EXEC ('drop database [' + @dbname + ']')
create database company
实验三:数据表创建和修改
-- 删除数据库S_T
USE MASTER
GO
DECLARE @dbname SYSNAME
SET @dbname = 'S_T'
DECLARE @s NVARCHAR(1000)
DECLARE tb CURSOR LOCAL
FOR
SELECT s = 'kill ' + CAST(spid AS VARCHAR)
FROM MASTER..sysprocesses
WHERE dbid = DB_ID(@dbname)
OPEN tb
FETCH NEXT FROM tb INTO @s
WHILE @@fetch_status = 0
BEGIN
EXEC (@s)
FETCH NEXT FROM tb INTO @s
END
CLOSE tb
DEALLOCATE tb
EXEC ('drop database [' + @dbname + ']')
-- 创建数据库S_T
create database S_T
use S_T
-- 1. 创建student表,设置Sno为主键;
-- 在Sno列上创建核查约束,要求学号各个位上只能取数字字符;
-- 在Ssex列上创建核查约束,要求性别只能取“男”或“女”;
-- 在Sage 列上创建核查约束,要求学生的年龄只能在14至38之间。
create table student(
Sno char(5) not null primary key,
Sname char(20) not null unique,
Ssex char(2) not null check (Ssex='男' or Ssex='女'),
Sage smallint not null check(Sage between 14 and 38),
Sdept char(20) not null
)
-- 2. 创建course表,设置列Cno为主键;
-- 在Cno列上创建核查约束,要求课程号只能取数字字符。
use S_T
create table course(
Cno char(4) not null primary key,
Cname char(40) not null,
Cpno char(4),
Ccredit smallint not null
)
-- 3. 创建sc表,设置主键为Sno与Cno的组合;
-- 在Grade列上创建核查约束,限定成绩只能在0-100。
use S_T
create table sc(
Sno char(5) not null,
Cno char(4) not null,
primary key(Sno,Cno),
Grade int check(Grade between 0 and 100)
)
-- 4. 修改course表,
-- 在表中为Cpno列添加一外键约束Fk_Cpno,
-- 它参照了course表的主键Cno。
alter table course
add constraint Fk_Cpno foreign key (Cpno) references course(Cno)
-- 5. 修改sc表,在表中为Sno添加一外键约束Fk_Sno,
-- 它参照了student表中的主键Sno;
-- 为Cno添加外键约束Fk_Cno, 它参照了course表中的主键Cno。
alter table sc
add constraint Fk_Sno foreign key(Sno) references student(Sno)
alter table sc
add constraint Fk_Cno foreign key(Cno) references course(Cno)
-- ------------------------------------
-- 针对company数据库:
-- 删除数据库company
USE MASTER
GO
DECLARE @dbname SYSNAME
SET @dbname = 'company'
DECLARE @s NVARCHAR(1000)
DECLARE tb CURSOR LOCAL
FOR
SELECT s = 'kill ' + CAST(spid AS VARCHAR)
FROM MASTER..sysprocesses
WHERE dbid = DB_ID(@dbname)
OPEN tb
FETCH NEXT FROM tb INTO @s
WHILE @@fetch_status = 0
BEGIN
EXEC (@s)
FETCH NEXT FROM tb INTO @s
END
CLOSE tb
DEALLOCATE tb
EXEC ('drop database [' + @dbname + ']')
-- 创建数据库company
create database company
use company
-- 1. 在数据库company中创建以上五张表,并设置各表的主键。
create table employee(
emp_no char(5) not null primary key,
emp_name VARCHAR(10) not null,
sex char(2) not null,
dept VARCHAR(10) not null,
title VARCHAR(10) not null,
date_hired datetime not null,
birthday datetime ,
salary int not null,
telephone VARCHAR(20),
addr VARCHAR(50)
)
create table customer(
cust_id char(5) not null primary key,
cust_name VARCHAR(20) not null,
addr VARCHAR(40) not null,
tel_no VARCHAR(20) not null,
zip char(6)
)
create table sales(
order_no int not null primary key,
cust_id char(5) not null,
sale_id char(5) not null,
tot_amt numeric(9,2) not null,
order_date datetime not null
)
create table sale_item(
order_no int not null ,
prod_id char(5) not null ,
qty int not null,
unit_price numeric(7,2) not null,
order_date datetime
primary key(order_no,prod_id),
)
create table product(
prod_id char(5) not null primary key,
prod_name VARCHAR(20) not null
)
-- 2. 在销售主表sales中添加字段“发票号码” invoice_no,char(10),NOT NULL。
alter table sales
add invoice_no char(10) not null
-- 3. 添加外键约束:
-- 在销售主表sales的业务员编号字段sale_id上添加外键约束,参照字段为员工表employee中的字段员工编号emp_no,约束名为FK_sale_id。
alter table sales
add constraint Fk_sale_id foreign key(sale_id) references employee(emp_no)
-- 在销售主表sales的客户号字段cust_id上添加外键约束,参照字段为客户表customer中的字段客户号cust_id,约束名为FK_cust_id。
alter table sales
add constraint Fk_cust_id foreign key(cust_id) references customer(cust_id)
-- 在销售明细表sale_item的订单编号字段order_no上添加外键约束,
-- 参照字段为销售主表sales中的字段订单编号order_no,
-- 约束名为FK_order_no。
alter table sale_item
add constraint Fk_order_no foreign key(order_no) references sales(order_no)
-- 在销售明细表sale_item的产品编号字段prod_id上添加外键约束,
-- 参照字段为产品名称表product中的产品编号字段prod_id,
-- 约束名为FK_prod_id。
alter table sale_item
add constraint Fk_prod_id foreign key(prod_id) references product(prod_id)
-- 4. 添加核查约束:
-- a) 将员工表employee中的薪水字段salary的值限定在1000至10000间,
-- 约束名为CK_salary。
alter table employee
add constraint Ck_salary check(salary between 1000 and 10000)
-- b) 将员工表employee中的员工编号字段emp_no设定为以“E”字母开头,
-- 后面跟5位数的编号,约束名为CK_emp_no。
alter table employee
add constraint CK_emp_no check(LEFT(emp_no,1)='E' and len(emp_no)=5)
-- c) 将员工表employee中的性别字段设定这取值只能是“男”和“女”。
--约束名为CK_sex。
alter table employee
add constraint Ck_sex check(sex='男' or sex='女')
-- d) 将销售主表sales中的发票号码字段invoice_no设定为以“I”字母开头,
--后面跟9位数的编号,约束名为CK_inno。
alter table sales
add constraint Ck_inno check(LEFT(invoice_no,1)='I' and len(invoice_no)=10)
-- 5.为销售主表sales中的字段发票号码invoice_no设置为唯一约束,
-- 约束名为UN_inno。
alter table sales
add constraint UN_no unique(invoice_no)
实验四:数据表的查询
use company
-- 1、查找所有经理的姓名、职称、薪水。
select emp_name,dept,salary from employee where title='经理'
-- 2、在销售主表sales中查找销售金额大于等于10000元的订单。
select * from sales where tot_amt>=10000
-- 3、在员工表employee中查找薪水在4000至8000元之间的员工。
select emp_name from employee where salary between 4000 and 8000
-- 4、在员工表employee中查找住址为上海、北京、天津这三个城市的员工。
select emp_name from employee where addr in ('上海市' , '天津市', '北京市')
-- 5、在客户表customer中查找住址不在上海、北京、天津这三个城市的客户。
select emp_name from employee where addr not in ('上海市' , '天津市', '北京市')
-- 6、在员工表employee中查找姓“王”用姓名最后一个字为“功”的员工。
select emp_name from employee where emp_name like '王%功'
-- 7、在客户表customer中查找姓“刘”的客户名称、电话。
select cust_name,tel_no from customer where cust_name like '刘%'
-- 8、查找出职称为“经理”或“职员”的女工的信息。
select * from employee where title in ('经理','职员') and sex='女'
-- 9、查找薪水最高的前三条员工记录。
select top(3) * from employee order by salary desc
-- 10、查找订单金额最高的前10%的订单记录。
select top(10) percent * from sales order by tot_amt desc
-- 11、查找员工表中所属部门。(去掉重复记录)
select distinct dept from employee
-- 12、查找员工表中的所有记录,并按薪水由低到高进行排序。
select * from employee order by salary desc
以上是关于SQL server实验操作语句汇总的主要内容,如果未能解决你的问题,请参考以下文章