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

[原创]SQL查询语句使用

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

一、简单查询 KrTlzbw&p\  
![[:Z  
简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的 P$__c{1\  
\O>;,(>i  
表或视图、以及搜索条件等。 <UW-fI)X  
n2opy8J#!  
例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。 tB0f+ wC  
Z1\=d=  
SELECT nickname,email < ?rdhx  
*Xu?(Jd  
FROM testtable Q2gz\N  
qz-lQ  
WHERE name='张三' B I>r'  
L>`inrpz=w  
(一)选择列表 >b*}Td~J  
:dlG:=.W  
选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变 bz\nCfU  
H9=8nLb.  
量和全局变量)等构成。 7U)w\A;~  
g s%[Cv  
1、选择所有列 %pxHGO=)E  
GS GaYq  
例如,下面语句显示testtable表中所有列的数据: aqP"Y9l  
6(B[(Af  
SELECT * >Qf`xUZ  
Z(ToemF)hi  
FROM testtable Xq$9H@.  
D'Kiy  
2、选择部分列并指定它们的显示次序 q] '2'"k  
!imjfkG  
查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。 ?KFj=Yo  
9+'*  
例如: 2 o5u02x  
z7JhS|  
SELECT nickname,email \uOR1z  
_BND{MsX  
FROM testtable jq[Q>"f  
.|LY /q\A  
3、更改列标题 d`xDv$QZ  
;C5 J ^xHI  
在选择列表中,可重新指定列标题。定义格式为: ](k}B*Ab h  
/,9n1|FrG  
列标题=列名 AR)A <  
/6'5uP   
列名 列标题 )4FW~o<i  
xQs._YY  
如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列 X<:Zx#J?i  
:W[d&e  
标题: s&W^?eKr  
=nUzBL%~  
SELECT 昵称=nickname,电子邮件=email ;+~Phdy  
tIW~Ng  
FROM testtable j[$+hh3:  
Mir( }E  
4、删除重复行 <OGXKv@  
TdrRg''@  
SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认 m>^#:JK  
$*+`;PG-  
为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。 ?fvK<0S`  
(+9^)No  
5、限制返回的行数 o[k,{`M0  
Uclta  
使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是 KCS},X_  
"IzM:  
表示一百分数,指定返回的行数等于总行数的百分之几。 e~G um  
z#srgyLt  
例如: o+T, O+i  
}\.Z{h:t ?  
SELECT TOP 2 * +Y440Tz  
DP &*P/  
FROM testtable wN$u^]  
NU%W9jQYS  
SELECT TOP 20 PERCENT * M~djX} #\  
jGKI|v4U(  
FROM testtable ,Y27uey{wa  
joJQ?lG  
(二)FROM子句 =R||c  
}b]z+4U a(  
FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图, QzD8 jk#  
'zx1kq1  
它们之间用逗号分隔。 q=/ck  
O.'\GM  
在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列 dQPW9~g8Hg  
HA GpM\Qa  
所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应 @l&>C#K\  
w*IDL0#  
使用下面语句格式加以限定: Kfs|KIQ>=  
VuA)Ye  
SELECT username,citytable.cityid @<=<?T> 1  
0`kaT ?>  
FROM usertable,citytable K7] +. f  
LX;" Mz>  
WHERE usertable.cityid=citytable.cityid =U3rOYbP;  
, n47.S  
在FROM子句中可用以下两种格式为表或视图指定别名: b,-qyJW6  
Y~-P9   
表名 as 别名 ck#MpQ!An  
 uzaD K  
表名 别名 ~|=goHmm[  
PG'+vl  
例如上面语句可用表的别名格式表示为: \t%rIr  
m7.6;k.  
SELECT username,b.cityid +{H0$4y  
)\fLS d  
FROM usertable a,citytable b P~OD d(  
,(Nr_K  
WHERE a.cityid=b.cityid //- ;uEO  
U<.,"`=l  
SELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。 $g]'$PB  
}:4b_-&Q5  
例如: ^n<o,K4\}  
T8-,t];i  
SELECT a.au_fname+a.au_lname -gy@sSfvkv  
K_CE.8G&{  
FROM authors a,titleauthor ta (2p<I)t  
cP`[/5R  
(SELECT title_id,title q# t&\M.U  
S3.76&  
FROM titles geSH3I   
f|'8~C5I@>  
WHERE ytd_sales>10000 @0U={qX  
.u$o^; z!  
) AS t F4 :#okt  
FR? \H"'x  
WHERE a.au_id=ta.au_id 2H2Yxe7?-  
PNhxF C.  
AND ta.title_id=t.title_id [vyi_0[  
>}6V=r3[+  
此例中,将SELECT返回的结果集合给予一别名t,然后再从中检索数据。 5 p! rZ  
hSF4-Vvb  
(三)使用WHERE子句设置查询条件 _!Ir|j.A  
h!q_''*;  
WHERE子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据: $ {5|{`  
<t"|wYAa_  
SELECT * IO}53zn<l  
wJu,N(U  
FROM usertable vC>8:3Z aq  
8AuOe7D9A  
WHERE age>20 Q,< V)  
>`=<(8bu  
WHERE子句可包括各种条件运算符: e)A-.SRiO$  
J0O wzO  
比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!< xty)*$C>  
="__*J#nze  
范围运算符(表达式值是否在指定的范围):BETWEEN…AND… 6z ,nt  
BoHpfx1C  
NOT BETWEEN…AND… u#~q86k  
K *xca(6  
列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2……) B4 +A  
_ 2E*  
NOT IN (项1,项2……) #/LU@+  
fsz:A"0H  
模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE 9@yi UX  
.p$tb2%r  
空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL {bD:OF  
6Us*zKgW  
逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR U3b&/z|b?  
}?^5L7n  
1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30 +X|^ ~)tMJ  
:DoE_  
2、列表运算符例:country IN ('Germany','China') w-wap  
/7jb&f   
3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、 m%)Cw)t 7  
II) K0<  
varchar、text、ntext、datetime和smalldatetime等类型查询。 %+0V0.  
nX|]JW  
可使用以下通配字符: vj hh4$k  
<%GfF![v  
百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。 >dYN@cB$}  
d_aHUmI^"  
下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。 $s"{C"4q  
4"~l^yK  
方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。 Z|6,*XEc   
$BUm,  
[^]:其取值也[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。 s{ dgUX  
bTbF  
例如: UNJAfr P  
hG8<@  
限制以Publishing结尾,使用LIKE '%Publishing' lNba[;_  
s5 ($b  
限制以A开头:LIKE '[A]%' $ n"*scyI  
3+oGR5gIN  
限制以A开头外:LIKE '[^A]%' pRH'>}rtuH  
;\(X;kQi  
4、空值判断符例WHERE age IS NULL .-4]FGg3  
bd)'1;p  
5、逻辑运算符:优先级为NOT、AND、OR U2vM|7 ]VP  
, Aw Z%  
(四)查询结果排序 j`:D BO&)\  
DuI>z?bS  
使用ORDER BY子句对查询返回的结果按一列或多列排序。ORDER BY子句的语法格式为:  /wT<p  
y ]D[JX[  
ORDER BY {column_name [ASC|DESC]} [,…n] U\GuCw  
6'45c1e   
其中ASC表示升序,为默认值,DESC为降序。ORDER BY不能按ntext、text和image数据类型进行排 WO!'("  
pxb4x#CC  
序。 8KMo!p\i  
r<c&;*  
例如: P87Lo4R d  
Q.} guI\  
SELECT * }BI|M_q.1~  
kcG_ n  
FROM usertable iOJ5KXrAO  
7^W(es  
ORDER BY age desc,userid ASC OAo;vC:^  
9>9,   
另外,可以根据表达式进行排序。 yV?qX\~*  
K7c[bhi_w  
  j06qr\Es  
vo>i36  
二、联合查询 {@ Z=b 5/P  
oe<DP7e  
UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联 8e32NJ^k~  
X+kgx!u'y  
合查询。UNION的语法格式为: 3*=_vl3  
/I &wh  
select_statement 5jAS1XG  
%00cC~}4  
UNION [ALL] selectstatement 2;ju/9 x  
i|[**P  
[UNION [ALL] selectstatement][…n] ],s{%a5wC  
X.+|o@G  
其中selectstatement为待联合的SELECT查询语句。 5 BLAa1  
\>[k0<  
ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一 b} FhC"'i  
vEw8<<cgg  
行。 M@+Pq/f:  
_F},Wp:Oh  
联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语 .t7ME{  
X^Fc^U8  
句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。 ?&?5x%|.<  
Y.kgJ #2  
在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选 M;9s  
PUmgcMt  
择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类 FxmHy{JG  
OJiwI)a9  
型,系统将低精度的数据类型转换为高精度的数据类型。 lokKjs  
9DdR"r'7  
在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如: nh*6`5yj  
hBi/lHu'  
查询1 UNION (查询2 UNION 查询3) L7]o^p{g}Q  
'0w</g  
  i>O8q%BnJ  
Xo$SQ0K  
  mDx=n.lIz  
]=ADX}  
三、连接查询 RT|1M"?$  
{krBAz&  
通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型 " v<O)1QT  
^?NLA&v<  
数据库管理系统的一个标志。 AuT:snCzR  
%{-r'Yi%  
在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在 8([ MR  
c:aW"U   
一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带 0:`*xix  
QP/ZD|/ t1  
来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行 G=]ox*BY  
V*DDU]0k  
查询。 &0i$Y\g  
}U'  
连接可以在SELECT 语句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出连接时有助于 mLx=Zes:.  
d$"?8r4:K  
将连接操作与WHERE子句中的搜索条件区分开来。所以,在Transact-SQL中推荐使用这种方法。 ,^RZ1tLz  
""A6n{4  
SQL-92标准所定义的FROM子句的连接语法格式为: [bw1!X3  
\)?+6D'#  
FROM join_table join_type join_table SlG^ H  
j WSgO(y  
[ON (join_condition)] }Ogb|8  
JIIc4fyy8s  
其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一 hpgOsF9Lh  
%o 5'M^U  
个表操作的连接又称做自连接。 iI>7I<_  
XFYa+]B2q  
join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。内连接(INNER JOIN)使用比 C^;>HAK|F  
H+Aidsn  
较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用 3"juj '  
NeJ->x,  
的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。 'E&tEbY  
 AGm=0Om  
