最近看了一本SQL SERVER2010的教材,顺便记录了一下笔记(PS:此书暂时没有看完、所以暂时更新一下内容)!一下内容为本人自己整理、如有错误还请大家指出以免影响别人的学习。
1、 创建一个表TestDB
DROP TABLE TestDB
CREATE TABLE TestDB(
id varchar(15) NOT NULL,
name varchar(15) NOT NULL,
sex int NOT NULL,
CONSTRAINT pk_id PRIMARY KEY(id)
);
2、 向TestDB表中插入一条数据
INSERT INTO TestDB (id,name,sex) VALUES ('001','Clown',1);
3、 查询TestDB中全部数据
SELECT * FROM TestDB;
4、 给查询的列名起个自定义的别名
SELECT id AS c1,name AS c2,sex AS c3 FROM TestDB;
也可以不加[AS]
SELECT id c1,name c2,sex c3 FROM TestDB;
也可以对别名加[“”],则可以使用关键字做别名
SELECT id "AS",name "SUM",sex "CHAR" FROM TestDB;
5、 使用DISTINCT消除重复的行(计算量大、一般情况不建议使用)
SELECT DISTINCT name,sex FROM TestDB;
6、 ORDERY BY进行升序排列
SELECT * FROM TestDB ORDER BY sex
7、 ORDERY BY CASE按照条件排序
SELECT id c1,name c2,sex c3
FROM TestDB
ORDER BY CASE -- ORDER BY为一个隐式游标(CURSOR)
WHEN name='Clown' -- 如果[name]列的值全部为[Clown]
THEN sex -- 则按照[sex]排序
ELSE id -- 否则按照[id]排序
END;
8、 ORDERY BY [column] DESC降序排列
SELECT * FROM TestDB ORDER BY id DESC;
9、 WHERE进行数据筛选
-- 筛选出[id]为[001]的所有行的所有列
SELECT * FROM TestDB WHERE id='001';
注:不能在WHERE中使用SUM()或者COUNT()等聚合函数!
比较运算符最快的为相等[=]其次是不相等[<、<=、>、>=]最慢的为不等于[<>或!=]
表中选择特定行的操作称为[限制]
WHERE语句不能用[列名]的[别名]、必须用原列名
WHERE在SELECT之前进行计算
10、多条件查询连接符:AND 、OR 、NOT
AND:查询多个条件同时为[真]
OR:一个条件成立即可以
NOT:取与条件相反的结果
-- 筛选出[id]为[001]的所有行的所有列
SELECT * FROM TestDB WHERE NOT id<>'001';
注:同时使用是AND、OR、NOT优先级:NOT最高其次是AND最后为OR
11、LIKE模糊查询
-- 查询[name]字段含有[C]的数据
SELECT * FROM TestDB WHERE name LIKE '%C%'
-- 查询[name]字段含有6位长度的数据
SELECT * FROM TestDB WHERE name LIKE '_____%'
-- 查询[name]字段[C]或[a]或[b]开头并[lown]结尾的数据
SELECT * FROM TestDB WHERE name LIKE '[Cab]lown%'
-- ESCAPE '\' 此句声明[\]为转义字符相当于查询的是[_Clown]关键字
SELECT * FROM TestDB WHERE name LIKE '\_Clown%' ESCAPE '\'
-- 不是以[A]开头的[6]位或以上的关键字
SELECT * FROM TestDB WHERE name LIKE '[^A]Clown%'
注:LIKE仅试用于字符串
12、BETWEEN筛选出大于等于并小于等于的一个段
-- 筛选出[id]大于等于并且小于等于的数据
SELECT * FROM TestDB WHERE id BETWEEN 1 AND 2
13、IN关键字筛选值是否等于给定的值
-- 筛选出[id]为[001]和[003]的值
SELECT * FROM TestDB WHERE id in ('001','003')
14、IS NULL值是否为[NULL](PS:[NULL]不代表字面量)
-- 筛选出[name]为[NULL]的数据;[NULL]不代表字面量而是说明是否为空
SELECT * FROM TestDB WHERE name IS NULL
-- 筛选出[name]为非空的数据;[NULL]不代表字面量而是说明是否为空
SELECT * FROM TestDB WHERE name IS NOT NULL
15、SUBSTRING(Column,position,length)提取字符串
-- 提取[name]列值、从第[1]位开始共[1]位
SELECT SUBSTRING(name,1,1) FROM TestDB
16、UPPER(string)、LOWER(string)大小写转换函数
-- [name]列转换为小写
SELECT LOWER(name) FROM TestDB
-- [name]列转换为大写
SELECT UPPER(name) FROM TestDB
17、获取当前时间戳
-- 获取当前时间戳
SELECT CURRENT_TIMESTAMP
18、类型转换CAST(expression AS type)
-- 将[sex]列转换为[varchar]类型
SELECT CAST(sex as varchar) FROM TestDB
19、CASE函数相当于IF ELSE
-- CASE相当于IF ELSE
SELECT id, ColumnName =
CASE id
WHEN '001' THEN 'Road'
WHEN '002' THEN 'Mountain'
WHEN '003' THEN 'Touring'
ELSE 'Not for sale'
END
FROM TestDB
ORDER BY id;
20、INNER JOIN 内链接
-- 内链接->返回[TestDB]表中[id]等于[TestDB2]表中[OrderId]
SELECT * FROM TestDB t1
INNER JOIN TestDB2 t2
ON t1.id = t2.OrderId
21、sp_help 查看表的结构
-- [G_GAMEList]为表名称
sp_help G_GAMEList
22、UPDATE SET 更新数据
-- [G_GAMEList]为表名,[GG_Date]为需要修改的字段以及值,如不加WHERE则修改全部
UPDATE G_GAMEList
SET GG_Date = '2014-10-28'
WHERE GG_Id = '1';
23、DELETE 删除,不删除表结构
-- 删除[G_GAMEList]表、有删除记录可以恢复
DELETE G_GAMEList
-- 删除[G_GAMEList]表中[GG_AddId]字段为[1]的行
DELETE FROM G_GAMEList WHERE GG_AddId='1';
24、DROP TABLE 删除,删除表结构以及表
-- DROP删除表不可恢复,但速度比DELETE快
DROP TABLE G_GAMEList
25、TRUNCATE 删除可以使自增字段归零但数据不可恢复,不删除表结构
TRUNCATE TABLE dbo.a;
26、约束
NOT NULL 阻止向列中插入空值
PRIMARY KEY 设置表的主键
FOREIGN KEY 设置表的外键
UNIQUE 阻止向列中插入重复的值
CHECK 使用逻辑(布尔)表达式限制插入列中的值
列约束:是列定义的一部分,它设置作用于列的条件。
表约束:是有别于列定义并加强于表中多个列的条件。
27、CREATE TABLE t_Name 创建表
-- 创建一张新表
CREATE TABLE t_TestTable(
id varchar(10),
name varchar(10)
)
28、DEFAULT设置列的默认值
-- 创建一张新表,设置[name]默认值为''
CREATE TABLE t_TestTable(
id varchar(10),
name varchar(10) NOT NULL DEFAULT ''
)
29、主键PRIMARY KEY与外键 FOREIGN KEY
-- 设置[C_Id]为主键
CREATE TABLE t_City(
C_Id varchar(10) NOT NULL PRIMARY KEY,
C_Name varchar(10) NOT NULL,
C_Parment int DEFAULT 0,
)
-- 创建一个[t_User]表,[U_Id]为主键,[U_City]为外键主键为[t_City]表中的[C_Id]列
CREATE TABLE t_User(
U_Id varchar(10) NOT NULL PRIMARY KEY,
U_Name varchar(10) NOT NULL,
U_Sex int NOT NULL DEFAULT 1,
U_City varchar(10),
CONSTRAINT FK_U_City
FOREIGN KEY(U_City)
REFERENCES t_City(C_Id)
)
INSERT INTO t_City(C_Id,C_Name)VALUES('1','呼伦贝尔');
-- 外键不能插入父表中没有的数据
INSERT INTO t_User(U_Id,U_Name,U_Sex,U_City) VALUES ('1','Clown',1,'1');
-- 外键可以为空
INSERT INTO t_User(U_Id,U_Name,U_Sex) VALUES('2','Clown',1);
注:外键可以为[NULL]但是不能为父表中不存在的值。
30、UNIQUE值唯一
CREATE TABLE t_Test(
T_Id varchar(10),
CONSTRAINT un_id
UNIQUE(T_Id)
)
注:UNIQUE标识[T_Id]列为唯一值不能插入重复数据
31、创建临时变量表
创建局部变量表:
CREATE TABLE #t_TempTable(
TT_Id CHAR(3),
)
创建全局变量表:
CREATE TABLE ##t_AllTempTable(
ATT_Id CHAR(3),
)
注:创建临时变量表是用来存储临时的数据当会话结束或事物结束时则数据清除
32、ALTER修改
-- 向[t_City]表中增加列[C_Time]
ALTER TABLE t_City
ADD C_Time VARCHAR(10);
-- 删除[C_Time]列
ALTER TABLE t_City
DROP COLUMN C_Time
33、CREATE INDEX创建索引
-- 为表[t_City]的[C_Id]列创建索引
CREATE INDEX index_Name ON t_City(C_Id);
-- 删除索引
DROP INDEX index_Name ON t_City;
注:索引查询速度变快但是修改和添加数据时变慢,在添、改数据时索引也需要自动维护