SQL Server 数据库基本操作语句总结
发布时间:2024-01-18 05:12:06
--sql基本操作
--创建数据库
create database Studets
--创建表
create table student ( sno char(5), sname char(20), ssex char(2), sage smallint, sdept char(15) )
create table course ( cno char(3), cname char(30), cpno char(3), ccredit smallint )
create table sc ( sno char(5), cno char(3), grade int )
--查看表信息
select * from student select sno as 学号 from student select * from course select * from sc
--修改表
--插入列
alter table student add scome datetime
--修改列的字段类型 alter table student alter column scome char(50)
--删除 --删除列
alter table student drop column scome
--删除表 drop table student drop table course drop table sc
--完整性约束实现
--sno 非空唯一,ssex检查约束, sage默认大小
create table student ( sno char(5) not null unique, sname char(20), sex char(2), sage smallint default 20, sdept char(15), constraint sex check(sex in('男','女')), )
--删除表的约束 alter table student drop constraint ssex
--添加字段约束 alter table student add constraint ssex check(sex in('男','女'))
--添加主键约束 alter table student add constraint PK_SNO primary key(sno) create table course ( cno char(3) not null unique, cname char(30), cpno char(3), ccredit smallint )
--关联表主键已经存在,可以如下操作添加主键和外键约束
alter table course add constraint PK_CNO primary key(cno), constraint FK_CPNO foreign key(cpno) REFERENCES sc(cno)
create table sc
(
sno char(5) foreign key references student(sno),
cno char(3) foreign key references course(cno),
grade int,
constraint PK_SC primary key(sno,cno)
)
ALTER TABLE [dbo].[sc] DROP CONSTRAINT [FK__sc__sno__0F975522]
ALTER TABLE [dbo].[sc] DROP CONSTRAINT [PK_SC]
ALTER TABLE [dbo].[sc] DROP CONSTRAINT [PK_SC]
--创建sc后,通过如下修改主外键
alter table sc add constraint PK_SC primary key(sno,cno),
constraint FK_SNO foreign key(sno) references student(sno),
constraint FK_CNO foreign key(cno) references course(cno)
--创建索引。
分为聚簇索引(clustered物理顺序)和非聚簇索引(nonclustered逻辑顺序,可多个)
--not null约束字段时候。会创建一个系统内置的约束键值,并且这种非空判断,通过索引查询实现 --的,索引默认创建一个系统索引
create unique index STUsno
on student(sno)
create unique index COUcno
on course(cno)
create unique index SCno
on sc(sno asc,cno desc)
drop index SCno on sc
--显示表的数据和索引的碎块信息 DBCC SHOWCONTIG
--插入数据 select * from student
alter table student alter column sno char(10)
insert into student values('10021','张三','男',20,'计科系')
insert into student values('10022','王朝','女',18,'软件')
insert into student values('10023','朱元璋','男',20,'管理')
insert into student values('10024','刘彻','男',18,'军事')
insert into student values('10025','刘表','男',20,'商学系')
insert into student values('10026','白居易','男',19,'文法')
insert into student values('10027','李清照','女',24,'文法')
select * from course insert into course values('001','数据库','005',4)
insert into course values('002','高等数学','',2)
insert into course values('003','信息系统','001',4)
insert into course values('004','操作系统','006',2)
insert into course values('005','数据结构','007',3)
insert into course values('006','数据处理','',2)
insert into course values('007','C语言','006',5)
select * from sc insert into sc values('10021','002',100)
insert into sc values('10021','001',88)
insert into sc values('10021','006',100)
insert into sc values('10021','007',68)
insert into sc values('10022','002',100)
insert into sc values('10023','005',30)
insert into sc values('10024','002',100)
insert into sc values('10024','006',56)
select * from student --查询操作
--查询 select * from student select * from course select * from sc
--去掉重复行 select distinct sno from sc
--格式化查询
select sname as '姓名',2013-sage as '出生日期' from student
select sname,'出生日期',2013-sage from student
select 姓名=sname,出生日期=2013-sage from student
--条件查询
select * from course where ccredit>3
select * from course where ccredit between 2 and 5
select * from course where ccredit> 2 and ccredit<5
select * from course where ccredit in(2)
select * from course where ccredit not in(2)
--匹配查询
select * from student where sname like '刘__'
select * from student where sname like '_表__'
select * from student where sname like '%表%'
--算术元算查询
select grade*(1+0.2) as 总成绩,grade/(10) as 绩点 from sc
--分组函数查询
select COUNT(*) as 总人数 from student
select COUNT(distinct sno) as '选修的总人数' from sc
select AVG(grade) as '平均成绩' from sc where sno='10021'
select MAX(grade) as 'MAX成绩' from sc where sno='10021'
select MIN(grade) as 'MIN成绩' from sc where sno='10021'
select SUM(grade) as '总成绩' from sc where sno='10021'
select SUM(grade)/COUNT(grade) as '平均成绩' from sc where sno='10021'
select SUM(grade) as '总成绩' from sc group by sno having sum(grade)>100 -
-连接查询、
--等值连接
select distinct student.*,sc.* from student,sc where student.sno=sc.sno
--自身连接
select distinct A.*,B.* from student A,sc B where A.sno=B.sno
select B.sname as '同一个系' from student A,student B where A.sname='白居易' and A.sdept=B.sdept
--外连接
select A.*,B.* from student A left join sc B on A.sno=B.sno
select A.*,B.* from student A right join sc B on A.sno=B.sno
select A.*,B.* from student A FULL join sc B on A.sno=B.sno
--复合条件连接
select * from sc select * from course
select distinct A.*,B.* from student A,sc B where A.sno=B.sno and B.grade>99 and B.cno='002'
select distinct A.*,B.*,C.* from student A,sc B,course C where A.sno=B.sno and B.cno=C.cno and B.grade>99 and B.cno='002'
--字符串连接查询
select sname+sno from student
select distinct sname from student ,sc where student.sno=sc.sno
select sname from student ,sc where student.sno=sc.sno and student.sno not in (select sno from sc where grade<60) group by sname
--子查询
select * from student where sage>(select AVG(sage) from student)
--是否存在的查询
select * from student where exists(select * from sc where sno=student.sno)
select * from student where not exists(select * from sc where sno=student.sno)
--sql创建用户 sys.sp_addlogin bnc,bnc,Studets sp_adduser bnc,bnc
--权限分配和收回
grant select on student to bnc
select * from student
revoke select on student from bnc
--视图的创建
create view VIEW_STUGrade(学号,姓名,课程,成绩)
as
select student.sno,student.sname,course.cname,sc.grade from student,course,sc
where student.sno=sc.sno and course.cno=sc.cno and student.sdept='软件'
--查看视图
select * from VIEW_STUGrade
--视图修改
alter view VIEW_STUGrade(学号,姓名,课程,成绩)
as
select student.sno,student.sname,course.cname,sc.grade from student,course,sc
where student.sno=sc.sno and course.cno=sc.cno and student.sdept='软件'
with check option
--更新失败后不影响视图查看
--视图更新
update VIEW_STUGrade set 姓名='王超' where 学号='10022' select * from student where sno='10022'
/* 1,可更新视图: a,单个基本表导出的 2,不可更新视图 a 两个以上基本表导出的 b 视图字段来自表达式或者函数 c 嵌套查询的表 d 分组子句使用distinct */
--删除视图 drop view VIEW_STUGrade
--高级sql编程
--数据类型1,int 2,smallint 3,tinyint (0--255) 4,bigint 5char固定长度<800.如:学号,姓名 6,varchar可变长度小于800 7,text 2GB 8,nvarchar1--4000 */
--运算符和通配符
select GETDATE()-1 昨天,GETDATE() 今天,GETDATE()+1 明天
select 59&12
select 59|12
select 59^12
--模糊查询
select * from student where sname like '%刘%'
select * from student where sno like '1002[5-9]'
--控制流程语句
declare @name char(10) set @name='司马相如'
print @name
--输出一个表达式,不能进行查询 select @name
--输出多个表达式
declare @a nvarchar(50),@b nvarchar(50)
set @a=33 set @b=34 ---简写select@a=33,@b=34
if @a>@b
print '最小值是:'+@a
else
print '最大值是:'+@b
--waitfor间隔一段时间执行
waitfor delay '00:00:04' print '推迟4秒执行'
waitfor time '17:45:50' print '等待这一时刻执行'
--创建函数
CREATE FUNCTION GetTime ( @date1 datetime, @date2 datetime )
RETURNS TABLE
AS RETURN (
select datediff(dd,@date1,@date2) 日差,datediff(mm,@date1,@date2) 月差, datediff(yy,@date1,@date2) 年差
)
--创建存储过程,
--查看
GO create proc [dbo].[sel] (
@sno char(10)
)
as
select * from student where sno=@sno
exec sel @sno='10021'
--查看
GO create proc sel2
as
select * from student
exec sel2
--修改
GO create proc updat @sno char(10), @sex char(2)
as
update student set sex=@sex where sno=@sno
select * from student exec updat @sno='10021', @sex='女'
--删除
GO create proc dele @sno char(10)
as
delete student where sno=@sno
select * from student
exec dele @sno='10029'
--插入
GO create proc inser @sno char(10), @sname char(20), @sex char(2), @sage smallint, @sdept char(15)
as
insert into student values(@sno,@sname,@sex,@sage,@sdept)
exec inser @sno='10029', @sname='tom', @sex='男', @sage=100, @sdept='sc' select * from student
--查询操作
--查询
select * from student select * from course select * from sc
--去掉重复行 select distinct sno from sc
--格式化查询
select sname as '姓名',2013-sage as '出生日期' from student
select sname,'出生日期',2013-sage from student
select 姓名=sname,出生日期=2013-sage from student
--条件查询
select * from course where ccredit>3
select * from course where ccredit between 2 and 5
select * from course where ccredit> 2 and ccredit<5
select * from course where ccredit in(2)
select * from course where ccredit not in(2)
--匹配查询
select * from student where sname like '刘__'
select * from student where sname like '_表__'
select * from student where sname like '%表%'
--算术元算查询
select grade*(1+0.2) as 总成绩,grade/(10) as 绩点 from sc
--分组函数查询
select COUNT(*) as 总人数 from student
select COUNT(distinct sno) as '选修的总人数' from sc select AVG(grade) as '平均成绩' from sc where sno='10021'
select MAX(grade) as 'MAX成绩' from sc where sno='10021'
select MIN(grade) as 'MIN成绩' from sc where sno='10021'
select SUM(grade) as '总成绩' from sc where sno='10021'
select SUM(grade)/COUNT(grade) as '平均成绩' from sc where sno='10021'
select SUM(grade) as '总成绩' from sc group by sno having sum(grade)>100
--连接查询、 --等值连接
select distinct student.*,sc.* from student,sc where student.sno=sc.sno
--自身连接
select distinct A.*,B.* from student A,sc B where A.sno=B.sno select B.sname as '同一个系' from student A,student B where A.sname='白居易' and A.sdept=B.sdept
--外连接
select A.*,B.* from student A left join sc B on A.sno=B.sno select A.*,B.* from student A right join sc B on A.sno=B.sno
select A.*,B.* from student A FULL join sc B on A.sno=B.sno
-复合条件连接
select distinct A.*,B.* from student A,sc B where A.sno=B.sno and B.grade>99 and B.cno='002'
select distinct A.*,B.*,C.* from student A,sc B,course C where A.sno=B.sno and B.cno=C.cno and B.grade>99 and B.cno='002'
--字符串连接查询
select sname+sno from student
select distinct sname from student ,sc where student.sno=sc.sno
select sname from student ,sc where student.sno=sc.sno and student.sno not in (select sno from sc where grade<60) group by sname
--子查询
select * from student where sage>(select AVG(sage) from student)
--是否存在的查询
select * from student where exists(select * from sc where sno=student.sno)
select * from student where not exists(select * from sc where sno=student.sno)
--sql创建用户
sys.sp_addlogin bnc,bnc,Studets sp_adduser bnc,bnc
--权限分配和收回
grant select on student to bnc
select * from student
revoke select on student from bnc
--视图的创建
create view VIEW_STUGrade(学号,姓名,课程,成绩)
as
select student.sno,student.sname,course.cname,sc.grade from student,course,sc
where student.sno=sc.sno and course.cno=sc.cno and student.sdept='软件'
--查看视图
select * from VIEW_STUGrade
--视图修改
alter view VIEW_STUGrade(学号,姓名,课程,成绩) as select student.sno,student.sname,course.cname,sc.grade from student,course,sc
where student.sno=sc.sno and course.cno=sc.cno and student.sdept='软件'
with check option
--更新失败后不影响视图查看 --视图更新
update VIEW_STUGrade set 姓名='王超' where 学号='10022' select * from student where sno='10022'
/* 1,可更新视图: a,单个基本表导出的 2,不可更新视图 a 两个以上基本表导出的 b 视图字段来自表达式或者函数 c 嵌套查询的表 d 分组子句使用distinct */
--删除视图 drop view VIEW_STUGrade
--触发器
use Studets
GO create trigger insert_Tri
ON student after
insert as print '有新数据插入!'
GO create trigger update_Tri
on student after
update as print '有数据更新!'
GO create trigger delete_Tri
on student after
delete as print '有数据删除!'
--修改触发器
GO alter trigger delete_Tri
on student after delete
as
if '王帅' in (select sname from deleted)
print '该信息不许删除!'
rollback transaction
--执行存储过程查看触发器使用情况
exec sel @sno='10021'
exec inser @sno='10029', @sname='王帅', @sex='男', @sage=25, @sdept='国贸'
exec updat @sno='10029', @sex='女'
exec dele @sno='10029'
--查看,修改,删除触发器
/* sp_*+触发器名称
sp_helptext:触发器正文信息 sp_help:查看一般信息,触发器名称,属性,创建时间,类型 sp_depends:引用或指定表的所有触发器 sp_helptrigger:指定信息 */ sp_help delete_Tri
sp_helptext delete_Tri
sp_depends delete_Tri
sp_helptrigger student
--删除触发器
drop trigger delete_Tri


