图片-小白之家
图片-小白之家
图片-小白之家
图片-小白之家

sql语句大全(查询语句大全)

结构化查询言语(StructuredQueryLanguage)简称SQL,结构化查询言语是一种数据库查询和程序设计言语,用于存取数据以及查询、更新和管理联系数据库系统;

sql语句就是对数据库进行操作的一种言语。
图片[1]-sql语句大全(查询语句大全)-小白之家,sql查询语句大全,1:运用SHOW句子找出在服务器上当前存在什么数据库:

mysql>SHOWDATABASES;

2:2、创立一个数据库MYSQLDATA

mysql>CREATEDATABASEMYSQLDATA;

3:挑选你所创立的数据库

mysql>USEMYSQLDATA;(按回车键呈现Databasechanged时阐明操作成功!)

4:查看现在的数据库中存在什么表

mysql>SHOWTABLES;

5:创立一个数据库表

mysql>CREATETABLEMYTABLE(nameVARCHAR(20),sexCHAR(1));

6:显现表的结构:

mysql>DESCRIBEMYTABLE;

7:往表中加入记载

mysql>insertintoMYTABLEvalues(“hyq”,”M”);

8:用文本办法将数据装入数据库表中(例如D:/mysql.txt)

mysql>LOADDATALOCALINFILE”D:/mysql.txt”INTOTABLEMYTABLE;

9:导入.sql文件指令(例如D:/mysql.sql)

mysql>usedatabase;

mysql>sourced:/mysql.sql;

10:删去表

mysql>dropTABLEMYTABLE;

11:清空表

mysql>deletefromMYTABLE;

12:更新表中数据

mysql>updateMYTABLEsetsex=”f”wherename=’hyq’;

以下是无意中在网络看到的运用MySql的办理心得,

在windows中MySql以服务方式存在,在运用前应确保此服务现已发动,未发动可用netstartmysql指令发动。而Linux中发动时可用”/etc/rc.d/init.d/mysqldstart”指令,留意发动者应具有办理员权限。

刚装置好的MySql包括一个含空密码的root帐户和一个匿名帐户,这是很大的安全隐患,关于一些重要的运用咱们应将安全性尽可能进步,在这里应把匿名帐户删去、root帐户设置密码,可用如下指令进行:

usemysql;

deletefromUserwhereUser=””;

updateUsersetPassword=PASSWORD(‘newpassword’)whereUser=’root’;

假如要对用户所用的登录终端进行约束,能够更新User表中相运用户的Host字段,在进行了以上更改后应从头发动数据库服务,此时登录时可用如下类似指令:

mysql-uroot-p;

mysql-uroot-pnewpassword;

mysqlmydb-uroot-p;

mysqlmydb-uroot-pnewpassword;

上面指令参数是常用参数的一部分,详细情况可参阅文档。此处的mydb是要登录的数据库的称号。

在进行开发和实践运用中,用户不该该只用root用户进行衔接数据库,尽管运用root用户进行测验时很便利,但会给体系带来严重安全隐患,也不利于办理技术的进步。咱们给一个运用中运用的用户赋予最恰当的数据库权限。如一个只进行数据刺进的用户不该赋予其删去数据的权限。MySql的用户办理是经过User表来完结的,增加新用户常用的办法有两个,一是在User表刺进相应的数据行,一同设置相应的权限;二是经过GRANT指令创立具有某种权限的用户。其间GRANT的常用用法如下:

grantallonmydb.*toNewUserName@HostNameidentifiedby”password”;

grantusageon*.*toNewUserName@HostNameidentifiedby”password”;

grantselect,insert,updateonmydb.*toNewUserName@HostNameidentifiedby”password”;

grantupdate,deleteonmydb.TestTabletoNewUserName@HostNameidentifiedby”password”;

若要给此用户赋予他在相应目标上的权限的办理能力,可在GRANT后边增加WITHGRANTOPTION选项。而关于用刺进User表增加的用户,Password字段运用PASSWORD函数进行更新加密,以防不轨之人窃看密码。关于那些现已不用的用户应给予清除,权限过界的用户应及时收回权限,收回权限能够经过更新User表相应字段,也能够运用REVOKE操作。

下面给出本人从其它材料(www.cn-java.com)获得的对常用权限的解说:

大局办理权限:

FILE:在MySQL服务器上读写文件。

PROCESS:显现或杀死归于其它用户的服务线程。

RELOAD:重载拜访控制表,改写日志等。

SHUTDOWN:封闭MySQL服务。

数据库/数据表/数据列权限:

ALTER:修正已存在的数据表(例如增加/删去列)和索引。

CREATE:树立新的数据库或数据表。

DELETE:删去表的记载。

DROP:删去数据表或数据库。

INDEX:树立或删去索引。

INSERT:增加表的记载。

SELECT:显现/查找表的记载。

UPDATE:修正表中已存在的记载。

特别的权限:

ALL:答应做任何事(和root相同)。

USAGE:只答应登录–其它什么也不答应做。

一、简略查询

简略的Transact-SQL查询只包括挑选列表、FROM子句和WHERE子句。它们别离阐明所查询列、查询的

表或视图、以及查找条件等。

例如,下面的句子查询testtable表中姓名为”张三”的nickname字段和email字段。

仿制内容到剪贴板

代码:SELECT`nickname`,`email`FROM`testtable`WHERE`name`=’张三’

(一)挑选列表

挑选列表(select_list)指出所查询列,它能够是一组列名列表、星号、表达式、变量(包括部分变量和大局变量)等构成。

1、挑选一切列

例如,下面句子显现testtable表中一切列的数据:

仿制内容到剪贴板

代码:SELECT*FROMtesttable

2、挑选部摆放并指定它们的显现次序

查询成果调会集数据的摆放次序与挑选列表中所指定的列名摆放次序相同。

例如:

仿制内容到剪贴板

代码:SELECTnickname,emailFROMtesttable

3、更改列标题

在挑选列表中,可从头指定列标题。界说格局为:

列标题=列名

列名列标题

假如指定的列标题不是规范的标识符格局时,应运用引号定界符,例如,下列句子运用汉字显现列

标题:

仿制内容到剪贴板

代码:SELECT昵称=nickname,电子邮件=emailFROMtesttable

4、删去重复行

SELECT句子中运用ALL或DISTINCT选项来显现表中契合条件的一切行或删去其间重复的数据行,默许

为ALL。运用DISTINCT选项时,关于一切重复的数据行在SELECT回来的成果调会集只保存一行。

5、约束回来的行数

运用TOPn[PERCENT]选项约束回来的数据行数,TOPn阐明回来n行,而TOPnPERCENT时,阐明n是

表明一百分数,指定回来的行数等于总行数的百分之几。

例如:

仿制内容到剪贴板

代码:SELECTTOP2*FROM`testtable`

仿制内容到剪贴板

代码:SELECTTOP20PERCENT*FROM`testtable`

(二)FROM子句

FROM子句指定SELECT句子查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图,

它们之间用逗号分隔。

在FROM子句一同指定多个表或视图时,假如挑选列表中存在同名列,这时应运用目标名约束这些列

所属的表或视图。例如在usertable和citytable表中一同存在cityid列,在查询两个表中的cityid时应

运用下面句子格局加以约束:

仿制内容到剪贴板

代码:SELECT`username`,citytable.cityid

FROM`usertable`,`citytable`

WHEREusertable.cityid=citytable.cityid在FROM子句中可用以下两种格局为表或视图指定别号:

仿制内容到剪贴板

代码:表名as别号

表名别号例如上面句子可用表的别号格局表明为:

仿制内容到剪贴板

代码:SELECT`username`,b.cityid

FROMusertablea,citytableb

WHEREa.cityid=b.cityidSELECT不只能从表或视图中检索数据,它还能够从其它查询句子所回来的成果调会集查询数据。

例如:

仿制内容到剪贴板

代码:SELECTa.au_fname+a.au_lname

FROMauthorsa,titleauthorta

(SELECT`title_id`,`title`

FROM`titles`

WHERE`ytd_sales`>10000

)ASt

WHEREa.au_id=ta.au_id

ANDta.title_id=t.title_id此例中,将SELECT回来的成果调集给予一别号t,然后再从中检索数据。

(三)运用WHERE子句设置查询条件

WHERE子句设置查询条件,过滤掉不需求的数据行。例如下面句子查询年纪大于20的数据:

仿制内容到剪贴板

代码:SELECT*FROMusertableWHEREage>20WHERE子句可包括各种条件运算符:

比较运算符(巨细比较):>、>=、=、、!>、!=10ANDage仿制内容到剪贴板

代码:SELECT*FROM`usertable`ORDERBY`age`DESC,`userid`ASC别的,能够依据表达式进行排序。

二、联合查询

UNION运算符能够将两个或两个以上上SELECT句子的查询成果调调集并成一个成果调集显现,即履行联

合查询。

UNION的语法格局为:

仿制内容到剪贴板

代码:select_statement

UNION[ALL]selectstatement

[UNION[ALL]selectstatement][…n]其间selectstatement为待联合的SELECT查询句子。

ALL选项表明将一切行合并到成果调会集。不指定该项时,被联合查询成果调会集的重复行将只保存一行。

联合查询时,查询成果的列标题为第一个查询句子的列标题。因而,要界说列标题有必要在第一个查询语

句中界说。要对联合查询成果排序时,也有必要运用第一查询句子中的列名、列标题或许列序号。

在运用UNION运算符时,应确保每个联合查询句子的挑选列表中有相同数量的表达式,并且每个查询选

择表达式应具有相同的数据类型,或是能够主动将它们转化为相同的数据类型。在主动转化时,关于数值类

型,体系将低精度的数据类型转化为高精度的数据类型。

在包括多个查询的UNION句子中,其履行次序是自左至右,运用括号能够改动这一履行次序。例如:

查询1UNION(查询2UNION查询3)

三、衔接查询

经过衔接运算符能够完结多个表查询。衔接是联系数据库模型的主要特点,也是它差异于其它类型数据库办理体系的一个标志。

在联系数据库办理体系中,表树立时各数据之间的联系不用确认,常把一个实体的一切信息存放在

一个表中。当检索数据时,经过衔接操作查询出存放在多个表中的不同实体的信息。衔接操作给用户带

来很大的灵活性,他们能够在任何时分增加新的数据类型。为不同实体创立新的表,此后经过衔接进行

查询。

衔接能够在SELECT句子的FROM子句或WHERE子句中树立,似是而非在FROM子句中指出衔接时有助于

将衔接操作与WHERE子句中的查找条件区分开来。所以,在Transact-SQL中引荐运用这种办法。

SQL-92规范所界说的FROM子句的衔接语法格局为:

