志在指尖
用双手敲打未来

sql查询语句(sql查询语句大全及实例)

sql查询语句

一、简略查询句子
1.查看表结构
SQL>DESCemp;
2.查询所有列
SQL>SELECT*FROMemp;
3.查询指定列
SQL>SELECTempmo,ename,mgrFROMemp;
SQL>SELECTDISTINCTmgrFROMemp;只显示成果不同的项
4.查询指定行
SQL>SELECT*FROMempWHEREjob=’CLERK’;
5.运用算术表达式
SQL>SELECTename,sal*13+nvl(comm,0)FROMemp;
nvl(comm,1)的意思是,假如comm中有值,则nvl(comm,1)=comm;comm中无值,则nvl(comm,1)=0。
SQL>SELECTename,sal*13+nvl(comm,0)year_salFROMemp;(year_sal为别号,可按别号排序)
SQL>SELECT*FROMempWHEREhiredate>’01-1月-82′;
6.运用like操作符(%,_)
%表示一个或多个字符,_表示一个字符,[charlist]表示字符列中的任何单一字符,[^charlist]或者[!charlist]不在字符列中的任何单一字符。
SQL>SELECT*FROMempWHEREenamelike’S__T%’;
7.在where条件中运用In
SQL>SELECT*FROMempWHEREjobIN(‘CLERK’,’ANALYST’);
8.查询字段内容为空/非空的句子
SQL>SELECT*FROMempWHEREmgrIS/ISNOTNULL;
9.运用逻辑操作符号
SQL>SELECT*FROMempWHERE(sal>500orjob=’MANAGE’)andenamelike’J%’;
10.将查询成果按字段的值进行排序
SQL>SELECT*FROMempORDERBYdeptno,salDESC;(按部门升序,并按薪酬降序)
11.运用case…when…then…end处理查询成果
SQL>SELECTCASEaWHEN”original_a”THEN”新命名Aa”WHEN”original_b”THEN”新命名Bb”ENDASXXX;
挑选表中的a字段并命名为XXX,当a的内容为original_a时,内容展现为“新命名Aa”。

sql

sql查询语句大全及实例

MYSQL查询句子大全集锦
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句子,把本来表中的一切数据仿制到新表中。经过这种办法,你既能够修正表的结构,又能保存原有的数据。

未经允许不得转载:IT技术网站 » sql查询语句(sql查询语句大全及实例)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载