社区应用 最新帖子 精华区 社区服务 会员列表 统计排行 社区论坛任务 迷你宠物
  • 6103阅读
  • 0回复

[原创]SQL查询语句使用

级别: 店掌柜
发帖
5692
铜板
103378
人品值
1520
贡献值
26
交易币
0
好评度
5373
信誉值
0
金币
0
所在楼道

一、简单查询 FDz`U:8  
h !^= c  
简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的 dz_S6o ]  
@j/2 $  
表或视图、以及搜索条件等。 KxkBP/`3Q  
SGAzeymw  
例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。 gg/`{  
_ %nz-I  
SELECT nickname,email bF"l0 jS  
4V JUu`[  
FROM testtable R=z])  
 /|0-O''  
WHERE name='张三' h aAY=:  
6X \g7bg  
(一)选择列表 &W2*'$j"_  
nuce(R  
选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变 o:Fq|?/e  
:$WO"HfMSn  
量和全局变量)等构成。 'UX.Q7W  
}Pcm'o_wT  
1、选择所有列 C~ 1]  
^D+J k8  
例如,下面语句显示testtable表中所有列的数据: M et]|&  
2*: q$c  
SELECT * 3^sbbm.8  
!jj`Ht)  
FROM testtable 4{P+p!4  
p `"k=tZ{  
2、选择部分列并指定它们的显示次序 r_T)| ||v  
[X(4( 1i  
查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。 6Tl6A>%s  
5n@YNaoIb  
例如: qe0D[L  
s4|\cY`b-  
SELECT nickname,email u^Q`xd1  
![_x/F9  
FROM testtable ^""edCs  
[YDSS/  
3、更改列标题 ^CkMk 1  
6nx\|F  
在选择列表中,可重新指定列标题。定义格式为: ={BD*= i  
'}.Yf_  
列标题=列名 x?h/e;  
P?0X az  
列名 列标题 /v{+V/'+  
 .U1wVIM  
如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列 &,nv+>D  
wI.aV>  
标题: I ]m  
=xI;D,@S  
SELECT 昵称=nickname,电子邮件=email fLDrit4_Q  
m:H^m/g  
FROM testtable }icCp)b>v  
-,J<X\  
4、删除重复行 qmrT d G  
].d2CJ'  
SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认 pjeNBSu6  
"5hk%T '  
为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。 &G {GLP?H  
0m@+ &X>w  
5、限制返回的行数 =*\s`ox`  
pKSCC"i&j  
使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是 H/,KY/>i  
iN;Pg _Kq  
表示一百分数,指定返回的行数等于总行数的百分之几。 Kd\0nf6  
cx\"r  
例如: Ymut]`dX  
A  6(`  
SELECT TOP 2 * opcanl9pSW  
 o E+'@  
FROM testtable `+H=3`}X  
bLc5$U$!I  
SELECT TOP 20 PERCENT * bvox7V>  
ipSMmpB  
FROM testtable 3smkY  
LlTD =tJ0  
(二)FROM子句 ;UdM8+^/V]  
;n&95t1$  
FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图, ^C>kmo3J  
{R1]tGOf  
它们之间用逗号分隔。 ~D52b1f  
]H1mj#EWU  
在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列 *!5CL'  
q;{(o2g  
所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应 ]c(FgY c  
4I4m4^  
使用下面语句格式加以限定: Wf~^,]9N  
=G-OIu+H!U  
SELECT username,citytable.cityid UHl3/m7g  
}x'*3zI  
FROM usertable,citytable GS;GJsAs  
.$U,bE  
WHERE usertable.cityid=citytable.cityid P{Nvt/%  
DV5hTw0  
在FROM子句中可用以下两种格式为表或视图指定别名: T KZtoQP%  
:V/".K-:J  
表名 as 别名 +gl\l?>sr  
V U3RFl  
表名 别名 $|$@?H>K  
UP]( 1lAf  
例如上面语句可用表的别名格式表示为: :H}iL*  
%i9S"  
SELECT username,b.cityid (UkP AE  
oO2DPcK  
FROM usertable a,citytable b )5|9EXh  
\/Y(m4<P  
WHERE a.cityid=b.cityid Ib(C`4%  
}7.A~h  
SELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。 6h9(u7(-N  
t=%zY~P  
例如: . ,|C>^  
N&8$tJ(hhx  
SELECT a.au_fname+a.au_lname := V?;  
-}7$;QK&a  
FROM authors a,titleauthor ta l*ltS(?  
%. 1/ #{  
(SELECT title_id,title ((M,6Q}  
yP"2.9\erH  
FROM titles E '6>3n  
>a"J);p  
WHERE ytd_sales>10000 [-(^>Y  
6,t6~Uo/  
) AS t (\:Rnl  
7?dWAUF  
WHERE a.au_id=ta.au_id *Y>w0k  
! ._q8q\  
AND ta.title_id=t.title_id poz_=,c  
CE"/&I  
此例中,将SELECT返回的结果集合给予一别名t,然后再从中检索数据。 yZlT#^$\  
s&7 3g0$$  
(三)使用WHERE子句设置查询条件 q1ysT.{p,  
 +n1!xv]  
WHERE子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据: o2fih%p?1  
fe\lSGmf  
SELECT * eRUdPPq_d  
,dRaV</2  
FROM usertable 6A"$9sj6  
N[Z`tk?-  
WHERE age>20 /pMOinuO  
u`|%qRt  
WHERE子句可包括各种条件运算符: EL,k z8  
j\C6k  
比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!< /,G `V  
[CQR  
范围运算符(表达式值是否在指定的范围):BETWEEN…AND… ~kW?]/$h  
joY7Vk!<o  
NOT BETWEEN…AND… qzW3MlD  
Y j oe|  
列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2……) |))NjM'ZBl  
*'((_ NZ>  
NOT IN (项1,项2……) =Jm[1Mgt  
G+dq */  
模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE 0? {ADQz  
5dj" UxH  
空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL Odwe1q&  
NQ{(G8x9  
逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR MblRdj6  
?V6,>e_+  
1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30 1Q@]b_"Xh  
%IsodtkDu  
2、列表运算符例:country IN ('Germany','China') ;UQza ]i  
i{^T;uAE  
3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、 +a5F:3$  
_a$qsY  
varchar、text、ntext、datetime和smalldatetime等类型查询。 V k{;g  
lDL&":t  
可使用以下通配字符: |62` {+  
6ll!7U(9(  
百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。 NO!Qo:  
~i|6F~%3  
下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。 5%}e j)@  
` -_!%m/  
方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。 >9H^r\  
:[CV_ME.;  
[^]:其取值也[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。 NzgG7 7>  
]PS`"o,pF$  
例如: #RlZxtx.O  
<Y yE1 |  
限制以Publishing结尾,使用LIKE '%Publishing' Yw|v5/>  
S f?;j{?G  
限制以A开头:LIKE '[A]%' "#*W#ohVA  
v~mVf.j1  
限制以A开头外:LIKE '[^A]%' uSfHlN4l  
i<Z%  
4、空值判断符例WHERE age IS NULL `*s:[k5k  
3RaduN]  
5、逻辑运算符:优先级为NOT、AND、OR G^.N$wcv  
E0ED[d,  
(四)查询结果排序 l5D)UO  
I[?\ Or  
使用ORDER BY子句对查询返回的结果按一列或多列排序。ORDER BY子句的语法格式为: 3"x_Y  
nQc,^A)I  
ORDER BY {column_name [ASC|DESC]} [,…n] ^MpMqm1?8;  
^L%_kL_7  
其中ASC表示升序,为默认值,DESC为降序。ORDER BY不能按ntext、text和image数据类型进行排 x?L[*N_ml  
q%sZV>  
序。 phy}Hk/  
:;_ khno  
例如: # 55>?  
PK+sGV  
SELECT * <D a-rv8  
sa'1hX^@  
FROM usertable cO J`^^P  
5_(\Cd<#  
ORDER BY age desc,userid ASC Xl4}S"a  
Lap?L/NS  
另外,可以根据表达式进行排序。 fOi Rstci  
S)U*1t7[  
  h%EeU 3  
-DkD*64wu  
二、联合查询 KZ5%q.  
Em!- W5*s  
UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联 W]po RTJ:  
ov+{<0Q  
合查询。UNION的语法格式为: *'?ZG/ (  
$M}"u [Qq  
select_statement ,[;O'g?,g  
s*PKr6X+  
UNION [ALL] selectstatement xUn"XkhP  
aBC5?V*e%  
[UNION [ALL] selectstatement][…n] p4P=T@:  
,SIS3A>s  
其中selectstatement为待联合的SELECT查询语句。 n.@HT"  
d`/8Q9tQ  
ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一 Z1,rN#p9  
:A8r{`R'N  
行。 [K A^+n  
as@8L|i*  
联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语 J_7w _T/  
^Q#_  
句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。 DzR,ou  
<{W{ Y\_A>  
在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选 eay|>xa2  
^=x/:0  
择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类 2/ +~h(Cc  
)5@P|{FF  
型,系统将低精度的数据类型转换为高精度的数据类型。 S})f`X9_}  
~R;/u")@e  
在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如: uqcG3Pi  
_WNbuk0  
查询1 UNION (查询2 UNION 查询3) J=-z~\f56  
/Q st :q  
  {]6-,/3UR  
Bv7FZK3  
  !\#Wq{p>W*  
?q`i MiN  
三、连接查询 e[iv"|+  
bkdXBCBx?  
通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型 +2{ f>KZ  
` +YtTK  
数据库管理系统的一个标志。 '=;e# C`<{  
dCo)en  
在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在 :Fhk$?/r  
:WRD<D_4  
一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带 J299 mgB  
lZAGoR;0Ra  
来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行 V<5. 4{[G  
, LwinjHA*  
查询。 [C EV&B  
0y|1@CS  
连接可以在SELECT 语句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出连接时有助于 s O#cJAfuu  
hwM<0Jf   
将连接操作与WHERE子句中的搜索条件区分开来。所以,在Transact-SQL中推荐使用这种方法。 ovN3.0tAI  
oOprzxf"+Z  
SQL-92标准所定义的FROM子句的连接语法格式为: Do(G;D`h+_  
K\ Wzh;  
FROM join_table join_type join_table ; s(bd#Q  
te[uAJ1 N  
[ON (join_condition)] >h8m8J  
n=j) M  
其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一 hbYstK;]Z  
3~fi#{  
个表操作的连接又称做自连接。 ;uAh)|;S#  
^GV'Y  
join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。内连接(INNER JOIN)使用比 z(c8]Wu#  
T[OI/ WuK  
较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用 &FmTT8"l  
0fstEExw  
的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。 * 4J!@w  
F~=kMQO  
外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN) ~H#c-B  
9Avj\G  
和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹 w &YUb,{Y  
^}2!fRKAmo  
配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的 )7Hx <?P  
Ru d9l.n  
数据行。 ,>#\aO1n  
.feB VRg  
交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的 ;e_us!Sn  
78]*Jx>L  
数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。 9q0s  
M5RN Z%  
连接操作中的ON (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑 :o` <CO  
CSjd&G *ZB  
运算符等构成。 \x$`/  
v9J1Hha#  
无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接 b`%u}^B {  
enxb pq#  
连接。例如: B{0]v-w  
1d!s8um;  
SELECT p1.pub_id,p2.pub_id,p1.pr_info |{|B70v3Co  
|5>A^a  
FROM pub_info AS p1 INNER JOIN pub_info AS p2 5X3JQ"z  
V*JqC  
ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info) 0-OKbw5%=b  
|63uoRr  
(一)内连接 uN?Lz1W\;  
Otr=+i ZI  
内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分 hc$m1lLn  
ox<6qW  
三种: f }r \  
;*K;)C  
1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接 MZ0cZv$v!~  
!m=Js"  
表中的所有列,包括其中的重复列。 )M.g<[= ^  
)y:M8((%  
2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些 $#%R _G]  
6qQ_I 0f  
运算符包括>、>=、<=、<、!>、!<和<>。 rVhfj~Ts  
(' %Y3z;  
3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询 gs0 jwI  
hG`@#9|f  
结果集合中所包括的列,并删除连接表中的重复列。 {B#w9>'b  
73 1RqUR  
例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社: &B :L9^  
0gOca +&  
SELECT * G]xYQ]  
N?S;v&q+  
FROM authors AS a INNER JOIN publishers AS p 1fJ~Wp @1  
5m@'( ] j  
ON a.city=p.city WJ8osWdLu  
5s%e9x|kP  
又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state): _8SB+s*  
C_ ;nlG6  
SELECT a.*,p.pub_id,p.pub_name,p.country Qa9@Q$  
Nz"K`C>/  
FROM authors AS a INNER JOIN publishers AS p 19% "F!^i  
@ZYJY  
ON a.city=p.city E>#@ H  
.`u8(S+  
(二)外连接 9I5AYa?  
55`p~:&VQ  
内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件  $AZ=;iP-  
WAuT`^"u  
的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外 fhdqes])  
KDf#e3  
连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。 W}7Uh b  
U7fNA7#x"  
如下面使用左外连接将论坛内容和作者信息连接起来: M a{@b$>  
Vnb@5W2\  
SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b 9!r0uU"  
C\Ob!sv%H  
ON a.username=b.username N*PJ m6-  
SMd[*9l [  
下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市: `6YN/"unfp  
xHx_! )7  
SELECT a.*,b.* PxWH)4  
PktnjdFV  
FROM city as a FULL OUTER JOIN user as b TZn5s~t  
-W/D Cj<  
ON a.username=b.username -ciwIS9L  
[EVyCIcY,h  
(三)交叉连接 BTO l`U  
W?N+7_%'  
交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数 Zu~t )W  
;$]a.9 -  
据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。 qauvwAMuX  
-J'ked  
例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等 "9~KVILlLu  
-nD} k  
于6*8=48行。 < uV@/fn<  
7)>L#(N  
SELECT type,pub_name _ Fk^lDI-  
%Zfh6Bl\X  
FROM titles CROSS JOIN publishers RZ9_*Lq7+  
1} _<qk9  
ORDER BY type
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水

简单生活
执著追求
别笑我浅溥,天真的以为用一腔真诚就能感动这个冷漠的世界。
也别说我幼稚,竟想用不长的人生去诠释繁杂的红尘。
然而除了真诚,我还能给你什么,的确我真的一无所有!

描述
快速回复

您目前还是游客,请 登录注册
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
认证码:
验证问题:
3+5=?,请输入中文答案:八 正确答案:八