猜你喜欢
- 前言众所周知,Python中没有所谓的main函数,但是网上经常有文章提到“ Python的main函数&rdq
- 首先我们需要导入random模块 1. random.random(): 返回随机生成的一个浮点数,范围在[0,1)之间impor
- 登录百度AL开发平台在控制台选择语音合成创建应用填写应用信息在应用列表获取(Appid、API Key、Secret Key)6. 安装py
- 在知乎上看到这样一个问题:MySQL 查询 select * from table where id in (几百或几千个 id) 如何提高
- 我们都知道,python可以通过threading module来创建新的线程,然而在创建线程的线程(父线程)关闭之后,相应的子线程可能却没
- 本文将介绍如何使用公司运行服务器进行开发调试,以及使用远程服务器python解释器,整理了对应的配置流程。进入配置页面Pycharm菜单栏,
- 后来参巧网上的文献后,通过Http方式成功连上服务器的MYSql数据库。特此记录一下:首先到NaviCat官网(www.NaviCat.co
- demo中的p中的script改大或改小看看。。。移动到top的时间始终是一定的,你也可以设置一个阀值,在页面高度到达这个阀值之前,移动的总
- 我的数据库和报表服务的版本如下:数据库:SQL Server 2008 R2报表服务:SQL Server 2008 R2 Reportin
- 爱如风过 问:js如何能知道浏览者计算机或者浏览器使用的语言是繁体还是简体?如题,我想用jS检测到浏览者使用的是繁体还是简体中文,以便设置页
- 本文实例讲述了Python编程中的反模式。分享给大家供大家参考。具体分析如下:Python是时下最热门的编程语言之一了。简洁而富有表达力的语
- 本文实例讲述了Python实现在线暴力破解邮箱账号密码功能。分享给大家供大家参考,具体如下:dic 字典格式如下(mail.txt) :us
- 前言:处理字符串时经常要定制化去掉无用的空格,python 中要么用存在的常规方法,或者用正则处理1.去掉左边空格string = &quo
- 目录一、pyecharts绘制词云图WordCloud.add()方法简介二、绘制词云图对应轮廓按diamond显示三、对应完整代码如下所示
- 一、序言本文承接[Mybatis缓存体系探究],提供基于MybatisPlus技术可用于生产环境下的二级缓存解决方案。1、前置条件掌握MyB
- Click 是用 Python 写的一个第三方模块,用于快速创建命令行。我们知道,Python 内置了一个 Argparse 的标准库用于创
- 前言:如何将一个JSON文档映射为Python对象主要包括一下三个部分:考点:loads函数的用法。面试题:如何将一个JSON文档映射为Py
- 前言:单个线程时数据操作的只有一个线程,数据的修改也只有一个线程参与,数据相对来说是安全的,多线程时对数据操作的不止一个线程,所以同时对数据
- 这篇文章主要介绍了Python实现结构体代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以
- 问题:我想上传文件时后改名,下载时又将名改回来。 如:我上传一张“我的照片.jpg”上传后改为系统数名“20040302001.jpg”下载