T-SQL教程一

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子查询
.......


如果给你带来帮助,欢迎微信或支付宝扫一扫,赞一下。