15年10月份,大概一年半以前的某个工作日凌晨2点钟开始整理的sql语句。
创建数据库
|
|
删除数据库
|
|
SqlServer的主要数据类型
Image:可用来存储图像
Char:固定长度的非Unicode字符数据
Varchar:可变长度非 Unicode 数据
Nchar: 固定长度的Unicode 数据
Nvarchar:可变长度的Unicode 数据
DataTime:日期和时间
int,smallint:整数
Money:货币数据类型
Bit:布尔
创建表
|
|
创建表:保证数据的完整性 = 实施完整性约束
删除表
|
|
添加约束
|
|
主外键关系
- 当主表中没有对应的记录时,不能将记录添加到子表
成绩表中不能出现在学员信息表中不存在的学号; - 不能更改主表中的值而导致子表中的记录孤立
把学员信息表中的学号改变了,学员成绩表中的学号也应当随之改变; - 子表存在与主表对应的记录,不能从主表中删除该行
不能把有成绩的学员删除了 - 删除主表前,先删子表
先删学员成绩表、后删除学员信息表
删除约束
|
|
运算符
= > < >= <= <>不等于 !
通配符
‘_’ | 一个字符 | A Like ‘C_’ |
% | 任意长度的字符串 | B Like ‘CO_%’ |
[ ] | 括号中所指定范围内的一个字符 | C Like ‘9W0[1-2]’ |
[^] | 不在括号中所指定范围内的一个字符 | D Like ‘%[A-D][^1-2]’ |
逻辑表达式
AND | 逻辑与 | 1 AND 1 = 1; 1 AND 0 = 0; 0 AND 0 = 0; |
OR | 逻辑或 | 1 OR 1 = 1; 1OR 0 = 1; 0 OR 0 = 0; |
NOT | 逻辑非 | NOT 1 = 0; NOT 0 = 1; |
插入数据行
|
|
插入多行数据(一个表中数据引入另一个表/建临时表)
应用:复制学员表Student为Table_1,包含表结构和全部的数据
语法:
Insert Into <表名>(列名)
Select <列名>
From <源表名>
|
|
|
|
//(9 行受影响)
一般常用的创建临时表的方法是:
Select <列名>
Into <表名>(列名)
From <源表名> –若不存在自己创建,若存在提示已存在
|
|
//消息 2714,级别 16,状态 6,第 1 行 数据库中已存在名为 ‘tb_TB’ 的对象。
|
|
Q:在数据库表中,数据行位置并不重要,但是一个单位中要根据奇数行和偶数行的数据来汇总,在这个汇总的基础上再得到一个数值,因此,要查询数据库表的奇数行和偶数行的总数。
A:新建一个临时表,从原表中任选一列数据存入临时表,根据新的标识列,进行奇偶判断。
|
|
|
|
|
|
|
|
更新数据行
语法:
Update <表名> Set <列名 = 更新值>
[Where <更新条件>]
|
|
|
|
删除数据行
语法:Delete From <表名> [Where <删除条件>]
|
|
删除表
语法:Truncate Table <表名>
|
|
查询
语法:
SELECT <列名>
FROM <表名>
[WHERE <查询条件表达式>]
[ORDER BY <排序的列名>[ASC或DESC]]
|
|
查询全部的行和列:
|
|
查询部分行:
|
|
使用AS来命名列:
|
|
使用=来命名列:
|
|
查询空行:
|
|
使用常量列(‘’AS列名,列名下元素赋值’’):
|
|
限制固定行数:
|
|
返回百分之多少行:
|
|
|
|
升序排列:
|
|
//消息8115,级别16,状态8,第1 行 将varchar 转换为数据类型numeric 时出现算术溢出错误。
降序排列:
|
|
按多列排序:
|
|
模糊查询
LIKE:
Q:以下的SQL语句:
SELECT * FROM 数据表
WHERE 编号 LIKE ‘00[^8]%[A,C]%’
可能会查询出的编号值为(B)。
A、9890ACD
B、007_AFF
C、008&DCG
D、KK8C
IS NULL(把某一字段中内容为空的记录查询出来):
|
|
BETWEEN:
|
|
IN(把某一字段中内容与所列出的查询内容列表匹配的记录查询出来):
|
|
聚合函数
SUM:
|
|
AVG:
|
|
MAX、MIN:
|
|
COUNT/COUNT(*):
|
|
分组汇总
GROUP BY:
指定 GROUP BY 时,如果 SELECT 子句中包含聚合函数, 则计算每组的汇总值。
|
|
选择列表中任一非聚合表达式内的所有列都应包含在 GROUP BY 列表中,或者 GROUP。
BY 表达式必须与选择列表表达式完全匹配。否则列无法对应。
|
|
多列分组:
用于两个或多个元素在两个或多个列值相同的情况。
|
|
HAVING:
输出两个或多个元素在两个或多个列值相同,例如成绩出现多次的分组的平均成绩:
|
|
|
|
|
|
对比:
WHERE子句从数据源中去掉不符合其搜索条件的数据。
GROUP BY子句搜集数据行到各个组中,统计函数为各个组计算统计值。
HAVING子句去掉不符合其组搜索条件的各组数据行。
多表联结查询
分类:
1.内联结(INNER JOIN)
2.外联结
①.左外联结(LEFT JOIN)
②.右外联结(RIGHT JOIN)
③.完整外联结(FULL JOIN)
3.交叉联结(CROSS JOIN)
|
|
|
|
|
|
//上面三个结果相同
|
|
三表联结:
|
|
左外联结(LEFT JOIN /LEFT OUTER JOIN):
|
|
|
|
//上面两个结果相同
T-SQL
局部变量:
局部变量必须以标记@作为前缀,如@age。
局部变量的使用也是先声明,再赋值。
全局变量:
全局变量必须以标记@@作为前缀,如@@version。
全局变量由系统定义和维护,我们只能读取,不能修改全局变量的值。
声明局部变量:DECLARE @变量名 数据类型
|
|
赋值:
SET @变量名 = 值
或 SELECT @变量名 = 值
|
|
Eg:编写T-SQL查找李文才的左右同桌。
/–查找李文才的信息–/
|
|
全局变量
|
|
IF-ELSE语句
ELSE是可选部分,如果有多条语句,才需要BEGIN-END语句块。
SQL中的IF-ELSE语句:
|
|
WHILE循环语句
BREAK表示退出循环,如果有多条语句才需要BEGIN-END语句块。
SQL中的WHILE语句:
|
|
|
|
CASE-END多分支语句
|
|
|
|
|
|
批处理语句:SQLServer规定:如果是建库、建表语句、以及我们后面学习的存储过程和视图等,则必须在语句末尾添加 GO 批处理标志。
Eg:对机试成绩进行反复加分,直到平均分超过分为止。请编写T-SQL语句实现。
90分以上: 不加分
80-89分: 加分
70-79分: 加分
60-69分: 加分
60分以下: 加分
|
|
事务
假定张三的账户直接转账1000元到李四的账户。
|
|
haha,后面整理的资料丢失了,只到这了。