SQL语句大全(更新中)
2019-07-17 本文已影响0人
Yuri7
基础
- 创建数据库
CREATE DATABASE db_name
- 删除数据库
DROP DATABASE db_name
- 备份数据库
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
--- 开始 备份
BACKUP DATABASE pubs TO testBack
- 创建新表
CREATE TABLE table_name(
coumn_name type,
...
)
- 根据已有表创建新表
CREATE TABLE table_new LIKE table_old
CREATE TABLE table_nwe AS column1, column2, FROM table_old DEFINITION ONLY
- 删除新表
DROP TABLE table_name
- 增加一个列
ALTER TABLE table_name ADD column type
列加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。 - 添加主键
ALTER TABLE table_name ADD PRIMARY KEY(col)
- 删除主键
ALTER TABLE table_name DROP PRIMATY KEY(col)
- 创建索引
CREATE UNIQUE INDEX index_name ON table_name(col ...)
索引可以在不读取整个表的情况下搜索数据, 会加快搜索速度,但是会增加更新时间。
普通索引,允许重复值。唯一的索引意味着两个行不能拥有相同的索引值。事实上,在许多场合,人们创建唯一索引的目的往往不是为了提高访问速度,而只是为了避免数据出现重复。 - 删除索引
DROP INDEX index_name
注:索引是不可更改的,想更改必须删除重新建。 - 创建视图 `CREATE VIEW view_name AS select_statement
- 删除视图
DROP VIEW view_name
- 选择
SELECT * FROM table_name WHERE range
- 插入
INSERT INTO table_name(col1, col2, ...) VALUE(value1, value2)
INSERT INTO table_name VALUE(value1, value2, ...)
- 删除
DELETE FROM table_name WHERE range
- 更新
UPDATE table_name SET field_name=value WHERE range
- 查找
SELECT * FROM table1 WHERE field_name LIKE ’%value1%’
- 排序
SELECT * FROM table_name ORDER BY field1 ASC, field2 DESC
- 总数:
SELECT COUNT AS totalcount FROM table_name
- 求和/平均/最大/最小:
SELECT SUM/AVG/MAX/MIN(field_name) AS result FROM table_name
- UNION运算符:
UNION
组合两个表时会消除重复行,派生一个结果表,UNION ALL
不消除重复行 - EXCEPT运算符:
EXPECT
通过包含在table1不在table2中的行,派生一个结果表,EXPECT ALL
不消除重复行 - INTERSECT运算符:
INTERSECT
通过在table1和table2中都有的行,派生一个结果表,EXPECT ALL
不消除重复行 - 左连接
LEFT (OUTER) JOIN
左(外)连接结果集几包括连接表的匹配行,也包括左连接表的所有行。
例:SELECT a.a, a.b, a.c, b.c, b.d, b.f FROM a LEFT OUT JOIN b ON a.a = b.c
右连接RIGHT (OUTER) JOIN
右(外)连接结果集几包括连接表的匹配行,也包括右连接表的所有行。 - 内连接
INNER JOIN
, 两个表的交叉部分 - 全外连接
FULL/CROSS OUTER JOIN
不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。 - 分组
GROUP BY
一张表, 一旦分组 完成后,查询后只能得到组相关的信息。
组相关的信息(统计信息)count,sum,max,min,avg 分组的标准;
在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据;
在selecte统计函数中的字段,不能和普通的字段放在一起; - 分离数据库
sp_detach_db
- 附加数据库
sp_attach_db table_name
附加需要完整的路径 - 数据库重命名
sp_renamedb 'old_name', 'new_name'
提升
- 完全复制表
复制表结构CREATE TABLE table2 LIKE table1
导入数据INSERT INTO table2 SELECT * FROM table1
复制表结构及数据到新表CREATE TABLE new_table SELECT * FROM old_table
- 复制旧表的数据到新表
两个表结构一样INSERT INTO new_table SELECT * FROM old_table
两个表结构不一样INSERT INTO new_table (col1, col2,...) SELECT col1, col2,... FROM old_table
- 子查询
WHERE型子查询:把内层查询的结果作为外层查询的比较条件,IN
和= ANY
等价
SELECT col1, col2, ... FROM table1 WHERE col1=(SELECT max(col1) FROM table1)
SELECT col1, col2, ... FROM able1 WHERE col1 IN (SELECT MAX(col1) GROUP BY co2)
FROM型子查询:把内层的查询结果当成临时表,供外层SQL再次查询。查询结果集可以当成表看待。临时表要使用一个别名。
SELECT * FROM (SELECT a,b,c FROM table) AS T where T.a > 1;
EXISTS型子查询:例如,两张关联表,删除主表中已经在副表中没有的信息
DELETE FROM table1 WHERE NOT EXISTS ( SELECT * FROM table2 WHERE table1.field1=table2.field1 )