SQL语法大全,快码住收藏!!!

基础

1、创建数据库:CREATE DATABASE database-name
2、删除数据库:drop database dbname
3、备份:sql server— 创建 备份数据的 device
USE master
EXEC sp_addumpdevice ‘disk’, ‘testBack’, ‘c:\mssql7backup\MyNwind_1.dat’— 开始 备份BACKUP DATABASE pubs TO testBack
4、创建新表:
create table tabname(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 tabname

6、说明:增加一个列Alter table tabname add column col type
注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。

7、说明:
添加主键:Alter table tabname add primary key(col) 说明:
删除主键:Alter table tabname drop primary key(col)

8、说明:
创建索引:create [unique] index idxname on tabname(col….)
删除索引:drop index idxname
注:索引是不可更改的,想更改必须删除重新建。

9、说明:
创建视图:create view viewname as select statement
删除视图:drop view viewname

10、说明:几个简单的基本的sql语句选择:
select * from table1 where 范围

  • 插入insert into table1(field1,field2)values(value1,value2)
  • 删除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

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: 左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。 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: 全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。

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

13、对数据库进行操作:

  • 分离数据库sp_detach_db;
  • 附加数据库sp_attach_db
    后接表明,附加需要完整的路径名

14.如何修改数据库的名称:
sp_renamedb 'old_name', 'new_name'

二、提升

1、复制表(只复制结构,源表名:a 新表名:b) (Access可用)
法一:select * into b from a where 1<>1(仅用于SQlServer)
法二:select top 0 * into b from a

2、拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
insert into b(a, b, c) select d,e,f from b;

3、跨数据库之间表的拷贝:(具体数据使用绝对路径) (Access可用)
insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件
例子:…from b in ‘“&Server.MapPath(”.“)&”\data.mdb" &"’ where…

4、子查询:(表名1:a 表名2:b)
select a,b,c from a where a IN (select d from b )
或者: select a,b,c from a where a IN (1,2,3)

5、显示文章、提交人和最后回复时间
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

6、外连接查询(表名1:a 表名2:b)
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

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

8、between的用法,between限制查询数据范围时包括了边界值,not between不包括
select * from table1 where time between time1 and time2
select a,b,c, from table1 where a not between 数值1 and 数值2

9、in 的使用方法:
select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)

10、两张关联表,删除主表中已经在副表中没有的信息
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )

11、四表联查问题:
select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....

12、日程安排提前五分钟提醒 SQL:
select * from 日程安排 where datediff('minute',f开始时间,getdate())>5

13、一条sql 语句搞定数据库分页
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段
具体实现:关于数据库分页:

declare @start int,@end int@sql  nvarchar(600)set @sql=’select top’+str(@end-@start+1)+’+from T where rid not in(select top’+str(@str-1)+’Rid from T where Rid>-1)exec sp_executesql @sql

注意:在top后不能直接跟一个变量,所以在实际应用中只有这样的进行特殊的处理。Rid为一个标识列,如果top后还有具体的字段,这样做是非常有好处的。因为这样可以避免 top的字段如果是逻辑索引的,查询的结果后实际表中的不一致(逻辑索引中的数据有可能和数据表中的不一致,而查询时如果处在索引则首先查询索引)

14、前10条记录
select top 10 * form table1 where 范围

15、选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)

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

17、随机取出10条数据
select top 10 * from tablename order by newid()

18、说明:随机选择记录
select newid()

19、删除重复记录

  1. delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
  2. select distinct * into temp from tablename delete from tablename insert into tablename select * from temp
    评价:这种操作牵连大量的数据的移动,这种做法不适合大容量但数据操作
    3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段
alter table tablename
--添加一个自增列
add  column_b int identity(1,1)delete from tablename where column_b not in(
select max(column_b) from tablename group by column1,column2,...)
alter table tablename drop column column_b

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

21、列出表里的所有的列名
select name from syscolumns where id=object_id('TableName')

22、列示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
显示结果:type vender pcs
电脑 A 1
电脑 A 1
光盘 B 2
光盘 A 2
手机 B 3
手机 C 3

23、初始化表
table1TRUNCATE TABLE table1

