SQL_SERVER数据库操作

来源:互联网 发布:java 去除换行符 编辑:程序博客网 时间:2024/06/15 17:33

SQL Server 数据库操作 

--================================================ 
go 
--使用T-SQL语句创建数据库 
CREATE  DATABASE  new_db  --数据库名称 
 ON PRIMARY 

    NAME= 'new.mdf', 
    FILENAME= 'D:\My Documents\SQL_Server\new.mdf', 
    SIZE=3mb, 
    MAXSIZE=30mb, 
    FILEGROWTH=10% 

go 
--修改数据库容量 
ALTER DATABASE new_db 
MODIFY  FILE 

    NAME='new.mdf',  --逻辑名称 
    SIZE=5MB 

go 
--缩减数据库容量 
DBCC SHRINKDATABASE(new_db,1)  
go 
--使用数据库 
use new_db 
go 
--切换使用的数据库 
use master 
go 
--更改数据库名称 
EXEC sp_renamedb new_db , new_db123 
EXEC SP_RENAMEDB new_db123 , new_db 
go 
--删除数据库 
DROP DATABASE new_db 
go 
--分离数据库 
 
--附加数据库 
 
----------------------------------------------------- 
--创建数据库 
create database st_db 
on primary 

    name='st.mdf', 
    filename='D:\My Documents\SQL_Server\st_db.mdf', 
    size=5mb, 
    maxsize=50mb, 
    filegrowth=10% 

 
go 
--使用数据库 
use st_db 
 
go 
--创建表st_table 
create table st_table 
        ( 
            学号 int primary key identity , 
            名称 char(6) not null, 
            专业方向 varchar(10) not null, 
            系部代码 char(2) not null, 
            备注 varchar(50) 
        ) 
 
go 
--重命名表: 
exec sp_rename 'st_table','st_table123' 
exec sp_rename 'st_table123','st_table' 
 
go 
--重命名列: 
exec sp_rename 'st_table.学号','学号123','column' 
exec sp_rename 'st_table.学号123','学号','column' 
go 
 
--添加新列: 
alter table st_table add 成绩 smallint 
go 
--更改列的数据类型: 
alter table st_table  alter column  成绩  char(4)  
go 
--删除列: 
 alter table st_table drop column 成绩 
go 
--使用系统存储过程sp_help查看表信息 
EXEC  sp_help st_table 
go 
--删除表: 
drop table st_table 
 
go 
--创建表sc_table 
create table sc_table 

    学号 int primary key identity 

go 
alter table sc_table 
    add 姓名 char(6) not null 
go 
--删除表sc_table 
drop table sc_table     
/* 
alter table sc_table 
    add 专业 varchar(10) not null 
alter table sc_table 
    add 系部代码 char(2) not null 
*/ 
--创建另一个表 
create table t1 

    学号 int not null, 
    us varchar(30) 

 
--删除表的所有数据: 
Truncate table t1 
go 
--创建主键约束 
alter table t1 
    add constraint pk 
    primary key clustered (学号) 
 
go 
--创建t2表 
create table t2 

    学号 int not null, 
    us varchar(30) 

go     
--创建外建约束 
alter table t2 
    add constraint wz 
    foreign key (学号) 
    references t1(学号) 
go 
--删除t2表 
drop table t2 
go 
--删除t1表 
drop table t1 
--============================================================= 
 
go 
--创建表 
create table st_table2 
        ( 
            学号 int not null identity , 
            名称 char(10) not null, 
            专业方向 varchar(10) not null, 
            系部代码 char(2) not null, 
            备注 varchar(50) 
        ) 
go 
alter table st_table2 
    add 高考分数 int 
go 
 
 
 
--数据的添加 
insert st_table2 values ('李四','计算机系','01',null,null) 
insert st_table2 values ('张三','中文系','02','',null) 
insert st_table2 values ('张龙','计算机系','01','HELLO !','492') 
insert st_table2 values ('王五','外语系','03','外语系学习各国的语言',null) 
insert st_table2 values ('赵六','中文系','02',null,'532') 
insert st_table2 values ('赵七八','计算机系','01','学习C语言等有关课程','581') 
go 
--省略values 的insert 语句 
insert st_table2(名称,专业方向,系部代码,备注) 
    select 名称,专业方向,系部代码,备注 from st_table2 
insert st_table2(名称,专业方向,系部代码,备注) 
    select 名称,专业方向,系部代码,备注 from st_table2 
insert st_table2(名称,专业方向,系部代码,备注) 
    select 名称,专业方向,系部代码,备注 from st_table2 
insert st_table2(名称,专业方向,系部代码,备注) 
    select 名称,专业方向,系部代码,备注 from st_table2 
go 
--数据的修改     
update st_table2 set 系部代码='01'  
update st_table2 set 系部代码='02'where 专业方向='中文系' 
update st_table2 set 系部代码='03'where 专业方向='外语系' 
 
