第五章 管理数据
目标:
1 使用 SQL Server Management Studio 进行数据的插入,修改和删除
2 使用T-SQL 进行数据的插入修改和删除
3 CREATE ALTER DROP 用来对表结构的创建修改删除,INSERT UPDATE DELETE 用来对表数据的插入修改删除
4 可以使用管理工具和T-SQL对数据进行操作,但是T-SQL更为灵活,可大量插入和按照条件插入修改删除等
5 为了表示数据的安全性,只有系统管理员(sa),数据库所有者(dbo),数据库对象所有者以及被授权的用户才可以管理数据库中的数据
1 ----实现数据的增加 2 USE XK 3 GO 4 DECLARE @n int 5 SELECT @n=10000006 6 WHILE @n<10000010 7 BEGIN 8 INSERT INTO student VALUES(@n,'小明','男','计算机','11111116') 9 SELECT @n+=1 10 END 11 GO 12 --实现联合查询将数据插入到组合表中 13 DECLARE @n int 14 SELECT @n=10000001 15 WHILE @n<10000010 16 BEGIN 17 INSERT INTO elective values((SELECT student_id FROM student WHERE student_id = @n), 11111115,null) 18 SELECT @n+=1 19 END 20 GO 21 ----实现对选课超过30的数据进行更改 22 DECLARE @n int 23 SELECT @n=11111111 24 WHILE @n<11111116 25 BEGIN 26 UPDATE course set course_time='周四晚上' 27 WHERE ((SELECT COUNT(*) FROM elective WHERE course_id=@n)>30 and course_id=@n) 28 SELECT @n+=1 29 END 30 GO 31 --将已有数据插入已有表中 表结构相同 不同时制定列 32 INSERT INTO class 33 SELECT TOP(5) * FROM class1 34 GO 35 ----复制表 只复制数据,不复制主键等东西 36 SELECT * INTO class3 from class 37 GO 38 --删除表中数据 按行删除 和直接删除 39 DELETE FROM class2 40 GO 41 TRUNCATE TABLE class2 42 GO
第六章 T-SQL基础
目标
1 掌握T-SQL中的标识符,常量,变量,表达式和运算符的使用方法
2 掌握T-SQL控制语句常用的方法
3 掌握T-SQL中常用的函数
4 掌握常用的系统存储过程
5 运用T-SQL编写程序代码
1 Transact-SQL概述
SQL 是结构化查询语言(structured query language)简称,用于存取数据以及查询更新和管理关系数据库。侧重于对数据的操纵和对数据库的管理。 SQL集数据定义DDL,数据操纵DML,数据控制DCL于一体 1 数据定义语言DDL, data definition language用于创建数据库和数据库对象,包括创建修改和删除 CREATE ALTER DELETE 2 数据操纵语言DML,data manipulation language,用于操纵数据表或试图中的数据,包括增加,查询,修改,删除,INSERT,SELECT,UPDATE,DELETE 3 数据控制语言DCL(data control language)用来设置,更改角色或者用户的权限,包括对用户的授权GRANT,收回授权REMOVE 4 SQL操作可以直接使用命令交互,也可以嵌入高级语言中使用,其中T-SQL是SQL Server唯一认知的语言
2 T-SQL的使用规定
1 语法格式约定
2 对象引用的规范服务器名称.[数据库名称].[架构名称].[数据库对象的名称]
3 注释的规范 单行注释-- 批注释/* */
3 T-SQL语法元素
语法元素包含关键字,标识符,数据类型,运算符,表达式,函数,注释,流程控制语言和错误处理等语法元素
1 保留关键字 如 DECLARE SET SELECT PRINT GO ORDER是关键字,必须需要使用保留关键字作为属性时,需要使用[ORDER]
2 标识符,第一个字符为字母,汉字,_,#,@,中间有空格需要使用[my test] @开头表示局部变量或函数的参数 @@表示全局变量 #表示临时表或存储过程 ##表示全局的临时数据库对象
3 运算符 算术运算符,逻辑运算符,比较运算符,字符串连接运算符,赋值运算符,位运算符,一元运算符,
4 表达式, 用运算符和()和函数等连接起来就是表达式
4 批处理
批处理中的批与批之间使用GO进行连接起来,不然会出错。批处理可以保存在sql语句中,建立数据库时可以直接使用批处理文件进行完整的建立
5 变量
局部变量 生命周期为GO语句内,赋值 SET/SELECT SET为一个变量赋值,SELECT 为多个变量赋值, AS 用于指定显示的名称,显示时不会出现未命名,
全局变量 @@connections rowcount error procid remserver servername spid version
6 常量
字符串常量 Unicode字符串常量 二进制常量0x 位常量 整形常量 带有精度的常量 float real常量(科学计数法E5为10^5) 时间常量'2019-7-25' 货币型常量 ¥100
7 流程控制语句
分为顺序,选择,循环三类 主要有以下使用
BEGIN END IF...ELSE CASE...WHEN...ELSE WHILE(expression)...BREAK|CONTINUE RETURN GOTO
WAITFOR DELAY '00:00:01'
8 系统内置函数
共14类 (聚合函数 配置函数 加密函数 游标函数 日期和时间函数 数学函数 元数据函数 排名函数 行集函数 安全函数 字符串函数 系统函数 系统统计函数 文本和图像函数)
字符串函数 对数据进行替换,截断合并等操作
ASCII(char) CHAR(int) LEN(string) RIGHT(char,3) LEFT(char,3) SUBSTRING(value,0,3)从0开始,读取三个 LTRIM 左边空格删除 RTRIM(char) +指连接字符串
CHARiNDEX(str1,str,[start]) 所有str1字符串在str中是否有值,有返回所在的第一个字符的位置,start表示开始搜索的位置 CHARiNDEX('str1','str1111',0) 第三个为0 1时都可以匹配到字符串str1 返回的位置1 开始为2时匹配不到字符串返回0
REPLACE(str,str1,str2)用字符串str2代替str1 LOWER(char) UPPER(char) SPACE(int)返回由重复空格组成的字符串 STR(float) 浮点数据转化为指定长度字符串 并不是可变长度,多余的用空格都在前面代替PRINT STR( 3.1E2,5) 返回' 310'
日期时间函数
数学函数
系统函数 APP_NAME() CASE表达式 CASE(@s AS char(1)) CONVERT(char(1),@s) COALESCE(@s,@d,@a,@b) 返回第一个非空数值 DATALENGTH(@s) 返回数值所占字节数 HOST_NAME()返回服务器计算机的名称
ISDATE(@s) 是有效日期格式返回1 否则返回0 ISNULL(@s,'zhou')是NULL用指定数值代替 ISNUMERIC(@s)是否为数值 NEWID()全局位移标识符 NULLIF(@s,@d)相等 则返回空值
9 编程风格
代码
USE XK GO DECLARE @n int SET @n=1 ----显示课程有几类 SELECT course_name FROM course GROUP BY course_name ORDER BY course_name DESC SELECT COUNT(*) AS '课程数' FROM course --使用变量后才需要GO隔开,其他不必要,但也可以用 --对课程进行分类统计,显示课程类别,课程名称和课程报名人数 SELECT course_name AS '课程名',department_name AS '系名',COUNT(student_id) AS '报名人数' FROM course LEFT JOIN department on course.department_id=department.department_id LEFT JOIN elective on course.course_id=elective.course_id GROUP BY course_name,department_name ORDER BY course_name DESC --查询在表1中但不在表2中的数据 SELECT student_id FROM student WHERE (student_id NOT IN (SELECT student_id FROM elective)) GO --求30!的数值 DECLARE @n int,@sum float SELECT @n=1 SELECT @sum=1 WHILE @n<30 BEGIN SELECT @n+=1 SELECT @sum*=@n PRINT @sum END GO --分支语句 case、 DECLARE @var int,@sum nvarchar(16) SELECT @var=10 SET @sum=CASE @var WHEN 1 THEN '数值为1' WHEN 2 THEN '数值为2' ELSE '数值不为1也不为2' END PRINT @sum GO