外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN) wJD'q\n  
N<ux4tz  
和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹 !nq`Py MR  
#m17cDL  
配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的 {Kf5a m  
Xmi~fie  
数据行。 qV;I<AM  
KY}H-  
交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的 ltlo$`PR  
*nYg-)  
数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。 "7'P Lo3O  
xZ6x`BET-  
连接操作中的ON (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑 uq ;yR[w"  
\KzH5?  
运算符等构成。 c/igw+L()  
7377g'jL  
无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接 8+J>jZ  
r6kJV4I=re  
连接。例如: J.'%=q(Sb  
mz+UkA'  
SELECT p1.pub_id,p2.pub_id,p1.pr_info fs?H  
;6~5FTmV  
FROM pub_info AS p1 INNER JOIN pub_info AS p2 Eh)VT{vp  
.cHkh^EDY  
ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info) %`QgG   
|}.}q  
(一)内连接 zvVo-{6  
b kc*it  
内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分 hNhEA $X5  
vK[%c A"  
三种: Ctn 4q'Q  
_9JFlBx  
1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接 hO&_VCk  
TEh.?  
表中的所有列,包括其中的重复列。 $8xb|S[  
p_(En4QSH  
2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些 rlGv6)vb  
gO)":!_n W  
运算符包括>、>=、<=、<、!>、!<和<>。 )$1>6C\  
T2/:C7zL  
3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询 a+cDH  
gb|;]mk*"  
结果集合中所包括的列,并删除连接表中的重复列。 IxS%V31  
iPCCTs  
例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社: 7~F~'V  
xQ7U$QF|]  
SELECT * i/skU9  
1. +6x4%rV  
FROM authors AS a INNER JOIN publishers AS p BjagG/ sX  
gnjhy1o  
ON a.city=p.city N'WC!K.e  
J{.UUw9Agd  
又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state): |35OA/O?X  
M2N8?Ycv3  
SELECT a.*,p.pub_id,p.pub_name,p.country hxK;f  
\xbUr`WBY  
FROM authors AS a INNER JOIN publishers AS p B~7!v${  
oda,  
ON a.city=p.city KbtV>  
M;,$ )>P  
(二)外连接 ]gg(Z!|iQ  
(wM` LE(Ks  
内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件 b0YEIV<$  
:)D7_[i  
的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外 DJ@n$G`^^  
q[C?1Kc .z  
连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。 9O:l0 l  
#XA`n@2Uoo  
如下面使用左外连接将论坛内容和作者信息连接起来: g27'il  
9aY8`B  
SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b mHHlm<?]  
nvT@ 'y+  
ON a.username=b.username )t"-#$,@  
IlB8~{p_  
下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市: L/r_MtN  
&=BzsBh  
SELECT a.*,b.* Hj|&P/jY]*  
4&;iORw&E4  
FROM city as a FULL OUTER JOIN user as b BhzDV  
l"%80"zO  
ON a.username=b.username iGu%_-S  
Wz s=BNm9  
(三)交叉连接 flo$[]`.7  
cl2_"O  
交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数 Y55u -9|N  
UJSIbb5  
据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。 8ZVQM7O  
Bskp&NV':  
例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等 .WqqP  
M|K^u.4  
于6*8=48行。 h7!O K  
DkEv1]6JI_  
SELECT type,pub_name T1 $E][@Iv  
p>;@]!YWQ  
FROM titles CROSS JOIN publishers G:":CX"O(  
5EcVW|(  
ORDER BY type
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水

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

描述
快速回复

您目前还是游客,请 登录注册
如果您在写长篇帖子又不马上发表,建议存为草稿
认证码:
验证问题:
3+5=?,请输入中文答案:八 正确答案:八