go 
--输出表中的所有列 
select * from st_table2 
select 学号,名称,专业方向,系部代码,备注 from st_table2 
go 
--输出表中部分列 
select 学号,名称 from st_table2 
select 系部代码,名称 from st_table2 
go 
--选择表中的若干记录 
select distinct 系部代码 from st_table2 
select distinct 系部代码,专业方向 from st_table2 
select distinct 系部代码,名称 from st_table2 
go 
--限制返回行数 
select top 10 * from st_table2 
select top 5 系部代码,名称 from st_table2 
select top 5 学号,名称 from st_table2 
go 
 
--常用的查询条件 
select * from st_table2 where 学号>=65 
select * from st_table2 where 学号<>65 and 学号<>66 and 学号<>67 and 学号<>68 
select * from st_table2 where 学号 between 60 and 80 or 系部代码=01 
select * from st_table2 where 学号 in(2,23,24,3,4,5,6,7,8) 
select * from st_table2 where 学号 not in(1,2,23,24,3,4,5,6,7,8) 
select * from st_table2 where 学号 not between 60 and 80 
go 
select distinct * from st_table2  
    where (专业方向 like '外语系'  or 名称 like '张三') and 备注 is not null 
go 
select * from st_table2  
    where 专业方向 not like '外语系' and 专业方向 not like'计算机系' 
go 
select * from st_table2 where 名称 like '张_' 
select * from st_table2 where 名称 like '赵__' 
select * from st_table2 where 名称 like '赵%' 
select * from st_table2 where 备注 like '学习%' or 备注 like '外语系%' 
go 
--涉及空值的查询 
select * from st_table2 where  备注 is null 
select * from st_table2 where  not 备注 is null 
select * from st_table2 where  备注 is not null 
go 
--多重条件查询 
select * from st_table2 where not 名称 like '张_' 
select * from st_table2 where not 备注 like '学习%' or 备注 like '外语系%' 
go 
--用查询结果生成新表 
select * into new_st_table2 from st_table2 where  not 备注 is null 
go 
--删除该表 
drop table new_st_table2 
go 
select * into new2_st_table2 from st_table2 
    where 专业方向 not like '外语系' and 专业方向 not like'计算机系' 
go 
--删除该表 
drop table new2_st_table2 
go 
--新表前加"#"是创建临时表 
select 学号,名称,专业方向,高考分数  
    into #new3_st_table2  
    from st_table2  
    where  not 备注 is null 
select * from #new3_st_table2 
go 
--删除new3_st_table2表 
drop table #new3_st_table2 
/* 
完整的select 语句的基本语法格式 
 
虽然select 语句的完整语法较复杂,但是其主要的语法格式可归纳如下: 
 
SELECT select_list 
[into new_table_name] 
 FROM table_list 
[WHERE search_conditions] 
[GROUP BY group_by_expression] 
[HAVING search_condition] 
[ORDER BY  order_expression [asc|desc] ] 
 
SELECT select_list 描述结果集的列,它是一个逗号分隔的表达式, 
在选择列表中使用 “*”表达式指定返回源表中所有的列 
 
[INTO new_table_name] 用于指定使用结果集来创建一个新表,new_table_name是新表的名称 
 
FROM table_list 结果集数据来源于哪些表或视图。 
 
[WHERE search_conditions]查询条件 
 
GROUP BY group_by_expression    根据列中的值将结果分组。 
 
HAVING search_conditions 结果集附加筛选,通常与GROUP BY 一起使用。 
 
ORDER BY  order_expression [ASC|DESC] 对结果进行分组ASC 和DESC 关键字用于指定行是 
                                      按升序还是降序排序。 
*/ 
 
 
 
--对结果进行分组 
select 专业方向,名称,高考分数 from st_table2 
    group by 专业方向,名称,高考分数 
go     
--HAVING 筛选条件表达式对结果集分组  
select 专业方向,名称,高考分数 from st_table2 
    group by 专业方向,名称,高考分数 
    having 专业方向 not like '动漫' 
go 
select 专业方向,名称,高考分数 from st_table2 
    group by 专业方向,名称,高考分数 
    having 专业方向<>'动漫' 
go     
--对查询的结果排序 
select * from st_table2 order by 高考分数 asc  --升序排列 
select * from st_table2 order by 高考分数 desc  --升序排列 
go 
--对数据进行统计 
select top 3 * from st_table2 order by 高考分数 desc  --升序排列 
select COUNT(*) from st_table2 
select COUNT(学号) as 高考总人数 from st_table2 
select sum(高考分数) as 高考总分数 from st_table2 
select AVG(高考分数) as 高考平均分 from st_table2 
select max(高考分数) as 高考最高分 from st_table2 
select min(高考分数) as 高考最低分 from st_table2 
go 
 
--使用COMPUTE  
---对查询结果集中的所有记录进行汇总统计 
select *from st_table2 
    order by 高考分数 desc 
    compute avg(高考分数) 
go 
select 专业方向,COUNT(*) 系部总人数,AVG(高考分数) 系部平均成绩 
    from st_table2 
    group by 专业方向 
    compute count(count(*))  
    compute sum(count(*))  
    compute avg(avg(高考分数))  
    /*这个与 select AVG(高考分数) as 高考平均分 from st_table2 
    算出来的结果为什么不同  ? ? ? */ 
