Microsoft SQL Server数据库知识点总结(一)
- 前言
- 常见SQL分类
- 常用基础语句
- 1、创建数据库
- 2、删除数据库
- 3、备份数据库
- 4、创建新表
- 5、删除表
- 6、增加删除列
- 7、添加删除主键
- 8、创建删除索引
- 9、创建删除视图
- 10、几个简单的SQL语句
- 11、几个高级查询运算词
- 12、使用外联接
- 经典SQL语句汇总
- 1、复制表(只复制结构,源表名:a 新表名:b)
- 2、拷贝表(拷贝数据,原表名:a 目标表名:b)
- 3、跨数据库之间表的拷贝(具体数据使用对决路径)
- 4、子查询
- 5、外联接查询
- 6、在线视图查询
- 7、between的用法,between限制查询数据范围时包括了边界值,not between不包括
- 8、in的使用方法
- 9、两张关联表,删除主表中已经在副表中没有的信息
- 10、四表联查问题
- 11、日程安排提前五分钟提醒
- 12、一条SQL语句搞定数据库分页
- 13、取前10条记录
- 14、选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品伏牛溪,按科目成绩排名,等等)
- 15、包括所有在TableA中但不在TableB和TableC中的行并消除所有重复行而派生出一个结果表
- 16、随机取出10条数据
- 17、随机选择记录
- 18、删除重复记录
- 19、列出数据库里所有的表名
- 20、列出表里所有的字段
- 21、列出type、vender、pcs字段,以type字段排列,case可以方便的实现多重选择,类似select 中的case。
- 22、截断(初始化)表table1
- 23、选择从10到15的记录
前言
对于数据库的知识,大部分的公司都是很重视的,
常见SQL分类
DDL — 数据定义语言(CREATE、ALTER、DROP、DECLARE)
DML — 数据操作语言(SELECT、INSERT、DELETE、UPDATE)
DCL — 数据控制语言(GRNAT、REVOKE、COMMIT、ROLLBACK)
常用基础语句
1、创建数据库
CREATE DATABASE database_name
2、删除数据库
DROP DATABASE database_name
3、备份数据库
--创建备份数据的device
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssqlbackup\MyDb_1.data'
--开始备份
BACKUP DATABASE mydb TO testBack
4、创建新表
create table tablename(col1 type1 [not null] [primary key], col2 type2 [not null], ...)
根据已有的表创建新表
--A:
create table tab_new like tab_old --使用旧表创建新表
--B:
create table tab_new as select col1, col2, ... from tab_old definition only
5、删除表
drop table tablename
6、增加删除列
--增加列
alter table tablename add column col type
--删除列
alter table tablename drop column col
7、添加删除主键
--添加主键
alter table tablename add primary key(col)
--删除主键
alter table tablename drop primary key(col)
8、创建删除索引
--创建索引
create [unique] index idxname on tablename(col,...)
--删除索引
drop index idxname
注:索引是不可更改的,想更改必须删除重新建
9、创建删除视图
--创建视图
create view viewname as select statement
--删除视图
drop view viewname
10、几个简单的SQL语句
--选择
select * from tablename where condition
--插入
insert into tablename(field1,field2,...) values(value1,value2,...)
--删除
delete from tablename where condition
--更新
update tablename set field1 = value1, field2 = value2, ... where condition
--查找
select * from tablename where field1 like '%value1%' --like的语法很精妙,查资料!
--排序
select * from tablename order by field1,field2, ... [desc]
--总数
select count(*) as totalcount from tablename
--求和
select sum(field1) as sumvalue from tablename
--平均
select avg(field1) as avgvalue from tablename
--最大
select max(field1) as maxvalue from tablename
--最小
select min(field1) as minvalue from tablename
11、几个高级查询运算词
A:UNION 运算符
UNION运算符通过组合其他两个结果表(例如TABLE1和TABLE2)并消去表中任何重复行而派生出一个结果表。当ALL随UNION一起使用时(即UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自TABLE1就是来自TABLE2。
B:EXCEPT运算符
EXCEPT运算符通过包括所有在TABLE1中但不在TABLE2中的行并消除所有重复行而派生出一个结果表。当ALL随EXCEPT一起使用时(EXCEPT ALL),不消除重复行。
C:INTERSECT运算符
INTERSECT运算符通过只包括TABLE1和TABLE2中都有的行并消除所有重复行而派生出一个结果表。当ALL随INTERSECT一起使用时(INTERSECT ALL),不消除重复行。
注:使用运算词的几个查询结果行必须是一致的。
12、使用外联接
A:LEFT OUTER JOIN
左外联接(左联接):结果集既包括联接表的匹配行,也包括左联接表的所有行。
select A.a,A.b,A.c,B.d,B.e,B.f from A LEFT OUTER JOIN B ON A.a = B.d
B:RIGHT OUTER JOIN
右外联接(右联接):结果集既包括联接表的匹配行,也包括右联接表的所有行。
C:FULL OUTER JOIN
全外联接:不仅包括符合联接表的匹配行,还包括两个联接表中的所有记录。
经典SQL语句汇总
1、复制表(只复制结构,源表名:a 新表名:b)
--方法一
select * into b from a where 1<>1
--方法二
select top 0 * into b from a
2、拷贝表(拷贝数据,原表名:a 目标表名:b)
insert into b(col1,col2,col3) select colA,colB,colC from a
3、跨数据库之间表的拷贝(具体数据使用对决路径)
insert into b(col1,col2,col3) select colA,colB,colC from a in '具体数据库' where condition
4、子查询
select col1,col2,col3 from a where a in(select colA from b)
--或者
select col1,col2,col3 from a where a in(1,2,3)
5、外联接查询
select a.col1,a.col2,a.col3,b.colA,b.colB,b.colC from a left outer join b on a.col1 = b.colA
6、在线视图查询
select * from (select col1,col2,col3 from a) T where T.col1 > 1
7、between的用法,between限制查询数据范围时包括了边界值,not between不包括
select * from table1 where time between time1 and time2
select col1,col2,col3 from table1 where col1 not between value1 and
8、in的使用方法
select * from table1 where a [not] in(value1,value2,value3,...)
9、两张关联表,删除主表中已经在副表中没有的信息
delete from table1 where not exists(select * from table2 where table1.field1 = table2.field1)
10、四表联查问题
select * from a left inner join b on a.col1 = b.col2 right inner join c on a.col1 = c.col3 inner join d on a.col1 = d.col4 where ...
11、日程安排提前五分钟提醒
select * from 日程安排 where datediff('minute',f开始时间,getdate()) > 5
12、一条SQL语句搞定数据库分页
select top 10 b.* from (select top 20 主键字段,排序字段 from tablename order by 排序字段 desc) a,tablename b where b.主键字段 = a.主键字段 order by a.排序字段
13、取前10条记录
select top 10 * from tablename where condition
14、选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品伏牛溪,按科目成绩排名,等等)
select a,b,c from tablename ta where a = (select max(a) from tableename tb wheere tb.b = ta.b)
15、包括所有在TableA中但不在TableB和TableC中的行并消除所有重复行而派生出一个结果表
(select a from tableA) except (select a from tableB) except (select a from tableC)
16、随机取出10条数据
select top 10 * from tablenam order by newid()
17、随机选择记录
select newid()
18、删除重复记录
delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
19、列出数据库里所有的表名
select nam from sysobjects where type = 'U'
20、列出表里所有的字段
select name from syscolumns where id = object_id('TableName')
21、列出type、vender、pcs字段,以type字段排列,case可以方便的实现多重选择,类似select 中的case。
select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) from tablename group by typee
显示结果:
type | vender | pcs |
电脑 | A | 1 |
电脑 | A | 1 |
光盘 | B | 2 |
光盘 | A | 2 |
手机 | B | 3 |
手机 | C | 3 |
22、截断(初始化)表table1
truncate table table1
23、选择从10到15的记录
select top 5 * from (select top 15 * from tableename order by id asc) table1 order by id desc