24、选择从10到15的记录
select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc

三、技巧

1、1=1,1=2的使用,在SQL语句组合时用的较多
“where 1=1” 是表示选择全部 “where 1=2”全部不选,
如:

if @strWhere !='' 
begin
set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + @strWhere
end
else 
begin
set @strSQL = 'select count(*) as Total from [' + @tblName + ']' 
end

我们可以直接写成
set @strSQL = 'select count(*) as Total from [' + @tblName + '] where 1=1 安定 '+ @strWhere

2、收缩数据库–重建索引
DBCC REINDEX
DBCC INDEXDEFRAG
–收缩数据和日志
DBCC SHRINKDB
DBCC SHRINKFILE

3、压缩数据库
dbcc shrinkdatabase(dbname)

4、转移数据库给新用户以已存在用户权限
exec sp_change_users_login 'update_one','newname','oldname'go

5、检查备份集
RESTORE VERIFYONLY from disk='E:\dvbbs.bak'

6、修复数据库

ALTER DATABASE [dvbbs] SET SINGLE_USER
GO
DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK
GO
ALTER DATABASE [dvbbs] SET MULTI_USER
GO

7、更改某个表
exec sp_changeobjectowner 'tablename','dbo'

8、SQL SERVER中直接循环写入数据

declare @i int
set @i=1
while @i<30
begin
insert into test (userid) values(@i)
set @i=@i+1
end

数据开发-经典

1.按姓氏笔画排序:

Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as //从少到多

2.数据库加密:

select encrypt('原始密码')
select pwdencrypt('原始密码')
select pwdcompare('原始密码','加密后密码') = 1--相同;否则不相同 encrypt('原始密码')
select pwdencrypt('原始密码')
select pwdcompare('原始密码','加密后密码') = 1--相同;否则不相同

3.取回表中字段:

declare @list varchar(1000),
@sql nvarchar(1000)
select @list=@list+','+b.name from sysobjects a,syscolumns b where a.id=b.id and a.name='表A'
set @sql='select '+right(@list,len(@list)-1)+' from 表A'
exec (@sql)

4.查看硬盘分区:

EXEC master..xp_fixeddrives

5.比较A,B表是否相等:

if (select checksum_agg(binary_checksum(*)) from A)=
(select checksum_agg(binary_checksum(*)) from B)
print '相等'
else
print '不相等'

6.杀掉所有的事件探察器进程:

DECLARE hcforeach CURSOR GLOBAL FOR SELECT 'kill '+RTRIM(spid) FROM master.dbo.sysprocesses
WHERE program_name IN('SQL profiler',N'SQL 事件探查器')
EXEC sp_msforeach_worker '?'

7.记录搜索:

开头到N条记录Select Top N * From 表


N到M条记录(要有主索引ID)

Select Top M-N * From 表 Where ID in (Select Top M ID From 表) Order by ID Desc

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

案例
例1:一张表有一万多条记录,表的第一个字段 RecID 是自增长字段, 写一个SQL语句, 找出表的第31到第40个记录。

select top 10 recid from A where recid not in(select top 30 recid from A)

分析:如果这样写会产生某些问题,如果recid在表中存在逻辑索引。

select top 10 recid from A where……是从索引中查找,而后面的select top 30 recid from A则在数据表中查找,这样由于索引中的顺序有可能和数据表中的不一致,这样就导致查询到的不是本来的欲得到的数据。

解决方案

1,用order by select top 30 recid from A order by ricid 如果该字段不是自增长,就会出现问题

2,在那个子查询中也加条件:select top 30 recid from A where recid>-1

例2:查询表中的最后以条记录,并不知道这个表共有多少数据,以及表结构。

set @s = 'select top 1 * from T where pid not in (select top ' + str(@count-1) + ' pid from T)'print @s exec sp_executesql @s

9:获取当前数据库中的所有用户表

select Name from sysobjects where xtype='u' and status>=0

10:获取某一个表的所有字段

select name from syscolumns where id=object_id('表名')

select name from syscolumns where id in (select id from sysobjects where type = 'u' and name = '表名')

两种方式的效果相同

11:查看与某一个表相关的视图、存储过程、函数

