所有代码都是在sql server 2012中的查询窗口执行,若窗口中有很多代码段,可以通过用鼠标选中某一块数据单独执行这块代码,这比通过注释的方式来执行代码更方便快捷得多。

数据库操作

创建数据库

use master
go
create database SchoolDB
on
(
    name = SchoolDB_dat,
    filename = "d:\SchoolDB.mdf",
    size = 10,
    maxsize = 50,
    filegrowth = 5
)
log on
(
    name = SchoolDB_log,
    filename = "d:\SchoolDB.ldf",
    size = 5mb,
    maxsize = 25mb,
    filegrowth = 5mb
)

修改数据库容量

--修改数据库容量
use master

alter database SchoolDB
modify file
(
    name =SchoolDB_dat,
    size=30mb
)

修改数据库名字

--修改数据库名字
use master
go
alter database SchoolDB
modify name=SchoolDBBB
go

删除数据库

--删除数据库
use master
go
drop database SchoolDBBB
go

显示数据库信息

--显示数据库信息
use ReportServer
go
select * from [dbo].[Batch]
go

显示数据库大小

--显示数据库大小
exec sp_spaceused
go

数据表的操作

创建表

--学生表
create table Student
(
    StuID varchar(10) primary key,                --数据表主键
    StuName nvarchar(10) not null unique,        --名称,不能为空
    StuBirth datetime,                            --生日
    StuAge int,                                    --年龄
    StuSex nvarchar(10) not null default('')    --性别
)
go 

--教师表
create table Teacher
(
    TecID varchar(10) primary key,
    tecName nvarchar(10) not null
)
go

--课程表
create table Course
(
    CouID varchar(10) primary key,
    CouName nvarchar(10),
    TecID varchar(10) foreign key(TecID) references Teacher(TecID)    --外键
)
go

--成绩表
create table Score
(
    StuID varchar(10) foreign key(StuID) references Student(StuID),
    CouID varchar(10) foreign key(CouID) references Course(CouID),
    Score decimal(18, 1)
)
go

 字段操作

--添加字段
alter table Student
add
column_b varchar(20) null,
column_c int null

--删除字段
alter table Student
drop column column_b,column_c

约束操作

--删除主键
alter table Student
drop constraint [pk_student_stu]

--添加主键
alter table Student
add constraint pk_student_stu primary key(StuID)

--添加外键
alter table Course
add constraint fk_course_tecid foreign key(TecID)
 references Teacher(TecID)
 
 --删除外键
 alter table Course
drop constraint [FK__Course__TecID__164452B1]

T-SQL语言基础

变量

--常量
select 1
select 'zk'
select '2016-2-4'

--全局变量
select @@VERSION as 'sql server 版本'

--局部变量
declare @count int
select @count = 5

通配符

--通配符 %
select * from Student where StuSex like 'Fe%'
select * from Student

--通配符_
select * from Student where StuName like 'Joh_'
select * from Student

--通配符[]
select * from Student where StuName like 'e[do]%'
select * from Student

--通配符^ !
select * from Student where StuSex like '[^md]%'
select * from Student

运算符和表达式

--赋值运算符
declare @x int, @y int

select @x = 1, @y = 2

select @x + @y

--算术运算符
select 1+2+5-4

--逻辑运算符
select * from Student 
where StuAge>8 or StuSex='Femal'

--比较运算符
select  * from Student 
where StuAge > 8

--运算符优先级
select 1+2
select 1+ 2 * 3
select (1 + 2) * 3

注释

单行:--zzzzzzzzzzzzzzzzzzzzzzzzzzzzz

多行:/*zzzzzzzzzzzzzzzzzzzzzzz*/

 

T-SQL详解

数据定义

create table demo
(
    id int,
    name varchar(20)
)
go


alter table demo
add 
age int

alter table demo
 drop column age

 alter table demo
 alter column name varchar(15)

 drop table demo

 

数据操作 增删查改

--插入数据
insert into Student values('3', N'李四', '1989-01-01',25, N'')

--删除数据
delete from Student 
where STUID = '3'