go     
select 专业方向,名称,高考分数 from st_table2 where 专业方向='外语系' 
select 专业方向,名称,高考分数 from st_table2 where 专业方向 like '外语系' 
go 
select  distinct 专业方向,高考分数  
    from st_table2  
    where 专业方向='外语系'     
    compute count(专业方向) 
 
go 
--清空数据 
truncate table st_table2 
go 
--插入数据 
insert st_table2 values('张学友','网络','01','没有','411') 
insert st_table2 values('刘德华','计算机','02','没有','412') 
insert st_table2 values('舒淇','计算机','01','没有','413') 
insert st_table2 values('梁咏琪','动漫','02','没有','431') 
insert st_table2 values('杨千嬅','计算机','01','没有','465') 
insert st_table2 values('李宇春','动漫','02','没有','485') 
insert st_table2 values('蔡依林','网络','01','没有','468') 
insert st_table2 values('郑源','计算机','02','没有','510') 
insert st_table2 values('陈楚生','动漫','01','没有','550') 
insert st_table2 values('张韶涵','计算机','02','没有','421') 
insert st_table2 values('猛非','动漫','01','没有','423') 
insert st_table2 values('郑秀文','网络','02','没有','411') 
insert st_table2 values('林俊杰','计算机','01','没有','511') 
insert st_table2 values('羽泉','计算机','01','没有','500') 
insert st_table2 values('郭富城','网络','02','没有','400') 
insert st_table2 values('黄品源','动漫','02','没有','589') 
insert st_table2 values('梁朝伟','计算机','02','没有','530') 
insert st_table2 values('李克勤','网络','01','没有','520') 
insert st_table2 values('陈小春','国际金融','02','没有','512') 
insert st_table2 values('刘若英','证券期货','02','没有','421') 
insert st_table2 values('刘嘉玲','房地产金融','01','没有','428') 
insert st_table2 values('谭咏麟','房地产金融','02','没有','498') 
insert st_table2 values('张学友','证券期货','01','没有','454') 
insert st_table2 values('张卫健','证券期货','02','没有','515') 
insert st_table2 values('周传雄','房地产金融','01','没有','532') 
insert st_table2 values('周星驰','国际金融','02','没有','423') 
insert st_table2 values('游鸿明','房地产金融','02','没有','477') 
insert st_table2 values('言承旭','国际金融','02','没有','488') 
insert st_table2 values('许志安','国际金融','01','没有','582') 
insert st_table2 values('叶倩文','房地产金融','01','没有','495') 
insert st_table2 values('叶世荣','房地产金融','02','没有','499') 
insert st_table2 values('张雨生','证券期货','02','没有','531') 
insert st_table2 values('周润发','国际金融','01','没有','531') 
insert st_table2 values('张信哲','证券期货','01','没有','424') 
insert st_table2 values('周渝民','证券期货','02','没有','412') 
insert st_table2 values('太极乐队','证券期货','02','没有','423') 
go 
select * from st_table2 
go 
--数据的删除 
delete st_table2 where 系部代码='03' 
delete st_table2  --删除表中的所有数据 
 
go 
--删除st_table2表 
drop table st_table2 
go 
---======================================================================== 
 
--学校数据库表----------- 
 
--创建系部表 
create table 系部 

    系部代码 char(6) not null primary key, 
    系部名称 varchar(30) not null, 
    系主任 char(8) 

--drop table 系部 
go 
--创建专业表 
create table 专业 

    专业代码 char(4) primary key not null, 
    专业名称 char(20) not null, 
    系部代码 char(6) constraint fk01 references 系部(系部代码) 

--drop table 专业 
go 
/* 
--另外一种方法创建主键与外键 
alter table 系部  
    add constraint pk01  
    primary key clustered(系部代码)  
 
alter table 专业 
    add constraint fk_系部代码 
    foreign key(系部代码) 
    references 系部(系部代码) 
*/ 
 
--创建班级表 
create table 班级 

    班级代码 char(9) not null primary key , 
    班级名称 varchar(20) , 
    专业代码 char(4) constraint wz1 references 专业(专业代码), 
    系部代码 char(6)  constraint wz2 references 系部(系部代码), 
    备注     varchar(50)  

go 
--创建学生表 
create table 学生 

    学号 char(12) not null primary key , 
    姓名 char(8), 
    性别 char(2), 
    出生日期 datetime, 
    入学时间 datetime, 
    班级代码 char(9) constraint wz3 references 班级(班级代码), 
    系部代码 char(6) constraint wz4 references 系部(系部代码), 
    专业代码 char(4) constraint wz5 references 专业(专业代码), 
    高考分数 int  

 
/* 
drop table 学生 
alter table 学生 alter column 学号 int 
*/ 
go 
--删除表 
drop table 学生 
drop table 班级 
drop table 专业 
drop table 系部 
 
go 
--切换数据库 
use master 
go 
--删除数据库st_db 
drop database st_db 
 
------=================================================================== 
 
