5.1SQL語(yǔ)言
——只有9個(gè)動(dòng)詞(select , drop, alter, create, insert, update ,delete, grant, revoke )
5.2.1 基本查詢
【格式】SELECT [ALL | DISTINCT] <字段列表> FROM <表> [ORDER BY <字段名> [ASC/DESC] [,<字段> [ASC/DESC]],...]
【功能】無(wú)條件查詢,將記錄顯示在瀏覽窗口中。
【說(shuō)明】ALL: 顯示全部查詢記錄,包括重復(fù)記錄。
DISTINCT: 顯示無(wú)重復(fù)結(jié)果的記錄,將重復(fù)記錄只保留一條。
字段列表:字段1,字段2 AS 別名,函數(shù)或表達(dá)式 AS 列名,......查詢結(jié)果的輸出列;如果將表中所有字段都選擇輸出,則用*代替;在函數(shù)或表達(dá)式中還可以用一些專用統(tǒng)計(jì)函數(shù)
FROM 表:設(shè)定查詢的來(lái)源數(shù)據(jù)
ORDER BY:按指定的字段值大小對(duì)結(jié)果記錄進(jìn)行排序
SQL命令中常用的統(tǒng)計(jì)函數(shù)
- AVG(字段名)——平均值
- MIN(字段名)——最小值
- MAX(字段名)——最大值
- SUM(字段名)——和
- COUNT(*或字段名)——滿足條件的記錄總數(shù),字段名可以不寫(xiě)。
能進(jìn)行統(tǒng)計(jì)的字段必須是表示數(shù)值的數(shù)據(jù)類型。用了統(tǒng)計(jì)函數(shù)后,視情況會(huì)將統(tǒng)計(jì)的記錄壓縮成一條或多條。
|
學(xué)號(hào)
|
姓名
|
性別
|
系名
|
籍貫
|
出生年月
|
是否黨員
|
|
0207390101
|
劉中雨
|
女
|
信息管理系
|
北京
|
80/12/1
|
是
|
|
0207390103
|
林天力
|
男
|
信息管理系
|
南京
|
82/1/3
|
是
|
|
0207390104
|
王 平
|
男
|
信息管理系
|
北京
|
82/3/26
|
否
|
|
0207490101
|
章聞天
|
男
|
電子商務(wù)
|
無(wú)錫
|
81/6/4
|
否
|
|
0207390102
|
聞書(shū)敏
|
女
|
信息管理系
|
蘇州
|
81/7/28
|
是
|
|
0207490104
|
于小麗
|
女
|
電子商務(wù)
|
南京
|
80/8/10
|
否
|
【例1】顯示XS(學(xué)生信息數(shù)據(jù)表)中的所有記錄。
SELECT * FROM XS
命令中的*表示輸出顯示所有的字段,數(shù)據(jù)來(lái)源是XS表
【例2】顯示XS(學(xué)生信息數(shù)據(jù)表)中的所有同學(xué)的學(xué)號(hào)及與之對(duì)應(yīng)的姓名,同時(shí)能去除重名。
SELECT DISTINCT 學(xué)號(hào),姓名 FROM XS
【例3】按成績(jī)從大到小顯示CJ表中的所有記錄,并將成績(jī)一項(xiàng)乘以0.7。
SELECT XH,KCDH,CJ*0.7 AS 成績(jī) FROM CJ order by cj DESC
【例4】統(tǒng)計(jì)CJ表中所有同學(xué)的總成績(jī),平均成績(jī)和總?cè)藬?shù)。。
SELECT sum(cj.cj) as 總成績(jī),avg(cj.cj) as 平均成績(jī), COUNT(*) AS RS FROM CJ
課堂思考題
【題1】顯示XS表中所有的系名。
SELECT distinct ximing FROM XS
【題2】顯示XS表中所有的班級(jí)號(hào)。
SELECT distinct substr(xh,1,8) as 班級(jí)號(hào)
FROM XS ORDER BY 1
5.2.2 帶條件(WHERE)的查詢語(yǔ)句
【格式】SELECT [ALL|DISTINCT |TOP N] <字段列表>
FROM <表> [WHERE <條件表達(dá)式> ]
ORDER BY 字段列表
【功能】從一個(gè)表中查詢滿足條件的數(shù)據(jù)。
【說(shuō)明】TOP N :顯示滿足條件的前幾項(xiàng)
- <條件表達(dá)式>由一系列用AND 或 OR 連接的條件表達(dá)式組成,
- 條件表達(dá)式可以為字段(表達(dá)式) 運(yùn)算符 表達(dá)式(字段)的形式,其中可以使用以下常用的運(yùn)算符
SQL 命令中常用的 運(yùn)算符
| 操作符 |
比較關(guān)系 |
舉例 |
| = |
相等 |
Xs.ximing= " 金融 " |
| = = |
完全相等 |
Xs.ximing = = " 金融 " |
| LIKE |
不精確匹配 |
Xs.xh LIKE " 03073901% " |
| > 、 >= |
大于(等于) |
分?jǐn)?shù) . 成績(jī) >60 |
| <= 、 < |
小于(等于) |
分?jǐn)?shù) . 成績(jī) <=60 |
| betwee n |
指定字段在兩實(shí) 例之間 |
Cj between 45 and 80 |
| in |
指定字段必須與 用逗號(hào)隔開(kāi)的實(shí) 例集合中的一個(gè) 相匹配 |
cj in (50,60,70) |
示例
【例1】顯示XS表中所有男生記錄的學(xué)號(hào),姓名和性別
SELECT XH,XM,XB FROM XS WHERE XB="男"
【例2】顯示XS表中出生日期在85年之間的學(xué)生的學(xué)號(hào),姓名,出生日期。
SELECT XH,XM,CSRQ FROM XS ;
WHERE CSRQ BETWEEN {01/01/85} AND {12/31/85}
SELECT XH,XM,CSRQ FROM XS; *//另一種方法
WHERE year(CSRQ)=85
【例3】顯示XS表中姓李的女學(xué)生的學(xué)號(hào),姓名,出生日期。
SELECT XH,XM,CSRQ FROM XS;
WHERE XM LIKE "李%" AND XB="女"
【例4】查詢CJ表中成績(jī)名列前5名的學(xué)生的學(xué)號(hào),成績(jī)。
SELECT TOP 5 XH,CJ FROM CJ ;
ORDER BY CJ DESC
【例5】統(tǒng)計(jì)XS表中03073901班的人數(shù)。
Select count(*) as 03073901班人數(shù) from xs; (*//SUBSTR(XH,1,8)=" 03073901")
where xh like ‘03073901%‘
SQL 命令中的分組與計(jì)算查詢
【格式】SELECT [ALL | DISTINCT |TOP N] <字段列表>
FROM <表> [WHERE <條件>
[GROUP BY <分組字段列表>...]
[HAVING <過(guò)濾條件>]
[ORDER BY <排序項(xiàng)> [ASC | DESC]
分組就是將一組類似(根據(jù)分組字段的值)的記錄壓縮成一個(gè)結(jié)果記錄,這樣就可以完成基于一組記錄的計(jì)算。其結(jié)果可以類比于唯一索引。
[過(guò)濾條件] 對(duì)分組的結(jié)果根據(jù)條件(可以是來(lái)自于字段列表項(xiàng)中的選項(xiàng),也可以是一個(gè)統(tǒng)計(jì)函數(shù))進(jìn)行記錄組的過(guò)濾。
注意:用于分組的可用字段不一定是已選定輸出的字段列表中的一個(gè)字段,但分組字段不能是一個(gè)計(jì)算過(guò)的字段,如統(tǒng)計(jì)函數(shù)。 排序項(xiàng)必須是已選定輸出的字段列表中的字段
Group by ximing
|
學(xué)號(hào)
|
姓名
|
性別
|
系名
|
籍貫
|
出生年月
|
是否黨員
|
|
0207390101
|
劉中雨
|
女
|
信息管理系
|
北京
|
80/12/1
|
是
|
|
0207390103
|
林天力
|
男
|
信息管理系
|
南京
|
82/1/3
|
是
|
|
0207390104
|
王 平
|
男
|
信息管理系
|
北京
|
82/3/26
|
否
|
|
0207490101
|
章聞天
|
男
|
電子商務(wù)
|
無(wú)錫
|
81/6/4
|
否
|
|
0207390102
|
聞書(shū)敏
|
女
|
信息管理系
|
蘇州
|
81/7/28
|
是
|
|
0207490104
|
于小麗
|
女
|
電子商務(wù)
|
南京
|
80/8/10
|
否
|
根據(jù)系名的值該學(xué)生表分為兩種類型的記錄,一個(gè)是系名為 " 信息 管理系 " 的記錄,一個(gè)是系名為 " 電子商務(wù) " 的記錄,分組的結(jié)果是 兩條記錄:第 2 條和 4 條記錄
示例
【例 1 】顯示 XS 表中各班的總?cè)藬?shù)。
SELECT XIMING ,
COUNT(*) AS 總?cè)藬?shù) ;
FROM XS GROUP BY XIMING
【例2】顯示CJ表中平均分>80的同學(xué)
SELECT CJ.XH FROM CJ GROUP BY XH;
HAVING AVG(CJ)>80
ORDER BY 1
【例3】按學(xué)號(hào)從低到高,顯示CJ表中每個(gè)學(xué)生所學(xué)課程數(shù)目,成績(jī)總分,平均分
Select cj.xh,count(*) as 課程數(shù)目,
sum(cj.cj) as 成績(jī)總分,avg(cj.cj) as 平均分
from cj
group by cj.xh
Order by xh
【例4】查詢JS表中各系科教師的人數(shù)、工資總額和平均工資,并按平均工資降序排列。
SELECT XIMING,COUNT(*) AS 人數(shù),SUM(ZGZ) AS 工資總額,AVG(zgz) as 平均工資 from js;
Group by ximing order by 4
*//?查詢信息管理系教師的人數(shù)、工資總額和平均工資
SELECT XIMING,COUNT(*) AS 人數(shù),SUM(ZGZ) AS 工資總額,AVG(zgz) as 平均工資 from js;
where ximing="信息管理系";
Group by ximing having ximing="信息管理系" order by 4
【例5】查詢JS表中系平均工資>500元的各系科教師的人數(shù)、工資總額和平均工資,并按平均工資降序排列,查詢結(jié)果中必須包括系名、系人數(shù)、工資總額和平均工資四列。
SELECT XIMING,COUNT(*) AS 人數(shù),SUM(ZGZ) AS 工資總額,AVG(zgz) as 平均工資 from js;
Group by ximing having 平均工資>500;
order by 4 ????
5.2.3 SQL的復(fù)雜查詢
1.連接查詢
【說(shuō)明】在一個(gè)數(shù)據(jù)庫(kù)中的多個(gè)表之間一般都存在著某些聯(lián)系,在一個(gè)查詢語(yǔ)句中同時(shí)涉及到兩個(gè)或兩個(gè)以上的表時(shí),這種查詢稱之為連接查詢(也稱為多表查詢)。在多表之間查詢必須處理表與表之間的連接關(guān)系。
【例1】查詢并顯示各個(gè)學(xué)生的學(xué)號(hào),姓名,各科成績(jī)。
SELECT xs.xh,xs.xm,cj.kcdh,cj.cj ;
FROM xs,cj ;
WHERE xs.xh=cj.xh
【例2】顯示成績(jī)?cè)?0至90之間的學(xué)號(hào),課程名和成績(jī)。
SELECT cj.xh,kc.kcm,cj.cj
FROM cj,kc
WHERE cj.kcdh=kc.kcdh and
cj.cj BETWEEN 80 AND 90
2.示例
例1】查詢并顯示各個(gè)學(xué)生的學(xué)號(hào),所學(xué)課程及課程成績(jī)。
SELECT CJ.XH,KC.KCM,CJ.CJ ;
FROM KC,CJ ;
WHERE KC.KCDH=CJ.KCDH
內(nèi)連接方式
SELECT CJ.XH,KC.KCM,CJ.CJ ;
FROM KC INNER JOIN CJ ON KC.KCDH=CJ.KCDH
【例2】顯示計(jì)算機(jī)系學(xué)生的課程代號(hào)為"A001"的考試成績(jī)。
SELECT XS.XH,XS.XIMING,XS.XM,cJ.KCDH,CJ.CJ;
FROM XS INNER JOIN CJ ON XS.XH=CJ.XH;
wHERE XS.XIMING="計(jì)算機(jī)系" AND CJ.KCDH="A001"
【例3】查詢王林同學(xué)所選課程的課程數(shù)
Select xs.xm,count(*) from xs inner join cj on xs.xh=cj.xh where xs.xm=‘王林'?
【例4】顯示CJ表中每門(mén)課程的課程名,學(xué)時(shí),必修課情況和該門(mén)課程的最高分,最低分和平均分
Select kc.kcm,kc.kss,max(cj.cj),min(cj.cj),avg(cj.cj)
from kc inner join cj on kc.kcdh=cj.kcdh
group by kc.kcdh
【例5】查詢有不及格課程成績(jī)的同學(xué)的學(xué)號(hào)和姓名,有多門(mén)課程不及格的學(xué)生只顯示一次
Select distinct cj.xh,xs.xm ;
from xs inner join cj on xs.xh=cj.xh;
where cj.cj<60;
order by xs.xh
或 Select distinct cj.xh,xs.xm from xs.cj;
where xs.xh=cj.xh and cj.cj<60 order by xs.xh
【例6】查詢信息管理系中所有成績(jī)總分在480分以上,并且各門(mén)課程的成績(jī)不低于70分的學(xué)生。要求在查詢結(jié)果中包含學(xué)生的學(xué)號(hào)、姓名、總分、平均分和最低分,并按總分從高到低排列。
Select xs.xh,xs.xm,xum(cj.cj) as 總分,avg(cj.cj) as 平均成績(jī),min(cj.cj) as 最低分;
from xs inner join cj on xs.xh=cj.xh ;
where xs.ximing=‘信息管理系' ;
group by xs.xh;
having 總分>=480 and 最低分>=70;
order by 3 desc????
課堂思考題
- 查詢選修人數(shù)超過(guò)40人的課程名,學(xué)分,必修課情況和該門(mén)課程的最高分和最低分,并按最高分從低到高排序。
Select kc.kcm,kc.xf,kc.bxk,max(cj.cj),min(cj.cj);
from kc inner join cj on kc.kcdh=cj.kcdh;
group by kc.kcdh having count(*)>40 order by 4
- 列出所有選修學(xué)分超過(guò)21個(gè)學(xué)分(考試成績(jī)超過(guò)65分的該門(mén)課程就可以獲得學(xué)分)的學(xué)生的學(xué)號(hào)以及所選修的總學(xué)分。
Select cj.xh,sum(kc.xf);
from kc inner join cj on kc.kcdh=cj.kcdh where cj.cj>=65;
group by cj.xh having sum(kc.xf)>21 order by 2
- 查詢選修人數(shù)超過(guò)40人的課程名,學(xué)分,必修課情況和該門(mén)課程的最高分和最低分,并按最高分從低到高排序。
Select kc.kcm,kc.xf,kc.bxk,max(cj.cj),min(cj.cj);
from kc inner join cj on kc.kcdh=cj.kcdh;
group by kc.kcdh having count(*)>40 order by 4
- 列出所有選修學(xué)分超過(guò)21個(gè)學(xué)分(考試成績(jī)超過(guò)65分的該門(mén)課程就可以獲得學(xué)分)的學(xué)生的學(xué)號(hào)以及所選修的總學(xué)分。
Select cj.xh,sum(kc.xf);
from kc inner join cj on kc.kcdh=cj.kcdh where cj.cj>=65;
group by cj.xh having sum(kc.xf)>21 order by 2
3.查詢?nèi)ハ?/p>
- 默認(rèn)情況下,查詢輸出到一個(gè)瀏覽窗口
- INTO ARRAY 數(shù)組名:將查詢結(jié)果保存到一個(gè)數(shù)組中。
- INTO CURSOR < 臨時(shí)表名>:將查詢結(jié)果保存到一個(gè)臨時(shí)表中。
- TO SCREEN:將查詢結(jié)果保在屏幕上顯示。
SELECT-SQL 命令主要組成部分
| 定義數(shù)據(jù)源 |
指定數(shù)據(jù)源表 |
FROM 子句 |
| 確定源表間的聯(lián) 接 |
INNER JOIN ... ON ... 子句 |
| 定義結(jié)果 |
篩選源表記錄 |
WHERE 子句 |
| 指定輸出字段 |
字段、函數(shù)和表達(dá)式的列 表或 * |
| 指定輸出類型 |
INTO 子句和 TO 子句 |
| 定義記錄的分組 |
GROUP BY 子句 |
| 指定結(jié)果順序 |
ORDER BY 子句 |
| 篩選結(jié)果記錄 |
HAVING 子句 |
| 指定有無(wú)重復(fù)記 錄 |
ALL/DISTINCT |
| 指定結(jié)果的范圍 |
TOP nExpr[PERCENT] |
習(xí)題:
針對(duì)于教學(xué)管理信息系統(tǒng),進(jìn)行以下查詢:
1.查詢男教師和女教師的工資總和以及平均工資??
2.統(tǒng)計(jì)9501班的男同學(xué)的人數(shù)??
3.查詢65年以前出生的女教師的姓名、工齡??
4.顯示JS表中每個(gè)教師的工號(hào)、姓名、出生日期和開(kāi)始工作年份(提示:開(kāi)始工作年份=當(dāng)前年份-工齡);
5.顯示CJ表中,課程代號(hào)為"02"的學(xué)生成績(jī)的前三名;
6.顯示JS表中各系科教師的人數(shù),工資總額和平均工資。
7.統(tǒng)計(jì)選修'VFP5'的學(xué)生總數(shù)?
8.查詢課程名為'VFP5'的學(xué)時(shí),必修課情況和該門(mén)課程的最高分、最低分和平均分
9.查詢每個(gè)教師所任課程的課程代號(hào)、課程名和學(xué)分?jǐn)?shù)以及工號(hào)和專業(yè)代號(hào)??
答案:
1.Select js.xh,sum(js.jbgz) as 總工資,avg(js.jbgz) as 平均工資 from jxsj!js group by js.xb
2.Select count(*) as 男同學(xué)人數(shù) from xs where xs.xh like ‘9501%' and xs.xb=‘男'
3.Select js.xm,js.gl,js.csrq from jxsj!js where year(js.csrq)<1965
4.Select kc.kcm,count(*) as 選修人數(shù) from kc inner join cj on kc.kcdh=cj.kcdh where kc.kcm='VFP5'
或Select kc.kcm,count(*) from kc,cj where kc.kcdh=cj.kcdh .and. kc.kcm='VFP5'
5.Select kc.kcm,kc.kss,max(cj.cj),min(cj.cj),avg(cj.cj)
from kc inner join cj on kc.kcdh=cj.kcdh
group by kc.kcdh having kc.kcm='VFP5'
或Select kc.kcm,kc.kss,max(cj.cj),min(cj.cj),avg(cj.cj)from kc inner join cj on kc.kcdh=cj.kcdh where kc.kcm='VFP5' group by kc.kcdh
6.Select rk.gh,rk.zydh,kc.kcm,kc.kss,kc.bxk from rk inner join kc on kc.kcdh=rk.kcdh
3.查詢?nèi)ハ?/p>
默認(rèn)情況下,查詢輸出到一個(gè)瀏覽窗口
INTO ARRAY 數(shù)組名:將查詢結(jié)果保存到一個(gè)數(shù)組中。
INTO CURSOR < 臨時(shí)表名>:將查詢結(jié)果保存到一個(gè)臨時(shí)表中。
TO SCREEN:將查詢結(jié)果保在屏幕上顯示。
SELECT-SQL 命令主要組成部分
| 定義數(shù)據(jù)源 |
指定數(shù)據(jù)源表 |
FROM 子句 |
| 確定源表間的聯(lián) 接 |
INNER JOIN ... ON ... 子句 |
| 定義結(jié)果 |
篩選源表記錄 |
WHERE 子句 |
| 指定輸出字段 |
字段、函數(shù)和表達(dá)式的列 表或 * |
| 指定輸出類型 |
INTO 子句和 TO 子句 |
| 定義記錄的分組 |
GROUP BY 子句 |
| 指定結(jié)果順序 |
ORDER BY 子句 |
| 篩選結(jié)果記錄 |
HAVING 子句 |
| 指定有無(wú)重復(fù)記 錄 |
ALL/DISTINCT |
| 指定結(jié)果的范圍 |
TOP nExpr[PERCENT] |
習(xí)題:
針對(duì)于教學(xué)管理信息系統(tǒng),進(jìn)行以下查詢:
1.查詢男教師和女教師的工資總和以及平均工資??
2.統(tǒng)計(jì)9501班的男同學(xué)的人數(shù)??
3.查詢65年以前出生的女教師的姓名、工齡??
4.顯示JS表中每個(gè)教師的工號(hào)、姓名、出生日期和開(kāi)始工作年份(提示:開(kāi)始工作年份=當(dāng)前年份-工齡);
5.顯示CJ表中,課程代號(hào)為"02"的學(xué)生成績(jī)的前三名;
6.顯示JS表中各系科教師的人數(shù),工資總額和平均工資。
7.統(tǒng)計(jì)選修'VFP5'的學(xué)生總數(shù)?
8.查詢課程名為'VFP5'的學(xué)時(shí),必修課情況和該門(mén)課程的最高分、最低分和平均分
9.查詢每個(gè)教師所任課程的課程代號(hào)、課程名和學(xué)分?jǐn)?shù)以及工號(hào)和專業(yè)代號(hào)??
答案:
1.Select js.xh,sum(js.jbgz) as 總工資,avg(js.jbgz) as 平均工資 from jxsj!js group by js.xb
2.Select count(*) as 男同學(xué)人數(shù) from xs where xs.xh like ‘9501%' and xs.xb=‘男'
3.Select js.xm,js.gl,js.csrq from jxsj!js where year(js.csrq)<1965
7.Select kc.kcm,count(*) as 選修人數(shù) from kc inner join cj on kc.kcdh=cj.kcdh where kc.kcm='VFP5'
或Select kc.kcm,count(*) from kc,cj where kc.kcdh=cj.kcdh .and. kc.kcm='VFP5'
8.Select kc.kcm,kc.kss,max(cj.cj),min(cj.cj),avg(cj.cj)
from kc inner join cj on kc.kcdh=cj.kcdh
group by kc.kcdh having kc.kcm='VFP5'
或Select kc.kcm,kc.kss,max(cj.cj),min(cj.cj),avg(cj.cj)from kc inner join cj on kc.kcdh=cj.kcdh where kc.kcm='VFP5' group by kc.kcdh
9. Select rk.gh,rk.zydh,kc.kcm,kc.xfs,kc.kcdh from rk inner join kc on kc.kcdh=rk.kcdh
5.3 查詢?cè)O(shè)計(jì)器及查詢文件
——一個(gè)用來(lái)保存SQL語(yǔ)句的文件(*。QPR),查詢文件的運(yùn)行結(jié)果是一個(gè)基于表和視圖的動(dòng)態(tài)的數(shù)據(jù)集合。
5.3.1 查詢文件的設(shè)計(jì)過(guò)程
在創(chuàng)建查詢文件時(shí),通??梢宰裱韵铝鶄€(gè)步驟來(lái)創(chuàng)建查詢。
(1)用"查詢向?qū)?或"查詢?cè)O(shè)計(jì)器"創(chuàng)建查詢。
(2)選擇在查詢結(jié)果中需要的字段。
(3)設(shè)置查詢記錄的條件。
(4)設(shè)置排序及分組條件來(lái)組織查詢結(jié)果。
(5)選擇查詢輸出類別,可以是報(bào)表、表文件、圖表、瀏覽窗口和表文件等。
(6)運(yùn)行此查詢。
5.3.2 利用"查詢向?qū)?創(chuàng)建查詢
利用"查詢向?qū)?創(chuàng)建查詢的步驟如下:
(1)進(jìn)入"查詢向?qū)?
① 選擇【工具】|【向?qū)А縷【查詢】命令。
② 選擇【文件】|【新建】命令,進(jìn)入"新建"對(duì)話框,選擇"查詢"單選按鈕,單擊"向?qū)?按鈕。
③ 在"項(xiàng)目管理器"窗口中,選擇"數(shù)據(jù)"選項(xiàng)卡,選中"查詢",單擊"新建"按鈕,出現(xiàn)"新建查詢"對(duì)話框,單擊"查詢向?qū)? 。
(2)選擇查詢結(jié)果中需要的字段
(3)設(shè)置查詢條件
(4)設(shè)置排序字段
(5)設(shè)置記錄輸出范圍
(6)保存查詢
5.3.3 利用"查詢?cè)O(shè)計(jì)器"創(chuàng)建查詢
進(jìn)入"查詢?cè)O(shè)計(jì)器"窗口
(1) 選擇【文件】│【新建】命令,進(jìn)入"新建"對(duì)話框,選擇"查詢"單選按鈕,單擊"新建"按鈕;
(2) 在"項(xiàng)目管理器"窗口中,選擇"數(shù)據(jù)"選項(xiàng)卡,選中"查詢"文件類型,單擊"新建"按鈕,出現(xiàn)"新建查詢"對(duì)話框,單擊"新建查詢"按鈕
"查詢?cè)O(shè)計(jì)器工具欄"各按鈕的功能如下:
| |
添加數(shù)據(jù)庫(kù)表。 |
| 移去數(shù)據(jù)庫(kù)表。 |
| 添加數(shù)據(jù)庫(kù)表間的聯(lián)接。 |
| 顯示SQL窗口。 |
| 最大化上部分窗口。 |
| 確定查詢?nèi)ハ?/td>
|
使用查詢?cè)O(shè)計(jì)器創(chuàng)建查詢
使用 " 查詢?cè)O(shè)計(jì)器 " 創(chuàng)建前面 " 查詢向?qū)?" 創(chuàng)建查詢例子,具體步驟如下:
( 1 )進(jìn)入 " 查詢?cè)O(shè)計(jì)器 " 窗口,添加 stud 表 ,如圖所示。
(2 )選擇查詢需要的字段
( 3 )設(shè)置查詢條件
( 4 )保存查詢
5.3.4 查詢的運(yùn)行與修改
1.查詢的運(yùn)行
運(yùn)行查詢的方法有以下5種:
① 在"查詢?cè)O(shè)計(jì)器"窗口中,選擇【查詢】|【運(yùn)行查詢】命令。
② 在"查詢?cè)O(shè)計(jì)器"窗口中,右擊"查詢?cè)O(shè)計(jì)器"窗口,選擇快捷菜單中的【運(yùn)行查詢】命令。
③ 選擇【程序】|【運(yùn)行】命令。彈出"運(yùn)行"對(duì)話框,在對(duì)話框中,選擇所要運(yùn)行的查詢文件,單擊"運(yùn)行"按鈕。
④ 在"項(xiàng)目管理器"窗口中,選擇要運(yùn)行的查詢文件,單擊右邊的"運(yùn)行"按鈕。
⑤ 在"命令"窗口中,鍵入 DO <查詢文件名> 。例如,DO 查詢1.qpr。
2.查詢的修改
修改可以用以下3種方法:
① 在"項(xiàng)目管理器"窗口中,選擇要修改的查詢文件,單擊右邊的"修改"按鈕,進(jìn)入"查詢?cè)O(shè)計(jì)器"窗口中修改。
② 選擇【文件】|【打開(kāi)】命令,在"打開(kāi)"對(duì)話框中,選擇所要修改的查詢文件,單擊"確定"按鈕,進(jìn)入"查詢?cè)O(shè)計(jì)器"窗口中修改。
③ 在命令窗口中,鍵入 MODIFY QUERY <查詢文件名>。
3.查詢?nèi)ハ虻脑O(shè)置
單擊"查詢?cè)O(shè)計(jì)器"工具欄中的"查詢?nèi)ハ?按鈕或在系統(tǒng)菜單中單擊【查詢】|【查詢?nèi)ハ颉棵睿瑥棾?查詢?nèi)ハ?對(duì)話框,如圖5-15 所示。其中共包含7個(gè)查詢?nèi)ハ?,各?xiàng)的含義見(jiàn)表5-1
5.4.1 視圖簡(jiǎn)介
視圖是一個(gè)定制的虛擬邏輯表,視圖中只存放相應(yīng)的數(shù)據(jù)邏輯關(guān)系,并不保存表的記錄內(nèi)容,但可以在視圖中改變記錄的值,然后將更新記錄返回到源表。
視圖與查詢?cè)诠δ苌嫌性S多相似之處,但又有各自特點(diǎn),主要區(qū)別如下:
- 功能不同:視圖可以更新字段內(nèi)容并返回源表,而查詢文件中的記錄數(shù)據(jù)不能被修改。
- 從屬不同:視圖不是一個(gè)獨(dú)立的文件而從屬于某一個(gè)數(shù)據(jù)庫(kù)。查詢是一個(gè)獨(dú)立的文件,它不從屬于某一個(gè)數(shù)據(jù)庫(kù)。
- 訪問(wèn)范圍不同:視圖可以訪問(wèn)本地?cái)?shù)據(jù)源和遠(yuǎn)程數(shù)據(jù)源,而查詢只能訪問(wèn)本地?cái)?shù)據(jù)源。
- 輸出去向不同:視圖只能輸出到表中,而查詢可以選擇多種去向,如表、圖表、報(bào)表、標(biāo)簽、窗口等形式。
- 使用方式不同:視圖只有所屬的數(shù)據(jù)庫(kù)被打開(kāi)時(shí),才能使用。而查詢文件可在命令窗口中執(zhí)行。
5.4.2 本地視圖的創(chuàng)建
1)視圖向?qū)?/strong>
2)視圖設(shè)計(jì)器
3)命令方式:CREATE SQL VIEW <視圖名> [REMOTE] AS
示例:CREATE SQL VIEW ST1 AS SELECT * FROM 教學(xué)管理!學(xué)生表
5.4.3 視圖的打開(kāi)、關(guān)閉及顯示
1)命令方式:USE [<視圖名>]
BROWSE
說(shuō)明:使用USE命令前,應(yīng)先打開(kāi)包含此視圖的數(shù)據(jù)庫(kù)。
示例:OPEN DATABASE 教學(xué)管理
USE 視圖2
BROWSE
USE
2)菜單方式:"數(shù)據(jù)庫(kù)"菜單的"瀏覽"選項(xiàng)
程序設(shè)計(jì):
命令方式 MODIFY COMMAND 〈程序文件名〉
菜單方式 打開(kāi) " 文件 " 菜單,選擇 " 新建 " ;在 " 新建 " 窗口,選擇 " 程序 " ,再選擇 " 新建文件 "
程序文件的保存 程序文件的默認(rèn)擴(kuò)展名是 .PRG 。
程序文件的執(zhí)行 Do 程序文件名 [ 運(yùn)行 ] 按鈕 或 !
例 1 建立程序 CX ,功能為:查找 f:\jxgl 目錄下的 XS 學(xué)生表中有無(wú)姓名為 " 王林 " 的同學(xué),有,則將其姓名、學(xué)號(hào)顯示在 VFP 的主屏幕上。
clear
Set talk off
Set defaut to f:\jxgl Sele 1
Use xs
Locate for xm= " 王林 "
found()
xm,xh
Use
Set talk on
return