SQLserver高端编制程序

作者:分分快三全天计划网站

T-SQL语句创立表:

if object_ID('表名')is not null
drop table 表名
go
create table 表名
(
      字段1 数据类型 列的特性,
      字段2 数据类型 列的特性
)

艺术2(设置文件大小)、

go

T-SQL增添封锁的语法格式:

alter table 表名

add constraint 约束名 约束类型 具体的牢笼表达

 

alter table Employees add constraint

(1)对表结构的操作

1、在表中增添一列

语法:alter table 表名

   add  加多的列名  数据类型

事例:在Student表中增多列Hobbies,类型为varchar,宽度:20

            alter  table  Student  

         add  Hobbies  varchar(20)

2、删除表中的一列

语法:alter  table  表名

      drop  column  列名

例子:删除Student表中的Hobbies列

      alter  table  Student

      drop  column  Hobbies

3、修改表中列的数据类型

语法:alter table 表名

      alter  column 列名  修改后的数据类型  not null

例子:修改Student中的Sex列为char型,宽度为2

      alter  table  Student

      alter column Sex char(2) nou null

--增加四个字段
alter table student
add address varchar(22),
tel varchar(11),
idCard varchar(3);

onnstraint DF_Employees_EmpGender default('男') for EmpGender,

(6)数据库变量格式

use StuDB
select*from StuInfo
select*from Exam
--总学生人数 参考人数 及格人数 未及格人数 及格率
declare @total int,@sum int,@pass int
select @total=COUNT(*) from StuInfo --总结总人数
select @sum=COUNT(*) from Exam --总结参谋人数
select @pass=COUNT(*) from Exam
where WriteExam>=60 and LadExam>=60 --总括及格人数

select @total 总人数,@sum 参照他事他说加以考察人数,@pass 及格人数 ,
@total-@pass 未及格人数,CONVERT(varchar(20),
ceiling( @pass*1.0/@total*10000)/100) '%' 及格率

select*from StuInfo
--查看上贰个荒唐的编号
select @@ERROR

select*from StuInfo
select*from Class
select @@IDENTITY
insert Class values('s149')

--得到上二次SQL指令影响的指令行数
select @@ROWCOUNT

--剖断删除是还是不是成功
--1、直接删除
--2、先查询,然后再删除,再查询

--当前SQL服务器名称,当前服务名称
select @@SERVERNAME ,@@SERVICENAME

--突显当前张开的事务数
select @@TRANCOUNT

--显示当前服务器允许的最第比利斯接数
select @@MAX_CONNECTIONS

--显示当前使用的言语
select @@LANGUAGE

print '当前服务器名称:' @@servername
print '当前服务名称:' @@servicename
print '错误编号:' convert(varchar(6), @@error)

--呈现笔试平均战绩,再依附平均成绩呈现相应消息
declare @avg float
select @avg=AVG(writeExam) from Exam
print ' ------成绩音讯如下:--------'
print'全校平均战绩:' convert(varchar(20),@avg)
if @avg>=70
begin
print'成绩卓越!'
--显示前三名的学生消息
select top 3 StuName,si.StuId,WriteExam,LadExam
from StuInfo si,Exam e
where si.StuId=e.StuId
order by WriteExam desc --笔试降序
end
else
begin
print'战表相当差!'
--突显后三名的上学的小孩子新闻
select top 3 StuName,si.StuId,WriteExam,LadExam
from StuInfo si,Exam e
where si.StuId=e.StuId
order by WriteExam asc --笔试降序
end

--对全班学生开展提分,保障每位同学的笔试战表全部通过
while(1=1) --永真循环
begin
declare @count int --保存未通过的总人口
--总括为经过的人头
select @count=Count(*) from Exam where writeExam<60
if (@count=0)
begin
break --终止循环
end
--进行加分
update Exam set WriteExam=100 where writeExam>=98
update Exam set WriteExam=WriteExam 2 where WriteExam<98

end
print'----------加分后的学生成绩如下:--------------'
select*from Exam

--展现学员笔试成绩的等第制
--90以上:优秀,80-90:良好,70-80:中等,60-69 :一般
--60以下:不及格
select ExamNo 考号,StuId 学号,WriteExam 笔试战表 ,LadExam 机试成绩,
等级=
case
when writeExam>=90 then '优秀'
when writeExam>=80 then '良好'
when writeExam>=70 then '中等'
when writeExam>=60 then '一般'
else '不及格'
end
from Exam

--展现全数学员打客车全名,性别,年龄,笔试战绩,机试战绩
--未有成绩的学员显示缺考
select stuName,sex,Age,WriteExam=
case
when WriteExam IS null then '缺考'
else CONVERT(varchar(20),writeExam)
end,
LadExam=
case
when LadExam IS null then '缺考'
else CONVERT(varchar(20),ladexam)
end
from StuInfo si left join Exam e
on si.StuId=e.StuId

--未参预考试的学习者成绩为0
select stuName ,sex ,ISNULL(age,18),
ISNULL(WriteExam,0),
ladexam=
case
when ladexam IS null then 0
else ladexam
end
from StuInfo si left join Exam e
on si.StuId=e.StuId

(7)索引、视图、事务

--创立索引
语法:
if exists(select*from sys.indexes
where name='IX_stuinfo_AgeName')
drop index stuinfo.IX_stuinfo_AgeName
go
create nonclustered index 索引名
on 表名(按某列升序或降序)
例子:
create nonclustered index IX_stuinfo_AgeName
on stuinfo(age,stuname desc)
备注:列名后加 desc 是降序的情致,不加私下认可升序
备注2:nonclustered表示创立非集中索引 还就如:unique表示创造独一性索引,clustered 表示创立聚焦索引

--使用索引
语法:
select*from 有该索引的表名
with (index=索引名)
例子:
运用索引IX_stuinfo_AgeName 查询学员消息
select*From StuInfo
with(index=IX_Stuinfo_AgeName)