select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%'

12:查看当前数据库中所有存储过程

select name as 存储过程名称 from sysobjects where xtype='P'

13:查询用户创建的所有数据库

select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name='sa')
或者
select dbid, name AS DB_NAME from master..sysdatabases where sid <> 0x01

14:查询某一个表的字段和数据类型

select column_name,data_type from information_schema.columns where table_name = '表名'

15:不同服务器数据库之间的数据操作
–创建链接服务器

exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 'exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用户名 ', '密码 '--查询示例select * from ITSV.数据库名.dbo.表名--导入示例select * into 表 from ITSV.数据库名.dbo.表名--以后不再使用时删除链接服务器exec sp_dropserver 'ITSV ', 'droplogins '--连接远程/局域网数据(openrowset/openquery/opendatasource)--1、openrowset--查询示例select * from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)--生成本地表select * into 表 from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)--把本地表导入远程表insert openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)select *from 本地表--更新本地表update bset b.列A=a.列Afrom openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)as a inner join 本地表 bon a.column1=b.column1--openquery用法需要创建一个连接--首先创建一个连接创建链接服务器exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 '--查询select * FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')--把本地表导入远程表insert openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')select * from 本地表--更新本地表update b set b.列B=a.列B FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ') as a inner join 本地表 b on a.列A=b.列A--3、opendatasource/openrowsetSELECT   * FROM   opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ' ).test.dbo.roy_ta--把本地表导入远程表insert opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ').数据库.dbo.表名select * from 本地表

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/569096.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 解决print数组/矩阵无法完整输出的问题

问题描述&#xff1a; 当数组/矩阵过大则只会显示其中一部分&#xff0c;中间则会自动用省略号代替&#xff0c;而我们想要去查看数组/矩阵的具体内容时&#xff0c;则需要将省略号代替的部分展示出来&#xff1a; 解决方法&#xff1a; 直接在import numpy 加上下面一句代码即…

SpringBoot学习笔记2

九&#xff1a;创建父工程 注意&#xff1a;打包方式选择为pom 将创建SpringBoot常用的依赖和插件放在父工程的pom.xml,如下&#xff1a; 1 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" …

Windows下更改默认的python环境

Windows下更改默认的python环境1.查找python所在的路径2.高级系统设置3.编辑path变量1.查找python所在的路径 打开电脑中的cmd&#xff0c;输入where python&#xff0c;得到电脑中所有python环境的路径 2.高级系统设置 此电脑——>属性——>高级系统设置——>环境…

杭电2051

此题思路参照杭电2031&#xff0c;相比之下此题更简单了&#xff01;呵呵&#xff01;&#xff08;知道注意求几进制就用10进制数除以几把所求的余数存到一个数组里就行了&#xff01;同时也要记下整除后的结果&#xff0c;用整除后的结果接着求余&#xff01;&#xff01; 直到…

SilverLight Test

一个示例程序,来自 http://silverlight.live.com/ 转载于:https://www.cnblogs.com/Glen/archive/2007/08/21/863763.html

浅谈数据库三大范式的理解

首先声明一下&#xff0c;我的这个回答是个人工作总结&#xff0c;不适合考试答题昂。 欢迎关注我的博客。 前言&#xff1a;数据库设计其实不仅仅限制于三个范式&#xff0c;往下其实还有很多种&#xff0c;但对于大多数人来说&#xff0c;你又不搞科研&#xff0c;不造飞机大…

理解Silverlight的路径填充规则

这个可以扩展到矢量图中路径的填充规则&#xff0c;因为所有矢量图都采用这个规则来填充封闭路径的内部&#xff0c;在这里只以Silverlight为例。 在网上找了很久关于填充规则的介绍&#xff0c;经过了几天的阅读和自己理解还有亲自尝试&#xff0c;现在终于能说出过所以然来了…

PowerDesigner

PowerDesigner简介   PowerDesigner是Sybase公司的CASE工具集&#xff0c;使用它可以方便地对管理信息系统进行分析设计&#xff0c;它几乎包括了数据库模型设计的全过程。利用PowerDesigner可以制作数据流程图、概念数据模型、物理数据模型&#xff0c;可以生成多种客户端开…

