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实验操作语句汇总的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft SQL Server 代码片段收集

MySql常用操作SQL语句汇总

SQL SERVER 月季年统计与常用查询语句汇总

缺少 SQL SERVER 2014 代码片段

64位 SQL Server2008链接访问Oracle 过程汇总解决方法记录

SQL SERVER 查询语句