--索引的独到之处和劣势
优点:
1、加速访谈速度
2、坚进行的独一性
缺点:
1、带索引的表在数据库中须要更加多的囤积空间
2、更新数据的一声令下必要越来越长的管理时间,因为它们必要对索引实行立异

--创造视图
语法:
create view 视图名
as
select 列名 from 表1,表2
where 表1.id =表2.id order by 条件
例子:
成立叁个视图:获取学员的全名、性别、年龄、笔试成绩、机试战表、而且按笔试战表降序排序
if exists(select*from sys.views
where name='VW_Stu')
drop view VW_Stu --有一致视图则删除原视图
go
create view VW_Stu
as
select top 100 stuName,Sex,Age,WriteExam,LadExam
from StuInfo si,Exam e
where si.StuId=e.StuId
order by WriteExam Desc
go
--视图的选取
select *from VW_Stu

--事务
事务的ACID属性
1、原子性
三个事情对数据库的兼具操作,是一个不可分割的干活单元。这个操作依然整体举行,要么什么也不做。保障原子性是数据库系统本人的天职,由DBMS的事体管理子系统来贯彻。

2、一致性
一个作业独立试行的结果应维持数据库的一致性,即数据不会因为职业的实行而惨被破坏。确定保证险单个事务的一致性是编写工作的行使程序猿的职分。在系统运作时,由DBMS的完全天性系统进行职分。

3、隔离性
在两个工作并发实行时,系统应有限支撑这几个业务前后相继单独实行时的结果一致,此时称工作达到了隔开分离性的需要,也等于在多少个冒出事务实践时,保障施行结果是不易的,就像是单客商意况一致。隔绝性是由DBMS的并发调控子系统达成的。
4、持久性

语法:
--开启事务
begin transaction
declare @error int --定义变量,记录错误
set @error=0 --私下认可无错
Update bank set Blance=Blance 5000 where Bname='join'
set @error=@errror @@ERROR
Update bank set Blance=Blance-5000 where Bname='jack'
set @error=@errror @@ERROR
if(@error<>0) --假设错误号不为零,表明有操作失误
begin
raiserror('转账进程出错',10,1)
rollback --回滚全部操作
end

else
begin
print '恭喜您,转账成功!'
commit --提交全数操作
end

实例:
--转账业务,转账900
begin tran
declare @err int=0 --声美素佳儿(Friso)个变量,初值为0
update Bank set Cmoney=Cmoney-900 where Cname='张三'
set @err=@err @@ERROR
update Bank set Cmoney=Cmoney 900 where Cname='李四'
set @err=@err @@ERROR
if @err>0 --条件
begin
print'交易战败,事务回滚!'
rollback
end
else
begin
print'交易成功,事务提交'
commit tran
end

 

set identity_insert tblClass off

数据库设计的手续:

1、收罗音讯、标志对象、标记属性、标记关系(一对一、一对多、多对一、多对多)

--判别该列名是还是不是存在,假设存在就删除
if (exists (select * from sys.columns where object_id = object_id('student') and name = 'idCard'))
alter table student drop column idCard
go
if (exists (select * from information_schema.columns where table_name = 'student' and column_name = 'tel'))
alter table student drop column tel
go

--为EmapEmail增添二个独一约束

案例:

--添加主键约束(将StuNo设为主键)
alter table StuInfo add constraint PK_StuNO primary key (StuNo)
go
--添加默认约束(性别默认为男)
alter table StuInfo Add constraint DF_StuSex DEFAULT ('男')for StuSex 
go
--添加检查约束(年龄必须为40之间)
alter table StuInfo Add constraint CK_StuAge check(StuAge>=18 and StuAge<=40)
go
--添加外键约束
alter table Exam Add constraint FK_StuNo FORELGN KEY (StuNo)references StuInfo(StuNo)
go

Ø 插入数据

)

案例:

if DB_ID('Student')is not null
drop databese Student
go
create databese Student
on
(
    name='Student',
    finema='E:第二学期SQLstuDBStudent.mdf'
)

 

数据文件参数 描述
name 数据库逻辑名称
filename 数据库物理文件名
size 数据文件初始化大小,单位默认为M
maxsize 数据文件可增长到最大值,单位默认阿M,不指定即无限大
filegrowth 数据库每次增长率,可以是百分比,默认单位M,0不增长

 

--设计→右键→索引/键(已存在EmpId主键索引)→增添→设置(类型:独一键;选取相应的列)

数据库设计的显要:

缩减冗余,进步质量、易维护

 

   tSPhone varchar(100),

数据库规范化:

Ø Go批管理语句

DDL(数据定义语言、建表、建库等语言)(例:Create Table、Drop Table、Alter Table)

E-R图:

质量:定义实体的习性、实体的性状

实体:数据项(属性)的集合

提到:实体之间互相连接的点子

图片 1

简短明了一下就能够了

图片 2

 

select * from TblClass

其次范式(2NF):

在首先范式的根基上质量完全信任于主键

--增加字段
alter table student add address varchar(50) not null;
--修改字段
alter table student alter column address varchar(20);
--删除字段
alter table student drop column number;

)

(3)高端查询语法格式

--内连接
语法:
select 要询问的习性
from 表1 inner join 表2
on 表1.Id=表2.Id
where 要界定的准则(可以绝不)

--左外连接
语法:
select 要查询的特性
from 表1 left outer join 表2
on 表1.id=表2.id

--右外连接
语法:
select 要询问的习性
from 表1 right outer join 表2
on 表1.id=表2.id

--全外连接
语法:
select 要询问的品质
from 表1 full outer join 表2
on 表1.id=表2.id

--交叉连接
语法:
select 要询问的属性
from 表1 Cross join 表2
where 条件

--自连接
select 要询问的性质
from 表1 , 表2
where 表1.id=表2.id

Ø 查询、修改、删除数据

tclassId int identity(1,1) primary key,

率先范式(1NF):

