sql常用语句总结.docx

上传人:b****6 文档编号:7487961 上传时间:2023-01-24 格式:DOCX 页数:22 大小:32.75KB
下载 相关 举报
sql常用语句总结.docx_第1页
第1页 / 共22页
sql常用语句总结.docx_第2页
第2页 / 共22页
sql常用语句总结.docx_第3页
第3页 / 共22页
sql常用语句总结.docx_第4页
第4页 / 共22页
sql常用语句总结.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

sql常用语句总结.docx

《sql常用语句总结.docx》由会员分享,可在线阅读,更多相关《sql常用语句总结.docx(22页珍藏版)》请在冰豆网上搜索。

sql常用语句总结.docx

sql常用语句总结

SQL常用语句总结

MSSQL里没有括号时,运算进行的次序将是先乘后除再模后加减

减号(-)也有两种用途:

1.作为负号使用2.从某一列中减去另一列

andornot

如果一个where子句中同时出现这三个操作符

最先评估not然后是and然后是or

coalesce哪个不为空用哪个

coalesce(i.ProductID,d.ProductID)

@@rowcount

返回上一条语句影响的行数

SQL判断某列中是否包含中文字符或者英文字符

select*from表名where某列like'%[吖-座]%'

select*from表名where某列like'%[a-z]%'

--数据操作,中英文对照

select--从数据库表中检索数据行和列

insert--向数据库表添加新数据行

delete--从数据库表中删除数据行

update--更新数据库表中的数据

--数据定义

createtable--创建一个数据库表

droptable--从数据库中删除表

altertable--修改数据库表结构

createview--创建一个视图

dropview--从数据库中删除视图

createindex--为数据库表创建一个索引

dropindex--从数据库中删除索引

createproceduer--创建一个存储过程

dropproceduer--从数据库中删除存储过程

createtrigger--创建一个触发器

droptrigger--从数据库中删除触发器

createschema--向数据库添加一个新模式

dropschema--从数据库中删除一个模式

createdomain--创建一个数据值域

alterdomain--改变域定义

dropdomain--从数据库中删除一个域

--数据控制

grant--授予用户访问权限

deny--拒绝用户访问

revoke--解除用户访问权限

--事务控制

commit--结束当前事务

rollback--中止当前事务

settransaction--定义当前事务数据访问特征

--程序化SQL

declare--为查询设定游标

explan--为查询描述数据访问计划

open--检索查询结果打开一个游标

fetch--检索一行查询结果

close--关闭游标

prepare--为动态执行准备SQL语句

execute--动态地执行SQL语句

describe--描述准备好的查询

------------------SQL中插入数据的技巧-----------------

插入少量数据时可以用:

insertinto表名(列名1,列名2...)values(值1,值2...)

插入大量数据时可以用:

insertinto要复制的表名select*from源表名

或:

insertinto要复制的表名(列名1,列名2...)select(列名1,列名2...)from源表名

insertselect语句要求你遵循如下规则:

SELECT语句不能从被插入数据的表中选择行

INSERTINTO中的列数必须与SELECT语句返回的列数相等

INSERTINTO中的数据类型要与SELECT语句返回的数据类型相同

insertselect语句的另外一个用处对表进行备份:

select*into临时表名from源表名

----------SQL中truncatetable和delete和drop的区别----------

truncatetable在功能上与不带Where子句的Delete语句相同,二者均删除表中的全部行

但truncatetable比Delete速度快,且使用的系统和事务日志资源少。

Delete语句每次删除一行,并在事务日志中为所删除的每行记录一项。

truncatetable通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。

truncatetable删除表中的所有行,但表结构及其列、约束、索引等保持不变。

新行标识所用的计数值重置为该列的种子。

如果想保留标识计数值,请改用Delete。

对于由FOREIGNKEY约束引用的表,不能使用truncatetable,而应使用不带Where子句的Delete语句。

由于truncatetable不记录在日志中,所以它不能激活触发器。

truncatetable不能用于参与了索引视图的表。

truncate,delete,drop的异同点:

注意:

这里说的delete是指不带where子句的delete语句

相同点:

truncate和不带where子句的delete,以及drop都会删除表内的数据

不同点:

1.truncate和delete只删除数据不删除表的结构(定义)

drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index);

依赖于该表的存储过程/函数将保留,但是变为invalid状态.

2.delete语句是dml,这个操作会放到rollbacksegement中,事务提交之后才生效;