use master 
go 
if exists (select name from sys.databases where name=N'stt_db') 
drop database stt_db 
go 
create database stt_db 
 
--use master 
--drop database stt_db 
go 
use stt_db 
 
go 
  --学校数据库表  ------------------------------------------------------ 
 create table 系部 

    系部代码 char(6) not null primary key, 
    系部名称 varchar(30) not null , 
    系主任 char(8)  

go 
create table 专业 

    专业代码 char(4) not null primary key, 
    专业名称 varchar(20) not null, 
    系部代码 char(6) constraint wz11 references 系部(系部代码) 

go 
create table 班级 

    班级代码 char(9) not null primary key , 
    班级名称 varchar(20) , 
    专业代码 char(4) constraint wz1 references 专业(专业代码), 
    系部代码 char(6)  constraint wz2 references 系部(系部代码), 
    备注     varchar(50)  

go 
create table 学生 

    学号 char(12) not null primary key , 
    姓名 char(8), 
    性别 char(2), 
    出生日期 datetime, 
    入学时间 datetime, 
    班级代码 char(9) constraint wz3 references 班级(班级代码), 
    系部代码 char(6) constraint wz4 references 系部(系部代码), 
    专业代码 char(4) constraint wz5 references 专业(专业代码), 
    高考分数 int  

go 
 
insert 系部(系部代码,系部名称,系主任) values('01','计算机系','老张')  
go 
insert 系部(系部代码,系部名称,系主任) values('02','经济管理系','老陈')  
go 
insert 系部(系部代码,系部名称,系主任) values('03','机械系','老李')  
go 
insert 系部(系部代码,系部名称,系主任) values('04','数学系','老梁')  
go 
  
 
insert 专业(专业代码,专业名称,系部代码) values('0101','软件工程','01') 
go 
insert 专业(专业代码,专业名称,系部代码) values('0102','网络工程','01') 
go 
insert 专业(专业代码,专业名称,系部代码) values('0103','信息工程','01') 
go 
insert 专业(专业代码,专业名称,系部代码) values('0201','工商管理','02') 
go 
insert 专业(专业代码,专业名称,系部代码) values('0202','物流管理','02') 
go 
insert 专业(专业代码,专业名称,系部代码) values('0301','模具加工','03') 
go 
insert 专业(专业代码,专业名称,系部代码) values('0302','机电一体化','03') 
go 
insert 专业(专业代码,专业名称,系部代码) values('0401','应用数学','04') 
go 
insert 专业(专业代码,专业名称,系部代码) values('0402','金融数学','04') 
go 
 
 
insert 班级(班级代码,班级名称,专业代码,系部代码,备注) 
values('010101','软件工程1班','0101','01','暂无') 
go 
insert 班级(班级代码,班级名称,专业代码,系部代码,备注) 
values('010102','软件工程2班','0101','01','暂无') 
go 
insert 班级(班级代码,班级名称,专业代码,系部代码,备注) 
values('010103','网络工程1班','0102','01','暂无') 
go 
insert 班级(班级代码,班级名称,专业代码,系部代码,备注) 
values('010104','网络工程2班','0102','01','暂无') 
go  
insert 班级(班级代码,班级名称,专业代码,系部代码,备注) 
values('010105','信息工程1班','0103','01','暂无') 
go 
insert 班级(班级代码,班级名称,专业代码,系部代码,备注) 
values('010106','工商管理1班','0201','02','暂无') 
go 
insert 班级(班级代码,班级名称,专业代码,系部代码,备注) 
values('010107','物流管理1班','0202','02','暂无') 
go 
insert 班级(班级代码,班级名称,专业代码,系部代码,备注) 
values('010108','模具加工1班','0301','03','暂无') 
go 
insert 班级(班级代码,班级名称,专业代码,系部代码,备注) 
values('010109','应用数学1班','0401','04','暂无') 
go 
insert 班级(班级代码,班级名称,专业代码,系部代码,备注) 
values('0101010','金融数学1班','0402','04','暂无') 
go 
insert 班级(班级代码,班级名称,专业代码,系部代码,备注) 
values('0101011','金融数学2班','0402','04','暂无') 
go 
 
 
insert 学生 values('010101000000','刘德华','男','1988-5-5','2010-9-1','010101','01','0101',356) 
go 
insert 学生 values('010101000001','张学友','男','1988-1-4','2010-9-1','010101','01','0101',354) 
go 
insert 学生 values('010101000002','梁静茹','女','1988-2-1','2010-9-1','010101','01','0101',342) 
go 
insert 学生 values('010101000003','陈奕迅','男','1983-5-3','2010-9-1','010102','01','0101',441) 
go 
insert 学生 values('010101000004','张韶涵','女','1987-8-6','2010-9-1','010102','01','0101',354) 
go 
insert 学生 values('010101000005','林俊杰','男','1988-6-6','2010-9-1','010102','01','0101',498) 
go 
insert 学生 values('010101000006','孙燕姿','女','1984-5-3','2010-9-1','010106','02','0201',522) 
go 
insert 学生 values('010101000007','周华健','男','1986-8-6','2010-9-1','010106','02','0201',378) 
go 
insert 学生 values('010101000008','尚雯婕','女','1988-6-6','2010-9-1','010106','02','0201',365) 
go  
insert 学生 values('010101000009','任贤齐','男','1984-5-3','2010-9-1','010108','03','0301',421) 
go 
insert 学生 values('010101000010','魏晨','男','1986-8-6','2010-9-1','010108','03','0301',574) 
go 
insert 学生 values('010101000011','庞龙','男','1988-6-6','2010-9-1','010108','03','0301',452) 
go  
insert 学生 values('010101000012','刘若英','女','1988-5-3','2010-9-1','0101011','04','0402',354) 
go 
insert 学生 values('010101000013','李圣杰','男','1989-8-6','2010-9-1','0101011','04','0402',324) 
go 
insert 学生 values('010101000014','克群','男','1989-2-9','2010-9-1','0101011','04','0402',321) 
go  
 
 
 
