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

[原创]SQL查询语句使用

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

一、简单查询 Z]bG"K3l  
v.vkQQ0[9  
简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的 7+@-mJMP$D  
&2[Xu4*  
表或视图、以及搜索条件等。 L:mE)Xq2  
N#)Klq87z  
例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。 3O1Lv2)_  
2EN}"Du]mj  
SELECT nickname,email U:eX^LE7  
br 3-.g  
FROM testtable ycki0&n3  
P2iuB|B@  
WHERE name='张三' P$N5j~*  
@qjN>PH~  
(一)选择列表 bi+g=cS  
"rEfhzmyF  
选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变 jq8TfJ|   
8fBhX,1  
量和全局变量)等构成。 *P]]7DR  
.d$Q5Qae  
1、选择所有列 '@w'(}3!3R  
f}4A ,%:1  
例如,下面语句显示testtable表中所有列的数据: =2DK?]K;  
'+j;g  
SELECT * llh +r?  
|M t2  
FROM testtable V>Xg\9B_  
:pz@'J  
2、选择部分列并指定它们的显示次序 nnE'zk<"  
V=5*)i/  
查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。 CyHHV  
+/kOUz/]  
例如: B B'qbX3xK  
Ie=gI+2  
SELECT nickname,email K"5q387!  
61&{I>~1  
FROM testtable YRf$?xa  
+oO7UWs>6  
3、更改列标题 $]}K;  
;#IrHR*Bk  
在选择列表中,可重新指定列标题。定义格式为: K7(k_4  
>hq{:m  
列标题=列名 Y"KJ`Rx  
&b*v7c=o  
列名 列标题 ,,80nW9E  
LikCIO  
如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列 matm>3n  
Z1+Ewq3m  
标题: O{7#Xj :_  
3vAP&i'I  
SELECT 昵称=nickname,电子邮件=email <gH-`3 J6  
0pW;H|h  
FROM testtable ]GCw3r(!  
1|ddG010  
4、删除重复行 YPq:z"`-y4  
.V0fbHYTJ  
SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认 G?\eO&QG{"  
Ex*{iJ;\  
为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。 {}iS5[H]  
u8|CeA  
5、限制返回的行数 3$:F/H  
}aXSMxCd  
使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是 ,WnZ^R/n  
'/9MN;_  
表示一百分数,指定返回的行数等于总行数的百分之几。 /YJBRU2  
J&JZYuuf  
例如: @W @,8e]c  
zw$\d1-+h  
SELECT TOP 2 * I5g|)Y Q  
3="vOSJ6&  
FROM testtable 4!xRA''  
`v<S  
SELECT TOP 20 PERCENT * 1{d;Ngx  
yI07E "9  
FROM testtable Fn4yx~0  
F6Q%<p a  
(二)FROM子句 fz|_c*&64  
fGs\R]  
FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图, sMUpkU-  
GVn'p Wg  
它们之间用逗号分隔。 7 <]YK`a2d  
"zTy_0[;  
在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列 h&d"|<  
gp$Rf9\  
所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应 F]>+pU  
v.TgB)  
使用下面语句格式加以限定: xE!0p EHd  
8@S]P0lk  
SELECT username,citytable.cityid ~=[5X,Ta  
U#iW1jPE2  
FROM usertable,citytable @]2aPs} }6  
'o0o.&/=  
WHERE usertable.cityid=citytable.cityid F9% +7Op^  
xSlgq|8  
在FROM子句中可用以下两种格式为表或视图指定别名: zzo93d  
`ZM$\Q=:  
表名 as 别名 8)pL0bg  
J9j @V4  
表名 别名 VnB HQ.C  
;XjXv'  
例如上面语句可用表的别名格式表示为: _!Tjb^  
<Uf`'X\e6  
SELECT username,b.cityid Cd]A1<6s  
'X6Y!VDd  
FROM usertable a,citytable b P(Zj}tGN  
Df*<3G  
WHERE a.cityid=b.cityid KQ81Oxu*C  
d=uGB"  
SELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。 C|w<mryx  
H`URJ8k$Q  
例如: 0_+ & [g}  
}-XZ1qr  
SELECT a.au_fname+a.au_lname {+d)M  
~[og\QZX  
FROM authors a,titleauthor ta g`C8ouy  
W _Hoa*~  
(SELECT title_id,title .;ofRx<  
jJt4{c  
FROM titles CH| cK8q  
5M5vxJ)Lh  
WHERE ytd_sales>10000 8+".r2*_iO  
fB,eeT1v?h  
) AS t $ywROa]  
0a<h,s0"2  
WHERE a.au_id=ta.au_id 8tna<Hx  
Gx}`_[-  
AND ta.title_id=t.title_id r#& JfAo  
n|DMj[uT  
此例中,将SELECT返回的结果集合给予一别名t,然后再从中检索数据。 T9]0/>  
x FM^-`7  
(三)使用WHERE子句设置查询条件 k4u/v n`&r  
qP##C&+#q  
WHERE子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据: "XLtrAu{  
~%M*@ fm  
SELECT * shy[>\w  
)uR_d=B&  
FROM usertable +c C. ZOS  
Dr=$}Y  
WHERE age>20 ~!g2+^G7+P  
Jmg9|g!f  
WHERE子句可包括各种条件运算符: 1-PlRQs.1  
(3!6nQj-t  
比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!< z#P`m,~t0  
`{ HWk^  
范围运算符(表达式值是否在指定的范围):BETWEEN…AND… k\j_hu  
.\ya  
NOT BETWEEN…AND… WQiRbbX  
soQ[Zg4}  
列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2……) O`GF |  
r%ebC   
NOT IN (项1,项2……) P?n4B \!  
^EkxZ4*g  
模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE 7l =Tl[n  
~OvbMWu  
空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL H<<t^,E^.t  
mT UoFXX[  
逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR =2QP7W3mg<  
:&'jh/vRN  
1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30 7ZyP  
r7R.dD /.  
2、列表运算符例:country IN ('Germany','China') =_m3 ~=Z  
3RvDX p  
3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、 mv~?1aIKD  
XOI"BLd  
varchar、text、ntext、datetime和smalldatetime等类型查询。 )rAJ>;  
.j^BWr  
可使用以下通配字符: T{m) = (q  
)X|)X,~+-  
百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。 rKFnivGT  
BKb#\(95*  
下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。 $U9]v5  
j3N d4#  
方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。 N|>JLZ>  
.QZjJ9pvK  
[^]:其取值也[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。 /BQqg0 8@L  
Umzb  
例如: #>,E"-]f  
6aHD?a o  
限制以Publishing结尾,使用LIKE '%Publishing' +/RR!vG,  
t0@AfO.'1  
限制以A开头:LIKE '[A]%' Jp}\@T.  
5p:BHw;%;  
限制以A开头外:LIKE '[^A]%' IpSWg  
4KR`  
4、空值判断符例WHERE age IS NULL )1Y?S;  
lz<' L. .  
5、逻辑运算符:优先级为NOT、AND、OR 8Q)|8xpYS  
w $-q&  
(四)查询结果排序 {7]maOg>7J  
pmWy:0R  
使用ORDER BY子句对查询返回的结果按一列或多列排序。ORDER BY子句的语法格式为: v@q&B|0  
.|hsn6i/-  
ORDER BY {column_name [ASC|DESC]} [,…n] |3T2}ohrr  
[+R_3'aK  
其中ASC表示升序,为默认值,DESC为降序。ORDER BY不能按ntext、text和image数据类型进行排 >1Hv c7DP  
 8 zlvzp  
序。 Z}>F V~4  
_(8#  
例如: !5?_)  
_Z9 d.-  
SELECT * 4'*.3f'bp  
_xm<zy{`S  
FROM usertable BN%cX 2j  
%*npLDi  
ORDER BY age desc,userid ASC Z}\,rex  
6S_mfWsi  
另外,可以根据表达式进行排序。 [TUs^%2@  
<;?1#ok  
  rTVv6:L  
ZN;ondp4  
二、联合查询 ISFNP&& K  
3BD&;.<r  
UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联 [r3sk24  
Eri007?D  
合查询。UNION的语法格式为:  4uMMf  
An0N'yo"Z  
select_statement '\op$t/  
jN*wbqL  
UNION [ALL] selectstatement {J,"iJKop  
%cUC~, g_(  
[UNION [ALL] selectstatement][…n] jn ztCNaX  
4:a ~Wlp[  
其中selectstatement为待联合的SELECT查询语句。 a)=|{QR>W  
(?^F }]  
ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一 ^p9V5o  
F!u)8>s+z{  
行。 IO 0nT  
\aM-m:J  
联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语 myN2G?>;  
Z8Y& #cB  
句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。 9{j`eAUZl  
lZ[J1:%  
在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选 >4kQ9lXL  
eZ[Qhrc  
择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类 c_+fA  
6fI2y4yEz  
型,系统将低精度的数据类型转换为高精度的数据类型。 $|J+  
7 L ,`7k|  
在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如: 6Y,&q|K  
MaY_*[  
查询1 UNION (查询2 UNION 查询3) %$Py@g  
B; NK\5>  
  G7+{O7  
z;?jKE p  
  G/},lUzLg  
O-W[^r2e  
三、连接查询 0)b1'xt',  
"9aFA(H6w  
通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型 er-0i L@  
Vjt7X"_/  
数据库管理系统的一个标志。 tx9 %.)M:n  
W5Pur lu?  
在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在 HpIi-Es7C  
ILH[q>  
一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带 5EI"5&`*  
mk!8>XvM  
来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行 w42{)S"  
0n`Temb/  
查询。 sH2xkUp  
/|UbYe,  
连接可以在SELECT 语句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出连接时有助于 <bg6k .s  
{Ke IYjE  
将连接操作与WHERE子句中的搜索条件区分开来。所以,在Transact-SQL中推荐使用这种方法。 +$(y2F7|u-  
wA/!A$v(  
SQL-92标准所定义的FROM子句的连接语法格式为: uuD2O )v  
\I4Uj.'> \  
FROM join_table join_type join_table W?E,"z  
y_q1Y70i2r  
[ON (join_condition)] L / WRVc6  
iM:-750n/  
其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一 G:lhrT{  
ps,Kj3^T<  
个表操作的连接又称做自连接。 zZRLFfz<9  
t B`"gC~  
join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。内连接(INNER JOIN)使用比  f-[.^/  
Ps\4k#aOv  
较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用 R_GA`U\ {  
,%xat`d3,3  
的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。 N2[jBy8M  
bDh4p]lm  
外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN) C Q iHk  
UukY9n];]  
和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹 noa+h<vGb  
r1RM7y  
配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的 2h*aWBLk  
)T gfd5B  
数据行。 7p':a)  
. a @7  
交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的 mSu$1m8  
*& );-r`.  
数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。 Sw-2vnSdM  
Z> Rshtg  
连接操作中的ON (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑 %Y'/_ esH2  
q8/k $5E  
运算符等构成。 [kr-gV  
r^rk@W;[  
无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接 5? Y(FhnIC  
PlA#xnq#  
连接。例如: 8L/XZ)  
eS ?9}TG|  
SELECT p1.pub_id,p2.pub_id,p1.pr_info upk_;ae  
z~p!7q&g  
FROM pub_info AS p1 INNER JOIN pub_info AS p2 40].:9VG  
udr|6EjD.  
ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info) s/11 TgJ  
w?nSQBz$  
(一)内连接 w;AbJCv2  
G@jx&#v  
内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分 4Jc~I  
Bt$,=k  
三种: $qg2@X.  
pMViq0  
1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接 Q7v1xBM  
iRG6Cw2  
表中的所有列,包括其中的重复列。 zlQBBm;fE  
"o u{bKe  
2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些 i-4L{T\K  
2MYez>D  
运算符包括>、>=、<=、<、!>、!<和<>。 lAC "7 Z?F  
j^U"GprA  
3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询 tIod=a)  
Zj ^e8u=T  
结果集合中所包括的列,并删除连接表中的重复列。 T<Zi67QC@  
5i'?oXL  
例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社: L5KcI  
KY%qzq,n  
SELECT * a#CjGj)  
:-hVbS0I  
FROM authors AS a INNER JOIN publishers AS p S-Vxlku]  
=c&.I}^1L  
ON a.city=p.city FdEUZ[IT`{  
%Q]thv:  
又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state): ,g"JgX  
2dJE` XL  
SELECT a.*,p.pub_id,p.pub_name,p.country Rx&.,gzj[  
A8S9HXL  
FROM authors AS a INNER JOIN publishers AS p 3syA$0TZt  
a;~< iB;3"  
ON a.city=p.city /#eS3`48  
"66#F  
(二)外连接 J[S!<\_!  
Nqd9)WQ  
内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件 N,VI55J:y>  
En&gI`3n  
的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外  eBmHb\  
PGYx] r  
连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。 +tg${3ti_  
Rm$(X5x>o  
如下面使用左外连接将论坛内容和作者信息连接起来: Lrr(7cH,  
*(]ZdB_2  
SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b `}$bJCSF.n  
Jx`7W1%T  
ON a.username=b.username +eLL)uk  
ubVZEsoW?  
下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市: K g.O2F77  
`0q=Z],  
SELECT a.*,b.* 7z/O#Fbs  
-w)v38iX!  
FROM city as a FULL OUTER JOIN user as b /f+BeQ3#/  
hPgYKa8u  
ON a.username=b.username pSYEC,0B  
SsfC m C  
(三)交叉连接 CMv8n@ry  
V;J3lV<  
交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数 6^BT32,'  
-G_3B(]`  
据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。 {KEmGHC4R  
H%Lln#  
例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等 wHx_lsY;   
8.IenU9  
于6*8=48行。 ty%,T.@e  
^4<&"aoo  
SELECT type,pub_name }m Ub1b  
Q~' \oWz  
FROM titles CROSS JOIN publishers 2!b##`UjA7  
`Nz`5}8.?  
ORDER BY type
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水

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

描述
快速回复

您目前还是游客,请 登录注册
批量上传需要先选择文件,再选择上传
认证码:
验证问题:
10+5=?,请输入中文答案:十五