每列都应有是原子性的,五重复的域

 

在sql语句中sql代码不区分轻重缓急写

案例:

if object_ID('StuInfo')is not null
drop table StuInfo
go
create table StuInfo
(
      StuId int identity(1,1) primary key,
      StuName varchar(10) not null,
      StuSex varchar(2) not null,
      StuAge varchar(3) not null
)

艺术3(设置次数据文件)

select top 5

(8)存款和储蓄进程

--实践dos命令的仓库储存进程CMDShell
--在d盘根目录下成立二个文本夹
execute xp_cmdshell 'md D:DB'
--查看D盘下的全部音信
exec xp_cmdshell 'dir d:'
--查看视图VW_Stu的源代码
exec sp_helptext 'VW_Stu'
--查看二个表的目录
exec sp_helpindex 'stuInfo'
--查看贰个数据库中的存款和储蓄进程
exec sp_stored_procedures
--进行数据库的逻辑名称改名(展现名称)
exec sp_renamedb BankDBs,BankDB--主文件名是不会变的
--查看当前数据库中的表和视图情形
exec sp_tables

--将网格展现改为文本格式彰显

use StuDB
--创制三个仓库储存进度
--显示机试和笔试的平均成绩,并且展现此番考试的战绩意况
--还要来得未经过的学员新闻
if exists(select*from sys.procedures
where name='ScoreCountl')
drop procedure ScoreCountl
go
create procedure ScoreCountl
as
declare @write decimal,@lab decimal
select @write=AVG(writeExam),@lab=AVG(LadExam)
from Exam
print '笔试战表:' convert(varchar(20),@write)
print '机试战绩:' convert(varchar(20),@lab)
if @write>=70 and @lab>=70
print'本班考试成绩特出!'
else
print'本班考试战表日常!'

print'-------------------------------------------------'
print'----------参与此次试验未有通过的上学的儿童名单-----------'
select stuname 姓名,si.StuId 学号,WriteExam 笔试战表,LadExam 机试战绩
from StuInfo si,Exam e
where si.StuId=e.StuId and ( WriteExam<60 or LadExam<60)

go
exec ScoreCountl

--自由调节及格线
if exists(select*from sys.procedures
where name='ScoreCount2')
drop procedure ScoreCount2
go
create procedure ScoreCount2
@w decimal=60,--笔试及格线
@l decimal=60 --机试及格线,加了暗中认可值60
as
declare @write decimal,@lab decimal
select @write=AVG(writeExam),@lab=AVG(LadExam)
from Exam
print '笔试战绩:' convert(varchar(20),@write)
print '机试成绩:' convert(varchar(20),@lab)
if @write>=70 and @lab>=70
print'本班考试成绩出色!'
else
print'本班考试成绩平时!'

print'-------------------------------------------------'
print'----------此番笔试及格线:' convert(varchar(20),@w)
'----------此次机试及格线:' convert(varchar(20),@l)
print'----------参预这一次考试未有通过的学习者名单-----------'
select stuname 姓名,si.StuId 学号,WriteExam 笔试战绩,LadExam 机试成绩
from StuInfo si,Exam e
where si.StuId=e.StuId and ( WriteExam<@w or LadExam<@l)
go
exec ScoreCount2 @l=40,@w=60 --分别为机试和笔试的及格线
exec ScoreCount2 --有暗中认可值的动静下

use GoodSystem
--成立二个仓库储存进程:查询生产日期为某年的
--商品名称,类型,生产日期,仓库储存
if exists(select*from sys.procedures
where name='ScoreCount3')
drop procedure ScoreCount3
go
create procedure ScoreCount3
@d decimal
as
select Name 商品名称,gt.Type 类型,ProductionDate 生产日期,Amount 仓库储存
from GoodS gs,GoodType gt
where gs.Tid=gt.Tid and year(ProductionDate)=@d
--查询二零一七年的商品音讯
go
exec ScoreCount3 2017

--创造二个累积进程:查询类型为‘食物’的商品消息
if exists(select*from sys.procedures
where name='ScoreCount4')
drop procedure ScoreCount4
go
create procedure ScoreCount4
@s varchar(20)
as
select Name 商品名称,gt.Type 类型,ProductionDate 生产日期,Amount 仓库储存
from GoodS gs,GoodType gt
where gs.Tid=gt.Tid and gt.Type=@s

go
exec ScoreCount4 '食品'

Ø 利用存款和储蓄进程查询表音信

alter table Department alter column DepName varchar(50) not null

其三范式(3NF):

其三范式须要各列与主键列直接有关

--决断是还是不是留存该数据库,存在就删除
if (exists (select * from sys.databases where name = 'database_name'))
drop database database_name
go
create database database_name
--暗中认可就属于primary主文件组,可粗略
on primary (
--数据文件的切实叙述
name = 'database_name_data',        --主数据文件的逻辑名
fileName = 'c:database_name_data.mdf',     --主数据文件的物理名
size = 3MB,                  --主数据文件的开始大小
maxSize = 50MB,               --主数据文件增进的最大值
fileGrowth = 一成                --主数据文件的增加率
)
--日志文件的实际描述,各参数含义同上
log on (
name = 'database_name_log',
fileName = 'c:database_name_log.ldf',
size = 1MB,
fileGrowth = 1MB
)
go

--全数学员年龄加

T-SQL删除约束:

alter table 表名

drop constraint 约束名

--判断该列名是还是不是存在,假若存在就删除
if (exists (select * from sys.columns where object_id = object_id('student') and name = 'idCard'))
alter table student drop column idCard
go
if (exists (select * from information_schema.columns where table_name = 'student' and column_name = 'tel'))
alter table student drop column tel
go

    distinct

T-SQL语句创立和管理数据库和表:

 

size=3mb,

T-SQL创设约束:

主键约束:(primary key constraint):主键列数据独一,并不为空,简称:PK

唯一约束:(unique constraint):有限支撑该列区别意除夕重复值,简称:UQ