代码:FROMjoin_tablejoin_typejoin_table[ON(join_condition)]其间join_table指出参加衔接操作的表名,衔接能够对同一个表操作,也能够对多表操作,对同一个表操作的衔接又称做自衔接。

join_type指出衔接类型,可分为三种:内衔接、外衔接和穿插衔接。

内衔接(INNERJOIN)运用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与衔接条件相匹配的数据行。依据所运用的比较办法不同,内衔接又分为等值衔接、天然衔接和不等衔接三种。

外衔接分为左外衔接(LEFTOUTERJOIN或LEFTJOIN)、右外衔接(RIGHTOUTERJOIN或RIGHTJOIN)

和全外衔接(FULLOUTERJOIN或FULLJOIN)三种。与内衔接不同的是,外衔接不只列出与衔接条件相匹配的行,而是列出左表(左外衔接时)、右表(右外衔接时)或两个表(全外衔接时)中一切契合查找条件的数据行。

穿插衔接(CROSSJOIN)没有WHERE子句,它回来衔接表中一切数据行的笛卡尔积,其成果调会集的数据行数等于第一个表中契合查询条件的数据行数乘以第二个表中契合查询条件的数据行数。

衔接操作中的ON(join_condition)子句指出衔接条件,它由被衔接表中的列和比较运算符、逻辑运算符等构成。

不管哪种衔接都不能对text、ntext和image数据类型列进行直接衔接,但能够对这三种列进行直接衔接。例如:

代码:SELECTp1.pub_id,p2.pub_id,p1.pr_info

FROMpub_infoASp1INNERJOINpub_infoASp2

ONDATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)(一)内衔接

内衔接查询操作列出与衔接条件匹配的数据行,它运用比较运算符比较被衔接列的列值。

内衔接分三种:

1、等值衔接:在衔接条件中运用等于号(=)运算符比较被衔接列的列值,其查询成果中列出被衔接表中的一切列,包括其间的重复列。

2、不等衔接:在衔接条件运用除等于运算符以外的其它比较运算符比较被衔接的列的列值。这些运算符包括>、>=、、!。

3、天然衔接:在衔接条件中运用等于(=)运算符比较被衔接列的列值,但它运用挑选列表指出查询成果调会集所包括的列,并删去衔接表中的重复列。

例,下面运用等值衔接列出authors和publishers表中位于同一城市的作者和出版社:

代码:SELECT*

FROMauthorsASaINNERJOINpublishersASp

ONa.city=p.city又如运用天然衔接,在挑选列表中删去authors和publishers表中重复列(city和state):

仿制内容到剪贴板

代码:SELECTa.*,p.pub_id,p.pub_name,p.country

FROMauthorsASaINNERJOINpublishersASp

ONa.city=p.city

(二)外衔接内衔接时,回来查询成果调会集的仅是契合查询条件(WHERE查找条件或HAVING条件)和衔接条件

的行。而采用外衔接时,它回来到查询成果调会集的不只包括契合衔接条件的行,并且还包括左表(左外衔接时)、右表(右外衔接时)或两个边接表(全外衔接)中的一切数据行。

如下面运用左外衔接将论坛内容和作者信息衔接起来:

代码:SELECTa.*,b.*FROM`luntan`LEFTJOINusertableasb

ONa.username=b.username下面运用全外衔接将city表中的一切作者以及user表中的一切作者,以及他们地点的城市:

代码:SELECTa.*,b.*

FROMcityasaFULLOUTERJOINuserasb

ONa.username=b.username

(三)穿插衔接

穿插衔接不带WHERE子句,它回来被衔接的两个表一切数据行的笛卡尔积,回来到成果调会集的数

据行数等于第一个表中契合查询条件的数据行数乘以第二个表中契合查询条件的数据行数。

例,titles表中有6类图书,而publishers表中有8家出版社,则下列穿插衔接检索到的记载数将等

于6*8=48行。

代码:SELECT`type`,`pub_name`

FROM`titles`CROSSJOIN`publishers`

ORDERBY`type`

SQL核心句子(十分有用的几个技巧)

_ArticleContent1_lblContent>刺进数据

向表中增加一个新记载,你要运用SQLINSERT句子。这里有一个怎么运用这种句子的比如:

代码:INSERTmytable(mycolumn)VALUES(‘somedata’)这个句子把字符串’somedata’刺进表mytable的mycolumn字段中。将要被刺进数据的字段的姓名在第一个括号中指定,实践的数据在第二个括号中给出。

INSERT句子的完好句法如下:

代码:INSERT[INTO]{table_name|view_name}[(column_list)]{DEFAULTVALUES|

Values_list|select_statement}假如一个表有多个字段,经过把字段名和字段值用逗号离隔,你能够向一切的字段中刺进数据。假定表mytable有三个字段first_column,second_column,和third_column。

下面的INSERT句子增加了一条三个字段都有值的完好记载:

代码:INSERTmytable(first_column,second_column,third_column)

VALUES(‘somedata’,’somemoredata’,’yetmoredata’)留意

你能够运用INSERT句子向文本型字段中刺进数据。可是,假如你需求输入很长的字符串,你应该运用WRITETEXT句子。这部分内容对本书来说太高档了,因而不加评论。要了解更多的信息,请参阅MicrosoftSQLSever的文档。

假如你在INSERT句子中只指定两个字段和数据会怎么样呢?换句话说,你向一个表中刺进一条新记载,但有一个字段没有供应数据。在这种情况下,有下面的四种可能:

假如该字段有一个缺省值,该值会被运用。例如,假定你刺进新记载时没有给字段third_column供应数据,而这个字段有一个缺省值’somevalue’。在这种情况下,当新记载树立时会刺进值’somevalue’。

假如该字段能够承受空值,并且没有缺省值,则会被刺进空值。

假如该字段不能承受空值,并且没有缺省值,就会呈现过错。你会收到过错信息:

Thecolumnintablemytablemaynotbenull.

最终,假如该字段是一个标识字段,那么它会主动发生一个新值。当你向一个有标识字段的表中刺进新记载时,只需疏忽该字段,标识字段会给自己赋一个新值。

留意

向一个有标识字段的表中刺进新记载后,你能够用SQL变量@@identity来拜访新记载

的标识字段的值。考虑如下的SQL句子:

仿制内容到剪贴板

代码:INSERTmytable(first_column)VALUES(‘somevalue’)[code]

[code]INSERTanothertable(another_first,another_second)

VALUES(@@identity,’somevalue’)假如表mytable有一个标识字段,该字段的值会被刺进表anothertable的another_first字段。这是由于变量@@identity总是保存最终一次刺进标识字段的值。

字段another_first应该与字段first_column有相同的数据类型。可是,字段another_first不能是应该标识字段。Another_first字段用来保存字段first_column的值。

删去记载

要从表中删去一个或多个记载,需求运用SQLDELETE句子。你能够给DELETE句子供应WHERE子句。WHERE子句用来挑选要删去的记载。例如,下面的这个DELETE句子只删去字段first_column的值等于’DeleteMe’的记载:

代码:DELETEmytableWHEREfirst_column=’DeltetMe’DELETE句子的完好句法如下:

仿制内容到剪贴板

代码:DELETE[FROM]{table_name|view_name}[WHEREclause]在SQLSELECT句子中能够运用的任何条件都能够在DELECT句子的WHERE子句中运用。例如,下面的这个DELETE句子只删去那些first_column字段的值为’goodbye’或second_column字段的值为’solong’的记载:

代码:DELETEmytableWHEREfirst_column=’goodby’ORsecond_column=’solong’假如你不给DELETE句子供应WHERE子句,表中的一切记载都将被删去。你不该该有这种主意。假如你想删去应该表中的一切记载,应运用第十章所讲的TRUNCATETABLE句子。

留意

为什么要用TRUNCATETABLE句子替代DELETE句子?当你运用TRUNCATETABLE句子时,记载的删去是不作记载的。也就是说,这意味着TRUNCATETABLE要比DELETE快得多。

更新记载

要修正表中现已存在的一条或多条记载,应运用SQLUPDATE句子。同DELETE句子相同,UPDATE句子能够运用WHERE子句来挑选更新特定的记载。请看这个比如:

代码:UPDATEmytableSETfirst_column=’Updated!’WHEREsecond_column=’UpdateMe!’这个UPDATE句子更新一切second_column字段的值为’UpdateMe!’的记载。对一切被选中的记载,字段first_column的值被置为’Updated!’。

下面是UPDATE句子的完好句法:

代码:UPDATE{table_name|view_name}SET[{table_name|view_name}]

{column_list|variable_list|variable_and_column_list}

[,{column_list2|variable_list2|variable_and_column_list2}…

[,{column_listN|variable_listN|variable_and_column_listN}]]

[WHEREclause]留意

你能够对文本型字段运用UPDATE句子。可是,假如你需求更新很长的字符串,应运用UPDATETEXT句子。这部分内容对本书来说太高档了,因而不加评论。要了解更多的信息,请参阅MicrosoftSQLSever的文档。

假如你不供应WHERE子句,表中的一切记载都将被更新。有时这是有用的。例如,假如你想把表titles中的一切书的价格加倍,你能够运用如下的UPDATE句子:

你也能够一同更新多个字段。例如,下面的UPDATE句子一同更新first_column,second_column,和third_column这三个字段:

代码:UPDATEmytableSETfirst_column=’Updated!’

Second_column=’Updated!’

Third_column=’Updated!’

WHEREfirst_column=’UpdateMe1’技巧

SQL疏忽句子中剩余的空格。你能够把SQL句子写成任何你最简单读的格局。

用SELECT创立记载和表

你或许现已留意到,INSERT句子与DELETE句子和UPDATE句子有一点不同,它一次只操作一个记载。但是,有一个办法能够使INSERT句子一次增加多个记载。要作到这一点,你需求把INSERT句子与SELECT句子结合起来,象这样:

代码:INSERTmytable(first_column,second_column)

SELECTanother_first,another_second

FROManothertable

WHEREanother_first=’CopyMe!’这个句子从anothertable仿制记载到mytable.只需表anothertable中字段another_first的值为’CopyMe!’的记载才被仿制。

当为一个表中的记载树立备份时,这种方式的INSERT句子是十分有用的。在删去一个表中的记载之前,你能够先用这种办法把它们仿制到另一个表中。

假如你需求仿制整个表,你能够运用SELECTINTO句子。例如,下面的句子创立了一个名为newtable的新表,该表包括表mytable的一切数据:

代码:SELECT*INTOnewtableFROMmytable你也能够指定只需特定的字段被用来创立这个新表。要做到这一点,只需在字段列表中指定你想要仿制的字段。别的,你能够运用WHERE子句来约束仿制到新表中的记载。下面的比如只仿制字段second_columnd的值等于’CopyMe!’的记载的first_column字段。