--外连接查询表-------------------------------------------------------- 
create table 产品 

    产品编号 char(9) not null , 
    产品名称 varchar(20)  not null , 

go 
create table 产品销售 

    产品编号 char(9) not null , 
    销量 int  

go 
 insert 产品 values('001','显视器') 
 insert 产品 values('002','键盘') 
 insert 产品 values('003','鼠标') 
insert 产品销售 values('001','25') 
insert 产品销售 values('003','35') 
insert 产品销售 values('005','30') 
 
go 
--stt_table ------------------------------------------------------ 
create table stt_table 

    学号 int not null identity, 
    姓名 char(8) not null, 
    专业方向 varchar(50) not null, 
    系部代码 char(2) not null, 
    备注 varchar(50), 
    高考分数 int  

go 
insert stt_table values('张学友','网络','01','没有','411') 
insert stt_table values('刘德华','计算机','02','没有','412') 
insert stt_table values('舒淇','计算机','01','没有','413') 
insert stt_table values('梁咏琪','动漫','02','没有','431') 
insert stt_table values('杨千嬅','计算机','01','没有','465') 
insert stt_table values('李宇春','动漫','02','没有','485') 
insert stt_table values('蔡依林','网络','01','没有','468') 
insert stt_table values('郑源','计算机','02','没有','510') 
insert stt_table values('陈楚生','动漫','01','没有','550') 
insert stt_table values('张韶涵','计算机','02','没有','421') 
insert stt_table values('猛非','动漫','01','没有','423') 
insert stt_table values('郑秀文','网络','02','没有','411') 
insert stt_table values('林俊杰','计算机','01','没有','511') 
insert stt_table values('羽泉','计算机','01','没有','500') 
insert stt_table values('郭富城','网络','02','没有','400') 
insert stt_table values('黄品源','动漫','02','没有','589') 
insert stt_table values('梁朝伟','计算机','02','没有','530') 
insert stt_table values('李克勤','网络','01','没有','520') 
insert stt_table values('陈小春','国际金融','02','没有','512') 
insert stt_table values('刘若英','证券期货','02','没有','421') 
insert stt_table values('刘嘉玲','房地产金融','01','没有','428') 
insert stt_table values('谭咏麟','房地产金融','02','没有','498') 
insert stt_table values('张学友','证券期货','01','没有','454') 
insert stt_table values('张卫健','证券期货','02','没有','515') 
insert stt_table values('周传雄','房地产金融','01','没有','532') 
insert stt_table values('周星驰','国际金融','02','没有','423') 
insert stt_table values('游鸿明','房地产金融','02','没有','477') 
insert stt_table values('言承旭','国际金融','02','没有','488') 
insert stt_table values('许志安','国际金融','01','没有','582') 
insert stt_table values('叶倩文','房地产金融','01','没有','495') 
insert stt_table values('叶世荣','房地产金融','02','没有','499') 
insert stt_table values('张雨生','证券期货','02','没有','531') 
insert stt_table values('周润发','国际金融','01','没有','531') 
insert stt_table values('张信哲','证券期货','01','没有','424') 
insert stt_table values('周渝民','证券期货','02','没有','412') 
insert stt_table values('太极乐队','证券期货','02','没有','423') 
 
go 
select * from 学生 
select * from 班级 
go 
--交叉连接查询 
select * from 学生 cross join 班级  
select 学生.学号,学生.姓名,班级.班级名称  
    from 学生 cross join 班级    
select 学生.学号,学生.姓名,班级.班级名称  
    from 学生 cross join 班级 
    where 学生.班级代码=班级.班级代码 
go 
--自然连接 
select 学生.学号,学生.姓名,班级.班级名称  
    from 学生 join 班级 
    on 学生.班级代码=班级.班级代码 
go 
--自身连接查询 
select a.学号,a.姓名,a.性别,b.班级代码,b.专业代码,b.高考分数 
    from 学生 as a join 学生 as b 
    on a.学号=b.学号 
go     
select  distinct 学号,姓名,性别,班级代码,专业代码,高考分数 
    from 学生 
go 
--外连接查询 
--左外连接(LEFT OUTER JOIN) 
select * from 产品 left join 产品销售 
    on 产品.产品编号=产品销售.产品编号 