如果有相应的trigger,执行的时候将被触发.

truncate,drop是ddl,操作立即生效,原数据不放到rollbacksegment中,不能回滚.操作不触发trigger.

3.delete语句不影响表所占用的extent,高水线(highw2atermark)保持原位置不动

显然drop语句将表所占用的空间全部释放

truncate语句缺省情况下将空间释放到minextents个extent,除非使用reusestorage;

truncate会将高水线复位(回到最开始).

4.速度,一般来说:

drop>truncate>delete

5.安全性:

小心使用drop和truncate,尤其没有备份的时候.否则哭都来不及

使用上:

想删除部分数据行用delete,注意带上where子句.回滚段要足够大.

想删除表,当然用drop

想保留表而将所有数据删除.如果和事务无关,用truncate即可.

如果和事务有关,或者想触发trigger,还是用delete.

如果是整理表内部的碎片,可以用truncate跟上reusestroage,再重新导入/插入数据

---------------------------好句收藏--------------------------

1.UNION将返回两个查询的结果并去除其中的重复部分

SELECTNAMEFROMSOFTBALL

UNION

SELECTNAMEFROMFOOTBALL

distinct(去掉完全重复的记录)

selectdistinct*from表名

withties(并列显示完全重复的记录)

selectTop10withties*from表名

2.UNIONALL不去掉重复的记录

SELECTNAMEFROMSOFTBALL

UNIONALL

SELECTNAMEFROMFOOTBALL

3.INTERSECT返回两个表中共有的行

SELECT*FROMFOOTBALL

INTERSECT

SELECT*FROMSOFTBALL

4.MINUS(相减)

返回的记录是存在于第一个表中但不存在于第二个表中的记录

SELECT*FROMFOOTBALL

MINUS

SELECT*FROMSOFTBALL

5.in(满足括号里任意一个条件即可)

SELECT*FROMFRIENDSWHERESTATEIN('CA','CO','LA')

6.BEWTEEN(满足区间)

SELECT*FROMPRICEWHEREWHOLESALEBETWEEN0.25AND0.75

7.连接(||)

可以将两个字符串连接起来

SELECT(NAMEa||NAMEb)as新列名FROMFRIENDS

格式化连接

SELECT(NAMEa||','||NAMEb)as新列名FROMFRIENDS--在连接的数据中间加上自定义字符串

8.STARTINGWITH(它的作用与like相似,用之前要测试sql解释器是否支持此语法)

SELECT列名1,列名2...FROM表名WHERE列名STARTINGWITH('Ca')

ORDERBY(排序)

升序:

SELECT*FROM表名ORDERBY列名

降序:

SELECT*FROM表名ORDERBY列名DESC

技巧:

假如你已经知道了你想要进行排序的列是表中的第一列的话,那么你可以用ORDER

BY1来代替输入列的名字

GROUPBY(分组查询)

SELECT列名FROM表名GROUPBY列名

HAVING(对你需要进行分组的数据进行限制)

SELECT列名1,AVG(列名2)FROM表名GROUPBY列名HAVINGAVG(列名3)>66

---表的不等值联合

不等值联合则是在WHERE子句中使用除了等号以外的其它比较运算符

例句:

SELECTO.NAME,O.PARTNUM,P.PARTNUMFROMORDERSasO,PARTasPWHEREO.PARTNUM>P.PARTNUM

---表的自我联合

WHEREF.PARTNUM=S.PARTNUMANDF.DESCRIPTION<>S.DESCRIPTION

------------------------日期函数--------------------------

VARIANCE(返回某一列数值的方差)

例句:

SELECTVARIANCE(列名)AS新列名FROM表名--列必须为int或double等数值类型

STDDEV(返回某一列数值的标准差)

例句:

SELECTSTDDEV(列名)AS新列名FROM表名--列必须为int或double等数值类型

ADD_MONTHS(该函数的功能是将给定的日期增加一个月)

例句:

SELECTADD_MONTHS(ENDDATE,1)AS新列名FROM表名--ENDDATE为datetime类型

ADD_MONTHS(ENDDATE,1)可以使用于where条件

LAST_DAY(可以返回指定月份的最后一天是几号)

例句:

SELECTLAST_DAY(ENDDATE)AS新列名FROM表名

DISTINCT(得到唯一的结果,就是去掉重复的结果)

例句:

SELECTDISTINCT列名FROM表名

MONTHS_BETWEEN(得到给定的两个日期中有多少个月)