代码:SELECTfirst_columnINTOnewtable

FROMmytable

WHEREsecond_column=’CopyMe!’运用SQL修正现已树立的表是很困难的。例如,假如你向一个表中增加了一个字段,没有简单的办法来去除它。别的,假如你不小心把一个字段的数据类型给错了,你将没有办法改动它。可是,运用本节中叙述的SQL句子,你能够绕过这两个问题。

例如,假定你想从一个表中删去一个字段。运用SELECTINTO句子,你能够创立该表的一个仿制,但不包括要删去的字段。这使你既删去了该字段,又保存了不想删去的数据。

假如你想改动一个字段的数据类型,你能够创立一个包括正确数据类型字段的新表。创立好该表后,你就能够结合运用UPDATE句子和SELECT句子,把本来表中的一切数据仿制到新表中。经过这种办法,你既能够修正表的结构,又能保存原有的数据。

_ArticleContent1_lblContent>刺进数据

向表中增加一个新记载,你要运用SQLINSERT句子。这里有一个怎么运用这种句子的比如:

仿制内容到剪贴板

代码:INSERTmytable(mycolumn)VALUES(‘somedata’)这个句子把字符串’somedata’刺进表mytable的mycolumn字段中。将要被刺进数据的字段的姓名在第一个括号中指定,实践的数据在第二个括号中给出。

INSERT句子的完好句法如下:

仿制内容到剪贴板

代码:INSERT[INTO]{table_name|view_name}[(column_list)]{DEFAULTVALUES|Values_list|select_statement}假如一个表有多个字段,经过把字段名和字段值用逗号离隔,你能够向一切的字段中刺进数据。假定表mytable有三个字段first_column,second_column,和third_column。下面的INSERT句子增加了一条三个字段都有值的完好记载:

仿制内容到剪贴板

代码:INSERTmytable(first_column,second_column,third_column)VALUES(‘somedata’,’somemoredata’,’yetmoredata’)

[code]

留意

你能够运用INSERT句子向文本型字段中刺进数据。可是,假如你需求输入很长的字符串,你应该运用WRITETEXT句子。这部分内容对本书来说太高档了,因而不加评论。要了解更多的信息,请参阅MicrosoftSQLSever的文档。

假如你在INSERT句子中只指定两个字段和数据会怎么样呢?换句话说,你向一个表中刺进一条新记载,但有一个字段没有供应数据。在这种情况下,有下面的四种可能:

假如该字段有一个缺省值,该值会被运用。例如,假定你刺进新记载时没有给字段third_column供应数据,而这个字段有一个缺省值’somevalue’。在这种情况下,当新记载树立时会刺进值’somevalue’。

假如该字段能够承受空值,并且没有缺省值,则会被刺进空值。

假如该字段不能承受空值,并且没有缺省值,就会呈现过错。你会收到过错信息:

Thecolumnintablemytablemaynotbenull.

最终,假如该字段是一个标识字段,那么它会主动发生一个新值。当你向一个有标识字段的表中刺进新记载时,只需疏忽该字段,标识字段会给自己赋一个新值。

留意

向一个有标识字段的表中刺进新记载后,你能够用SQL变量@@identity来拜访新记载

的标识字段的值。考虑如下的SQL句子:

[code]INSERTmytable(first_column)VALUES(‘somevalue’)

仿制内容到剪贴板

代码:INSERTanothertable(another_first,another_second)VALUES(@@identity,’somevalue’)假如表mytable有一个标识字段,该字段的值会被刺进表anothertable的another_first字段。这是由于变量@@identity总是保存最终一次刺进标识字段的值。

字段another_first应该与字段first_column有相同的数据类型。可是,字段another_first不能是应该标识字段。Another_first字段用来保存字段first_column的值。

删去记载

要从表中删去一个或多个记载,需求运用SQLDELETE句子。你能够给DELETE句子供应WHERE子句。WHERE子句用来挑选要删去的记载。例如,下面的这个DELETE句子只删去字段first_column的值等于’DeleteMe’的记载:

仿制内容到剪贴板

代码:DELETEmytableWHEREfirst_column=’DeltetMe’DELETE句子的完好句法如下:

仿制内容到剪贴板

代码:DELETE[FROM]{table_name|view_name}[WHEREclause]在SQLSELECT句子中能够运用的任何条件都能够在DELECT句子的WHERE子句中运用。例如,下面的这个DELETE句子只删去那些first_column字段的值为’goodbye’或second_column字段的值为’solong’的记载:

仿制内容到剪贴板

代码:DELETEmytableWHEREfirst_column=’goodby’ORsecond_column=’solong’假如你不给DELETE句子供应WHERE子句,表中的一切记载都将被删去。你不该该有这种主意。假如你想删去应该表中的一切记载,应运用第十章所讲的TRUNCATETABLE句子。

留意

为什么要用TRUNCATETABLE句子替代DELETE句子?当你运用TRUNCATETABLE句子时,记载的删去是不作记载的。也就是说,这意味着TRUNCATETABLE要比DELETE快得多。

更新记载

要修正表中现已存在的一条或多条记载,应运用SQLUPDATE句子。同DELETE句子相同,UPDATE句子能够运用WHERE子句来挑选更新特定的记载。请看这个比如:

仿制内容到剪贴板

代码:UPDATEmytableSETfirst_column=’Updated!’WHEREsecond_column=’UpdateMe!’这个UPDATE句子更新一切second_column字段的值为’UpdateMe!’的记载。对一切被选中的记载,字段first_column的值被置为’Updated!’。

下面是UPDATE句子的完好句法:

仿制内容到剪贴板

代码:UPDATE{table_name|view_name}SET[{table_name|view_name}]

{column_list|variable_list|variable_and_column_list}

[,{column_list2|variable_list2|variable_and_column_list2}…

[,{column_listN|variable_listN|variable_and_column_listN}]]

[WHEREclause]留意

你能够对文本型字段运用UPDATE句子。可是,假如你需求更新很长的字符串,应运用UPDATETEXT句子。这部分内容对本书来说太高档了,因而不加评论。要了解更多的信息,请参阅MicrosoftSQLSever的文档。

假如你不供应WHERE子句,表中的一切记载都将被更新。有时这是有用的。例如,假如你想把表titles中的一切书的价格加倍,你能够运用如下的UPDATE句子:

你也能够一同更新多个字段。例如,下面的UPDATE句子一同更新first_column,second_column,和third_column这三个字段:

仿制内容到剪贴板

代码:UPDATEmytableSETfirst_column=’Updated!’

Second_column=’Updated!’

Third_column=’Updated!’

WHEREfirst_column=’UpdateMe1’技巧

SQL疏忽句子中剩余的空格。你能够把SQL句子写成任何你最简单读的格局。

用SELECT创立记载和表

你或许现已留意到,INSERT句子与DELETE句子和UPDATE句子有一点不同,它一次只操作一个记载。但是,有一个办法能够使INSERT句子一次增加多个记载。要作到这一点,你需求把INSERT句子与SELECT句子结合起来,象这样:

仿制内容到剪贴板

代码:INSERTmytable(first_column,second_column)

SELECTanother_first,another_second

FROManothertable

WHEREanother_first=’CopyMe!’这个句子从anothertable仿制记载到mytable.只需表anothertable中字段another_first的值为’CopyMe!’的记载才被仿制。

当为一个表中的记载树立备份时,这种方式的INSERT句子是十分有用的。在删去一个表中的记载之前,你能够先用这种办法把它们仿制到另一个表中。

假如你需求仿制整个表,你能够运用SELECTINTO句子。例如,下面的句子创立了一个名为newtable的新表,该表包括表mytable的一切数据:

仿制内容到剪贴板

代码:SELECT*INTOnewtableFROMmytable你也能够指定只需特定的字段被用来创立这个新表。要做到这一点,只需在字段列表中指定你想要仿制的字段。别的,你能够运用WHERE子句来约束仿制到新表中的记载。下面的比如只仿制字段second_columnd的值等于’CopyMe!’的记载的first_column字段。

仿制内容到剪贴板

代码:SELECTfirst_columnINTOnewtable

FROMmytable

WHEREsecond_column=’CopyMe!’运用SQL修正现已树立的表是很困难的。例如,假如你向一个表中增加了一个字段,没有简单的办法来去除它。别的,假如你不小心把一个字段的数据类型给错了,你将没有办法改动它。可是,运用本节中叙述的SQL句子,你能够绕过这两个问题。

例如,假定你想从一个表中删去一个字段。运用SELECTINTO句子,你能够创立该表的一个仿制,但不包括要删去的字段。这使你既删去了该字段,又保存了不想删去的数据。

假如你想改动一个字段的数据类型,你能够创立一个包括正确数据类型字段的新表。创立好该表后,你就能够结合运用UPDATE句子和SELECT句子,把本来表中的一切数据仿制到新表中。经过这种办法,你既能够修正表的结构,又能保存原有的数据。

SQL语法,SQL句子大全,SQL根底

SQL语法参阅手册(SQL)/数据类型

2006-07-2407:42

《SQL语法参阅手册(SQL)》

DB2供应了干系式材料库的查询言语SQL(StructuredQueryLanguage),是一种十分口语化、既易学又易懂的语法。此一言语几乎是每个材料库体系都有必要供应的,用以表明干系式的*作,包括了材料的界说(DDL)以及材料的处理(DML)。SQL本来拼成SEQUEL,这言语的原型以”体系R”的姓名在IBM圣荷西实验室完结,经过IBM内部及其他的许多运用性及效率测验,其成果适当令人满意,并决定在体系R的技能根底发展出来IBM的产品。并且美国国家规范学会(ANSI)及世界规范化安排(ISO)在1987遵循一个几乎是以IBMSQL为根底的规范干系式材料言语界说。

一、材料界说DDL(DataDefinitionLanguage)

材料定言语是指对材料的格局和形状下界说的言语,他是每个材料库要树立时分时首先要面对的,举凡材料分哪些表格联系、表格内的有什麽栏位主键、表格和表格之间互相参阅的联系等等,都是在开端的时分一切必要规划好的。

1、建表格:

CreateTABLEtable_name(

column1DATATYPE[NOTNULL][NOTNULLPRIMARYKEY],

column2DATATYPE[NOTNULL],

…)

阐明:

DATATYPE–是材料的格局,详见表。

NUTNULL–可不能够答应材料有空的(尚未有材料填入)。

PRIMARYKEY–是本表的主键。

2、更改表格

AlterTABLEtable_name

ADDCOLUMNcolumn_nameDATATYPE

