---基础知识
if exists(select * from sysdatabases where name='Exam') ---判断数据库中是否存在该数据库
drop database Exam
go

Create database Exam --创建数据库
on primary
(
name='Exam_data',
filename='D:\Exam_data.mdf',
size=10mb,
maxsize=20mb,
filegrowth=5%
)
log on
(
name='Exam_log',
filename='D:\Exam_log.ldf',
size=10mb,
maxsize=20mb,
filegrowth=5%
)
go

drop database Exam
go

--exec sp_addumpdevice 'disk','mytest','D:\mssql8backup\Mybeifen.dat'
--BACKUP DATABASE Exam TO mytest

use Exam
create table book( ----创建表
Id int primary key identity(1,1),
Bname nvarchar(50) not null
)
go

select * into bookNew from book ---创建一个跟book结构一样,数据一样的表
go

select * into bookNew1 from book where 1=2 ---创建一个跟book结构一样,数据不复制
go

alter table book add remark nvarchar(max) ---给表book添加新的列remark
go

alter table book drop column remark ---删除表book中的remark列
go

alter table book ---修改表book列remark的数据类型
alter column remark nvarchar(50)
go

alter table booknew add primary key (Id) --添加主键,把Id列作为主键列
go

--删除表主键
exec sp_helpconstraint booknew
go
alter table booknew
DROP CONSTRAINT PK__bookNew__3214EC070519C6AF
go

create unique NONCLUSTERED index idxname on booknew(Id) ---创建非聚集唯一索引
go

drop index booknew.idxname --删除索引
go

exec sp_rename 'book.remark','remak','column/object/或者不写,因为默认为object' --重命名book表中的列Remark的名字,第一个参数要加book.rmark,那是因为Exam里面不止只有一个表,也有可能其他表中会有相同的列,所以,必须得指定
go

exec sp_rename 'MyExam','book','object' ---重命名表book为MyExam,第三个参数可以不写,会默认为对象类型
go

exec sp_help book ---显示表的一些基本情况
go

create view bookview ---创建视图
as
select * from book
go

select * from bookview ---查询视图,就像查询表一样

drop view bookview ---删除视图
go

选择:select * from table1 where 范围
插入:insert into table1(field1,field2) values(value1,value2) ---自定义增长Id不需要插入数据
删除:delete from table1 where 范围
更新:update table1 set field1=value1 where 范围
查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料!
排序:select * from table1 order by field1,field2 [desc]
总数:select count as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1
go

---说明:几个高级查询运算词
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),不消除重复行。
注:使用运算词的几个查询结果行必须是一致的。

---说明:使用外连接
A、left (outer) join:
左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
B:right (outer) join:
右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
C:full/cross (outer) join:
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。

---分组:Group by:
一张表,一旦分组 完成后,查询后只能得到组相关的信息。
组相关的信息:(统计信息) count,sum,max,min,avg 分组的标准)
在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据
在selecte统计函数中的字段,不能和普通的字段放在一起;

----提升

--复制表
方法一:
select * into book1 from book where 1<>1 ---1不等于1,说明只复制表结构,不复制表数据
方法二:
select top 0 * into book3 from bookNew ---复制booknew到book3表中, top 0表示不复制数据到表中,top 1复制一行数据到表中,以此类推

--拷贝表
insert into test.dbo.book2 select * from Exam.dbo.booknew2 ---把数据库Exam中的booknew2中的数据拷贝到数据库test的book2中,两张表的结构必须一样
select * into test.dbo.book3 from Exam.dbo.booknew2 ---数据库test中的book3是新建的,在之前不能存在
insert into test.dbo.book3 select distinct * from Exam.dbo.booknew2 ---不复制表Exam.dbo.booknew2中的重复记录

--在线视图查询
select * from (SELECT a,b,c FROM a) T where t.a > 1;

--说明:日程安排提前五分钟提醒
--datediff的第一个参数interval 参数可以有以下值:
设置 描述
yyyy 年
q 季度
m 月
y 一年的日数
d 日
w 一周的日数
ww 周
h 小时
n 分钟
s 秒
select * from 日程安排 where datediff(n,开始时间,getdate())>5

---分页
方法一:如果要排序的话在子查询中排序和筛选条件
select top pageNum(页面显示条数) * from xy_role where id not in
(select top (当前页-1)*PageNum id from xy_role)

方法二:row_number() 2005版本以上的数据库才有此函数

select top 5 * from --top 5 ==> top Pagesize
(select *,row_number() over (order by id desc) as ro from book) as a   ---order by id desc注意若是升序效果就是相反的
where a.ro>10 order by id desc ---a.ro>10 ==> a.ro > PageIndex*PageSize 结果看出是第三页的值10/5=2 ,页数从0开始

--说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息
--(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)

select BName,sellcout,category from book ta
where sellcout=(select max(sellcout) from book tb where tb.category=ta.category)

---说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
(select a from tableA ) except (select a from tableB) except (select a from tableC)

---说明:随机取出10条数据
select top 10 * from book order by newid()

--说明:随机选择记录
select newid() ---例如7333FBAD-426C-43F5-8853-A6667ACC5F01

--列出数据库里所有的表名
select name from sysobjects where type='U' --- U代表用户

---列示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 type

---语法
-- CASE
-- WHEN 条件1 THEN 结果1
-- WHEN 条件2 THEN 结果2
-- WHEN 条件3 THEN 结果3
-- WHEN 条件4 THEN 结果4
-- .........
-- WHEN 条件N THEN 结果N
-- ELSE 结果X
--END

---根据销售数量,统计每个影片类型的的销售数量

