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

[原创]SQL查询语句使用

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

一、简单查询 p@!@^1j=  
/)eNx  
简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的 B.CH9M  
YUP%K!k  
表或视图、以及搜索条件等。 i-Ge *?  
(50[,:#  
例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。 /e j/&x15  
V PLCic,T  
SELECT nickname,email O>tC]sm%  
O?4vC5x  
FROM testtable =+SVzK,+3  
i+qLc6|S=2  
WHERE name='张三' >yPFL'  
8VAYIxRv  
(一)选择列表 D-2v>l_  
3& fIO  
选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变 <?=mLOo =  
' Z(MV&  
量和全局变量)等构成。 oZ\qT0*eb  
.5#tB*H  
1、选择所有列 p'uqh e X  
K@$L~G  
例如,下面语句显示testtable表中所有列的数据: c],frhmyd  
BC$;b>IUA  
SELECT * cA (e "N  
iz%A0Z+`bg  
FROM testtable ]L%R[Z!3  
kS\.  
2、选择部分列并指定它们的显示次序 U_ ?elz\  
/v;)H#;  
查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。 _:fO)gs|1  
*?R\[59  
例如: mrLx]og,  
/i~^LITH  
SELECT nickname,email d;NFkA(df  
N|Cy!E=d  
FROM testtable :(?hLH.W[  
x[O#(^q  
3、更改列标题 ;KZtW  
7)(`  
在选择列表中,可重新指定列标题。定义格式为: Mn }Z9S[  
1N$gE  
列标题=列名 vX0I^ 8.  
mP$G9R  
列名 列标题 N5rG.6K  
i\Q"a B"r  
如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列 c] >&6-;rf  
&6^W% r  
标题: :2UC{_  
b-(UsY:  
SELECT 昵称=nickname,电子邮件=email :kiO  
64 \5v?C  
FROM testtable >eG&gc@$1$  
Pdm6u73  
4、删除重复行 1={Tcq\]  
ssJDaf79  
SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认 xjhAAM  
r(in]7  
为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。 @<TfA>*VJ  
L5k>;|SA  
5、限制返回的行数 ?'/5%f`  
~~:8Yv[(  
使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是 >5@vY?QXO  
<sCq x/L  
表示一百分数,指定返回的行数等于总行数的百分之几。 \`p~b(  
`w=H'"Zv  
例如: .kKwdqO+zB  
Oc/_ T>  
SELECT TOP 2 * }B '*8^S  
Qhr]eu;z  
FROM testtable F3 l^^ Mc  
^.1VhTB  
SELECT TOP 20 PERCENT * B{o\RNU  
nk3<]u  
FROM testtable "`3 ^M vC  
AB &wn>q  
(二)FROM子句 oJJ k  
/e?ux~f|  
FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图, 8~Hs3\Hp  
#Xw[i  
它们之间用逗号分隔。 k q.h\[  
j _9<=Vu  
在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列 (`y|AOs  
y3[)zv  
所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应 b G5  
x(zZqOed  
使用下面语句格式加以限定: pL/.JzB  
9PGR#!!F$  
SELECT username,citytable.cityid Cbg#Yz~/  
e, 0I~:  
FROM usertable,citytable 6N+)LF}P b  
F4<2.V)#-  
WHERE usertable.cityid=citytable.cityid cTa D{!zm5  
^RAFmM#F  
在FROM子句中可用以下两种格式为表或视图指定别名: ZUJOBjb` K  
g7LW?Ewr  
表名 as 别名 ftH%, /,  
{5IG3'  
表名 别名 u&_U CJCf  
UR2)e{RXg  
例如上面语句可用表的别名格式表示为: yIf}b  
$(L7/M  
SELECT username,b.cityid GXlg%  
<m:wuNEM  
FROM usertable a,citytable b [_hhC  
[=F |^KL  
WHERE a.cityid=b.cityid 6SO7iFS  
+* {5ORq=  
SELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。 F-,{+B66  
fToI,FA  
例如: 'R'a/ZR`B7  
-86:PL(I"  
SELECT a.au_fname+a.au_lname *9(1:N;#  
R./6Q1  
FROM authors a,titleauthor ta K/+C6Y?  
r K)  
(SELECT title_id,title y]4 `d  
 ly%B!P|  
FROM titles i O|,,;_  
^tcBxDC"]  
WHERE ytd_sales>10000 Y(Ezw !a  
~'.yhPo g  
) AS t Fh $&puF2  
9?$!=4  
WHERE a.au_id=ta.au_id k+M-D~@5H  
dKTAc":-}  
AND ta.title_id=t.title_id l*H"]6cXRL  
I'b]s~u  
此例中,将SELECT返回的结果集合给予一别名t,然后再从中检索数据。 BQ0\+  
mxA )r5sx  
(三)使用WHERE子句设置查询条件 DJ0T5VE W3  
qDd/wR,44  
WHERE子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据: RcP5].^T  
:?k=Yr  
SELECT * ta., 4R&K  
82!GM.b  
FROM usertable Kp8T;&<Iay  
2<@!m @  
WHERE age>20 Qo *]l_UO;  
S,RJ#.:F[t  
WHERE子句可包括各种条件运算符: hO@3-SRa,k  
c (8J  
比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!< Vnb#N4vR  
}h6z&:qA[?  
范围运算符(表达式值是否在指定的范围):BETWEEN…AND… htym4\Z=  
Z"+!ayA7D  
NOT BETWEEN…AND… ,0~TvJS  
 U~t(YT  
列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2……) r'\TS U5!  
hz<J8'U  
NOT IN (项1,项2……) F| Q#KwN  
_I4sy=tYXK  
模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE q:.BY}X9  
LWV`xCr8R  
空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL = g}yA=.  
=LnAMl#9  
逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR ]]3D` F}  
-1JHhRr]  
1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30 u`|fmVI  
\]%U?`A  
2、列表运算符例:country IN ('Germany','China') Y&:i^k  
5K{h)* *5  
3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、 `Cxe`w4  
6u7wfAf  
varchar、text、ntext、datetime和smalldatetime等类型查询。 PM7/fv*,  
\/v$$1p2  
可使用以下通配字符: P\e%8&_U/  
I r~X#$Upc  
百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。 2_X0Og8s[  
I&Y(]S,cU  
下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。 :TI1tJS~*  
gBu4`M  
方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。 9G~P)Z!0  
H #_Z6J  
[^]:其取值也[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。 [_n|n"M  
@jKB!z9{  
例如: K>y+3HN[6  
4+Y5u4 `t  
限制以Publishing结尾,使用LIKE '%Publishing' e$=|-J z  
bAp`lmFI  
限制以A开头:LIKE '[A]%' Je,8{J|e  
.U_=LV]C  
限制以A开头外:LIKE '[^A]%' mz1g8M`@[D  
v*3:8Y,  
4、空值判断符例WHERE age IS NULL 2uVm?nm  
Ek3O{<  
5、逻辑运算符:优先级为NOT、AND、OR ^iNR(cwgX  
vaL-Mi(_  
(四)查询结果排序 z@~rm9d  
14RL++  
使用ORDER BY子句对查询返回的结果按一列或多列排序。ORDER BY子句的语法格式为: pjFgIG2=9  
B|v fkX2f  
ORDER BY {column_name [ASC|DESC]} [,…n] n :P}K?lg  
?3#X5WT  
其中ASC表示升序,为默认值,DESC为降序。ORDER BY不能按ntext、text和image数据类型进行排 kWFR(J&R  
xX ZN<<f59  
序。 71_N9ub@z  
_qV_(TpS+  
例如: F <(Y  
#'qW?8d}  
SELECT * R<-KXT9  
+Q.[W`goV  
FROM usertable GfDA5v[  
',f[y:v;  
ORDER BY age desc,userid ASC *"@P2F&  
^s5)FdF8  
另外,可以根据表达式进行排序。 3?:}lY<,  
eIJQ|p<v  
  Z_%>yqDC  
o&=m]hKpQl  
二、联合查询 RW 5T}  
;\h'A(  
UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联 E%TvGe;#  
vsK>?5{C-  
合查询。UNION的语法格式为: H X8q+  
ZYG"nmNd  
select_statement "LYob}_z  
zC7;Zj*k  
UNION [ALL] selectstatement Z\x6  
HO"(eDW6z  
[UNION [ALL] selectstatement][…n] 95}"AIi  
]^!#0(  
其中selectstatement为待联合的SELECT查询语句。 I/'>Bn+  
pxgv(:Tw  
ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一 I8m(p+Z=  
/Mv'fich(  
行。 D3eK!'qS  
Js'|N%pi  
联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语 >Q YxX<W  
@I%m}>4Jm  
句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。 b+kb7  
X:YxsZQ 5Y  
在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选 Z=#!FZ{  
pcE.  
择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类 8_>R'u[  
[* Lh4K  
型,系统将低精度的数据类型转换为高精度的数据类型。 GFvOrRlP\  
D`u{U]  
在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如: GE>&fG  
PWTAy\  
查询1 UNION (查询2 UNION 查询3) 17-K~ybc  
xMe[/7)4  
  s;>jy/o0 s  
-50|r;a  
  by- B).7  
zDX-}t_'q  
三、连接查询 \hg12],#:@  
xSw ^v6!2  
通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型 T3\Q<  
'C(YUlT2?P  
数据库管理系统的一个标志。 X4jtti  
#U^@)g6  
在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在 X"yLo8y8$  
<=WQs2  
一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带 q?`bu:yS  
F*QGzbv)  
来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行 zH.7!jeE  
)H)HR`  
查询。 ondF  
m!g f!  
连接可以在SELECT 语句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出连接时有助于 b?y3m +V`  
=YR/|9(  
将连接操作与WHERE子句中的搜索条件区分开来。所以,在Transact-SQL中推荐使用这种方法。 -e30!A  
< }G7#xg  
SQL-92标准所定义的FROM子句的连接语法格式为: `w2hJP  
90;[5c   
FROM join_table join_type join_table g^=p)h3  
/aP`|&G,)  
[ON (join_condition)] ?,]25q   
oTZNW  
其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一 JBp^@j{_  
"Q ^Ck7  
个表操作的连接又称做自连接。 "+p_{J/P  
VGkwrS;+I  
join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。内连接(INNER JOIN)使用比 5EM(3eY^q  
5Osx__6$t  
较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用 UE5T%zd/  
bP(xMw<'j  
的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。 LJ9^:U  
(z#qkKL{^  
外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN) Ng2qu!F7  
V|)3l7IC<  
和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹 tRFj<yuaq  
]7eQ5[ 5s  
配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的 ^ 14U]<  
m\RU |Z  
数据行。 4u0=/pfi[  
Ru `&>E  
交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的 Z+x,Awq  
/0IvvD!7N  
数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。 !K'j[cA^  
L TzD\C'  
连接操作中的ON (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑 CNwIM6t  
akoK4!z  
运算符等构成。 |wZcVct~  
QX-%<@  
无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接 A!\ g!*  
gs7h`5[es  
连接。例如: cxn3e,d`  
Wxx? iW ,  
SELECT p1.pub_id,p2.pub_id,p1.pr_info {26/SY  
j#hFx+S  
FROM pub_info AS p1 INNER JOIN pub_info AS p2 Yi1lvB?m  
kr[p4X4  
ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info) ux:czZqy  
L )p*D(  
(一)内连接 -{n2^vvF  
 rl"$6{Z}  
内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分 ZCVwQ#Xe+  
`lygJI?H+{  
三种: [uqe|< :  
>$Sc}a3  
1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接 l+`f\},  
~$cz`A  
表中的所有列,包括其中的重复列。 dY[ XNP  
BWRAz*V  
2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些 1$mxMXNsJ  
2^RWGCEv  
运算符包括>、>=、<=、<、!>、!<和<>。 0N9`WK  
,41Z_h  
3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询 8$9Q=M  
ts|dk%  
结果集合中所包括的列,并删除连接表中的重复列。 YD>5zV%!D  
r?Q`b2Q  
例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社: %8C,9q  
nz_=]PHO&  
SELECT * B6qM0QW  
!A_<(M<  
FROM authors AS a INNER JOIN publishers AS p S\wh *'Y  
b~$B 0o)  
ON a.city=p.city P}kBqMM  
$U . >]i  
又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state): }MU}-6  
B:5NIa  
SELECT a.*,p.pub_id,p.pub_name,p.country QEtf-xNn^  
%*:X FB  
FROM authors AS a INNER JOIN publishers AS p "^gV.  
R;yi58Be  
ON a.city=p.city @bfW-\ I  
Ei$?]~ &  
(二)外连接 \Dn47V{7-  
7c.96FA  
内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件 HV0!G-h  
X1wlOE  
的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外 Ku 'OM6D<  
/kZ{+4M  
连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。 mHj3ItXUu  
g#W/WKvM  
如下面使用左外连接将论坛内容和作者信息连接起来: UYw_k\  
l(Y U9dp  
SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b 40?xu#"  
O\~/J/u <  
ON a.username=b.username . W7Z pV  
='rSB.$Ctk  
下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市: GF^)](xY+  
sLHUQ(S!  
SELECT a.*,b.* J`I^F:y*  
bY@ S[  
FROM city as a FULL OUTER JOIN user as b BI|BfO%F$j  
JXhHitUD  
ON a.username=b.username 6Wn"h|S  
:Qc[>:N  
(三)交叉连接 3QZ~t#,7ij  
<i1.W !%  
交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数  <u=k X  
XT "-   
据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。 $E >)  
\h{M\bSIEa  
例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等 HxE`"/~.7k  
Sd9%tO9mf  
于6*8=48行。 U%PII>s'#  
<jjn'*44f  
SELECT type,pub_name q8=hUD%5C  
^.Xom~  
FROM titles CROSS JOIN publishers 'F .tOD  
Fcp8RBq  
ORDER BY type
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水

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

描述
快速回复

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