阐明:增加一个栏位(没有删去某个栏位的语法。

AlterTABLEtable_name

ADDPRIMARYKEY(column_name)

阐明:更改表得的界说把某个栏位设为主键。

AlterTABLEtable_name

DropPRIMARYKEY(column_name)

阐明:把主键的界说删去。

3、树立索引

CreateINDEXindex_nameONtable_name(column_name)

阐明:对某个表格的栏位树立索引以增加查询时的速度。

4、删去

Droptable_name

Dropindex_name

二、的材料形状DATATYPEs

smallint

16位元的整数。

interger

32位元的整数。

decimal(p,s)

p精确值和s巨细的十进位整数,精确值p是指悉数有几个数(digits)巨细值,s是指小数

点後有几位数。假如没有特别指定,则体系会设为p=5;s=0。

float

32位元的实数。

double

64位元的实数。

char(n)

n长度的字串,n不能超越254。

varchar(n)

长度不固定且其最大长度为n的字串,n不能超越4000。

graphic(n)

和char(n)相同,不过其单位是两个字元double-bytes,n不能超越127。这个形状是为

了支援两个字元长度的字体,例如中文字。

vargraphic(n)

可变长度且其最大长度为n的双字元字串,n不能超越2000。

date

包括了年份、月份、日期。

time

包括了小时、分钟、秒。

timestamp

包括了年、月、日、时、分、秒、千分之一秒。

三、材料*作DML(DataManipulationLanguage)

材料界说好之後接下来的就是材料的*作。材料的*作不外乎增加材料(insert)、查询材料(query)、更改材料(update)、删去材料(delete)四种形式,以下别离介绍他们的语法:

1、增加材料:

InsertINTOtable_name(column1,column2,…)

valueS(value1,value2,…)

阐明:

1.若没有指定column体系则会按表格内的栏位次序填入材料。

2.栏位的材料形状和所填入的材料有必要契合。

3.table_name也能够是景象view_name。

InsertINTOtable_name(column1,column2,…)

Selectcolumnx,columny,…FROManother_table

阐明:也能够经过一个子查询(subquery)把别的表格的材料填入。

2、查询材料:

根本查询

Selectcolumn1,columns2,…

FROMtable_name

阐明:把table_name的特定栏位材料悉数列出来

Select*

FROMtable_name

Wherecolumn1=xxx

[ANDcolumn2〉yyy][ORcolumn3〈〉zzz]

阐明:

1.’*’表明悉数的栏位都列出来。

2.Where之後是接条件式,把契合条件的材料列出来。

Selectcolumn1,column2

FROMtable_name

orDERBYcolumn2[DESC]

阐明:ORDERBY是指定以某个栏位做排序,[DESC]是指从大到小摆放,若没有指明,则是从小到大

摆放

组合查询

组合查询是指所查询得材料来历并不只需单一的表格,而是联合一个以上的

表格才能够得到成果的。

Select*

FROMtable1,table2

Wheretable1.colum1=table2.column1

阐明:

1.查询两个表格中其间column1值相同的材料。

2.当然两个表格彼此比较的栏位,其材料形状有必要相同。

3.一个杂乱的查询其动用到的表格可能会很多个。

整合性的查询:

SelectCOUNT(*)

FROMtable_name

Wherecolumn_name=xxx

阐明:

查询契合条件的材料共有几笔。

SelectSUM(column1)

FROMtable_name

阐明:

1.核算出总和,所选的栏位有必要是可数的数字形状。

2.除此以外还有AVG()是核算均匀、MAX()、MIN()核算最大最小值的整合性查询。

Selectcolumn1,AVG(column2)

FROMtable_name

GROUPBYcolumn1

HAVINGAVG(column2)〉xxx

阐明:

1.GROUPBY:以column1为一组核算column2的均匀值有必要和AVG、SUM等整合性查询的关键字

一同运用。

2.HAVING:有必要和GROUPBY一同运用作为整合性的约束。

复合性的查询

Select*

FROMtable_name1

WhereEXISTS(

Select*

FROMtable_name2

Whereconditions)

阐明:

1.Where的conditions能够是别的一个的query。

2.EXISTS在此是指存在与否。

Select*

FROMtable_name1

Wherecolumn1IN(

Selectcolumn1

FROMtable_name2

Whereconditions)

阐明:

1.IN後面接的是一个调集,表明column1存在调集里边。

2.Select出来的材料形状有必要契合column1。

其他查询

Select*

FROMtable_name1

Wherecolumn1LIKE’x%’

阐明:LIKE有必要和後面的’x%’相呼应表明以x为最初的字串。

Select*

FROMtable_name1

Wherecolumn1IN(‘xxx’,’yyy’,..)

阐明:IN後面接的是一个调集,表明column1存在调集里边。

Select*

FROMtable_name1

Wherecolumn1BETWEENxxANDyy

阐明:BETWEEN表明column1的值介於xx和yy之间。

3、更改材料:

Updatetable_name

SETcolumn1=’xxx’

Whereconditoins

阐明:

1.更改某个栏位设定其值为’xxx’。

2.conditions是所要契合的条件、若没有Where则整个table的那个栏位都会悉数被更改。

4、删去材料:

DeleteFROMtable_name

Whereconditions

阐明:删去契合条件的材料。

阐明:关于Where条件后边假如包括有日期的比较,不同数据库有不同的表达式。详细如下:

(1)假如是ACCESS数据库,则为:Wheremydate〉#2000-01-01#

(2)假如是ORACLE数据库,则为:Wheremydate〉cast(‘2000-01-01’asdate)

或:Wheremydate〉to_date(‘2000-01-01′,’yyyy-mm-dd’)

在Delphi中写成:

thedate=’2000-01-01′;

query1.SQL.add(‘select*fromabcwheremydate〉cast(‘+””+thedate+””+’asdate)’);

假如比较日期时刻型,则为:

Wheremydatetime〉to_date(‘2000-01-0110:00:01′,’yyyy-mm-ddhh24:mi:ss’)

Recordset目标一些有用的特点”/〉引证来自增加一个:Recordset目标一些有用的特点

rs.CursorType=

rs.CursorLocation=

rs.LockType=

rs.CacheSize=

rs.Pagesize=

rs.Pagecount=

rs.RecordCount=

”—-CursorTypeValues—-

ConstadOpenForwardOnly=0仅向前

ConstadOpenKeyset=1键集游标

ConstadOpenDynamic=2动态游标

ConstadOpenStatic=3静态游标

”—-LockTypeValues—-

ConstadLockReadOnly=1默许值,只读

ConstadLockPessimistic=2保守式记载确认

ConstadLockOptimistic=3开放式记载确认,只在调用Update办法时确认记载

ConstadLockBatchOptimistic=4开放式批更新

”—-CursorLocationValues—-

ConstadUseServer=2

ConstadUseClient=3

Setrs=Server.CreateObject(“ADODB.Rrecordset”)

rs.Open.sqlst,conn,1,1’读取

rs.Opensqlst,conn,1,2’新增,修正,或删去)

下一页:《SQLSERVER的数据类型》

〉〉〉———我想分页!–这么长的文章,在这里来个分页多好啊!哈哈———-〈〈〈

《SQLSERVER的数据类型》

1.SQLSERVER的数据类型

数据类弄是数据的一种特点,表明数据所表明信息的类型。任何一种核算机言语都界说了自己的数据类型。当然,不同的程序言语都具有不同的特点,所界说的数据类型的各类和称号都或多或少有些不同。SQLServer供应了25种数据类型:

·Binary[(n)]

·Varbinary[(n)]

·Char[(n)]

·Varchar[(n)]

·Nchar[(n)]

·Nvarchar[(n)]

·Datetime

·Smalldatetime

·Decimal[(p[,s])]

·Numeric[(p[,s])]

·Float[(n)]

·Real

·Int

·Smallint

·Tinyint

·Money

·Smallmoney

·Bit

·Cursor

·Sysname

·Timestamp

·Uniqueidentifier

·Text

·Image

·Ntext

(1)二进制数据类型

二进制数据包括Binary、Varbinary和Image

Binary数据类型既能够是固定长度的(Binary),也能够是变长度的。

Binary[(n)]是n位固定的二进制数据。其间,n的取值规模是从1到8000。其存储窨的巨细是n+4个字节。

Varbinary[(n)]是n位变长度的二进制数据。其间,n的取值规模是从1到8000。其存储窨的巨细是n+4个字节,不是n个字节。

在Image数据类型中存储的数据是以位字符串存储的,不是由SQLServer解说的,有必要由运用程序来解说。例如,运用程序能够运用BMP、TIEF、GIF和JPEG格局把数据存储在Image数据类型中。

(2)字符数据类型

字符数据的类型包括Char,Varchar和Text

字符数据是由任何字母、符号和数字恣意组合而成的数据。

Varchar是变长字符数据,其长度不超越8KB。Char是定长字符数据,其长度最多为8KB。超越8KB的ASCII数据能够运用Text数据类型存储。例如,由于Html文档悉数都是ASCII字符,并且在一般情况下长度超越8KB,所以这些文档能够Text数据类型存储在SQLServer中。

(3)Unicode数据类型

Unicode数据类型包括Nchar,Nvarchar和Ntext

在MicrosoftSQLServer中,传统的非Unicode数据类型答应运用由特定字符集界说的字符。在SQLServer装置过程中,答应挑选一种字符集。运用Unicode数据类型,列中能够存储任何由Unicode规范界说的字符。在Unicode规范中,包括了以各种字符集界说的悉数字符。运用Unicode数据类型,所战胜的窨是运用非Unicode数据类型所占用的窨巨细的两倍。

在SQLServer中,Unicode数据以Nchar、Nvarchar和Ntext数据类型存储。运用这种字符类型存储的列能够存储多个字符会集的字符。当列的长度变化时,应该运用Nvarchar字符类型,这时最多能够存储4000个字符。当列的长度固定不变时,应该运用Nchar字符类型,同样,这时最多能够存储4000个字符。当运用Ntext数据类型时,该列能够存储多于4000个字符。

(4)日期和时刻数据类型

日期和时刻数据类型包括Datetime和Smalldatetime两种类型

日期和时刻数据类型由有用的日期和时刻组成。例如,有用的日期和时刻数据包括”4/01/9812:15:00:00:00PM”和”1:28:29:15:01AM8/17/98″。前一个数据类型是日期在前,时刻在后一个数据类型是霎时刻在前,日期在后。在MicrosoftSQLServer中,日期和时刻数据类型包括Datetime和Smalldatetime两种类型时,所存储的日期规模是从1753年1月1日开端,到9999年12月31日完毕(每一个值要求8个存储字节)。运用Smalldatetime数据类型时,所存储的日期规模是1900年1月1日开端,到2079年12月31日完毕(每一个值要求4个存储字节)。