call,apply,bind的区别

1转载于:https://www.cnblogs.com/YangJonathan/p/11223641.html

Fotolog对memcached的应用

Fotolog在21台server上部署了51个memcached实例&#xff0c;使用了175G&#xff0c;剩余254G。他们对待缓存的策略是&#xff1a;缓存所有在查询、获取和计算上慢的东西。 几种应用类型: Non-Deterministic Cache&#xff1a; 最常用的存储需要read的数据。平均每个memcached实…

Windows Azure 将正式更名为 Microsoft Azure

微软的公共云平台在2014年4月3日正式从Windows Azure 更名为Microsoft Azure。 windows azure是二级产品名&#xff0c;microsoft azure是一级产品名&#xff0c;和microsoft office、microsoft windows同级别。相当于是把云从windows系里剥离出来。所以微软现在的产品线应该是…

引入外部js如何通知页面其编码格式

快来java1234 吧 js中如何设置编码格式 <script type"text/javascript" src"xxx" charset"utf-8"></script> 只能使用在引入外部js文件时&#xff0c;可以声明编码格式&#xff0c;对行内脚本无效&#xff1b; 转载于:https://www.c…

java——Runtime

一、Runtime类&#xff1a;代表着Java程序的运行时环境&#xff1b; 每个Java程序都有一个Runtime实例&#xff0c;该类会被自动创建&#xff1b; 我们可以通过Runtime.getRuntime() 方法来获取当前程序的Runtime实例&#xff1b; 二、核心方法&#xff1a; &#xff08;1&…

基础测试

public class Test1 { /** * 第1题&#xff1a;从键盘接受一个数字&#xff0c;列出该数字的中文表示格式&#xff0c; 例如&#xff1a;键盘输入123&#xff0c;打印出一二三&#xff1b;键盘输入3103&#xff0c;打印出三一零三。 * * param args */ …

Jquery复习(七)之尺寸

jQuery 尺寸 方法 jQuery 提供多个处理尺寸的重要方法&#xff1a; width() height() innerWidth() innerHeight() outerWidth() outerHeight() jQuery 尺寸 jQuery width() 和 height() 方法 width() 方法设置或返回元素的宽度&#xff08;不包括内边距、边框或外边距&am…

C++学习_第1章_从C到C++

一、引用的概念和应用 1.引用的概念 下面写法定义了一个引用&#xff0c;并将其初始化为引用某个变量。类型名 & 引用名 某变量名;int n 4;int & r n; // r引用了n&#xff0c;r的类型是 int & 某个变量的引用&#xff0c;等价于这个变量&#xff0c;相当于该变…

更改默认安装位置到其他盘

1 同时按住Win R键&#xff0c;出现如下界面&#xff0c;在输入框中输入regedit&#xff0c;点击确定。 2 此时会进入到注册表编辑器界面&#xff0c;按如下路径选择&#xff1a;计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion 将所有默认路径&#xf…

jspservlet入门小项目--留言管理

一&#xff0c;jsp,servlet基础知识 1&#xff0c;jsp有一些内置对象&#xff0c;常用的有&#xff1a; out(PrintWriter),request(HttpServletRequest),response(HttpServletresponse),session(HttpSession),application(ServletContext) 注意&#xff1a;建议html和java代码分…

如何启用SQL Server 2008的FILESTREAM特性

如何启用SQL Server 2008的FILESTREAM特性 今天安装SQL Server 2008的时候没有注意&#xff0c;忘记了启用FILESTREAM特性&#xff0c;因为默认情况下FILESTREAM是禁用的。安装完成后&#xff0c;再导入一个.bak的备份数据库时提示FILESTREAM feature is disabled&#xff0c;到…

ARM Linux.2.6.34内核移植

ARM-LINUX-GCC版本4.3.2.以安装在/usr/local/arm/4.3.2下.第一步:修改linux-2.6.34/Makefile文件,在makefile中找到以下两条信息并做修改ARCH &#xff1f; arm CROSS_COMPILE &#xff1f;/usr/local/arm/4.3.2/bin/arm-linux-第二步:修改平台输入时钟修改平台的时钟频率&…