【文章內(nèi)容簡(jiǎn)介】
有重復(fù)的行 SELECT 學(xué)號(hào) FROM 成績(jī) WHERE 成績(jī) 80 。 AND (學(xué)號(hào) =20215875 OR 學(xué)號(hào) =20215005) 簡(jiǎn)單的聯(lián)接查詢 聯(lián)接是關(guān)系的基本操作之一,聯(lián)接查詢是一種基于多個(gè)關(guān)系的查詢。 例 : SELECT 姓名 ,成績(jī) FROM 學(xué)生 ,成績(jī) 。 WHERE 成績(jī) 80 AND (學(xué)生 .學(xué)號(hào) =成績(jī) .學(xué)號(hào) ) SELECT 學(xué)生 .學(xué)號(hào) ,姓名 ,成績(jī) FROM 學(xué)生 ,成績(jī) 。 WHERE 學(xué)生 .學(xué)號(hào) =成績(jī) .學(xué)號(hào) SELECT 姓名 ,成績(jī) ,課程名 FROM 學(xué)生 ,成績(jī) ,課程 。 WHERE 學(xué)生 .學(xué)號(hào) =成績(jī) .學(xué)號(hào) AND 成績(jī) .課程號(hào) =課程 .課程號(hào) sele 1 use 學(xué)生 index on 學(xué)號(hào) tag xx sele 2 use 成績(jī) set relation to 學(xué)號(hào) into a browse for 成績(jī) 80 fields ,成績(jī) 嵌套查詢 嵌套查詢是基于多個(gè)關(guān)系的查詢, 這類查詢所要求的結(jié)果出自一個(gè)關(guān)系,但相關(guān)的條件卻涉及多個(gè)關(guān)系 。 例 :列出選修運(yùn)籌學(xué)的所有學(xué)生的學(xué)號(hào)及成績(jī) . SELECT 學(xué)號(hào) ,成績(jī) FROM 成績(jī) WHERE 課程號(hào) =。 (SELE DISTINCT 課程號(hào) FROM 課程 WHERE 課程名 =“運(yùn)籌學(xué)” ) .要用 ANY,ALL,IN 例 :查詢學(xué)生的學(xué)號(hào)和成績(jī) ,要求其修的課程號(hào)是 5202110,成績(jī)比課程號(hào)是 7202150課程的最低成績(jī)要高 . SELE 學(xué)號(hào) ,成績(jī) FROM 成績(jī) 。 WHERE 課程號(hào) =“ 5202110” AND 成績(jī) ANY。 (SELE 成績(jī) FROM 成績(jī) WHERE 課程號(hào) =“ 7202150” ) 例 :查詢學(xué)生的學(xué)號(hào)和成績(jī) ,要求其修的課程號(hào)是 5202110,成績(jī)比課程號(hào)是 7202150課程的所有成績(jī)要高 . SELE 學(xué)號(hào) ,成績(jī) FROM 成績(jī) 。 WHERE 課程號(hào) =“ 5202110” AND 成績(jī) ALL。 (SELE 成績(jī) FROM 成績(jī) WHERE 課程號(hào) =“ 7202150” ) 例:列出選了課的所有的學(xué)生名單 . SELECT 姓名 FROM 學(xué)生 WHERE 學(xué)號(hào) IN。 (SELECT 學(xué)號(hào) FROM 成績(jī) ) 例:列出成績(jī)合格的學(xué)生情況 . SELECT * FROM 學(xué)生 WHERE 學(xué)號(hào) NOT IN。 (SELECT 學(xué)號(hào) FROM 成績(jī) WHERE 成績(jī) 60) 以上語(yǔ)句查詢出的結(jié)果有錯(cuò)誤,應(yīng)使用以下語(yǔ)句加以完善 SELECT * FROM 學(xué)生 WHERE 學(xué)號(hào) NOT IN。 (SELECT 學(xué)號(hào) FROM 成績(jī) WHERE 成績(jī) 60)。 AND 學(xué)號(hào) IN (SELECT 學(xué)號(hào) FROM 成績(jī) ) 或: SELECT * FROM 學(xué)生 WHERE 學(xué)生 .學(xué)號(hào) =成績(jī) .學(xué)號(hào) AND 成績(jī) =60 幾個(gè)特殊運(yùn)算符 在 進(jìn)行更復(fù)雜、涉及更多關(guān)系的檢索之前,先介紹一下可以在 SQL SELECT中使用的幾個(gè)特殊運(yùn)算符,它們是BETWEEN…AND… 和 LIKE等。 BETWEEN…AND… 意思是在“ … 和 … 之間” 這里的 LIKE是字符串匹配運(yùn)算符,通配符 “ %” 表示 0個(gè)或多個(gè)字符,另外還有一個(gè)通配符“ _”表示一個(gè)字符。 在 SQL中,“不等于”用“ !=”表示。另外還可以用否定運(yùn)算符 NOT寫出等價(jià)命令。 例 :顯示成績(jī)?cè)?60到 90分之間的成績(jī)列表 . SELE * FROM 成績(jī) WHERE 成績(jī) BETWEEN 60 AND 90 例 :顯示 2021級(jí)所有學(xué)生的基本情況 SELE * FROM 學(xué)生 WHERE 學(xué)號(hào) LIKE “2021%” 排序 使用 SQL SELECT可以將查詢結(jié)果排序,排序的短語(yǔ)是ORDER BY,具體格式如下: [ORDER BY 排序項(xiàng) 1[ASC|DESC][,排序項(xiàng) 2[ASC[DESC]…]] 例 : SELECT * FROM 成績(jī) ORDER BY 成績(jī) SELECT * FROM 學(xué)生 ORDER BY 學(xué)號(hào) ,性別 每個(gè) “排序項(xiàng)”都對(duì)應(yīng)查詢結(jié)果中的一列。它可以是下列之一: ?FROM 子句中表的字段。 ?一個(gè)數(shù)值表達(dá)式,表示查詢結(jié)果中列的位置 (最左邊列編號(hào)為 1)。 簡(jiǎn)單的計(jì)算查詢 SQL不僅具有一般的檢索能力,而且還有計(jì)算方式的檢索,比如檢索職工的平均工資、檢索某個(gè)倉(cāng)庫(kù)中職工的最高工資值等。用于計(jì)算檢索的函數(shù)有: ① COUNT——計(jì)數(shù) ② SUM——求和 ③ AVG——計(jì)算平均值 ④ MAX—求最大值 ⑤ MIN——求最小值 例 : SELECT COUNT(DISTINCT 學(xué)號(hào) ) AS 人數(shù) FROM 成績(jī) SELECT SUM(成績(jī) ) AS 總 成績(jī) FROM 成績(jī) SELECT SUM (成績(jī) ) FROM 成績(jī) WHERE 學(xué) 號(hào) IN。 (SELECT 學(xué) 號(hào) FROM 學(xué)生 WHERE 班級(jí) =信息管理 021) SELECT AVG (成績(jī) ) FROM 成績(jī) WHERE 學(xué) 號(hào) IN。 (SELECT 學(xué) 號(hào) FROM 學(xué)生 WHERE 班級(jí) =信息管理 021) SELECT MAX(成績(jī) ) FROM 成績(jī) WHERE 課程 號(hào) =4202113 分組 利用 GROUP BY子句進(jìn)行分組計(jì)算查詢使用得更加廣泛。GROUP BY短語(yǔ)的格式如下: [GROUP BY 列名 1[,列名 2…]] [HAVING 組條件表達(dá)式 ] 可以按一列或多列分組,還可以用 HAVING進(jìn)一步限定分組的條件。下面是幾個(gè)分組計(jì)算查詢的例子。 例 :求每個(gè)學(xué)生的平均成績(jī) SELECT 學(xué)號(hào) ,AVG(成績(jī) ) FROM 成績(jī) GROUP BY 學(xué)號(hào) 例 :求至少選修了兩門課程的學(xué)生的平均成績(jī) SELECT 學(xué)號(hào) ,COUNT(*),AVG(成績(jī) ) FROM 成績(jī) GROUP BY 學(xué)號(hào) HAVING COUNT(*)= 2 SELECT 成績(jī) .學(xué)號(hào) ,COUNT(*),AVG(成績(jī) ),姓名 FROM 成績(jī) ,學(xué)生 。 GROUP BY 成績(jī) .學(xué)號(hào) HAVING COUNT(*)= 2 。 WHERE 成績(jī) .學(xué)號(hào) =學(xué)生 .學(xué)號(hào) 利用空值查詢 SQL支持空值,當(dāng)然也可以利用空值進(jìn)行查詢 例 找出尚未確定課程的教師。 SELECT * FROM 教師 WHERE 課程號(hào) IS NULL 例 列出已經(jīng)確定了課程的教師。 SELECT * FROM 教師 WHERE 課程號(hào) IS NOT NULL 超聯(lián)接查詢 在新的 SQL標(biāo)準(zhǔn)中還支持兩個(gè)新的關(guān)系聯(lián)接運(yùn)算符,它們與我們?cè)瓉?lái)所了解的等值聯(lián)接和自然聯(lián)接不同。原來(lái)的聯(lián)接是只有滿足聯(lián)接條件,相應(yīng)的結(jié)果才會(huì)出現(xiàn)在結(jié)果表中;而這兩個(gè)新的聯(lián)接運(yùn)算是,首先保證一個(gè)表中滿足條件的元組都在結(jié)果表中,然后將滿足聯(lián)接條件的元組與另一個(gè)表的元組進(jìn)行聯(lián)接,不滿足聯(lián)接條件的則將應(yīng)來(lái)自另一表的屬性值置為空值。 SQL SELECT語(yǔ)句的完整語(yǔ)法格式中與聯(lián)接運(yùn)算有關(guān)的語(yǔ)法格式如下: SELECT ?????? FROM Table1 INNER | LEFT | RIGHT | FULL JOIN Table2 ON joinCondition WHERE ?????? 其中: INNER JOIN等價(jià)于 JOIN,為普通的聯(lián)接,在 Visual FoxPro中稱為內(nèi)部聯(lián)接。 LEFT JOIN為左聯(lián)接。 RIGHT JOIN為右聯(lián)接。 FULL JOIN可以稱為全聯(lián)接,即兩個(gè)表中的記錄不管是否滿足聯(lián)接條件將都在目標(biāo)表或查詢結(jié)果中