日期的格局能够设定。设置日期格局的指令如下:

SetDateFormat{format|@format_var|

其间,format|@format_var是日期的次序。有用的参数包括MDY、DMY、YMD、YDM、MYD和DYM。在默许情况下,日期格局为MDY。

例如,当履行SetDateFormatYMD之后,日期的格局为年月日方式;当履行SetDateFormatDMY之后,日期的格局为日月有年方式

(5)数字数据类型

数字数据只包括数字。数字数据类型包括正数和负数、小数(浮点数)和整数

整数由正整数和负整数组成,例如39、25、0-2和33967。在MicrsoftSQLServer中,整数存储的数据类型是Int,Smallint和Tinyint。Int数据类型存储数据的规模大于Smallint数据类型存储数据的规模,而Smallint据类型存储数据的规模大于Tinyint数据类型存储数据的规模。运用Int数据狗昔存储数据的规模是从-2147483648到2147483647(每一个值要求4个字节存储空间)。运用Smallint数据类型时,存储数据的规模从-32768到32767(每一个值要求2个字节存储空间)。运用Tinyint数据类型时,存储数据的规模是从0到255(每一个值要求1个字节存储空间)。

精确小娄数据在SQLServer中的数据类型是Decimal和Numeric。这种数据所占的存储空间依据该数据的位数后的位数来确认。

在SQLServer中,近似小数数据的数据类型是Float和Real。例如,三分之一这个分数记作。3333333,当运用近似数据类型时能精确表明。因而,从体系中检索到的数据可能与存储在该列中数据不完全相同。

(6)钱银数据表明正的或许负的钱银数量。

在MicrosoftSQLServer中,钱银数据的数据类型是Money和Smallmoney

Money数据类型要求8个存储字节,Smallmoney数据类型要求4个存储字节。

(7)特别数据类型

特别数据类型包括前面没有提过的数据类型。特别的数据类型有3种,即Timestamp、Bit和Uniqueidentifier。

Timestamp用于表明SQLServer活动的先后次序,以二进投影的格局表明。Timestamp数据与刺进数据或许日期和时刻没有联系。

Bit由1或许0组成。当表明真或许假、ON或许OFF时,运用Bit数据类型。例如,问询是否是每一次拜访的客户机请求能够存储在这种数据类型的列中。

Uniqueidentifier由16字节的十六进制数字组成,表明一个大局仅有的。当表的记载行要求仅有时,GUID是十分有用。例如,在客户标识号列运用这种数据类型能够差异不同的客户。

2.用户界说的数据类型

用户界说的数据类型依据在MicrosoftSQLServer中供应的数据类型。当几个表中有必要存储同一种数据类型时,并且为确保这些列有相同的数据类型、长度和可空性时,能够运用用户界说的数据类型。例如,可界说一种称为postal_code的数据类型,它依据Char数据类型。

当创立用户界说的数据类型时,有必要供应三个数:数据类型的称号、所依据的体系数据类型和数据类型的可空性。

(1)创立用户界说的数据类型

创立用户界说的数据类型能够运用Transact-SQL句子。体系存储过程sp_addtype能够来创立用户界说的数据类型。其语法方式如下:

sp_addtype{type},[,system_data_bype][,’null_type’]

其间,type是用户界说的数据类型的称号。system_data_type是体系供应的数据类型,例如Decimal、Int、Char等等。null_type表明该数据类型是怎么处理空值的,有必要运用单引号引起来,例如’NULL’、’NOTNULL’或许’NONULL’。

比如:

Usecust

Execsp_addtypessn,’Varchar(11)’,”NotNull’

创立一个用户界说的数据类型ssn,其依据的体系数据类型是变长为11的字符,不答应空。

比如:

Usecust

Execsp_addtypebirthday,datetime,’Null’

创立一个用户界说的数据类型birthday,其依据的体系数据类型是DateTime,答应空。

比如:

Usemaster

Execsp_addtypetelephone,’varchar(24),’NotNull’

Eexcsp_addtypefax,’varchar(24)’,’Null’

创立两个数据类型,即telephone和fax

(2)删去用户界说的数据类型

当用户界说的数据类型不需求时,可删去。删去用户界说的数据类型的指令是sp_droptype{‘type’}。

比如:

Usemaster

Execsp_droptype’ssn’

留意:当表中的列还正在运用用户界说的数据类型时,或许在其上面还绑定有默许或许规矩时,这种用户界说的数据类型不能删去。

以下为SQLSERVER7.0以上版本的字段类型阐明。SQLSERVER6.5的字段类型阐明请参阅SQLSERVER供应的阐明。

字段类型描绘

bit0或1的整型数字

int从-2^31(-2,147,483,648)到2^31(2,147,483,647)的整型数字

smallint从-2^15(-32,768)到2^15(32,767)的整型数字

tinyint从0到255的整型数字

decimal从-10^38到10^38-1的定精度与有用位数的数字

numericdecimal的近义词

money从-2^63(-922,337,203,685,477.5808)到2^63-1(922,337,203,685,477.5807)的钱银数据,最小钱银单位千分之十

smallmoney从-214,748.3648到214,748.3647的钱银数据,最小钱银单位千分之十

float从-1.79E+308到1.79E+308可变精度的数字

real从-3.04E+38到3.04E+38可变精度的数字

datetime从1753年1月1日到9999年12日31的日期和时刻数据,最小时刻单位为百分之三秒或3.33毫秒

smalldatetime从1900年1月1日到2079年6月6日的日期和时刻数据,最小时刻单位为分钟

timestamp时刻戳,一个数据库宽度的仅有数字

uniqueidentifier全球仅有标识符GUID

char定长非Unicode的字符型数据,最大长度为8000

varchar变长非Unicode的字符型数据,最大长度为8000

text变长非Unicode的字符型数据,最大长度为2^31-1(2G)

nchar定长Unicode的字符型数据,最大长度为8000

nvarchar变长Unicode的字符型数据,最大长度为8000

ntext变长Unicode的字符型数据,最大长度为2^31-1(2G)

binary定长二进制数据,最大长度为8000

varbinary变长二进制数据,最大长度为8000

image变长二进制数据,最大长度为2^31-1(2G)

〉〉〉———我想分页!–这么长的文章,在这里来个分页多好啊!哈哈———-〈〈〈

《SQL句子的根本语法》

一.Select句子的完好语法为:

Select[ALL|DISTINCT|DISTINCTROW|TOP]

{*|talbe.*|[table.]field1[ASalias1][,[table.]field2[ASalias2][,…]]}

FROMtableexpression[,…][INexternaldatabase]

[Where…]

[GROUPBY…]

[HAVING…]

[ORDERBY…]

[WITHOWNERACCESSOPTION]

阐明:

用中括号([])括起来的部分表明是可选的,用大括号({})括起来的部分是表明有必要从中挑选其间的一个。

1FROM子句

FROM子句指定了Select句子中字段的来历。FROM子句后边是包括一个或多个的表达式(由逗号分开),其间的表达式可为单一表称号、已保存的查询或由INNERJOIN、LEFTJOIN或RIGHTJOIN得到的复合成果。假如表或查询存储在外部数据库,在IN子句之后指明其完好途径。

例:下列SQL句子回来一切有定单的客户:

SelectorderID,Customer.customerID

FROMordersCustomers

Whereorders.CustomerID=Customers.CustomeersID

2ALL、DISTINCT、DISTINCTROW、TOP谓词

(1)ALL回来满意SQL句子条件的一切记载。假如没有指明这个谓词,默许为ALL。

例:SelectALLFirstName,LastName

FROMEmployees

(2)DISTINCT假如有多个记载的挑选字段的数据相同,只回来一个。

(3)DISTINCTROW假如有重复的记载,只回来一个

(4)TOP显现查询头尾若干记载。也可回来记载的百分比,这是要用TOPNPERCENT子句(其间N表明百分比)

例:回来5%定货额最大的定单

SelectTOP5PERCENT*

FROM[orderDetails]

orDERBYUnitPrice*Quantity*(1-Discount)DESC

3用AS子句为字段取别号

假如想为回来的列取一个新的标题,或许,经过对字段的核算或总结之后,发生了一个新的值,希望把它放到一个新的列里显现,则用AS保存。

例:回来FirstName字段取别号为NickName

SelectFirstNameASNickName,LastName,City

FROMEmployees

例:回来新的一列显现库存价值

SelectProductName,UnitPrice,UnitsInStock,UnitPrice*UnitsInStockASvalueInStock

FROMProducts

二.Where子句指定查询条件

1比较运算符

比较运算符含义

=等于

〉大于

〈小于

〉=大于等于

〈=小于等于

〈〉不等于

!〉不大于

!〈不小于

例:回来96年1月的定单

SelectorderID,CustomerID,orderDate

FROMorders

WhereorderDate〉#1/1/96#ANDorderDate〈#1/30/96#

留意:

McirosoftJETSQL中,日期用’#’定界。日期也能够用Datevalue()函数来替代。在比较字符型的数据时,要加上单引号”,尾空格在比较中被疏忽。

例:

WhereorderDate〉#96-1-1#

也能够表明为:

WhereorderDate〉Datevalue(‘1/1/96’)

运用NOT表达式求反。

例:查看96年1月1日以后的定单

WhereNotorderDate〈=#1/1/96#

2规模(BETWEEN和NOTBETWEEN)

BETWEEN…AND…运算符指定了要查找的一个闭区间。

例:回来96年1月到96年2月的定单。

WhereorderDateBetween#1/1/96#And#2/1/96#

3列表(IN,NOTIN)

IN运算符用来匹配列表中的任何一个值。IN子句能够替代用OR子句衔接的一连串的条件。

例:要找出住在London、Paris或Berlin的一切客户

SelectCustomerID,CompanyName,ContactName,City

FROMCustomers

WhereCityIn(‘London’,’Paris’,’Berlin’)

4形式匹配(LIKE)

LIKE运算符检验一个包括字符串数据的字段值是否匹配一指定形式。

LIKE运算符里运用的通配符

通配符含义

?任何一个单一的字符

*恣意长度的字符

#0~9之间的单一数字

[字符列表]在字符列表里的任一值

[!字符列表]不在字符列表里的任一值

-指定字符规模,两头的值别离为其上下限

例:回来邮政编码在(171)555-0000到(171)555-9999之间的客户

SelectCustomerID,CompanyName,City,Phone

FROMCustomers

WherePhoneLike'(171)555-####’

LIKE运算符的一些款式及含义

款式含义不契合

LIKE’A*’A后跟恣意长度的字符Bc,c255

LIKE’5

‘5*5555

LIKE’5?5’5与5之间有恣意一个字符55,5wer5

LIKE’5##5’5235,50055kd5,5346

LIKE'[a-z]’a-z间的恣意一个字符5,%

LIKE'[!0-9]’非0-9间的恣意一个字符0,1

LIKE'[[]’1,*

三.用ORDERBY子句排序成果

orDER子句按一个或多个(最多16个)字段排序查询成果,能够是升序(ASC)也能够是降序(DESC),缺省是升序。ORDER子句通常放在SQL句子的最终。

orDER子句中界说了多个字段,则依照字段的先后次序排序。

例:

SelectProductName,UnitPrice,UnitInStock

FROMProducts

orDERBYUnitInStockDESC,UnitPriceDESC,ProductName

orDERBY子句中能够用字段在挑选列表中的方位号替代字段名,能够混合字段名和方位号。

例:下面的句子发生与上列相同的效果。

SelectProductName,UnitPrice,UnitInStock

FROMProducts

orDERBY1DESC,2DESC,3

四.运用衔接联系完结多表查询

例:找出同一个城市中供应商和客户的姓名

SelectCustomers.CompanyName,Suppliers.ComPany.Name

FROMCustomers,Suppliers

WhereCustomers.City=Suppliers.City

例:找出产品库存量大于同一种产品的定单的数量的产品和定单

SelectProductName,OrderID,UnitInStock,Quantity

FROMProducts,[OrderDeails]

WhereProduct.productID=[OrderDetails].ProductID

ANDUnitsInStock〉Quantity

另一种办法是用MicrosofJETSQL独有的JNNERJOIN

语法:

FROMtable1INNERJOINtable2

ONtable1.field1comparisiontable2.field2

其间comparision就是前面Where子句用到的比较运算符。

SelectFirstName,lastName,OrderID,CustomerID,OrderDate

FROMEmployees

INNERJOINordersONEmployees.EmployeeID=Orders.EmployeeID

留意:

INNERJOIN不能衔接MemoOLEObjectSingleDouble数据类型字段。

在一个JOIN句子中衔接多个ON子句

语法:

Selectfields

FROMtable1INNERJOINtable2

ONtable1.field1compoprtable2.field1AND

ONtable1.field2compoprtable2.field2or

ONtable1.field3compoprtable2.field3

也能够

Selectfields

FROMtable1INNERJOIN

(table2INNERJOIN[(]table3

[INNERJOER][(]tablex[INNERJOIN]

ONtable1.field1compoprtable2.field1

ONtable1.field2compoprtable2.field2

ONtable1.field3compoprtable2.field3

外部衔接回来更多记载,在成果中保存不匹配的记载,不论存不存在满意条件的记载都要回来另一侧的一切记载。

FROMtable[LEFT|RIGHT]JOINtable2

ONtable1.field1comparisiontable.field2

用左衔接来树立外部衔接,在表达式的左面的表会显现其一切的数据

例:不论有没有定货量,回来一切商品

SelectProductName,OrderID

FROMProducts

LEFTJOINordersONProducts.PrductsID=Orders.ProductID

右衔接与左衔接的不同在于:不论左边表里有没有匹配的记载,它都从左边表中回来一切记载。

例:假如想了解客户的信息,并计算各个区域的客户散布,这时能够用一个右衔接,即便某个区域没有客户,也要回来客户信息。

空值不会彼此匹配,能够经过外衔接才能测验被衔接的某个表的字段是否有空值。

Select*

FROMtalbe1

LEFTJOINtable2ONtable1.a=table2.c

1衔接查询中运用Iif函数完结以0值显现空值

Iif表达式:Iif(IsNull(Amount,0,Amout)

例:不管定货大于或小于¥50,都要回来一个标志。

Iif([Amount]〉50,?Bigorder?,?Smallorder?)

五.分组和总结查询成果

在SQL的语法里,GROUPBY和HAVING子句用来对数据进行汇总。GROUPBY子句指明晰依照哪几个字段来分组,而将记载分组后,用HAVING子句过滤这些记载。

GROUPBY子句的语法

Selectfidldlist

FROMtable

Wherecriteria

[GROUPBYgroupfieldlist[HAVINGgroupcriteria]]

注:MicrosoftJet数据库Jet不能对备注或OLE目标字段分组。

GROUPBY字段中的Null值以备分组可是不能被省略。

在任何SQL算计函数中不核算Null值。

GROUPBY子句后最多能够带有十个字段,排序优先级按从左到右的次序摆放。

例:在’WA’区域的雇员表中按头衔分组后,找出具有平等头衔的雇员数目大于1人的一切头衔。

SelectTitle,Count(Title)asTotal

FROMEmployees

WhereRegion=’WA’

GROUPBYTitle

HAVINGCount(Title)〉1

JETSQL中的聚积函数

聚集函数含义

SUM()求和

AVG()均匀值

COUNT()表达式中记载的数目

COUNT(*)核算记载的数目

MAX最大值

MIN最小值

VAR方差

STDEV规范误差

FIRST第一个值

LAST最终一个值

六.用Parameters声明创立参数查询

Parameters声明的语法:

PARAMETERSnamedatatype[,namedatatype[,…]]

其间name是参数的标志符,能够经过标志符引证参数.

Datatype阐明参数的数据类型.

运用时要把PARAMETERS声明置于任何其他句子之前.

例:

PARAMETERS[Lowprice]Currency,[Beginningdate]datatime

SelectorderID,OrderAmount

FROMorders

WhereorderAMount〉[lowprice]

ANDorderDate〉=[Beginningdate]

七.功用查询

所谓功用查询,实践上是一种操作查询,它能够对数据库进行快速高效的操作.它以挑选查询为目的,挑选出契合条件的数据,再对数据进行批处理.功用查询包括更新查询,删去查询,增加查询,和生成表查询.

1更新查询

Update子句能够一同更改一个或多个表中的数据.它也能够一同更改多个字段的值.

更新查询语法:

Update表名

SET新值

Where准则

例:英国客户的定货量增加5%,货运量增加3%

UpdateOEDERS

SETorderAmount=orderAmount*1.1

Freight=Freight*1.03

WhereShipCountry=’UK’

2删去查询

Delete子句能够运用户删去大量的过时的或冗于的数据.

注:删去查询的目标是整个记载.

Delete子句的语法:

Delete[表名.*]

FROM来历表

Where准则

例:要删去一切94年前的定单

Delete*

FROMorders

WhereorderData〈#94-1-1#

3追加查询

Insert子句能够将一个或一组记载追加到一个或多个表的尾部.

INTO子句指定承受新记载的表

valueS关键字指定新记载所包括的数据值.

Insert子句的语法:

INSETRINTO目的表或查询(字段1,字段2,…)

valueS(数值1,数值2,…)

例:增加一个客户

InsertINTOEmployees(FirstName,LastName,title)

valueS(‘Harry’,’Washington’,’Trainee’)

4生成表查询

能够一次性地把一切满意条件的记载仿制到一张新表中.通常制作记载的备份或副本或作为报表的根底.

SelectINTO子句用来创立生成表查询语法:

Select字段1,字段2,…

INTO新表[IN外部数据库]

FROM来历数据库

Where准则

例:为定单制作一个存档备份

Select*

INTOordersArchive

FROMorders

八.联合查询

UNION运算能够把多个查询的成果合并到一个成果集里显现.

UNION运算的一般语法:

[表]查询1UNION[ALL]查询2UNION…

例:回来巴西一切供应商和客户的姓名和城市

SelectCompanyName,City

FROMSuppliers

WhereCountry=’Brazil’

UNION

SelectCompanyName,City

FROMCustomers

WhereCountry=’Brazil’

注:

缺省的情况下,UNION子句不回来重复的记载.假如想显现一切记载,能够加ALL选项

UNION运算要求查询具有相同数目的字段.可是,字段数据类型不用相同.

每一个查询参数中能够运用GROUPBY子句或HAVING子句进行分组.要想以指定的次序来显现回来的数据,能够在最终一个查询的尾部运用OREERBY子句.

九.穿插查询

穿插查询能够对数据进行总和,均匀,计数或其他总和核算法的核算,这些数据经过两种信息进行分组:一个显现在表的左部,另一个显现在表的顶部.

MicrosoftJetSQL用TRANSFROM句子创立穿插表查询语法:

TRANSFORMaggfunction

Select句子

GROUPBY子句

PIVOTpivotfield[IN(value1[,value2[,…]])]

Aggfounction指SQL聚积函数,

Select句子挑选作为标题的的字段,

GROUPBY分组

阐明:

Pivotfield在查询成果会集创立列标题时用的字段或表达式,用可选的IN子句约束它的取值.

value代表创立列标题的固定值.

例:显现在1996年里每一季度每一位员工所接的定单的数目:

TRANSFORMCount(OrderID)

SelectFirstName&”&LastNameASFullName

FROMEmployeesINNERJOINorders

ONEmployees.EmployeeID=orders.EmployeeID

WhereDatePart(“yyyy”,OrderDate)=’1996′

GROUPBYFirstName&”&LastName

orDERBYFirstName&”&LastName

POVOTDatePart(“q”,OrderDate)&’季度’

十.子查询

子查询能够理解为套查询.子查询是一个Select句子.

1表达式的值与子查询回来的单一值做比较

语法:

表达式comparision[ANY|ALL|SOME](子查询)

阐明:

ANY和SOME谓词是近义词,与比较运算符(=,〈,〉,〈〉,〈=,〉=)一同运用.回来一个布尔值True或False.ANY的意思是,表达式与子查询回来的一系列的值逐个比较,只需其间的一次比较发生True成果,ANY测验的回来True值(既Where子句的成果),对应于该表达式的当前记载将进入主查询的成果中.ALL测验则要求表达式与子查询回来的一系列的值的比较都发生True成果,才回回来True值.

例:主查询回来单价比任何一个折扣大于等于25%的产品的单价要高的一切产品

Select*FROMProducts

WhereUnitPrice〉ANY

(SelectUnitPriceFROM[OrderDetails]WhereDiscount〉0.25)

2查看表达式的值是否匹配子查询回来的一组值的某个值

语法:

[NOT]IN(子查询)

例:回来库存价值大于等于1000的产品.

SelectProductNameFROMProducts

WhereProductIDIN

(SelectPrdoctIDFROM[OrderDEtails]

WhereUnitPrice*Quantity〉=1000)

3检测子查询是否回来任何记载

语法:

[NOT]EXISTS(子查询)

例:用EXISTS检索英国的客户

SelectComPanyName,ContactName

FROMorders

WhereEXISTS

(Select*

FROMCustomers

WhereCountry=’UK’AND

Customers.CustomerID=orders.CustomerID)

〉〉〉———我想分页!–这么长的文章,在这里来个分页多好啊!哈哈———-〈〈〈

SqlServer和Access操作数据库结构Sql句子

下面是SqlServer和Access操作数据库结构的常用Sql,希望对你有所帮助。

内容由海娃收拾,不正确与不完好之处还请提出,谢谢。

新建表:

createtable[表名]

(

[主动编号字段]intIDENTITY(1,1)PRIMARYKEY,

[字段1]nVarChar(50)default’默许值’null,

[字段2]ntextnull,

[字段3]datetime,

[字段4]moneynull,

[字段5]intdefault0,

[字段6]Decimal(12,4)default0,

[字段7]imagenull,

)

删去表:

Droptable[表名]

刺进数据:

InsertINTO[表名](字段1,字段2)VALUES(100,’51WINDOWS.NET’)

删去数据:

DeleteFROM[表名]Where[字段名]〉100

更新数据:

Update[表名]SET[字段1]=200,[字段2]=’51WINDOWS.NET’Where[字段三]=’HAIWA’

新增字段:

AlterTABLE[表名]ADD[字段名]NVARCHAR(50)NULL

删去字段:

AlterTABLE[表名]DropCOLUMN[字段名]

修正字段:

AlterTABLE[表名]AlterCOLUMN[字段名]NVARCHAR(50)NULL

重命名表:(Access重命名表,请参阅文章:在Access数据库中重命名表)

引证来自在Access数据库中重命名表

DimConn,ConnStr,oCat,oTbl

ConnStr=”Provider=Microsoft.Jet.OLEDB.4.0;DataSource=”&Server.MapPath(“data.mdb”)

SetoCat=Server.CreateObject(“ADOX.Catalog”)

oCat.ActiveConnection=ConnStr

SetoTbl=Server.CreateObject(“ADOX.Table”)

SetoTbl=oCat.Tables(“OldTable”)’要重命名的表名:OldTable

oTbl.Name=”NewTable”‘新表名

SetoCat=Nothing

SetoTbl=Nothing

sp_rename’表名’,’新表名’,’OBJECT’

新建束缚:

AlterTABLE[表名]ADDCONSTRAINT束缚名CHECK([束缚字段]〈=’2000-1-1′)

删去束缚:

AlterTABLE[表名]DropCONSTRAINT束缚名

新建默许值

AlterTABLE[表名]ADDCONSTRAINT默许值名DEFAULT’51WINDOWS.NET’FOR[字段名]

删去默许值

AlterTABLE[表名]DropCONSTRAINT默许值名

删去SqlServer中的日志,减小数据库文件巨细

dumptransaction数据库名withno_log

backuplog数据库名withno_log

dbccshrinkdatabase(数据库名)

execsp_dboption’数据库名’,’autoshrink’,’true’

SQL查询句子精华大全

2009-08-1710:16

简略的Transact-SQL查询只包括挑选列表、FROM子句和WHERE子句。它们别离阐明所查询列、查询的

表或视图、以及查找条件等。

例如,下面的句子查询testtable表中姓名为”张三”的nickname字段和email字段。

SELECTnickname,email

FROMtesttable

WHEREname=’张三’

(一)挑选列表

挑选列表(select_list)指出所查询列,它能够是一组列名列表、星号、表达式、变量(包括部分变

量和大局变量)等构成。

1、挑选一切列

例如,下面句子显现testtable表中一切列的数据:

SELECT*

FROMtesttable

2、挑选部摆放并指定它们的显现次序

查询成果调会集数据的摆放次序与挑选列表中所指定的列名摆放次序相同。

例如:

SELECTnickname,email

FROMtesttable

3、更改列标题

在挑选列表中,可从头指定列标题。界说格局为:

列标题=列名

列名列标题

假如指定的列标题不是规范的标识符格局时,应运用引号定界符,例如,下列句子运用汉字显现列

标题:

SELECT昵称=nickname,电子邮件=email

FROMtesttable

4、删去重复行

SELECT句子中运用ALL或DISTINCT选项来显现表中契合条件的一切行或删去其间重复的数据行,默许

为ALL。运用DISTINCT选项时,关于一切重复的数据行在SELECT回来的成果调会集只保存一行。

5、约束回来的行数

运用TOPn[PERCENT]选项约束回来的数据行数,TOPn阐明回来n行,而TOPnPERCENT时,阐明n是

表明一百分数,指定回来的行数等于总行数的百分之几。

例如:

SELECTTOP2*

FROMtesttable

SELECTTOP20PERCENT*

FROMtesttable

(二)FROM子句

FROM子句指定SELECT句子查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图,

它们之间用逗号分隔。

在FROM子句一同指定多个表或视图时,假如挑选列表中存在同名列,这时应运用目标名约束这些列

所属的表或视图。例如在usertable和citytable表中一同存在cityid列,在查询两个表中的cityid时应

运用下面句子格局加以约束:

SELECTusername,citytable.cityid

FROMusertable,citytable

WHEREusertable.cityid=citytable.cityid

在FROM子句中可用以下两种格局为表或视图指定别号:

表名as别号

表名别号

例如上面句子可用表的别号格局表明为:

SELECTusername,b.cityid

FROMusertablea,citytableb

WHEREa.cityid=b.cityid

SELECT不只能从表或视图中检索数据,它还能够从其它查询句子所回来的成果调会集查询数据。

例如:

SELECTa.au_fname+a.au_lname

FROMauthorsa,titleauthorta

(SELECTtitle_id,title

FROMtitles

WHEREytd_sales>10000

)ASt

WHEREa.au_id=ta.au_id

ANDta.title_id=t.title_id

此例中,将SELECT回来的成果调集给予一别号t,然后再从中检索数据。

(三)运用WHERE子句设置查询条件

WHERE子句设置查询条件,过滤掉不需求的数据行。例如下面句子查询年纪大于20的数据:

SELECT*

FROMusertable

WHEREage>20

WHERE子句可包括各种条件运算符:

比较运算符(巨细比较):>、>=、=、<、<=、<>、!>、!<

规模运算符(表达式值是否在指定的规模):BETWEEN…AND…

NOTBETWEEN…AND…

列表运算符(判别表达式是否为列表中的指定项):IN(项1,项2……)

NOTIN(项1,项2……)

形式匹配符(判别值是否与指定的字符通配格局相符):LIKE、NOTLIKE

空值判别符(判别表达式是否为空):ISNULL、NOTISNULL

逻辑运算符(用于多条件的逻辑衔接):NOT、AND、OR

1、规模运算符例:ageBETWEEN10AND30适当于age>=10ANDage<=30

2、列表运算符例:countryIN(‘Germany’,’China’)

3、形式匹配符例:常用于含糊查找,它判别列值是否与指定的字符串格局相匹配。可用于char、

varchar、text、ntext、datetime和smalldatetime等类型查询。

可运用以下通配字符:

百分号%:可匹配恣意类型和长度的字符,假如是中文,请运用两个百分号即%%。

下划线_:匹配单个恣意字符,它常用来约束表达式的字符长度。

方括号[]:指定一个字符、字符串或规模,要求所匹配目标为它们中的任一个。

[^]:其取值也[]相同,但它要求所匹配目标为指定字符以外的任一个字符。

例如:

约束以Publishing结束,运用LIKE’%Publishing’

约束以A最初:LIKE'[A]%’

约束以A最初外:LIKE'[^A]%’

4、空值判别符例WHEREageISNULL

5、逻辑运算符:优先级为NOT、AND、OR

(四)查询成果排序

运用ORDERBY子句对查询回来的成果按一列或多列排序。ORDERBY子句的语法格局为:

ORDERBY{column_name[ASC|DESC]}[,…n]

其间ASC表明升序,为默许值,DESC为降序。ORDERBY不能按ntext、text和image数据类型进行排

序。

例如:

SELECT*

FROMusertable

ORDERBYagedesc,useridASC

别的,能够依据表达式进行排序。

二、联合查询

UNION运算符能够将两个或两个以上上SELECT句子的查询成果调调集并成一个成果调集显现,即履行联

合查询。UNION的语法格局为:

select_statement

UNION[ALL]selectstatement

[UNION[ALL]selectstatement][…n]

其间selectstatement为待联合的SELECT查询句子。

ALL选项表明将一切行合并到成果调会集。不指定该项时,被联合查询成果调会集的重复行将只保存一

行。

联合查询时,查询成果的列标题为第一个查询句子的列标题。因而,要界说列标题有必要在第一个查询语

句中界说。要对联合查询成果排序时,也有必要运用第一查询句子中的列名、列标题或许列序号。

在运用UNION运算符时,应确保每个联合查询句子的挑选列表中有相同数量的表达式,并且每个查询选

择表达式应具有相同的数据类型,或是能够主动将它们转化为相同的数据类型。在主动转化时,关于数值类

型,体系将低精度的数据类型转化为高精度的数据类型。

在包括多个查询的UNION句子中,其履行次序是自左至右,运用括号能够改动这一履行次序。例如:

查询1UNION(查询2UNION查询3)

三、衔接查询

经过衔接运算符能够完结多个表查询。衔接是联系数据库模型的主要特点,也是它差异于其它类型

数据库办理体系的一个标志。

在联系数据库办理体系中,表树立时各数据之间的联系不用确认,常把一个实体的一切信息存放在

一个表中。当检索数据时,经过衔接操作查询出存放在多个表中的不同实体的信息。衔接操作给用户带

来很大的灵活性,他们能够在任何时分增加新的数据类型。为不同实体创立新的表,此后经过衔接进行

查询。

衔接能够在SELECT句子的FROM子句或WHERE子句中树立,似是而非在FROM子句中指出衔接时有助于

将衔接操作与WHERE子句中的查找条件区分开来。所以,在Transact-SQL中引荐运用这种办法。

SQL-92规范所界说的FROM子句的衔接语法格局为:

FROMjoin_tablejoin_typejoin_table

[ON(join_condition)]

其间join_table指出参加衔接操作的表名,衔接能够对同一个表操作,也能够对多表操作,对同一

个表操作的衔接又称做自衔接。

join_type指出衔接类型,可分为三种:内衔接、外衔接和穿插衔接。内衔接(INNERJOIN)运用比

较运算符进行表间某(些)列数据的比较操作,并列出这些表中与衔接条件相匹配的数据行。依据所运用

的比较办法不同,内衔接又分为等值衔接、天然衔接和不等衔接三种。

外衔接分为左外衔接(LEFTOUTERJOIN或LEFTJOIN)、右外衔接(RIGHTOUTERJOIN或RIGHTJOIN)

和全外衔接(FULLOUTERJOIN或FULLJOIN)三种。与内衔接不同的是,外衔接不只列出与衔接条件相匹

配的行,而是列出左表(左外衔接时)、右表(右外衔接时)或两个表(全外衔接时)中一切契合查找条件的

数据行。

穿插衔接(CROSSJOIN)没有WHERE子句,它回来衔接表中一切数据行的笛卡尔积,其成果调会集的

数据行数等于第一个表中契合查询条件的数据行数乘以第二个表中契合查询条件的数据行数。

衔接操作中的ON(join_condition)子句指出衔接条件,它由被衔接表中的列和比较运算符、逻辑

运算符等构成。

不管哪种衔接都不能对text、ntext和image数据类型列进行直接衔接,但能够对这三种列进行直接

衔接。例如:

SELECTp1.pub_id,p2.pub_id,p1.pr_info

FROMpub_infoASp1INNERJOINpub_infoASp2

ONDATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)

(一)内衔接

内衔接查询操作列出与衔接条件匹配的数据行,它运用比较运算符比较被衔接列的列值。内衔接分

三种:

1、等值衔接:在衔接条件中运用等于号(=)运算符比较被衔接列的列值,其查询成果中列出被衔接

表中的一切列,包括其间的重复列。

2、不等衔接:在衔接条件运用除等于运算符以外的其它比较运算符比较被衔接的列的列值。这些

运算符包括>、>=、<=、<、!>、!<和<>。

3、天然衔接:在衔接条件中运用等于(=)运算符比较被衔接列的列值,但它运用挑选列表指出查询

成果调会集所包括的列,并删去衔接表中的重复列。

例,下面运用等值衔接列出authors和publishers表中位于同一城市的作者和出版社:

SELECT*

FROMauthorsASaINNERJOINpublishersASp

ONa.city=p.city

又如运用天然衔接,在挑选列表中删去authors和publishers表中重复列(city和state):

SELECTa.*,p.pub_id,p.pub_name,p.country

FROMauthorsASaINNERJOINpublishersASp

ONa.city=p.city

(二)外衔接

内衔接时,回来查询成果调会集的仅是契合查询条件(WHERE查找条件或HAVING条件)和衔接条件

的行。而采用外衔接时,它回来到查询成果调会集的不只包括契合衔接条件的行,并且还包括左表(左外

衔接时)、右表(右外衔接时)或两个边接表(全外衔接)中的一切数据行。

如下面运用左外衔接将论坛内容和作者信息衔接起来:

SELECTa.*,b.*FROMluntanLEFTJOINusertableasb

ONa.username=b.username

下面运用全外衔接将city表中的一切作者以及user表中的一切作者,以及他们地点的城市:

SELECTa.*,b.*

FROMcityasaFULLOUTERJOINuserasb

ONa.username=b.username

(三)穿插衔接

穿插衔接不带WHERE子句,它回来被衔接的两个表一切数据行的笛卡尔积,回来到成果调会集的数

据行数等于第一个表中契合查询条件的数据行数乘以第二个表中契合查询条件的数据行数。

例,titles表中有6类图书,而publishers表中有8家出版社,则下列穿插衔接检索到的记载数将等

于6*8=48行。

SELECTtype,pub_name

FROMtitlesCROSSJOINpublishers

ORDERBYtypeSQL核心句子(十分有用的几个技巧)刺进数据

向表中增加一个新记载,你要运用SQLINSERT句子。这里有一个怎么运用这种句子的比如:

INSERTmytable(mycolumn)VALUES(‘somedata’)

这个句子把字符串’somedata’刺进表mytable的mycolumn字段中。将要被刺进数据的字段的姓名在第一个括号中指定,实践的数据在第二个括号中给出。

INSERT句子的完好句法如下:

INSERT[INTO]{table_name|view_name}[(column_list)]{DEFAULTVALUES|

Values_list|select_statement}

假如一个表有多个字段,经过把字段名和字段值用逗号离隔,你能够向一切的字段中刺进数据。假定表mytable有三个字段first_column,second_column,和third_column。下面的INSERT句子增加了一条三个字段都有值的完好记载:

INSERTmytable(first_column,second_column,third_column)

VALUES(‘somedata’,’somemoredata’,’yetmoredata’)

留意

你能够运用INSERT句子向文本型字段中刺进数据。可是,假如你需求输入很长的字符串,你应该运用WRITETEXT句子。这部分内容对本书来说太高档了,因而不加评论。要了解更多的信息,请参阅MicrosoftSQLSever的文档。

假如你在INSERT句子中只指定两个字段和数据会怎么样呢?换句话说,你向一个表中刺进一条新记载,但有一个字段没有供应数据。在这种情况下,有下面的四种可能:

假如该字段有一个缺省值,该值会被运用。例如,假定你刺进新记载时没有给字段third_column供应数据,而这个字段有一个缺省值’somevalue’。在这种情况下,当新记载树立时会刺进值’somevalue’。

假如该字段能够承受空值,并且没有缺省值,则会被刺进空值。

假如该字段不能承受空值,并且没有缺省值,就会呈现过错。你会收到过错信息:

Thecolumnintablemytablemaynotbenull.

最终,假如该字段是一个标识字段,那么它会主动发生一个新值。当你向一个有标识字段的表中刺进新记载时,只需疏忽该字段,标识字段会给自己赋一个新值。

留意

向一个有标识字段的表中刺进新记载后,你能够用SQL变量@@identity来拜访新记载

的标识字段的值。考虑如下的SQL句子:

INSERTmytable(first_column)VALUES(‘somevalue’)

INSERTanothertable(another_first,another_second)

VALUES(@@identity,’somevalue’)

假如表mytable有一个标识字段,该字段的值会被刺进表anothertable的another_first字段。这是由于变量@@identity总是保存最终一次刺进标识字段的值。

字段another_first应该与字段first_column有相同的数据类型。可是,字段another_first不能是应该标识字段。Another_first字段用来保存字段first_column的值。

删去记载

要从表中删去一个或多个记载,需求运用SQLDELETE句子。你能够给DELETE句子供应WHERE子句。WHERE子句用来挑选要删去的记载。例如,下面的这个DELETE句子只删去字段first_column的值等于’DeleteMe’的记载:

DELETEmytableWHEREfirst_column=’DeltetMe’

DELETE句子的完好句法如下:

DELETE[FROM]{table_name|view_name}[WHEREclause]

在SQLSELECT句子中能够运用的任何条件都能够在DELECT句子的WHERE子句中运用。例如,下面的这个DELETE句子只删去那些first_column字段的值为’goodbye’或second_column字段的值为’solong’的记载:

DELETEmytableWHEREfirst_column=’goodby’ORsecond_column=’solong’

假如你不给DELETE句子供应WHERE子句,表中的一切记载都将被删去。你不该该有这种主意。假如你想删去应该表中的一切记载,应运用第十章所讲的TRUNCATETABLE句子。

留意

为什么要用TRUNCATETABLE句子替代DELETE句子?当你运用TRUNCATETABLE句子时,记载的删去是不作记载的。也就是说,这意味着TRUNCATETABLE要比DELETE快得多。

更新记载

要修正表中现已存在的一条或多条记载,应运用SQLUPDATE句子。同DELETE句子相同,UPDATE句子能够运用WHERE子句来挑选更新特定的记载。请看这个比如:

UPDATEmytableSETfirst_column=’Updated!’WHEREsecond_column=’UpdateMe!’

这个UPDATE句子更新一切second_column字段的值为’UpdateMe!’的记载。对一切被选中的记载,字段first_column的值被置为’Updated!’。

下面是UPDATE句子的完好句法:

UPDATE{table_name|view_name}SET[{table_name|view_name}]

{column_list|variable_list|variable_and_column_list}

[,{column_list2|variable_list2|variable_and_column_list2}…

[,{column_listN|variable_listN|variable_and_column_listN}]]

[WHEREclause]

留意

你能够对文本型字段运用UPDATE句子。可是,假如你需求更新很长的字符串,应运用UPDATETEXT句子。这部分内容对本书来说太高档了,因而不加评论。要了解更多的信息,请参阅MicrosoftSQLSever的文档。

假如你不供应WHERE子句,表中的一切记载都将被更新。有时这是有用的。例如,假如你想把表titles中的一切书的价格加倍,你能够运用如下的UPDATE句子:

你也能够一同更新多个字段。例如,下面的UPDATE句子一同更新first_column,second_column,和third_column这三个字段:

UPDATEmytableSETfirst_column=’Updated!’

Second_column=’Updated!’

Third_column=’Updated!’

WHEREfirst_column=’UpdateMe1′

技巧

SQL疏忽句子中剩余的空格。你能够把SQL句子写成任何你最简单读的格局。

用SELECT创立记载和表

你或许现已留意到,INSERT句子与DELETE句子和UPDATE句子有一点不同,它一次只操作一个记载。但是,有一个办法能够使INSERT句子一次增加多个记载。要作到这一点,你需求把INSERT句子与SELECT句子结合起来,象这样:

INSERTmytable(first_column,second_column)

SELECTanother_first,another_second

FROManothertable

WHEREanother_first=’CopyMe!’

这个句子从anothertable仿制记载到mytable.只需表anothertable中字段another_first的值为’CopyMe!’的记载才被仿制。

当为一个表中的记载树立备份时,这种方式的INSERT句子是十分有用的。在删去一个表中的记载之前,你能够先用这种办法把它们仿制到另一个表中。

假如你需求仿制整个表,你能够运用SELECTINTO句子。例如,下面的句子创立了一个名为newtable的新表,该表包括表mytable的一切数据:

SELECT*INTOnewtableFROMmytable

你也能够指定只需特定的字段被用来创立这个新表。要做到这一点,只需在字段列表中指定你想要仿制的字段。别的,你能够运用WHERE子句来约束仿制到新表中的记载。下面的比如只仿制字段second_columnd的值等于’CopyMe!’的记载的first_column字段。

SELECTfirst_columnINTOnewtable

FROMmytable

WHEREsecond_column=’CopyMe!’

运用SQL修正现已树立的表是很困难的。例如,假如你向一个表中增加了一个字段,没有简单的办法来去除它。别的,假如你不小心把一个字段的数据类型给错了,你将没有办法改动它。可是,运用本节中叙述的SQL句子,你能够绕过这两个问题。

例如,假定你想从一个表中删去一个字段。运用SELECTINTO句子,你能够创立该表的一个仿制,但不包括要删去的字段。这使你既删去了该字段,又保存了不想删去的数据。

假如你想改动一个字段的数据类型,你能够创立一个包括正确数据类型字段的新表。创立好该表后,你就能够结合运用UPDATE句子和SELECT句子,把本来表中的一切数据仿制到新表中。经过这种办法,你既能够修正表的结构,又能保存原有的数据。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容

图片-小白之家
图片-小白之家