SQL語句中常用關(guān)鍵詞及其解釋如下:
1)SELECT
將資料從數(shù)據(jù)庫中的表格內(nèi)選出,兩個(gè)關(guān)鍵字:從 (FROM) 數(shù)據(jù)庫中的表格內(nèi)選出 (SELECT)。語法為
SELECT "欄位名" FROM "表格名"。
2)DISTINCT
在上述 SELECT 關(guān)鍵詞后加上一個(gè) DISTINCT 就可以去除選擇出來的欄位中的重復(fù),從而完成求得這個(gè)表格/欄位內(nèi)有哪些不同的值的功能。語法為
SELECT DISTINCT "欄位名" FROM "表格名"。
3)WHERE
這個(gè)關(guān)鍵詞可以幫助我們選擇性地抓資料,而不是全取出來。語法為
SELECT "欄位名" FROM "表格名" WHERE "條件"?
4)AND OR
上例中的 WHERE 指令可以被用來由表格中有條件地選取資料。這個(gè)條件可能是簡單的 (像上一頁的例子),也可能是復(fù)雜的。復(fù)雜條件是由二或多個(gè)簡單條件透過 AND 或是 OR 的連接而成。語法為:
SELECT "欄位名" ?FROM "表格名" ?WHERE "簡單條件" ?{[AND|OR] "簡單條件"}+
5)IN
在 SQL 中,在兩個(gè)情況下會(huì)用到 IN ?這個(gè)指令;這一頁將介紹其中之一:與 WHERE 有關(guān)的那一個(gè)情況。在這個(gè)用法下,我們事先已知道至少一個(gè)我們需要的值,而我們將這些知道的值都放入 IN ?這個(gè)子句。語法為:
SELECT "欄位名" ?FROM "表格名" ?WHERE "欄位名" IN ('值一', '值二', ...) ?
6)BETWEEN
IN 這個(gè)指令可以讓我們依照一或數(shù)個(gè)不連續(xù) (discrete)的值的限制之內(nèi)抓出資料庫中的值,而 BETWEEN 則是讓我們可以運(yùn)用一個(gè)范圍 (range) ?內(nèi)抓出資料庫中的值,語法為:
SELECT "欄位名" ?FROM "表格名" WHERE "欄位名" BETWEEN '值一' AND '值二'?
7)LIKE
LIKE 是另一個(gè)在 WHERE ?子句中會(huì)用到的指令。基本上, LIKE ?能讓我們依據(jù)一個(gè)模式(pattern) 來找出我們要的資料。語法為:
SELECT "欄位名" ?FROM "表格名" ?WHERE "欄位名" LIKE {模式}?
8)ORDER BY
我們經(jīng)常需要能夠?qū)⒆コ龅馁Y料做一個(gè)有系統(tǒng)的顯示。這可能是由小往大 (ascending) ?或是由大往小(descending)。在這種情況下,我們就可以運(yùn)用 ORDER BY 這個(gè)指令來達(dá)到我們的目的。語法為:
SELECT "欄位名" ?FROM "表格名 [WHERE "條件"] ORDER BY "欄位名" [ASC, DESC]?
9)函數(shù)
函數(shù)允許我們能夠?qū)@些數(shù)字的型態(tài)存在的行或者列做運(yùn)算,包括 AVG (平均)、COUNT (計(jì)數(shù))、MAX (最大值)、MIN (最小值)、SUM (總合)。語法為:
SELECT "函數(shù)名"("欄位名") FROM "表格名" ?
10)COUNT
這個(gè)關(guān)鍵詞能夠幫我我們統(tǒng)計(jì)有多少筆資料被選出來,語法為:
SELECT COUNT("欄位名") FROM "表格名"
11)GROUP BY
GROUP BY 語句用于結(jié)合合計(jì)函數(shù),根據(jù)一個(gè)或多個(gè)列對結(jié)果集進(jìn)行分組。語法為:
SELECT "欄位1", SUM("欄位2") ?FROM "表格名" ?GROUP BY "欄位1"?
12)HAVING
該關(guān)鍵詞可以幫助我們對函數(shù)產(chǎn)生的值來設(shè)定條件。語法為:
SELECT "欄位1", SUM("欄位2") ?FROM "表格名" ?GROUP BY "欄位1" ?HAVING (函數(shù)條件) ?
13)ALIAS
我們可以通過ALIAS為列名稱和表名稱指定別名,語法為:
SELECT "表格別名"."欄位1" "欄位別名" ?FROM "表格名" "表格別名" ?
下面為一個(gè)例子,通過它我們應(yīng)該能很好地掌握以上關(guān)鍵詞的使用方法。
Student(S#,Sname,Sage,Ssex) 學(xué)生表
Course(C#,Cname,T#) 課程表
SC(S#,C#,score) 成績表
Teacher(T#,Tname) 教師表
問題:
1、查詢“001”課程比“002”課程成績高的所有學(xué)生的學(xué)號;
select a.S#
from (select s#,score from SC where C#=’001′) a,
(select s#,score from SC where C#=’002′) b
where a.score>b.score and a.s#=b.s#;
2、查詢平均成績大于60分的同學(xué)的學(xué)號和平均成績;
select S#,avg(score)
from sc
group by S# having avg(score) >60;
3、查詢所有同學(xué)的學(xué)號、姓名、選課數(shù)、總成績;
select Student.S#,Student.Sname,count(SC.C#),sum(score)
from Student left Outer join SC on Student.S#=SC.S#
group by Student.S#,Sname
4、查詢姓“李”的老師的個(gè)數(shù);
select count(distinct(Tname))
from Teacher
where Tname like ‘李%’;
5、查詢沒學(xué)過“葉平”老師課的同學(xué)的學(xué)號、姓名;
select Student.S#,Student.Sname
from Student
where S# not in (select distinct( SC.S#) from SC,Course,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname=’葉平’);
6、查詢學(xué)過“001”并且也學(xué)過編號“002”課程的同學(xué)的學(xué)號、姓名;
select Student.S#,Student.Sname
from Student,SC
where Student.S#=SC.S# and SC.C#=’001′and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#=’002′);
7、查詢學(xué)過“葉平”老師所教的所有課的同學(xué)的學(xué)號、姓名;
select S#,Sname
from Student
where S# in
(select S#
from SC ,Course ,Teacher
where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname=’葉平’ group by S# having count(SC.C#)=(select count(C#) from Course,Teacher where Teacher.T#=Course.T# and Tname=’葉平’));
8、查詢所有課程成績小于60分的同學(xué)的學(xué)號、姓名;
select S#,Sname
from Student
where S# not in (select Student.S# from Student,SC where S.S#=SC.S# and score>60);
9、查詢沒有學(xué)全所有課的同學(xué)的學(xué)號、姓名;
select Student.S#,Student.Sname
from Student,SC
where Student.S#=SC.S#
group by Student.S#,Student.Sname having count(C#) <(select count(C#) from Course);
10、查詢至少有一門課與學(xué)號為“1001”的同學(xué)所學(xué)相同的同學(xué)的學(xué)號和姓名;
select S#,Sname
from Student,SC
where Student.S#=SC.S# and C# in (select C# from SC where S#='1001');
11、刪除學(xué)習(xí)“葉平”老師課的SC表記錄;
Delect SC
from course ,Teacher
where Course.C#=SC.C# and Course.T#= Teacher.T# and Tname='葉平';
12、查詢各科成績最高和最低的分:以如下形式顯示:課程ID,最高分,最低分
SELECT L.C# 課程ID,L.score 最高分,R.score 最低分
FROM SC L ,SC R
WHERE L.C# = R.C#
and
L.score = (SELECT MAX(IL.score)
FROM SC IL,Student IM
WHERE IL.C# = L.C# and IM.S#=IL.S#
GROUP BY IL.C#)
and
R.Score = (SELECT MIN(IR.score)
FROM SC IR
WHERE IR.C# = R.C#
GROUP BY IR.C# );
13、查詢學(xué)生平均成績及其名次
SELECT 1+(SELECT COUNT( distinct 平均成績)
FROM (SELECT S#,AVG(score) 平均成績
FROM SC
GROUP BY S# ) T1
WHERE 平均成績 > T2.平均成績) 名次, S# 學(xué)生學(xué)號,平均成績
FROM (SELECT S#,AVG(score) 平均成績 FROM SC GROUP BY S# ) T2
ORDER BY 平均成績 desc;
14、查詢各科成績前三名的記錄:(不考慮成績并列情況)
SELECT t1.S# as 學(xué)生ID,t1.C# as 課程ID,Score as 分?jǐn)?shù)
FROM SC t1
WHERE score IN (SELECT TOP 3 score
FROM SC
WHERE t1.C#= C#
ORDER BY score DESC)
ORDER BY t1.C#;
15、查詢每門功成績最好的前兩名
SELECT t1.S# as 學(xué)生ID,t1.C# as 課程ID,Score as 分?jǐn)?shù)
FROM SC t1
WHERE score IN (SELECT TOP 2 score
FROM SC
WHERE t1.C#= C#
ORDER BY score DESC )
ORDER BY t1.C#;
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
