适用于SQl数据的Sql语句
---基础知识
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语句的更多相关文章
- MS SQL数据批量备份还原(适用于MS SQL 2005+)
原文:MS SQL数据批量备份还原(适用于MS SQL 2005+) 我们知道通过Sql代理,可以实现数据库的定时备份功能:当数据库里的数据库很多时,备份一个数据库需要建立对应的定时作业,相对来说比较 ...
- 不同数据库,查询前n条数据的SQL语句
不同的数据库,支持的SQL语法略有不同,以下是不同数据库查询前n条数据的SQl语句 SQL Server(MSSQL) SELECT TOP n * FROM table_name ORACLE SE ...
- 快速将一个表的数据生成SQL插入语句
将一个表中的数据生成SQL插入语句,方便系统快速初始化,在数据库中执行创建以下过程就可以了. ) Drop Procedure GenerateData go CREATE PROCEDURE Gen ...
- sql插入多条数据的sql语句
sql插入多条数据的sql语句 有三种方法:1.InSert Into <表名>(列名)Select <列名>From <源表名>如:INSERT INTO Ton ...
- 转: 从Mysql某一表中随机读取n条数据的SQL查询语句
若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1)).例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机 ...
- 读取数据表中第m条到第n条的数据,SQL语句怎么写?
原文:读取数据表中第m条到第n条的数据,SQL语句怎么写? 对于MySQL或者Oracle来说,如果实现从Table 表中取出第 m 条到第 n 条的记录操作,我们需要TOP函数(不是所有的数据库都支 ...
- 如何将sqlserver表中的数据导出sql语句或生成insert into语句 [转]
输入表名,生成插入语句 drop proc proc_insert //如果存在就删除 go create proc proc_insert (@tablename varchar(256)) as ...
- sql server 数据库导出表里所有数据成insert 语句
有时候,我们想把数据库的某张表里的所有数据导入到另外一个数据库或另外一台计算机上的数据库,对于sql server有这样的一种方法 下面我以sql server 2008 R2,数据库是Northwi ...
- 【转载】SQL Server - 使用 Merge 语句实现表数据之间的对比同步
原文地址:SQL Server - 使用 Merge 语句实现表数据之间的对比同步 表数据之间的同步有很多种实现方式,比如删除然后重新 INSERT,或者写一些其它的分支条件判断再加以 INSERT ...
随机推荐
- linux 命令--sed
简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处 ...
- JS-DOM操作应用高级(三)
appendChild 1.先把元素从原有的父级上删除 2.添加到新的父级 <title>无标题文档</title> <script> window.on ...
- Linux学习 -- Shell编程 -- 字符截取命令
cut字段提取命令 cut [选项] 文件名 -f 列号: -d 分隔符: 局限性:空格为分隔符时不适用 printf命令 printf '输出类型输出格式' 输出内容 %s, %i, %f \a, ...
- ab测试 uwsgi遇到的问题
1 请求并发数目较大时,接收到的数目小于发送的数目 1.1 描述:uwsgi正常返回302跳转 ab -n 5000 -c 250 -g test.log "192.168.50.20:90 ...
- usb调试
修改文件:/home/mxy/code/v1/kernel-3.10/drivers/power/mediatek/battery_common.c //bool AutoDebug=true;//x ...
- public private proteccted区别
public公共,加上这个修饰的类或属性,可以在同一个包或者别的包里面访问 private私有的,加上这个修饰的类或属性,只能在同类里访问,同包和别的包不能访问 protected保护,加上这个修饰的 ...
- iOS启动屏 ➕ 闪屏的方法
转载自:http://www.starming.com/index.php?v=index&view=21 在- (BOOL)application:(UIApplication *)appl ...
- JAVA Timer定时器使用方法(一)
设置定时任务很简单,用Timer类就搞定了. 一.延时执行首先,我们定义一个类,给它取个名字叫TimeTask,我们的定时任务,就在这个类的main函数里执行. 代码如下:package test;i ...
- PhpStorm11.0 配置在浏览器中打开文件
转自:http://www.bubuko.com/infodetail-1420190.html 点击File-Settings-Deployment . 点+按钮增加服务器 Mapping 设置工程 ...
- 简单三段式状态机实验3-Sequence Detect(序列检测)
1.序列检测器的逻辑功能描述:序列检测指的就是将一个指定的序列从数字码流中识别出来.本例中,我们将设计一个"10010”序列的检测器.设x_in为数字码流输入,z_out为检出标记输出,高电 ...