自小编商讨约束:(check constraint):限制列中允许的取值以至五个列直接的关系,简称:CK

暗中同意约束:(default constraint):设置某列的暗中认可值,简称:DF

外键约束:(foreign key constraint):用于在八个表之间确立关联,要求钦命主从表,简称:FK

Ø 创制、删除数据库

2.  Truncate语句会把表中的活动编号重新设置为私下认可值(恢复生机到种子的地点),而经过delete删除表中的数码后,照旧从从前的数码持续增进。

T-SQL成立数据库:

if DB_ID('数据库名') is not null
drop database 数据库名
go
create database 数据库名
on
(
        name='数据库名',
        filename='物理数据库储存路径数据库文件'
)

 

--假设要向该表中的除了活动编号以外的别的具备列都插入数据,则足以回顾列名

1、数据库设计

--创建table
create table student(
id int identity(1, 1) not null,
name varchar(20),
age int,
sex bit,
cid int
)
go

--将TblClass表中的数据导入(复制)到TblClassBak表中

(2)加多约束

 1、加多主键约束
语法:alter  table 表名
              add  constraint   约束名    primary key(要安装主键的列名)
例子:
给Class表增多主键约束
if OBJECT_ID('PK_ClassId') is not null
alter  table  Class
    drop  constraint  PK_ClassId
go
alter  table  Class
add  constraint  PK_ClassId  primary key(ClassId)

2、增多独一约束
语法:alter table 表名
             add constraint 约束名 unique(要加多独一约束的列名)
例子:
给消息表stuInfo中的人名增加独一约束
if OBJECT_ID('UQ_StuName') is not null
alter  table  StuInfo
 drop  constraint  UQ_StuName
 go
 alter  table  StuInfo
 add  constraint  UQ_StuName
 unique(StuName)

3、加多暗中同意约束
语法:alter table 表名
             add constraint  约束名  Default(暗中同意值)  for 要增添暗中同意值的列名
例子:
给stuInfo表中的Age列增添暗中认可值为18
 if OBJECT_ID('DF_Age') is not null
    alter  table  StuInfo
    drop  constraint  DF_Age
 go
 alter  table  stuInfo 
 add  constraint  DF_Age  Default(18) for Age

4、增多检查约束
语法:alter table 表名
           drop constraint 约束名
          check(列名>=0)
例子:
给笔试战表增加二个束缚,要求战绩必需在0-100之间
if OBJECT_ID('CK_WriteExam') is not null
alter table Exam
drop constraint CK_WriteExam
go
alter table Exam
 add constraint CK_WriteExam
 check(WriteExam>=0 and WriteExam<=100)

5、外键约束
语法:alter table 表名1
       add constraint 约束名
       foreign key(外键约束名)
        references 表名2(外键约束名)
例子:
给班级表与学员音信表创立关系(外键约束)
if OBJECT_ID('FK_Class_StuInfo') is not null
alter table  stuInfo
drop constraint Fk_Class_StuInfo
go
alter table stuInfo
add constraint Fk_Class_StuInfo
foreign key(ClassId)
references Class(ClassId)

--删除约束
Alter table 表名
Drop ConStraint 约束名

--删除表
Drop table 表名

 

--删除数据(from可回顾)
delete from student where id = 1;

--向TblStudent表中插入数据

(5)变量函数

--常用的数学函数
--1、ABS 求相对值 交易在此以前-交易之后
--2、POWER 求次方
select POWER(2,10),POWER(2.0000,0.5) --1kb 1024
select POWER(2.0000000,1.000000/3)
--3、求圆周率
select PI()
--4、Rount() --四舍五入函数
select ROUND(315.4567,2),Round(315.4567,0),Round(345.4567,-2)
--5、ceiling --取比原数大的卡尺头
--6、floor --取比原数小的莫西干发型
select CEILING(3.00000000001),FLOOR(3.99999999)
--7、ASCII 重回三个字符的ASCII码值
select ASCII('A')
--8、Rand() 重临叁个0-1以内的大肆数
--select nCHAR(214) nCHAR(208)
select RAND()
select RAND(DATEPART(ss,GetDate())*2)--那样打变化频率小
go

--爆发三个银行卡号,前8位为'6225 3800' 后8位为随机数字,
--请用T-SQL编码达成
--select RAND()
declare @rand numeric(20,8)
select @rand=RAND()
print @rand
declare @s varchar(16)
set @s=SUBSTRING(STR(@rand,10,8),3,8)
print @s
set @s='62253800' @s
print '你的新银行卡号为:' @s

--日期函数
--1、getdate():重回服务器上的当明天子
select GETDATE()
--2、datepart:再次回到一个日子的一局地值(整形)
--3、datename:再次回到两个日子的一有的值(字符串)
--重临十11日的第几天(周天是首先天)
select DATEPART(DW,GETDATE()),DATENAME(DW,GETDATE())
--重临一年的第几周
select DATEPART(WEEK,GETDATE()),DATENAME(WEEK,GETDATE())
--4、datediff 日期相比较函数
--再次回到种种交易已经发出了有一些天
select DATEDIFF(DD,transdate,GETDATE()) from TransInfo

--字符串函数
--1、LEN:重临三个字符串的字符数
select LEN('中国'),LEN('abc123!')
select LEN('abc '),LEN(' abc')--数据类型为varchar类型,会活动清除没字符连接的空格

