图片 9

分页查询,数据库小结1

 一、基础

一、 子查询的定义
出现在其他语句中的select语句,称为子查询或者内查询,外部的查询语句称为主查询或者外查询,子查询可以包含普通select可以包含的任何语句。
外部查询:select、insert、update、delete、set等,主要就是在select的应用。
二、 子查询的分类
1.按照子查询出现的位置
①select后面:仅仅支持标量子查询
②from后面:支持表子查询
③where或having后面:支持标量子查询、列子查询、行子查询
④exist后:表子查询
2.结果集的行列数
①标量子查询:结果集一行一列
②列子查询:结果一列多行
③行子查询:一行多列
④表子查询:多行多列
3.子查询的特点
①子查放在小括号内
②子查询一般放在条件右侧
③标量子查询,一般搭配着单行操作符使用[> < >= <= =
<>]
④列子查询,一般搭配着多行操作符使用[in、any/some、all]
⑤子查询的执行优先于主查询执行,主查询的条件用到了子查询的结果
3.select后面,仅仅支持标量子查询
图片 1
4.from后面:支持表子查询
其查询结果可以比作一张表,必须给表起别名
图片 2
5.where或having后面
①支持标量子查询、行子查询、列子查询
②in、any、all的理解
in:等于列表中的任意一个,如:a
[10,30,60,80,100],a等于5个数中的任意一个,等价于=any
not in:列表中的任意一个都不等于,如a[10,20,30,40,50] a
不等于其中任何一个,等价于<>all
any/some:和子查询返回的某一个值进行比较,<any表示小于任意一个,等价于<max(字段名)
all:和子查询的所有值进行比较,<all表示小于所有的,等价于<min(字段名)
③标量子查询
图片 3
④列子查询(一行多列)
图片 4
⑤行子查询(一行多列)
图片 5
6.exists后面
语法:exists(完整的查询语句),结果为0或者1
图片 6
三、 分页查询
由于数据量较大,一页显示不完整,需要分页查询。
1.基本语法:
Select 查询列表 from 表1
[连接类型 join 表2
on 连接条件
where 筛选条件
group by 分组字段
having 分组后筛选
order by 排序字段
limit 分组条件]
2.limit特点
①放在查询语句的最后面
②limit [index,] size
index开始的下标,size每页显示的条目数,省略初始位置,默认为0
③公式:limit (page-1)*size,size;page是要显示的页数
图片 7
四、 联合查询(union)
union: 将多条查询语句的结果合并成一个结果
基本语法:查询语句1 union 查询语句2 union 查询语句3…
基本应用:要查询的结果来自于多个表,且多个表没有直接联系,查询的信息内容一致
①多条查询语句字段数目一致
②要求每一列的类型和顺序尽量一致
③union关键之默认去重,union all可以包含重复项
图片 8

原文地址:http://www.maomao365.com/?p=7335

1、创建数据库

 

CREATE DATABASE database-name

摘要:

2、删除数据库

 

 drop database dbname

 
 数据表中,有一列是自动流水号,由于各种操作异常原因(或者插入失败),此列数据会变的不连续,下文将讲述使用sql脚本的方式获取数据表中的数据是否连续的方法分享,如下所示:

3、备份sql server

 

 — 创建 备份数据的 device

   实验环境:sqlserver 2008 R2  

USE master


EXEC sp_addumpdevice ‘disk’,’testBack’,
:\mssql7backup\MyNwind_1.dat’ — 开始 备份

 

BACKUP DATABASE pubs TO testBack

例:获取表test中keyId是否为连续的数据

4、创建新表

 

 create table tabname(col1 type1 [not null] [primary key],col2 type2
[not null],..)

实现思路:

例子:

 

CREATE TABLE tableA(

 1.采用row_number 对表test重新生成流水号

    [id] [int] NOT NULL PRIMARY KEY,

 

    [Name][nvarchar](50) NOT NULL,

 2.采用with as (cte)表达式将重新生成流水号的表放入临时表

    [Age] [int] NOT NULL,)

 

根据已有的表创建新表:

 3.对临时表自身进行
左连接(前一行和后一行互补),然后比较行中两张表的keyId 是否相差1,

A:create table tab_new like tab_old (使用旧表创建新表SQL
server2008不可以)

 

B:create table tab_new as select col1,col2… from tab_old definition
only

   如果相差1,则代表连续数据行,反之为非连续行数据

C: select *into  tableAnew from
tableA(复制表结构和表数据。旧表创建新表无主键。SQL server2008R2可以用
亲测)

create table test 

(keyId int,info varchar(60))

go

insert into test(keyId,info)values

(1,'maomao365.com'),(2,N'连续数判断'),

(4,N'blog教程'),(5,'maomao'),

(8,'test'),(9,'info')

;

with  tmp as 

 (select  ROW_NUMBER() over (order by keyId asc ) as keyIdNew,

* from test  ) 

select a.keyIdNew,

a.keyId,a.info ,

 case  when ISNULL(a.keyId,0)-1 = b.keyId 

              or b.keyId is null  then '连续'

       else '不连续'

 end as '连续标志'

 from tmp a 

left join tmp b on a.keyIdNew = b.keyIdNew+1

;

go

truncate table test 

drop     table test 

D:select * into table3 from tableA where
1=2;(复制表数据,主键复制不过去)

 图片 9

E: insert into table3 select * from tableA where
id=1;(如果表存在,导入数据)

 

F: select * into table5 from tableA where
1<>1;(旧表创建新表,只有表结构)

5、删除新表

drop table tabname

6、增加一个列

Alter table tabname add column col type

发表评论

电子邮件地址不会被公开。 必填项已用*标注

标签:
网站地图xml地图