---基础知识
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. AutoTile 自动拼接(三) 学习与实践

    今天把 图像数据保存完善了一下.天冷,没打多少字,见谅. 接着昨天说的,首先我们打开u3d,做一个空物体gameobject,然后做几个sprite,如下图所示 上面的sprite 排成四个 正方形. ...

  2. JS定时器的使用--延时提示框

    <title>无标题文档</title> <style> div{float:left;margin:10px;} #div1{width:50px; height ...

  3. java 文件字节输入流

    Example10_4.java import java.io.*; public class Example10_4 { public static void main(String args[]) ...

  4. Git学习 -- 简介

    Git是什么? 是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. 特点 分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本 ...

  5. C++:预处理指令

    Preprocessor directives 预处理器指令 预处理器指令是指那些包含在我们代码中的预处理器语句行,这些预处理器语句不是真正的代码语句,但是他们指导程序如何进行编译.这些语句总是以 ‘ ...

  6. .NET 4.0里异常处理的新机制

    非原创,转载自:   http://www.cnblogs.com/killmyday/archive/2010/09/05/1818533.html .NET里不能捕捉(catch)到一些异常了,而 ...

  7. Json.net对数据的解析

    在官网下载Json.net文件后,解压完将Net20下面的DLL复制到Assets目录下. using UnityEngine; using System.Collections; using New ...

  8. ecshop后台增加模块菜单项详细教程(图文)

    有的时候我们会在后台增加新的功能,菜单项是一个程序的入口,是必不可少的,如何在后台增加菜单项呢,大家可以参考下面的教程:   例如:想在后台左侧的菜单栏的"促销管理"下添加一个&q ...

  9. Codeforces Round #366 (Div. 2) C. Thor (模拟)

    C. Thor time limit per test 2 seconds memory limit per test 256 megabytes input standard input outpu ...

  10. C#获取客服端ip和用户名

    . 在asp.Net中专用属性: 获取服务器电脑名:page.server.manchinename 获取用户信息:page.user 获取客户端电脑名:page.request.userhostna ...