--2、dataLength:重临叁个字符串的字节数
select dataLength('中国'),dataLength('abc123!')
select RIGHT('abcdef',3),LEFT('abcdef',3)
--4、substring:字符串截取函数
select SUBSTRING('abcdef',2,3)--和C#不均等,下标从一齐始
--5、charIndex:字符串查找函数
select charIndex('a','bcad',1)
--6、upper:字母大写调换函数
--7、lower:字母小写转变函数
select UPPER('abc123'),LOWER('abCCC123中!')
--8、space:产生空格函数
select len('abc' SPACE(10) '123') ,'abc' SPACE(10) '123' --len是测定总秘书长度
--9、replicate:字符串重复函数
select REPLICATE('abc',3)
--10、replace:字符替换函数
select REPLACE('11111111','1','o')--将1替换为o
select REPLACE('o0o0o0o0000oo','0','o'),'00000000'--将0替换为o
select REPLACE( REPLACE('0o0oil0oillil10ol1','l','1'),'0','o')
--11、stuff:字符替换函数
select STUFF('新疆马尔默',2,1,'北')
select STUFF('中夏族民共和国埃德蒙顿',3,0,'湖北')--输出中夏族民共和国山西马普托
--12、ltrim和rtrim:去掉字符串左边或左边的万事空格
select len(ltrim(' a bc'))
--13、str:将数值转变为字符串函数
select STR(12345.65,8,2)
--14、char:将一个ASCII码值调换为三个字符
select CHAR(97),ASCII('a')

--剖断有些表或对象是还是不是留存
if (exists (select * from sys.objects where name = 'classes'))
print 'Exist';
go
if (exists (select * from sys.objects where object_id = object_id('student')))
print 'Exist';
go
if (object_id('student', 'U') is not null)
print 'Exist';
go

 

(4)高端查询实例

if DB_ID('GoodSystem') is not null
drop database GoodSystem
go
create database GoodSystem on --成立三个货色数据库
(
name='GoodSystem',
filename='E:SQL其次章上机任务GoodSystem.mdf'
)
--张开数据库
use GoodSystem
--创设商品档案的次序表GoodsType
if OBJECT_ID('GoodType') is not null
drop table GoodType
go
create table GoodType
(
Tid int primary key,
Type varchar(20)
)
--创建商品消息表Goods
if OBJECT_ID('Goods') is not null
drop table Goods
go
create table Goods
(
id int primary key,
Tid int ,
Name varchar(50),
Price money,
ProductionDate datetime,
Amount int
)
--给商品档期的顺序表GoodsType增添测验数据
insert GoodType select '1','家电' union
select '2','电子' union
select '3','食品' union
select '4','生活用品'

--给商品音讯表Goods加多测量检验数据
insert Goods select '1','1','冰箱','3344','2017-6-3','100' union
select '2','1','电视','1777','2016-10-4','100' union
select '3','1','微波炉','333','2017-2-26','100' union
select '4','2','手机','4500','2017-5-7','100' union
select '5','2','显示器','1777','2016-12-4','100' union
select '6','2','主机','1500','2017-3-9','100' union
select '7','3','老干妈','9','2017-7-6','100' union
select '8','3','爽口榨菜','3.6','2017-6-8','100'

--查询商新闻表中的商品名称,价钱,生产日期。
select Name 商品名称,Price 价钱,ProductionDate 生产日期
from Goods
--查询商品档期的顺序、商品名称、价钱、生产日期
select gt.Type 商品品种,gs.Name 商品名称 , gs.Price商品价位,gs.ProductionDate 生产日期
from GoodType gt inner join Goods gs
on gt.Tid=gs.Tid
--查询生产日期为2017的商品品种、商品名称、价钱、生产日期
select gt.Type 商品类别,gs.Name 商品名称 , gs.Price价钱,gs.ProductionDate 生产日期
from GoodType gt inner join Goods gs
on gt.Tid=gs.Tid and year(gs.ProductionDate) like '2017%'
--查询商品体系为“电子”的商品种类、商品名称、价钱、生产日期,数据按价钱降序排列
select gt.Type 商品系列,gs.Name 商品名称,gs.普赖斯 价钱 ,gs.ProductionDate 生产日期
from GoodType gt inner join GoodS gs
on gt.Tid=gs.Tid and gt.Type='电子'
order by Price desc

--总括各个商品体系的货品数量
select gt.Type 商品品种, COUNT(gs.Amount) 商品数量
from GoodType gt inner join Goods gs
on gt.Tid=gs.Tid
group by gt.Type

--查询全体商品品种对应的装有商品音信
select gt.Type 商品种类,gs.Name 商品名称 , gs.Price商品价位,gs.ProductionDate 生产日期
from GoodType gt left join Goods gs
on gt.Tid=gs.Tid

--查询价钱是333、1500、4500的商品音讯
select Type 商品品种,Name 商品名称,Price 商品价位,ProductionDate 生产日期
from GoodType gt ,Goods gs
where Price in(333,1500,4500)
and (gs.Tid=gt.Tid)

--查询未有对应商品消息的货物类型新闻(类型编号,类型名称)
select Tid 编号,Type 类型 from GoodType
where Tid not in
(select Tid from Goods)

--查询全体商品的平分价格
select AVG(Price) 平均价格 from Goods

--查询价钱大于平均价格的商品音讯
select Type 商品种类,Name 商品名称,Price 商品价位,ProductionDate 生产日期
from GoodType gt , Goods gs
where gs.Tid=gt.Tid
and Price>
(select AVG(Price) 平均价格 from Goods)

--查询种种商品种类平均价格超过总平均价格的类外堪当、平均价格
select gt.Type 类型名称,AVG(Price) 价钱
from Goods gs,GoodType gt
where gs.Tid=gt.Tid
and
gs.Tid in
(select gs.Tid
from Goods
group by Tid
having AVG(Price)>
(select AVG(Price) 平均价格 from Goods))
group by gt.Type
--查询全数商品总金额超20万的商品连串、名称、总金额
select Type 商品类型 ,Name 名称 ,Price*Amount 总金额
from GoodS gs , GoodType gt
where gs.Tid=gt.Tid
and Price*Amount>200000
--仓库储存报告警察方(低10)

--延迟到14:03:00 执行查询
waitfor time '14:03:00'
select*from Goods
--延迟两秒试行操作
waitfor delay '00:00:02'
select *from Goods