go 
--右外连接(LEFT OUTER JOIN) 
select * from 产品 right join 产品销售 
    on 产品.产品编号=产品销售.产品编号 
go 
--完全外连接(FULL OUTER JOIN) 
select * from 产品 full join 产品销售 
    on 产品.产品编号=产品销售.产品编号 
go 
--复合连接条件查询 
SELECT 学生.学号,学生.姓名,学生.性别,班级.班级名称,专业.专业名称,系部.系部名称 
FROM 学生 JOIN 班级 ON 学生.班级代码=班级.班级代码 
          JOIN 专业 ON 学生.专业代码=专业.专业代码 
          JOIN 系部 ON 学生.系部代码=系部.系部代码 
go           
SELECT 学生.学号,学生.姓名,学生.性别,班级.班级名称 
FROM 学生 JOIN 班级 ON 学生.班级代码=班级.班级代码 and 学生.性别='男' 
go 
--合并结果集 
/*参加UNION操作的各结果集的列数必须相同,对应的数据类型也必须相同, 
系统将自己动去掉并集的得复记录。 
*/ 
 select 学生.姓名,学生.性别,学生.出生日期  into new_table from 学生 
    union 
    select 学生.姓名,学生.性别,学生.出生日期 from 学生 
--打开new_table表,修改里面的数据,然后查询结果 
go 
 select 姓名,性别,出生日期 from new_table 
    union 
    select 姓名,性别,出生日期 from new_table 
 
go     
drop table new_table 
 
--子查询 
go 
select * from 学生 where 班级代码 in 
    ( 
        select 班级代码 from 班级 where 专业代码 in 
        ( 
            select 专业代码 from 专业 where 系部代码 in 
            ( 
                select 系部代码 from 系部 where 系部代码='01' 
            ) 
        ) 
    ) 
go 
select * from 学生 where 系部代码='01' 
--如果学生表中有 系部代码 这个字段,可以直接用这种方法 
go 
--带有比较运算符的子查询 
select * from 学生 where 出生日期 > 
    (select 出生日期 from 学生 where 姓名='刘德华')  
    order by 出生日期 asc 
 
go 
--带有ANY 或 ALL运算符的子查询 
select * from 学生 where 高考分数 > any 
    (select 高考分数 from 学生 where 学号 in(010101000009,010101000005)) 
select * from 学生 where 高考分数 > all 
    (select 高考分数 from 学生 where 学号 in(010101000005,010101000009)) 
 
select * from 学生  order by 高考分数 desc 
 
go 
--带有EXISTS运算符的子查询 
select * from 学生 where exists 
    (select * from 学生 where 姓名='刘德华') 
select * from 学生 where exists 
    (select * from 学生 where 姓名='郎咸平') 
go     
select * from 学生 as a where exists 
    (select * from new_table where a.姓名=new_table.姓名) 
go     
select * from 系部 where 系部代码= 
    (select 系部代码 from 专业 where 专业代码= 
        (select 专业代码 from 班级 where 班级代码= 
            (select 班级代码 from 学生 where 姓名='刘德华'))) 
select * from 学生 where 姓名='刘德华' 
 
 
 
go 
--使用SQL 语句创建唯一约束 
alter table 系部 
    add constraint  wywy 
    unique nonclustered(系部名称) 
go 
--创建检查约束 
alter table stt_table 
    add constraint ck_name 
    check(高考分数>300 and 高考分数<600) 
go     
--创建默认约束 
alter table stt_table 
    add constraint df_constraint 
    default '这就这个字段的默认值' for 备注  
 
go 
--查看约束的定义 
EXEC sp_help wywy 
EXEC sp_help ck_name 
/*如果该约束有具体的定义和文本,那么可以用sp_helptext 
来查看其语法格式为:           */ 
EXEC sp_help df_constraint 
EXEC sp_helptext df_constraint     
go     
--删除约束 
alter table stt_table 
    drop constraint df_constraint 
alter table stt_table 
    drop constraint ck_name 
alter table 系部 
    drop constraint wywy 
go 
--创建规则 
create rule gz 
    as @a>300 and @a<600 
     
go     
--绑定规则 
execute sp_bindrule 'gz','stt_table.高考分数' 
 
go 
select * into stt_table2 from stt_table 
execute sp_bindrule 'gz','stt_table2.高考分数'  
 
go 
--解绑规则 
execute sp_unbindrule 'stt_table.高考分数' 
execute sp_unbindrule 'stt_table2.高考分数' 
drop table stt_table2 
 
go 
--删除规则 
drop rule gz 
 
go 
--创建默认 
create default df_sex 
    as '男' 
 
go 
execute sp_bindefault 'df_sex','学生.性别' 
 
go 
--解除默认绑定 
execute sp_unbindefault '学生.性别' 
 
go 
--删除默认 
drop default df_sex 
 
go 
--创建索引 
/* 
CREATE [UNIQUE][CLUSTERED][NONCLUSTERED]     INDEX 索引名 
        ON 表名(列名) 
*/ 
select * into new_table from stt_table 
create clustered index 姓名_索引 
    on new_table(姓名) 
