赛迪网技术社区 » NCRE论坛 » 关系数据库标准语言SQL(查询功能)---vfp 转到动态网页
--> 本页主题: 关系数据库标准语言SQL(查询功能)---vfp 返回 | 悬赏 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题
linsu




用户名: linsu
级别: 助理工程师
精华: 0
发帖: 70
经验值: 57 点
积分: 522 分
贡献值: 0
注册时间:2006-07-12


关系数据库标准语言SQL(查询功能)---vfp


发这个帖子的主要目的是怎样书写SQL语句,怎样分析题意! -a6V3 __;  
$A(%vARq2  
SQL的核心是数据查询。SQL的查询命令也称做SELECT 命令,它的基本组成形式由SELECT------FROM------WHERE 查询模块组成。 E 3Q4aQ'  
   ***把请求转换到SQL*** D |4N>"  
我们的顾客在那些城市? bVLIdN  
Which cities do our customers live in? =v{An'w  
给出当前雇员及其电话号码的列表。 cqQzm  
Show me a current list of our employees and their phone number ;[P\#7`Bv  
我们现在开那些类别的课 +]DS$~  
what kind of classes do we currently offer? o8<,`[r`v  
       一旦知道想要的是什么信息,就可以把请求翻译成比较正式的语句。转换形式如下: 'IL9$SD  
   SELECT <ITEM> FROM <SOURCE> G*w54$f\y  
把诸如“LIST 列出”,“SHOW ME 请列出,给我看”,“WHAT 什么”,“WHICH 哪一个”,“WHO 谁”等等这样的词用SELECT 来代替。若是字段字段 ,用它代替<itme>。若是表名,用它替换<source>。 [Km!Os  
   结果语句看起来就类似于: AqVr+q  
   SELECT CITY FROM THE CUSTOMERS TABLE mCG|fD~J  
   删除不要的字词 a5F@+wn|e  
SELECT CITY FROM THE CUSTOMERS TABLE ?Mm}a^t3  
SELECT CITY FROM CUSTOMERS p9$[!Mv];A  
不难看出一个SQL命令经历 “翻译”-“整理”-“SQL”三个过程。 AX^cHVt]  
2`8-LmMk  
k8$ru%bs  
简单的查询 9l"|b9"c  
BqEAZm  
A.SELECT   FROM   =az$hO&F  
B.消除相同的数据(行) A >^WGF   
   SELECT DISTINCT COLUMN_NAME FROM '; o^,!  
C.对数据排序(找最大值,最小值) (@Bs lFj~  
   SELECT   FROM   ORDER BY COLUMN_NAME1,COLUMN_NAME2 eLb I*pNP  
D.查询满足某些条件的数据 3vN X@  
SELECT   FROM     WHERE .S<3oQNw  
①    比较       where > <   = Wt0O%@&  
②    相等和不等   where   =   !=   <> ^x^1`um  
③    大于小于   where >   < xe3mN6B  
④    范围(BETWEEN   AND) where COLUMN_NAME between 1220 and 1240 .SJ}I'5]!  
⑤    NOT 排除       where COLUMN_NAME NOT Fx0ai-0`{  
⑥    IN 在范围内       where COLUMN_NAME IN iAsDT*  
⑦    AND OR       where   AND U N _3,i[  
b1p C[ #n+  
E.查询满足某些条件的数据并排序 =zllU$]9:  
SELECT   FROM     WHERE 表达式   ORDER BY {_D"Xfc  
F.简单的计算 6stR]8  
COUNT() 记数       SUM() 求和               AVG() 平均值     )hH8F/;  
MAX() 最大值       MIN() 最小值 \|a:94lM  
F:B9mIT&  
简单的联接查询 e*NYB5U++  
问题: tOh*#q&{  
找出工资多于1230元的职工号和他们所在的城市. S;&;MY  
分析: J(sXs_4V@w  
所要查找的信息来自职工和仓库两个表,此类查询一般用连接来查询. ,5"wW.m~  
^ G^;fnF  
联接是关系的基本操作之一,联接查询是一种基于多个表(关系)的查询. 6AJbV  
@q~ vJ%%  
SELECT 职工号,城市 FROM 职工,仓库; !&RZdfq@  
WHERE 工资>1230 AND 职工.仓库号=仓库.仓库号 ;5kuW_(D  
Z{r"o2  
这里的   职工.仓库号=仓库.仓库号 是联接条件. "k) O@  
< ]Ae:"  
   找出工作在面积大于400的仓库的职工号以及这些职工所在的城市. Cu-~|I"  
  Z\g GjR3  
超联接查询 X' Kp!|]_  
超连接:首先保证一个表中满足条件的元组都在结果表中,然后将满足联接条件的元组与另一个表的元组进行联接,不满足的联接条件的则将应来自另一表的属性值为空。 V6V/e@r  
   SQL中超联接的运算符号是“*=”和“=*”,其中“*=”是左联接,“=*”为右联接。 8On5.!k5  
VF不支持超联结运算符(“*=”和“=*”),但VF提供专门的语法格式 d0T)Q-VVT  
iw=c?h  
SELECT….. 7zLxQ$QlX  
FROM TABLE INNER|LEFT|RIGHT|FULL JOIN TABLE bf>k=Nq  
ON JION jFg}Ssp  
WHERE Z1B4 c5~:  
pg-nR POTs  
INNER JOIN 等价于 JOIN ,为普通联接,在VF中称为内部联接  Ay9 {  
LEFT JOIN 为左联接 KoTE!/tv0  
RIGHT JION    为右联接 m?SI<qko  
FULL JION 全联接 {gLtTZDNM  
ON 连接条件 9/,:^0YZ  
xfI1&r>8  
.qv#dc]  
内部联接,只有满足条件的记录才出现在结果中 ^'ilmP  
pFQedi1  
SELECT 仓库.仓库号,城市,面积,职工号,工资; 1F4Py:  
FROM 仓库 JOIN 职工; c;Q0cB  
ON 仓库.仓库号=职工.仓库号 o oJ7.YOf  
等价于 5OJ<?yOJvw  
SELECT 仓库.仓库号,城市,面积,职工号,工资; |S*\a7[G  
FROM 仓库 INNER JOIN 职工; >gZs%B|U  
ON仓库.仓库号=职工.仓库号 c'] !1*:  
等价于 0 rKhmg!  
SELECT 仓库.仓库号,城市,面积,职工号,工资; C^3O W  
FROM 仓库 ,职工; kop@AdX\  
WHERE仓库.仓库号=职工.仓库号 YGE.   
Jq iE E)  
 ~X0hD  
左联接,即除满足联接条件的记录出现在查询结果外,第一个表中不满足条件的记录也就出现在查询结果中 s#4 !{%3  
SELECT 仓库.仓库号,城市,面积,职工号,工资; Si@j3W;c  
FROM 仓库 LEFT JOIN 职工; Nu%^NpQ=  
ON 仓库.仓库号=职工.仓库号 V(Z xC  
vhVS@]CU  
右联接,即除满足联接条件的记录出现在查询结果中外,第二个表中的不满足条件也出现在查询结果中 |t7]Zlg  
给职工表中插入一个记录 WH8,E8,1200 B^cYK)P4  
SELECT 仓库.仓库号,城市,面积,职工号,工资; cpn~X)  
FROM 仓库 RIGHT JOIN 职工; [ nL  
ON 仓库.仓库号=职工.仓库号 xn_Tf=qg^  
/$3}l7Ae  
全联接,将满足条件的记录显示,两个表中不满足的都显示出来 <XMOStB u  
SELECT 仓库.仓库号,城市,面积,职工号,工资;  j9eXNsA  
FROM 仓库 FULL JOIN 职工; WshY/#  
ON 仓库.仓库号=职工.仓库号 F ?3Cm<m  
37@/ | X  
)q+~TPF  
多表联结 qO :/r T  
Od`;{kZ~  
嵌套查询 *<&D*>   
问题: Em_$,IcCR  
   查找那些城市至少有一个仓库的职工工资为1250元 k*n<Cyx  
分析: MbX@\4B  
   表面上看好象是在从仓库表里查询城市字段,但其实使用了两个表仓库和职工表,并且条件来自另一个表。检索仓库表中的数据,但是依赖职工表中的字段值。这时使用SQL的嵌套查询比较方便。  =j|(p  
解题思路: ^maM`}vt@o  
   用人工的方式查询所要的记录 ~(nt-m}  
   相当于现在要查询的数据是 )kL(y<_C  
   SELECT 城市 FROM 仓库 WHERE 仓库 IN ("WH1","WH2") sSCh2S\|  
   用嵌套查询此题 #_xB% *YM  
   SELECT 城市 FROM 仓库 WHERE 仓库 IN ; |#P|p3E  
   (SELECT 仓库号 FROM 职工 WHERE 工资=1250) xF(gN"5h'  
=C:$l;C  
1.    查询出满足要求的字段值 *t1? FH  
2.    两个表所关联的字段 ],q?*`Ux?h  
3.    使用 IN 运算 (IN运算相当于数学集合中的∈) [+TiTm?9  
-XV~!,'bh  
问题: CeF)Fei  
查询所有职工的工资都多于1210元的仓库信息 +[,XjLid  
分析: vnU$T!B=9  
   要查询的是每个仓库的职工的工资都要多于1210元,有一个人的工资不满足这个条件,这个仓库的相关信息都不会显示出来。 f\ 2i8-pf  
   是不是可以这样查询,只要找到仓库职工的小于等于1210元,然后把他们排除到,剩下的就是我们所要的数据。 CDPgbYgD  
   SELECT * FROM 仓库 WHERE 仓库号 NTO IN; i n6!X CMs  
(SELECT 仓库号 FROM 职工 WHERE 工资<=1210) '{M[&cZO  
=vXPlqu  
作对了吗? ^RS.yAl N  
有没有排除那些没有职工的仓库信息。 Unw9qdXq  
SELECT * FROM 仓库 WHERE 仓库号 NTO IN; "_d+fV df  
(SELECT 仓库号 FROM 职工 WHERE 工资<=1210); k-N;{%C#3  
AND 仓库号 IN (SELECT 仓库号 FROM 职工 ) WWy}C^|!0  
_Vvep^2HX  
练习: ,,WnIknc  
1.    找出和职工E4挣同样工资的所有职工 sfJ0F^{?  
2.    根据TXL和JSH表,查询出单位是“南京大学”的所有教师的姓名、职称、电话 A /aBM&X e  
!|? p'E  
#>SSBg }v  
8O3cx M^7%  
利用空值查询 y?D3V@y)o  
查询出尚未确定供应尚的订购单 )\J> k{g  
   SELECT * FROM 订购单 WHERE 供应商号 IS NULL u*-pvzH  
20CmeVWP  
查询的保存 (-lYA]  
J %>`s  
into table   into cursor   to file

本贴标签:
顶端 Posted:2006-07-14 08:02 | [楼 主]
adam_chenzh




用户名: adam_chenzh
级别: 技术菜鸟
精华: 0
发帖: 9
经验值: 9 点
积分: 18 分
贡献值: 0
注册时间:2007-05-28



正在找呢,谢谢先

顶端 Posted:2007-05-28 10:42 | 1 楼

 赛迪网技术社区 -> NCRE论坛
快速发帖 顶端
内容
HTML 代码不可用

使用签名
Wind Code自动转换

字数检查 恢复数据
按 Ctrl+Enter 直接提交
表情 [更多]