--查询数据
select * from student;
select id, 'bulise' name, age, sex, cid from student
where name = 'tony';
select *, (select max(age) from student) from student
where name = 'tony';

truncate table TblClass

(9)带输出参数的囤积进程

--创设一个囤积进程:增添三个学员战绩音讯
if OBJECT_ID('InsertExam') is not null
drop proc InsertExam
go
create proc InsertExam
@ExamNo int,
@stuid varchar(50),
@writeExam decimal(10,2),
@ladExam decimal(10,2),
@n int output
as
insert Exam(ExamNo,StuId,WriteExam,LadExam)
values(@ExamNo,@stuid,@writeExam,@ladExam)
select @n=@@ROWCOUNT

go
select*from Exam
--调用丰盛存款和储蓄进度
declare @n int
exec InsertExam '8','1006',70,80,@n output
if @n>0
print'增加成功'
else
print'加多失败'

use MySchool
select*from Teacher
--引用到C#案例MySchool_Proc
--加多教授
if OBJECT_ID('InsertTeacher') is not null
drop proc InsertTeacher
go
create proc InsertTeacher
@LoginId varchar(50),
@LoginPwd varchar(50),
@TeacherName varchar(50),
@Sex varchar(50),
@UserStateId int,
@Birthday dateTime,
@n int output
as
insert Teacher(LoginId,LoginPwd,TeacherName,Sex,UserStateId,Birthday)
values(@LoginId,@LoginPwd,@TeacherName,@Sex,@UserStateId,@Birthday)
select @n=@@ROWCOUNT
go

--修改教员
if OBJECT_ID('UpdateTeacher') is not null
drop proc UpdateTeacher
go
create proc UpdateTeacher
@LoginId varchar(50),
@LoginPwd varchar(50),
@TeacherName varchar(50),
@Sex varchar(50),
@UserStateId int,
@Birthday dateTime,
@n int output
as
update Teacher set LoginPwd=@LoginPwd, TeacherName=@TeacherName,
Sex=@Sex,UserStateId=@UserStateId,Birthday=@Birthday
where LoginId=@LoginId
select @n=@@ROWCOUNT
go
--删除教员
if OBJECT_ID('DeleteTeacher') is not null
drop proc DeleteTeacher
go
create proc DeleteTeacher
@LoginId varchar(50),
@n int output
as
delete from Teacher where LoginId=@LoginId
select @n=@@ROWCOUNT
--自己掌握
--增多、修改、删除存款和储蓄进程都以为了选用到C#次第中能够更加快的施行,且占系统运作内部存款和储蓄器非常少。
--C#中的调用其实便是多个三层架构

Ø 剖断表或其余对象及列是不是留存

from TblStudent

--修改数据
update student set name = 'hoho', sex = 1 where id = 1;

delete from TblClass

--删除约束
alter table student drop constraint no_uk;

insert into TblStudent(tSName,tSGender,tSAddress,tSPhone,tSAge,tSBirthday,tSCardId,tsClassId)

 

4.暗中认可约束

use master
go

Sql中的注释“——” 单行注释比较好

--决断是还是不是存在当前table
if (exists (select * from sys.objects where name = 'classes'))
drop table classes
go
create table classes(
id int primary key identity(1, 2),
name varchar(22) not null,
createDate datetime default getDate()
)
go
if (exists (select * from sys.objects where object_id = object_id('student')))
drop table student
go

tclassName nvarchar(50) not null,

--查询student相关音讯
exec sp_help student;
exec sp_help classes;

 

insert into classes(name) values('1班');
insert into classes values('2班', '2011-06-15');

剖断俩个数据是或不是等于使用=(单等号)

 

 

--where中能够运用其余的运算符:(||)or ,<>(!=), (&&)and,(!)not

 

    EmpEmail varchar(100),

--多条记下同期插入
insert into student
select 'jack', 23, 1, 5 union
select 'tom', 24, 0, 3 union
select 'wendy', 25, 1, 3 union
select 'tony', 26, 0, 5;

Delete 只是剔除数据,表还在,和Drop Table不相同

 

drop table Department

 

--创建表

方法1

insert into TblClass(tclassId ,tclassName ,tclassDesc ) values(101,'Time第三期','爱戴时光')

if (exists (select * from sys.databases where name = 'database_name'))
drop database database_name
go
create database database_name
--私下认可就属于primary主文件组,可粗略
on primary (
--数据文件的现实性描述
name = 'database_name_data', --主数据文件的逻辑名
fileName = 'c:database_name_data.mdf', --主数据文件的物理名
size = 3MB, --主数据文件的起首大小
maxSize = 50MB, --主数据文件增加的最大值
fileGrowth = 10% --主数据文件的增加率
),
--次数据文件的切实陈述
(
--数据文件的具体陈述
name = 'database_name2_data', --主数据文件的逻辑名
fileName = 'c:database_name2_data.mdf', --主数据文件的物理名
size = 2MB, --主数据文件的上马大小
maxSize = 50MB, --主数据文件增加的最大值
fileGrowth = 百分之十 --主数据文件的增进率
)
--日志文件的实际呈报,各参数含义同上
log on (
name = 'database_name_log',
fileName = 'c:database_name_log.ldf',
size = 1MB,
fileGrowth = 1MB
),
(
name = 'database_name2_log',
fileName = 'c:database_name2_log.ldf',
size = 1MB,
fileGrowth = 1MB
)
go

剔除表中全部数据:delete from Student

 

 

可选拔生成什么样的台本

用来同时实践四个语句

ClsId int identity(1,1) primary key,

 

drop table Department

Ø 备份数据、表

on primary

--增加新列、约束
alter table student
add number varchar(20) null constraint no_uk unique;
--扩张主键
alter table student
add constraint pk_id primary key(id);
--增加外键约束
alter table student
add constraint fk_cid foreign key (cid) references classes(id)
go
--加多独一约束
alter table student
add constraint name_uk unique(name);
--添加check约束
alter table student with nocheck
add constraint check_age check (age > 1);
alter table student
add constraint ck_age check (age >= 15 and age <= 50)
--增添默许约束
alter table student
add constraint sex_def default 1 for sex;
--加多八个含有暗中同意值可感到空的列
alter table student
add createDate smalldatetime null
constraint createDate_def default getDate() with values;