go 
drop index new_table.姓名_索引 
 
go 
--delete new_table where 姓名='张学友' 
--select * from new_table where 姓名='张学友' 
delete new_table where 学号='23' 
create unique clustered index 姓名_唯一索引 
    on new_table(姓名) 
go 
----查看索引信息 
exec sp_helpindex new_table 
go 
drop index new_table.姓名_唯一索引 
 
 
 
go 
--创建视图 
create view v1  
    as 
    select 学生.学号,学生.姓名,班级.班级名称,专业.专业名称,系部.系部名称 
    from 学生  
        join 班级 on 学生.班级代码=班级.班级代码 
        join 专业 on 学生.专业代码=专业.专业代码 
        join 系部 on 学生.系部代码=系部.系部代码 
go 
select * from v1 
/* 
CREATE VIEW  视图名 
    WITH [ENCRYPTION] [SCHEMABINDING] 
    AS 查询语句 
     [ENCRYPTION]      加密视图 
    [SCHEMABINDING]    视图及表的架构绑定 
*/ 
 
--打开new_table的IDENTITY_INSERT的属性 
go 
SET IDENTITY_INSERT new_table ON 
 
--修改new_table的列属性 
go 
alter table new_table  alter column 专业方向 varchar(50) null 
alter table new_table  alter column 系部代码 varchar(2) null 
 
--创建视图v2 
go 
create view v2 as select * from new_table 
 
--创建加密视图 
go     
create view 加密视图 with encryption 
    as select * from new_table 
 
--创建视图及表的架构绑定 
go 
create view 架构绑定 with schemabinding 
    as select 学号,姓名,高考分数 from dbo.new_table 
     
--查询视图 
go 
select * from v1 
select * from v2     
select * from new_table 
select * from 架构绑定 
 
--向视图插入数据 
go 
insert v2(学号,姓名,高考分数) values('25','郎小平','423') 
 
--修改视图数据 
go 
update v2 set 姓名='胡锦涛' where 姓名='郎小平' 
 
--删除视图数据 
go 
delete v2 where 姓名='胡锦涛' or 姓名='郎小平' 
 
--视图信息 
go 
exec sp_helptext v1 
exec sp_helptext v2 
exec sp_helptext 加密视图 
exec sp_helptext 架构绑定 
 
--删除视图 
go 
drop view v1 
drop view v2 
drop view 加密视图 
drop view 架构绑定 
 
--修改new_table属性 
go 
alter table new_table  alter column 专业方向 varchar(50) not null 
alter table new_table  alter column 系部代码 varchar(2) not null 
 
--关闭new_table的IDENTITY_INSERT属性 
go 
SET IDENTITY_INSERT new_table off 
go 
 
 
--测试资料 
CREATE TABLE t1(ID int IDENTITY,A int) 
INSERT t1 VALUES(1) 
INSERT t1 VALUES(2) 
INSERT t1 VALUES(3) 
DELETE FROM t1 WHERE A=2 
GO 
 
--将ID=3的记录的ID值改为2 
SET IDENTITY_INSERT t1 ON 
INSERT t1(ID,A) SELECT 2,A FROM t1 WHERE ID=3 
DELETE FROM t1 WHERE ID=3 
SET IDENTITY_INSERT t1 OFF 
SELECT * FROM t1 
DROP TABLE t1 
go 
 
 
--创建、执行、修改、删除简单的存储过程 
/* 
CREATE PROC 储存过程名 
    [@parameter data_type] [=default] [OUTPUT][,….] 
    AS 
    SQL语句 
*/ 
go 
--创建存储过程 
create proc p 
    as 
    select 学生.学号,学生.姓名,班级.班级名称,专业.专业名称,系部.系部名称 
    from 学生 
        join 班级 on 学生.班级代码=班级.班级代码 
        join 专业 on 学生.专业代码=专业.专业代码 
        join 系部 on 学生.系部代码=系部.系部代码 
go         
--创建含变量及参数的存储过程 
create proc p1 
    @sex varchar(2), 
    @id varchar(8) 
    as 
    select 学生.学号,学生.姓名,班级.班级名称,专业.专业名称,系部.系部名称 
    from 学生 
        join 班级 on 学生.班级代码=班级.班级代码 and 学生.性别=@sex 
        join 专业 on 学生.专业代码=专业.专业代码 
        join 系部 on 学生.系部代码=系部.系部代码 and 系部.系部代码=@id 
go         
create proc p2 
    @setname varchar(10), 
    @getnum varchar(8) output 
    as 
    select @getnum=学号 from 学生 where 姓名=@setname 
go 
--执行存储过程 
execute p 
execute p1 '女','02' 
execute p2 '刘德华','' 
go 
--查看存储过程 
execute sp_helptext p 
execute sp_helptext p1 
execute sp_helptext p2 
execute sp_depends p 
execute sp_depends p1 
execute sp_depends p2 
execute sp_help p 
execute sp_help p1 
execute sp_help p2 
go 
--删除存储过程 
drop procedure p 
drop procedure p1 
drop procedure p2 
 