select SUM(sellcout) as 销售数量, CASE category
WHEN '1' THEN '战争片'
WHEN '2' THEN '恐怖片'
WHEN '3' THEN '喜剧片'

ELSE '其他' END as 类型
FROM book
GROUP BY CASE category
WHEN '1' THEN '战争片'
WHEN '2' THEN '恐怖片'
WHEN '3' THEN '喜剧片'
ELSE '其他' END

-----技巧
---记录搜索:
开头到N条记录
Select Top N * From 表

N到M条记录(要有主索引ID)
Select Top M-N * From 表 Where ID in (Select Top M ID From 表 order by ID) Order by ID Desc

例子:---选择从5到10的记录    select top 5 * from (select top 10 * from book order by id) b order by id desc

Select Top M-N * From (Select Top M * From 表 order by id) a order by id desc

例子:---选择从5到10的记录     select top 5 * from book where id in(select top 10 id from book order by Id) order by id desc

N到结尾记录
Select Top N * From 表 Order by ID Desc

适用于SQl数据的Sql语句的更多相关文章

  1. MS SQL数据批量备份还原(适用于MS SQL 2005+)

    原文:MS SQL数据批量备份还原(适用于MS SQL 2005+) 我们知道通过Sql代理,可以实现数据库的定时备份功能:当数据库里的数据库很多时,备份一个数据库需要建立对应的定时作业,相对来说比较 ...

  2. 不同数据库,查询前n条数据的SQL语句

    不同的数据库,支持的SQL语法略有不同,以下是不同数据库查询前n条数据的SQl语句 SQL Server(MSSQL) SELECT TOP n * FROM table_name ORACLE SE ...

  3. 快速将一个表的数据生成SQL插入语句

    将一个表中的数据生成SQL插入语句,方便系统快速初始化,在数据库中执行创建以下过程就可以了. ) Drop Procedure GenerateData go CREATE PROCEDURE Gen ...

  4. sql插入多条数据的sql语句

    sql插入多条数据的sql语句 有三种方法:1.InSert Into <表名>(列名)Select <列名>From <源表名>如:INSERT INTO Ton ...

  5. 转: 从Mysql某一表中随机读取n条数据的SQL查询语句

    若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1)).例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机 ...

  6. 读取数据表中第m条到第n条的数据,SQL语句怎么写?

    原文:读取数据表中第m条到第n条的数据,SQL语句怎么写? 对于MySQL或者Oracle来说,如果实现从Table 表中取出第 m 条到第 n 条的记录操作,我们需要TOP函数(不是所有的数据库都支 ...

  7. 如何将sqlserver表中的数据导出sql语句或生成insert into语句 [转]

    输入表名,生成插入语句 drop proc proc_insert //如果存在就删除 go create proc proc_insert (@tablename varchar(256)) as ...

  8. sql server 数据库导出表里所有数据成insert 语句

    有时候,我们想把数据库的某张表里的所有数据导入到另外一个数据库或另外一台计算机上的数据库,对于sql server有这样的一种方法 下面我以sql server 2008 R2,数据库是Northwi ...

  9. 【转载】SQL Server - 使用 Merge 语句实现表数据之间的对比同步

    原文地址:SQL Server - 使用 Merge 语句实现表数据之间的对比同步 表数据之间的同步有很多种实现方式,比如删除然后重新 INSERT,或者写一些其它的分支条件判断再加以 INSERT ...

随机推荐

  1. java int和Integer的区别

    今天偶然和同学讨论到int和Integer的区别是,发现自己对这个问题了解的并不是很清楚,而且有些概念还是错的,所以在这对int和Integer的区别做一个总结. int与integer的区别从大的方 ...

  2. Android 系统编译

    最近研究了下Android 的编译系统,下面结合编译我们自己的产品 mobot 来对整个编译系统进行必要的介绍,方便大家今 后对默认编译的修改. 先列出几个觉得重要的Make 文件: build/bu ...

  3. HDU1865--More is better(统计并查集的秩(元素个数))

    More is better Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 327680/102400 K (Java/Others) ...

  4. lucene的两种分页操作

    基于lucene的分页有两种: lucene3.5之前分页提供的方式为再查询方式(每次查询全部记录,然后取其中部分记录,这种方式用的最多),lucene官方的解释:由于我们的速度足够快.处理海量数据时 ...

  5. 转:LR的响应时间与使用IE所感受时间不一致的讨论

    在做性能测试时,有时碰到这样一种情况,使用性能工具LR测试出来的响应时间比实际使用IE感受到的时间要长,例如,实际使用IE打开一个系统时只需要1~2秒,而使用LR跑一个用户所得出的结果可能是8秒.10 ...

  6. C++:string类的使用

    类 <string> std::string String类的定义 , 其也是个模板类 typedef basic_string<char> string; String cl ...

  7. opencv mat 转灰度图

    Imgproc.cvtColor(sshotmat, sshotmatgray,  Imgproc.COLOR_BGR2GRAY); 更多参数看 public class Imgproc { priv ...

  8. protobuf与json互相转换

    Java http://code.google.com/p/protobuf-java-format/ maven <dependency> <groupId>com.goog ...

  9. python插入mysql新值

    #Server Connection to MySQL: import MySQLdb conn = MySQLdb.connect(host= "localhost", user ...

  10. 单片AT89C2051 + SD卡 + 3310LCD = 音乐播放器

    http://www.amobbs.com/thread-4503884-1-1.html 这个小玩意,采用 ATMEL 的传统51MCU作主控制芯片,加上SD卡和显示屏,就可以作简单的音乐播放器了, ...