--而笔者辈的渴求是在原先的列的功底上丰硕‘▲’

Ø 使用、切换数据库

--这么写tclassName='▲',表示那列的值变为贰个‘▲’

转载自 

DML(数据操作语言)(例:Select、Insert、Update、Delete)

 

 

Ø 基本数据类型

--设计→选中该列→在俗世属性中→暗中同意值或绑定(输入:男)

Ø 增多、删除约束

insert into TblStudent(tSName,tSGender ,tSAddress ,tsClassId )

----- 四个列、约束共同创建--------
alter table student add
/*添加id主键、自增*/
id int identity constraint id primary key,
/* 增添外键约束*/
number int null
constraint uNumber references classes(number),
/*默许约束*/
createDate decimal(3, 3)
constraint createDate default 2010-6-1
go

(

insert into student
select 'bulise' name, age, sex, cid
from student
where name = 'tony';

--insert into语句三次只好向表中插入一条记下,假若因此一条语句向表中插入多条记下,

--备份、复制student表到stu
select * into stu from student;
select * into stu1 from (select * from stu) t;

TOP/Distinct

Ø 创建、删除表

1.主键约束

Ø 给表添加字段、修改字段、删除字段

from TblStudent

 

   --表中列的定义在此对小刮号中

 

--手动修改一下EmpEmail的数据类型(varchar(200))

 

    tsaddress

--推断是或不是存在该数据库,存在就删除
if (exists (select * from sys.databases where name = 'database_name'))
drop database database_name
go
--创设数据库,设置数据库文件、日志文件保留目录
create database database_name
on(
name = 'database_name',
filename = 'c:datadatabase_name.mdf'
)
log on(
name = 'database_name_log',
filename = 'c:datadatabase_name_log.ldf'
)
go

--1.insert向表中插入一条数据

7.增加外键时,设置级联更新,级联删除

 

select 'Time第五期','珍爱时间,岁月不老' union

maxsize=100mb

select * from TblClass

 

--也是利用Insert语句

select * from TblClass

--获得当前系统时间(网格型)

--创立叁个部门表,然后为Employee表扩充贰个DepId列。

filegrowth=百分之十,--根据文件的比重增进

 

create database School;

filename='D:Desktop置心一处,无事不成。二、编程(四)笔记顿然工程师.NET录制教程-Time第课-数据库开荒及ado.netSchool.mdf',

--as 能够设置呈现的列名

--输出时间(文本型)

ClsDesc nvarchar(50) null

4.  Truncate 只好将表中全数数据删除,不能够加多where,不能够依据标准来删除。

5.检查约束

Delete 也得以带whre子句删除一部分数据:例:delete from student where sAage >20

Truncate table student 的功能跟delete from student 同样

alter table Employees alter column EmpName varchar(50) not null

    tsgender,

alter table Employees add  EmpAddr varchar(1000) not null

--   tSId int identity(1,1)  primary key,

 

name='School',

--distinct是对查询出的全方位结果集举办数量再一次管理的,实际不是针对性某一列

--则需求运用其余方法insert语句。

--   tsClassId int not null--最终一行不加“,”

介绍生成脚本工具

--更新语句

alter table Employees drop constraint CK_Employees_EmpAge

实例代码:

 

drop database School;

)

(

constraint UQ_Employees_Empname unique(Empname)

update TblClass set tclassName=tclassName '▲',tclassDesc =tclassDesc '★' where tclassId =100

--非空约束,为EmpName扩充多个非空约束

--手动扩充一列(扩大一列EmpAddr varchar(一千))

select 'Time第五期','敬爱时间,岁月不老' union

create table Employees

--filegrowth=10mb,

CK_Employees_EmpAge,

--切换数据库

 

6.非空羁绊

DCL(数据库调控语言)(例:GRANT授权、REVOKE裁撤授权)

constraint PK_Employees_EmpId primary key(EmpId)

 

   tSAge int,

)

alter table Employees add DepId varchar(50) not null

ClsName nvarchar(50) not null,

alter table Employees add

alter table Employees alter column EmpEmail varchar(200) not null

 

--   tSCardId varchar(18),

   tsClassId int not null--最终一行不加“,”

select * from TblClassBak

 

select

alter table Department add constraint UQ_Department primary key(EepName)

 

 

  FirstName,

3.  Truncate语句不触发delete触发器。

drop table TblClass

drop table Employees

--查询前一成(向上取整)

select 'Time第五期','敬服时间,岁月不老' --最后一行无需union

constraint CK_Employees_EmpAge check(EmpAge>=1 and EmpAge<=120),

--   tSName nvarchar(10) not null ,

    EmpAddress varchar(500)

maxsize=20mb

DF_Empyloyees_EmpGender default('男') for EmpGender

alter table Employees add DepId int not null

--删除数据库

通过设计器扩大约束(甘休.保险数据完整性)

--查询前多少个

    DepName varchar(50)

--删除语句

--insert into表(列) select 列,列from 表

--为EmpName扩张多少个独一约束

数据库SQl,创制数据库和表,增加和删除改语句,约束,top和Distinct,聚合函数介绍

select getdate() as 时间

FK_Emolopyees_DepId foreign key(DepId) references Department(DepId)

--为性别增加三个暗许约束,默以为'男'

--   tSAge int,

--   tSAddress nvarchar(300),

--在School数据库中创立贰个学生表.TableStudent

insert into TblClass values('Time第四期','时光不老,你笔者不散')

--N前缀,在仓库储存国语字符时候,必需加大写字母N。

alter table Employees add constraint

select 

--Ctrl R 快捷键