例句1:

SELECTMONTHS_BETWEEN(ENDDATE,STARTDATE)AS新列名FROM表名

例句2:

SELECT*FROM表名WHEREMONTHS_BETWEEN(DATETIME1,DATETIME2)>0

SYSDATE(将返回系统的日期和时间)

例句:

SELECTDISTINCTSYSDATEFROM表名

----------------------数学函数--------------------------

ABS()函数返回给定数字的绝对值

CEIL()返回与给定参数相等或比给定参数在的最小整数

FLOOR()返回与给定参数相等或比给定参数在的最大整数

MOD(A,B)返回A与B相除后的余数

SIGN()如果参数的值为负数返回-1,如果参数的值为正数返回1,如果参数为零返回零

SQRT()该函数返回参数的平方根,由于负数是不能开平方的所以不能将该函数应用于负数

-----------------------字符函数---------------------------

CHR()该函数返回与所给数值参数等当的在ASCLL码字符,返回的字符取决于数据库所依赖的字符集

例句:

SELECTCHR(列名)FROM表名

CONCAT()与||符号相同,表示将两个字符串连接起来

例句:

SELECTCONCAT(列名1,列名2)FROM表名

INITCAP()该函数将参数的第一个字母变为大写,此外其它的字母则转换成小写

例句:

SELECTINITCAP(列名)as新列名FROM表名

LOWER()将参数全部转换为小写字母

UPPER()将参数全部转换为大写字母

LENGTH()将返回指定字符串的长度

----------------------转换函数----------------------

TO_CHAR()将一个数字转换为字符型

TO_NUMBER()将一个字符串型数字转换为数值型

---其它函数

GREATEST()将会返回在字母表中最靠后的字符开头的字符串,函数是返回几个表达式中最大的;

例句:

SELECTGREATEST(‘ALPHA’,’BRAVO’,’FOXTROT’,’DELTA’,’FP’)FROM表名

LEAST()函数是返回几个表达式中最小的!

例句:

SELECTDISTINCTLEAST(34,567,3,45,1090)FROM表名

USER()函数将返回当前使用数据库的用户的名字

例句:

SELECTDISTINCTUSERFROM表名

-------------------条件语句后用的关键字---------------

EXISTS

从子查询中返回的行数至少有一行时,EXIST返回为true。

返回为空时,EXIST返回为false。

例句:

SELECTNAMEFROMORDERS

WHEREEXISTS(SELECT*FROMORDERSWHERENAME='MOSTLYHARMLESS')

ANY/SOMEANY与SOME具有同样的功能

ANY与子查询中的每一行与主查询进行比较,并对子查询中的每一行返回一个TRUE值

区别:

IN只相当于多个等号的作用,IN不能用于大于或小于的判断。

而ANY和SOME则可以使用其它的比较运算符如大于或小于。

例句:

SELECTNAMEFROMORDERSWHERENAME>ANY

(SELECTNAMEFROMORDERSWHERENAME='JACKSBIKE')

ALL关键字的作用在于子查询中的所有结果均满足条件时它才会返回TRUE,ALL常起双重否定的作用。

例句:

SELECTNAMEFROMORDERSWHERENAME<>ALL

(SELECTNAMEFROMORDERSWHERENAME='JACKSBIKE')

-------------------局部变量和全局变量--------------------

局部变量必须以“@”开头,而且必须先用DECLARE命令说明后才可使用。

语法:

DECLARE@变量名变量类型

局部变量赋值必须使用SELECT或SET命令来设定变量的值

语法:

SELECT@局部变量=变量值

SET@局部变量=变量值

全局变量不是由用户的程序定义的,它们是在服务器级定应义的。

只能使用预先说明及定义的变局变量。

引用全局变量时,必须以“@@”开头。

局部变量的名称不能与全局变量的名称相同、否则会在应用中出错

----------------------事务-视图-索引------------------

事务是一种机制,用以维护数据库的完整性。

事务有4个属性:

原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)以及持久性(Durability),也称作事务的ACID属性。

原子性:

事务内的所有工作要么全部完成,要么全部不完成,不存在只有一部分完成的情况。

一致性:

事务内的然后操作都不能违反数据库的然后约束或规则,事务完成时有内部数据结构都必须是正确的。

隔离性:

事务直接是相互隔离的,如果有两个事务对同一个数据库进行操作,比如读取表数据。

任何一个事务看到的所有内容要么是其他事务完成之前的状态,要么是其他事务完成之后的状态。

