SQL语言的基本组成部分
数据定义语言DDL
全称:Data Definition Language
数据操纵语言DML
全称: Data Manipulation Language
事务控制语言TCL
全称: Transaction Control Language
数据控制语言DCL
全称: Data Control Language
建数据库的语法:
CREATE DATEBASE dbname
ON [primary]
(
<数据文件参数>[,...n][<文件组参数>]
)
[LOG ON]
(
<日志文件参数>[,...n]
)
CREATE DATABASE stuDB
ON PRIMARY --默认就属于primary文件组,可省略
(
NAME="stuDB_data",--主数据文件的逻辑名
FILENAME="d:\project\stuDB_data.mdf",--主数据文件的物理名
SIZE=5mb, --主数据文件的初始大小
MAXSIZE=100mb, --主数据文件增长的最大值
FILEGROWTH=15% --主数据文件的增长率
)
LOG ON
(
NAME='stuDB_log',
FILENAME="d:\PROJECT\stuDB_log.ldf",
SIZE=2mb,
FILEGROWTH=1mb
)
GO
删除数据库
DROP DATABASE 数据库名
USE master --设置当前数据库为master,以便访问sysdatabase表
GO
IF EXISTS(SELECT * FROM sysdatabase where name='stuDB')
DROP DATABASE stuDB
添加约束
ALTER TABLE tbname
ADD CONSTRAINT 约束名 约束类型 具体的约束说明
约束名的取名规则推荐采用:约束类型_约束字段
主键(Primary Key)约束:如 PK_stuNo
唯一(Unique Key)约束:如 UQ_stuID
默认(Default Key)约束:如 DF_stuAddress
检查(Check Key)约束:如 CK_stuAge
外键(Foreign Key)约束:如 FK_stuNo
ALTER TABLE stulnfo
ADD CONSTRAINT PK_stuNo PRIMARY_KEY(stuNo)
ALTER TABLE stuinfo
ADD CONSTRAINT UQ_stuID UNIQUE(stuID)
ALTER TABLE stuinfo
ADD CONSTRAINT DF_stuAddress
DEFAULT ('地址不详') FOR stuAddress
ALTER TABLE stuinfo
ADD CONSTRAINT CK_stuAge
CHECK(stuAge BETWEEN 15 AND 40)
ALTER TABLE stuMarks
ADD CONSTRAINT FK_stuNo
FOREIGN KEY(stuNo) PEFERENCES stuinfo(stuNo)
GO
删除约束
ALTER TABLE 表名
DROP CONSTRAINT 约束名
例如:删除stuInfo表中地址默认约束
ALTER TABLE stuInfo
DROP CONSTRAINT DF_stuAddress
创建数据库用户
创建数据库用户需要调用系统存储过程sp_grantdbaccess,其用法为:
EXEC sp_grantdbaccess ‘登录帐户名’,’数据库用户名’
其中,“数据库用户“为可选参数,默认为登录帐户,即数据库用户默认和登录帐户同名。
USE stuDB
GO
EXEC sp_grantdbaccess
'jbtraining\S26301', 'S26301DBUser'
EXEC sp_grantdbaccess
'zhangsan', 'zhangsanDBUser'
向数据库用户授权
授权的语法为:
GRANT 权限 [ON 表名 ] TO 数据库用户
USE stuDB
GO
/*--为zhangsanDBUser分配对表stuInfo的select, insert, update权限--*/
GRANT select, insert, update ON stuInfo TO zhangsanDBUser
/*--为S26301DBUser分配建表的权限--*/
GRANT create table TO S26301DBUser
使用变量
局部变量:局部变量必须以标记@作为前缀 ,如@age
局部变量的使用也是先声明,再赋值
声明局部变量
DECLARE @变量名 数据类型
DECLARE @name varchar(8)
DECLARE @seat int
赋值
SET @变量名 = 值
SET @name = '张三'
SET @name = stunName fro stuinfo where stuNo='s2342'
全局变量
全局变量必须以标记@@作为前缀,如@@version
全局变量由系统定义和维护,我们只能读取,不能修改全局变量的值
逻辑控制语句
IF-ELSE 语句
IF(条件)
BEGIN
语句1
语句2
...
END
ELSE
BEGIN
语句1
语句2
...
END
WHILE循环语句
WHILE(条件)
BEGIN
语句1
语句2
....
BREAK
END
CASE-END多分支语句
CASE
WHEN 条件1 THEN 结果1
WHEN 条件2 THEN 结果2
....
ELSE其它结果
END
USE stuDB
GO
SELECT 考号=ExamNo,学号=stuNo,笔试=writtenExam,机试=labExam,
平均分=(writtenExam+labExam)/2,
等级=CASE
WHEN (writtenExam+labExam)/2<60 THEN '不及格'
WHEN (writtenExam+labExam)/2 BETWEEN 60 AND 69 THEN '差'
WHEN (writtenExam+labExam)/2 BETWEEN 70 AND 79 THEN '中'
WHEN (writtenExam+labExam)/2 BETWEEN 80 AND 89 THEN '良'
ElSE '优'
END
FROM stuMarks
批处理语句
SELECT * FROM stuInfo
SELECT * FROM stuMarks
UPDATE stuMarks
GO
GO 是批处理的标志,表示sql server将这些T-SQL 语句编译成为一个执行单元。提高执行效率一般是将一些逻辑相关的业务操作语句,放置在同一批中,这完全由业务需求和代码编写者决定。
SQLServer规定:如果是建库、建表语句、以及我们后面学习的存储过程和视图等,则必须在语句末尾添加 GO 批处理标志。
--例如建表语句的末尾必须添加GO
CREATE TABLE stuInfo
(
....
)
GO
实例操作
SELECT * FROM stuMarks
DECLARE @labLvg INT
WHILE(1=1)
BEGIN
UPDATE stuMarks
SET labLvg =
CASE
WHEN labExam<6 THEN labExam+5
WHEN labExam between 60 AND 69 THEN labExam+3
WHEN LABeXAM between 70 AND 79 THEN labExam+2
WHEN labExam between 80 AND 89 THEN labExam+1
ELSE labExam
END
SELECT @labAvg=AVG(labExam) FROM stuMarks
IF @labAvg>85
BREAK
END
SELECT * FROM stuMarks
子查询
SELECT * FROM stuInfo
WHERE stuAge>( SELECT stuAge FROM
stuInfo where stuName='李斯文')
GO
子查询在WHERE语句中的一般用法:
SELECT … FROM 表1 WHERE 字段1 >(子查询)
外面的查询称为父查询,括号中嵌入的查询称为子查询
IN子查询
SELECT stuName FROM stuInfo
WHERE stuNo IN
(SELECT stuNo FROM stuMarks
WHERE writtenExam=60)
GO
NOT IN子查询
EXISTS子查询
IF EXISTS (子查询)
语句
数据库的存在检测
IF EXISTS(SELECT * FROM
sysDatabases WHERE name=’stuDB’)
DROP DATABASE stuDB
NOT EXISTS子查询
.......
如果给你带来帮助,欢迎微信或支付宝扫一扫,赞一下。

