T-SQL语句
数据库常用术语
- 关系:关系即二维表,每一个关系有一个关系名,就是表名。
- 记录:表中的行
- 域:即取值范围
- 关联:不同数据表之间的数据彼此联系的方式
- 关键字:属性或属性的组合,可以用于唯一标识一条记录。
- 外部关键字:如果表中的一个字段,不是本表中的关键字,而是其他表中的关键字,称之为外部关键字。
- 数据冗余:数据库表中的重复数据。
- 数据完整性:指数据的一致性。
- 数据库操作异常:
- 插入异常
- 更新异常
- 删除异常
插入、更新、删除操作导致当两个关联的表产生矛盾则会产生异常。
- SQL 与 T-SQL的区别:
- SQL:关系型数据库的标准语言,区别与高级语言sql语言只是数据库能够识别的一些指令。
- T-SQL:在标准sql的基础上加强,除了标准sql所支持的命令外还对于sql进行了补充,提供了类似高级语言的基本功能:变量申明、流程控制、功能函数等。
- T-SQL包括以下内容:
- DQL(Data QueryLanguage) 数据查询语言:用来查询数据库中的数据。
- DML(Data Manipulation Language) 数据操纵语言:用来插入、删除、修改数据库中的数据。
- DCL (Data Control Language) 数据控制语言:用来控制数据库的存取许可、存取权限等。
- DDL(Data Definition Language) 数据库定义语言:用来定义数据库、数据库对象和定义其列,大部分以create开头。
- 说明、类型函数、其他命令等等。。
T-SQL创建数据库
create database testdb1
on
(
name=testdb,
filename='C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\testdb.mdf',
size=6,
maxsize=12,
filegrowth=10%
)
log on
(
name=testdb_log,
filename='C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\testdb_log.ldf',
size=1,
maxsize=8,
filegrowth=10%
)
- 创建数据库需要定义数据库文件名,数据库文件存放位置,初始值,最大值,增量值。
- 创建数据库需要定义数据库日志文件名,数据库日志文件文件存放位置,初始值,最大值,增量值。
T-SQL创建和删除表
- 创建表
创建职工表:
use testdb
create table Employee
(
EmpId int,
EmpName text,
EmpAge int,
EmpPay money,
EmpJob text,
EmpAddress text
)
创建教师表:
use testdb
create table Teacher
(
教师编号 int,
教师姓名 text,
教师职称 text,
教师工资 money
)
创建学生表:
use testdb
create table 学生表
(
学生编号 int,
学生姓名 varchar(50),
学生年龄 int,
家庭住址 text
)
- 删除表
use testdb
drop table 学生表
T-SQL修改数据库与数据表
- 为数据库增加数据文件和事物日志文件
alter database testdb
add file
(
name=testdb2,
filename='C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\testdb2.mdf',
size=6
)
alter database testdb
add log file
(
name=testdb2_log,
filename='C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\testdb2_log.ldf',
filegrowth=10%
)
- 删除数据库文件和事物日志文件
把刚才增加的两个文件删除:
alter database testdb
remove file testdb2
alter database testdb
remove file testdb2_log
- 修改数据库名称
exec sp_rename "学生表","Student"
- 为表增加字段或者删除字段
- 添加字段
use testdb
alter table Teacher
add 家庭住址 text
alter table Teacher
add email varchar(50) default 'xxx@qq.com'
添加字段步骤:
(1)打开testdb数据库
(2)获取修改Teacher表的权限
(3)增加字段
- 删除字段
use testdb
alter table Teacher
drop column 家庭住址
删除有约束的字段会执行报错
email字段有默认值的约束,所以需要先删除约束才能删除该字段。
use testdb
alter table Teacher
drop constraint [DF__Teacher__email__4AB81AF0]
alter table Teacher
drop column email
- 修改字段属性
use testdb
alter table Teacher
alter column 教师职称 varchar(60)
T-SQL 插入表
use testdb
insert into Teacher(教师编号,教师姓名,教师职称,教师工资) values(1,'王老师','高级教师','5000')
insert into Teacher(教师编号,教师姓名,教师职称,教师工资) values(2,'刘老师','高级教师','5000')
insert into Teacher(教师编号,教师姓名,教师职称,教师工资) values(3,'江老师','中级教师','3000')
insert into Teacher(教师编号,教师姓名,教师职称,教师工资) values(4,'李老师','中级教师','3200')
insert into Teacher(教师编号,教师姓名,教师职称,教师工资) values(5,'黄老师','高级教师','4000')
列属性如果不允许为null值,插入的时候必须有值,否则会报错无法插入。
T-SQL 查询表
-
select * from dbo.Teacher
*
是通配符,代表查询所有字段。 -
select 教师编号,教师职称 from dbo.Teacher
只查询教师编号和教师职称字段,不同字段的名称用逗号隔开。 -
按照某个字段的范围查询
查询教师工资低于4000的记录 -
按照某几个字段逻辑运算结果查询
(1)条件与
select * from dbo.xxx where 条件1 and 条件2 and 条件3 and...
(2)条件或
select * from dbo.xxx where 条件1 or 条件2 or 条件3 or...
(3)条件非
select * from dbo.xxx where !条件1
select * from dbo.xxx where not 条件1
例如:select * from dbo.Teacher where not 教师工资>4000
也等效于select * from dbo.Teacher where 教师工资!>4000
其实,我们可以在where子句中使用多个条件语句进行运算得到查询条件,且其规则遵循运算符优先级:
(1)括号
(2)Not(非)、正号、负号
(3)乘、除
(4)加、减
(5)比较运算符
(6)And
(7)Or -
使用 in 查询多个状态值
查询教师编号为2、3、4的记录:
select * from dbo.Teacher where 教师编号 in (2,3,4)
查询教师姓名不为刘老师、李老师、黄老师的记录:
select * from dbo.Teacher where CONVERT(VARCHAR(4000),教师姓名) not in('刘老师','李老师','黄老师')
注意:查询中文时,要将text(ntext)数据转换varchar(nvarchar),否则会报错The data types text and varchar are incompatible in the equal to operator.
-
查询记录的某个字段是否为空值
select * from dbo.XXX where 字段 is null
select * from dbo.XXX where 字段 is not null
T-SQL 更新表
将所有的中级教师升级为高级教师,工资加1000元:
use testdb
update Teacher set 教师职称='高级教师',教师工资=教师工资+1000 where 教师职称='中级教师'
33
T-SQL 删除表
- 删除表中的所有记录
use testdb
delete from Teacher
- 按照条件删除表中记录
use testdb
delete from Teacher where 教师工资<4000
2-22