--用一句话来删除相应的束缚

alter table Employees add constraint

 

Sql中字符串使用单引号:通过写俩个单引号来转义一个单引号。

)

select tclassName,tclassDesc from TblClass

UQ_Employees_EmpName unique(EmpName)

CK_Employees_MepAge check(EmpAge>=1 and EmpAge<=120)

    tsname,

 

--通过sql代码删除约束

--创制数据库的时候钦定一些增选

from TblStudent

create database School

--查询部分数据前五条

    EmpAge int,

--为Department表扩充二个主键约束

insert into TblClass(tclassName ,tclassDesc ) values('Time第三期','珍惜时光')

(

select '黄林' as 姓名,18 年龄,'huanglin@yahoo.com' 邮箱

alter table Employees add constraint

--insert语句向表中那多少个不允许为空的列插入数据(tsClassId 不容许为空,必需插入数据)

 

--为性别扩张贰个默许约束,默以为'男'

tclassDesc nvarchar(100)

--通过设计器增添约束

 

   tSName nvarchar(10) not null ,

 

--为年龄扩充一个反省约束:年龄必须在-120岁以内,含岁与岁。

--   tSGender bit not null,

filegrowth=3%,

--成立二个班级表

values('Time001',0,'上海区','1778918281',18,'1989-10-11','78267287282819829X',1)

 

第16课-数据库开辟及ado.net

select 1 1 as '1 1的结果'

create table Department

    EmpName varchar(50),

--null值正是象征空值

都以去除student表中的全体数量,区别在于:

name='School_log',

)

select top 10 percent * from Employees

1.  Truncate语句极度迅速。由于truncate操作使用遵照最小情势记录日志,所以功能比较高。对于数百万条数据选取truncate删除只要几分钟,而采纳delete必要多少个小时。

log on

--   tSPhone varchar(100),

--删除表

select 'Time第五期','珍爱时间,岁月不老' union

  [Address]--因为Address是关键,则需加上[]

--扩张外键约束

   tSCardId varchar(18),

 

insert into TblClass(tclassName ,tclassDesc)

update 表名 set 列名=值,列名=值 where 条件

数据检索:数据查询

--1.开立三个数据库

--使用insert语句向数据库的表中插入数据

   tSGender bit not null,

set identity_insert tblClass on

update 表 set 列=值,列=值 where ...

   tSId int identity(1,1)  primary key,

create table TblClass

alter table Department add constraint

粗略多少插入INSERT

values('Time002',0,'上海''郊区',2)

select top 5 * from TblStudent order by tsage asc

SQL首要分为:

经过SQL加多约束

简言之多少更新(数据修改)

--非空约束

粗略多少删除(DELETE)

 

truncate table TblClass

MAX(最大值)、MIN(最小值)、AVG(平均值)、SUM(和)、COUNT(数量:记录的条数)

--得到年纪最大的%的学习者

--复习

--删除Employee

select top 5 * from Employees

create table TblClassBak

 

    EmpId int identity(1,1),

--查询ID最大值前五条,降序排序

 

insert into TblStudent

聚合函数                                        

use School;

insert into TblClassBak (ClsName ,ClsDesc )

values('Time001',0,'上海区','1778918281',18,'1989-10-11','78267287282819829X',1)

DF_Empyloyees_EmpGender

alter table Employees drop constraint

--   tSBirthday datetime,

PK_Department_DepId primary key(DepId)

select * from TblStudent

(

--得到年级最小的三个学生

CK_Employees_MepAge,

select top 10 * from TblStudent order by tsage desc

   tSAddress nvarchar(300),

--为EmpId加多一个主键约束

select 'Time第五期','尊崇时间,岁月不老' union

3.独一约束

alter table Employees add

 

drop table Employees

insert into 表(列) values(值)

--通过一句代码来创造全数约束

select tsname,tsgender,tsage

update TblClass set tclassName=tclassName '▲' where tclassId <100

filename='D:Desktop置心一处,无事不成。二、编程(四)笔记忽地程序猿.NET录像教程-Time第课-数据库开垦及ado.netSchool_log.ldf',

--为Employee表增添多少个DepId列。

SOL语句是和DBMS“交谈”专项使用的语言,不一致的DBMS都认SQL语法。

--查询内定的列的数量,由于尚未加where条件所以那边也是要重回全数行的数码。

print getDATE()

alter table Employees drop column EmpAddress --删除、修改时候须求加关键字column,加多时候则不须要。

--在编辑更新语句的时候,若无where条件则代表将表中的装有数据都更新为钦命的多少。

  1. 选拔生成的数据库版本
  2. 是不是包含有些脚本等
  3. 是否生成带数据的脚本(二零零七、二零零六都有该成效Express未有。)

--查询全部数据:表中的装有列的装有行。

--更新多列

--通过一条sql语句向表中插入多条sql语句

2.外键约束

  from Employees

    DepId int identity(1,1),

(

--向活动编号列插入数据

select * from TblClass

Create table TblStudent

TOP、Distinct

SQL语句入门(脚本、命令)

 

update Student set sAge=sAge 1

DELETE FROM TblClass where tclassId%2=0

 

use School

 

--删除表中全部数据

references Department(DepId) on delete cascade on update cascade

----表中列的定义在这里对小刮号中

(

 

   tSBirthday datetime,

--删除tclassId为偶数的数据

数据库→右键→职责→生成脚本

select top 5 * from Employees order by EmployeeId desc

 

--手动删除一列(删除EmpAddress列)

(

)

SQL聚合函数:

--删除表

constraint FK_Employees_Dempartment foreign key(DepId)

SQL全名是结构化查询语言(Structured Query Language)

  Lastname,

--为DepName列增加一个非空约束与独一约束

-============手动扩张约束==========

size=5mb,

delete from 表名  where ...

    EmpGender char(2),

 

本文由分分快三计划发布,转载请注明来源

关键词: 分分快三计划 SQL SQL数据库