一个事务不可能遇到另一个事务的中间状态。

持久性:

事务完成之后,它对数据库系统的影响是持久的,即使是系统错误,重新启动系统后,该事务的结果依然存在。

事务的模式

a、显示事务

显示事务就是用户使用T-SQL明确的定义事务的开始(begintransaction)和提交(committransaction)或回滚事务(rollbacktransaction)

b、自动提交事务

自动提交事务是一种能够自动执行并能自动回滚事务,这种方式是T-SQL的默认事务方式。

例如在删除一个表记录的时候,如果这条记录有主外键关系的时候,删除就会受主外键约束的影响,那么这个删除就会取消。

可以设置事务进入隐式方式:

setimplicit_transactionon;

c、隐式事务

隐式事务是指当事务提交或回滚后,SQLServer自动开始事务。

因此,隐式事务不需要使用begintransaction显示开始,

只需直接失业提交事务或回滚事务的T-SQL语句即可。

使用时,需要设置setimplicit_transactionon语句,将隐式事务模式打开,下一个语句会启动一个新的事物,再下一个语句又将启动一个新事务。

开始事务:

begintransaction

提交事务:

committransaction

回滚事务:

rollbacktransaction

创建视图:

createview视图名as

删除视图:

dropview试图名

视图定义中的select语句中不能包括下列:

1.orderby子句,除非select语句的选择列有top子句

2.into关键字

3.引用临时表或变量

创建索引:

createunique【clustered|nonclustered】index索引名on表名(列名)【withfillfactor=x】

unique可选,指定唯一索引

clustered,nonclustered可选,指定是聚集索引或非聚集索引

fillfactor可选,表示填充因子,指定一个0-100的值,该值指示索引页填满的空间所占的百分比

删除索引:

dropindex表名.索引名

下面的表总结了何时使用聚集索引或非聚集索引(很重要)。

动作描述使用聚集索引使用非聚集索引

外键列应应

主键列应应

列经常被分组排序(orderby)应应

返回某范围内的数据应不应

小数目的不同值应不应

大数目的不同值不应应

频繁更新的列不应应

频繁修改索引列不应应

一个或极少不同值不应不应

-------------------------操作数据库----------------------

SQL分类:

DDL类型包括数据库、表的创建,修改,删除,声明—数据定义语言(CREATE,ALTER,DROP,DECLARE)

DML类型包括数据表中记录的查询,删除,修改,插入—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)

DCL类型包括数据库用户赋权,废除用户访问权限,提交当前事务,中止当前事务—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)

首先,简要介绍基础语句:

1、说明:

创建数据库

CREATEDATABASEdb1(db1代表数据库,可自命名)

onprimary--默认属于primary主文件组,可省略

--数据文件的具体描述

name='MySchool_data',--主数据文件的逻辑名称

filename='D:

\project\MySchool_data.mdf',--主数据文件的物理名称

size=5MB,--主数据文件的初始大小

maxsize=100MB,--主数据文件增长的最大值

filegrowth=15%--主数据文件的增长率

logon

--日记文件的具体描述,各参数含义同上

name='MySchool_log',

filename='D:

\project\MySchool_data.ldf',

size=2MB,

filegrowth=1MB

2、说明:

删除数据库

dropdatabasedb1(db1代表数据库,可自命名)

3、说明:

备份sqlserver

---创建备份数据的device

USEmaster

EXECsp_addumpdevice'disk','testBack','c:

\mssql7backup\MyNwind_1.dat'

---开始备份

BACKUPDATABASEpubsTOtestBack

4、说明:

创建新表

createtabletb1

Idintnotnullprimarykey,--设置为主键

oneintidentity(1,1),--设为标识列

namevarcharnotnull,--非空

phonenvarchar(100),--可以为空

...

根据已有的表创建新表:

A:

createtabletab_newliketab_old(使用旧表创建新表)

B:

createtabletab_newasselectcol1,col2…fromtab_olddefinitiononly

5、说明:

删除新表:

droptabletb1

useMySchool--将当前数据库设置为MySchool

ifexists(select*fromMySchoolwherename='Student')--exist是查询语句,检测某个查询是否存在

droptableStudent

6、说明:

增加一个列:

Altertable表名add字段名字段类型字段说明/约束

添加带主键及约束的语法:

altertable表名

addconstraint约束名约束类型具体的约束说明

--添加

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 职业规划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1