--创建触发器 
/* 
CREATE TRIGGER trigger_name 
    ON { table | view } 
    FOR  {[INSERT],[DELETE],[UPDATE]} 
    SQL语句 
*/ 
go 
create trigger myinsert 
    on 产品 
    for insert 
    as 
    declare @a char(10) 
    select @a=产品编号 from inserted 
    insert into 产品销售 values(@a,0) 
go 
create trigger mydelete 
    on 产品 
    for delete 
    as 
    declare @a char(10) 
    select @a=产品编号 from deleted 
    delete 产品销售 where @a=产品编号 
 
     
go 
select * from 产品 
select * from 产品销售 
go 
--当执行插入操作时,触发器响应,产品销售表中也插入两条数据 
insert 产品 values('004','摄相头') 
insert 产品 values('008','手机') 
go 
--删除插入的数据时,触发器响应,产品销售表中也插入两条数据 
--注意,这里删除语句一定要写成两行,不能写成(产品编号='004' or 产品编号='008') 
delete 产品 where 产品编号='004' 
delete 产品 where 产品编号='008' 
go 
delete 产品销售 where 产品编号='004' or 产品编号='008' 
go 
--查看触发器信息 
execute sp_helptrigger 产品 
--删除触发器 
go 
drop trigger mydelete 
drop trigger myinsert 
go 
 
--SQL Server 的各种内置函数 
 
--聚合函数 
/* 
AVG ()--平均值 
    COUNT ()--返回行中项目的数量 
    MAX ()--最大值 
    MIN ()--最小值 
    SUM ()--求和 
*/ 
select 班级名称,avg(高考分数) from 班级  
    join 学生 on 班级.班级代码=学生.班级代码 
    group by 班级名称 
select 班级名称,max(高考分数) from 班级  
    join 学生 on 班级.班级代码=学生.班级代码 
    group by 班级名称 
select 班级名称,min(高考分数) from 班级  
    join 学生 on 班级.班级代码=学生.班级代码 
    group by 班级名称 
select 班级名称,sum(高考分数) from 班级  
    join 学生 on 班级.班级代码=学生.班级代码 
    group by 班级名称 
go 
--数学函数 
/* 
    ABS (x)--返回绝对值 
    CEILING(x)--返回大于或等于所给数字的最小整数 
    PI ()--pi值 
    POWER (x,y)--返回x的y次方 
    RAND ()--返回0~1之间的随机数 
*/ 
select ABS(8) 绝对值 
select ABS(-8) as 绝对值 
go 
select CEILING(8.5) 返回结果 
select CEILING(-8.5) as 返回结果 
go 
select PI() pi_的值 
go 
select POWER(2,3) 返回值 
go 
select RAND() 从0到1的随机数 
go 
--配置函数 
SELECT @@VERSION --获取当前数据库版本 
SELECT @@LANGUAGE --当前语言 
go 
--时间函数 
select getdate()   当前时间 
select day(getdate())   取出天 
select month(getdate()) 取出月 
select year(getdate())    取出年 
select dateadd(d,3,getdate()) as wawa_dateadd_加三天  
 -- ‘d’表示天,‘m’表示月,‘yy’表示年 
select datename(d,'2010-07-15')    取出时间的某一部分 
/* 
Year Yy yyyy 年 1753 ~ 9999  
Quarter Qq q 季 1 ~ 4  
Month Mm m 月1 ~ 12  
Day of year Dy y 一年的日数,一年中的第几日 1-366  
Day Dd d 日,1-31  
Weekday Dw w 一周的日数,一周中的第几日 1-7  
Week Wk ww 周,一年中的第几周 0 ~ 51  
Hour Hh h 时0 ~ 23  
Minute Mi n 分钟0 ~ 59  
Second Ss s 秒 0 ~ 59  
Millisecond Ms - 毫秒 0 ~ 999  
*/ 
 
--字符串函数 
Select LEN('str1111') 返回字符串的字符个数 
Select lower('ABC')  小写,lower('Abc')  小写,upper('Abc') 大写,upper('abc') 大写 --转换大小写  
select ltrim('           左边没有空格')   去空格 
select rtrim('右边没有空格    ')  去空格 
select ltrim(rtrim('    左右都没有空格    ')) 去空格 
select left('sql server',3) 取左,right('sql server',6) 取右 --取左或者取右 
Select replace('原字符串','原','这是一个')   字符串替换 
Select replicate('go',5) 指定字符重复5次  --指定的次数重复字符 
select reverse('这是字符串') 字符串返序排列 --将定字符串返序排列 
select substring('这是一个原字符串',2,3) 截取第2个位置开始的3个数字  --指定截取指字字符串 
 
go 
--排名函数 
/* 
rank()返回结果集的分区内每行的排名 
            rank() over (order by 列名) 
*/ 
select RANK() over(order by 高考分数 desc) 名次,姓名,高考分数 from 学生 
 
go     
drop table new_table 
go 
use master 
go 
drop database stt_db 
 
 




0 0
原创粉丝点击