--查看数据
select * from Student

select * from Student 
where StuID in(2,3)

select * from Student 
where StuID > 1 and StuID < 3

select * from Student 
where StuID like '1%'


--改变数据
update Student set Stusex = N'' 
where STUID = '2'
  
update Student set Stusex = N'' 
where STUID <> '2'

update Student set Stusex = N'' 
where not STUID <> '2'

 

用户权限

 

--用户权限

grant update,delete,select on Student
to guest with grant option

deny update on Student
to guest cascade

revoke delete on Course
to guest cascade

其它语句

--声明语句
declare @userid varchar(20)
declare @pwd varchar(20)

set @userid = 'admin'
set @pwd = '123'

select '用户名' + @userid + '密码' + @pwd

--输出
declare @userid varchar(20)
declare @pwd varchar(20)

select @userid = 'admin', @pwd='123'
print @userid + ',' + @pwd

--begin end
declare @count int
select @count  = 0
while @count < 10
    begin
        print 'count' + ltrim(@count)
        select @count = @count + 1
    end
print 'loop over count=' +ltrim(@count)

--if else
declare @age = int
select @age = 40
if @age < 30
    print 'z'
else
    print 'k'

--case when
select *,
    case
        when StuID = '1' then '班长'
        when StuID = '2' then '学习委员'
        else ''
    end as '职位'
from Student

--goto
begin
    goto zktest
    select * from Student    
    zktest:
    print 'zjjjjjj'
end


--waitfor 延迟执行
declare @name varchar(50)
set @name = 'admin'
begin
    waitfor delay '00:00:03'
    print @name
end

--return
create FUNCTION Func(@id char(8))
returns table
as
    return
        (select * from Student 
        where StuID = @id)
select * from Func('1')

 内置函数 

/*
    字符串函数
*/

select ASCII('s'),
        ascii('z'),
        ascii('k')

select char(99), char(87)

select * from Student 
where left(stuname, 1) = 'z'

select * from Student 
where right(stuname, 1) = 'k'

select CHARINDEX('z', stuname, 1) from Student
where stuid = '2'

select len(stuname) from student
where stuid = 2

/*
    文本和图像函数
*/

create table table1
(
    c1 int,
    c2 text
)

insert table1 values('1', 'this is text')


select c1, TEXTPTR(c2) from table1

select c1, TEXTVALID('table1.c2', textptr(c2)) from table1

/*
    日期函数
*/

select GETDATE()

select day(getdate())
select month(getdate())
select year(getdate())

select datepart(quarter, getdate())
select datepart(month, getdate())
select datepart(year, getdate())
select datepart(day, getdate())
select datepart(DAYOFYEAR, getdate())
select datepart(WEEKDAY, getdate())
select datepart(WEEKDAY, '2016-2-4')
select datepart(WEEK, getdate())

--1900
select datepart(year, 0), datepart(month, 0), datepart(day, 0)

select datename(quarter, getdate())
select datename(month, getdate())
select datename(year, getdate())
select datename(day, getdate())
select datename(DAYOFYEAR, getdate())
select datename(WEEKDAY, getdate())
select datename(WEEKDAY, '2016-2-4')
select datename(WEEK, getdate())

select convert(varchar(10), getdate(), 120)
select convert(varchar(10), getdate(), 112)

select cast(getdate() as varchar(10))
select cast(1 as char(1)) + '2345'

select dateadd(dd, -1, getdate())
select dateadd(mm, -1, getdate())
select dateadd(yy, -1, getdate())
select dateadd(qq, -1, getdate())
select dateadd(hh, -1, getdate())

 

--字段长度
select col_length('student','stuid')

--表对应的ID
select object_id('student')

--表第一个字段名称
select col_name(object_id('student'),1)

--数据库编号
select db_id('student')

--数据库名称
select db_name(db_id('student'))

--数据库标识符
select host_id()

--计算机名字
select host_name()

--使用者
select user_name()

select sum(stuage) as 年龄之和 from student

select avg(stuage) as 平均年纪 from student