PostgreSQLの練習

学生表学生
表学生作成(SID VARCHAR(6)、SNAME VARCHAR(10)、セージ日時、SSEX VARCHAR(10));
INSERT INTO学生値('01 ''レイ趙'' 1990-01-01」 '男性');
INSERT INTO学生値('02 ''お金の力'' 1990年12月21日''男性');
INSERT INTO学生値(' 03' 、 '太陽風'、「1990- 5月20日'' M ');
INSERT INTO学生値(' 04' 、 '李ユン'、 '1990年8月6日'、 'M');
INSERT INTO学生値('05 ''周メイ' 、 '1991年12月1日'、 'F');
INSERT INTO学生値('06 ''ウーラン'' 1992年3月1日'' F ');
INSERT INTO学生値(' 07' 、 「鄭竹」、「1989年7月1日」、「女性」);
学生値に挿入('08 'を、 ' 王チュ'、' 1990年1月20日'' F「)
転写産物SC
、表のSC(シドVARCHAR(10)、シドVARCHAR(10)を作成し18がある(小数スコア、 1))。
SC値('01' 、 '01'、80)に挿入します。
SC値('01' 、 '02'、90)に挿入します。
SC値('01' 、 '03'、99)に挿入します。
SC値('02' 、 '01'、70)に挿入します。
SC値('02' 、 '02'、60)に挿入します。
SC値('02' 、 '03'、80)に挿入します。
SC値('03' 、 '01'、80)に挿入します。
SC値('03' 、 '02'、80)に挿入します。
SC値('03' 、 '03'、80)に挿入します。
SC値('04' 、 '01'、50)に挿入します。
SC値('04' 、 '02'、30)に挿入します。
SC値('04' 、 '03'、20)に挿入します。
、 'SC値('05'挿入 01' 、76);
SC値('05' 、 '02'、87)に挿入します。
SC値('06' 、 '01'、31)に挿入します。
SC値('06' 、 '03'、34)に挿入します。
SC値('07' 、 '02'、89)に挿入します。
(、'07' 、 '03' 98)SC値を挿入
课程表コース
テーブルコース(CIDのVARCHAR(10)、CNAME VARCHAR(10)のTID VARCHAR(10))を作成します。
コース値('01' 、 '语文'、 '02')に挿入します。
コース値('02' 、 '数学'、 '01')に挿入します。
コース値('03' 、 '英语'、 '03')に挿入
教师表教師
テーブル教師(TIDのVARCHAR(10)、TNAMEのVARCHAR(10))を作成します。
教師値に挿入('01' 、 『张三』)。
教師値に挿入('02' 、 『李四』)。
教師値に挿入('03' 、 '王五')


演習:
1.クエリ「02」高もちろん年生情報やコースグレードよりも「01」のコース
。*、SELECT Sスコア
sdbと「学生」からS、sdb.sc.
WHERE s.sid = sc.Sid
とs.sidで(a.sidを選択
sdb.scのA、Bのsdb.scから
a.sid = b.Sid
とa.score> b.score
とa.Cid = '01 '
と'02 = b.Cid 「);

2.クエリ60点の平均スコア以上の学生の数と学生の名前と学生成績平均点
SELECT s.sid、SNAME、AVG(スコア)
sdb.scから、SDB S AS。「学生」
WHERE s.sid = SC。 SID
s.sidによってグループ、SNAME
AVG(スコア)を有する> = 60;

3.クエリ生徒の成績情報は、SCテーブルに存在する
SELECT *
sdb.scから、SDB S. AS「学生」
s.sid = sc.Sidザ・
とsc.scoreがnullではありません。

4.すべての学生の学生数、学生名、合計入学、すべてのコースの合計スコア(ヌルとして示されていない結果)照会する
SELECT s.sid、SNAME、COUNT(シド)、SUM(音楽)
SDBから。「学生」参加sdb.sc Sを左
s.sid = sc.Sid ON
s.sid、SNAMEによるグループ。

前記問い合わせの数「李」教師某
SELECT COUNT(TNAME)
Tとsdb.teacherから
「リー%」のようなWHERE t.Tname。

6.クエリは、上の学生の情報を教えるために"ジョン・ドウ"先生を学ん
SELECT *
SDBから。 "学生"のS、C AS sdb.course、トンsdb.teacher AS、sdb.sc AS
WHERE s.sid = sc.Sid
と= c.Cid sc.Cid
とc.Tid = t.Tid
とTNAME = 'ジョン・ドウ';

7.お問い合わせは、すべてのコースの学生の完全な情報学ばなかった
SELECT *を
SDBから。「学生」S AS
WHEREは(sc.Sidでsdb.scグループからSELECT sc.Sid HAVING COUNT(CID)<3)でs.sid

s.Sidを選択
SDBから"学生"をSと。
左sdb.scに参加
s.Sid = sc.Sidに
s.Sidによって基
を有する数(sc.Cid)<(sdb.courseから選択数(CID))。

正確に同じクラスメート8.クエリ、「01」コース情報の他の学生の学習だった
SELECT s.sid、SNAME、セージ、SSEX
SDBから。「学生」S、sdb.sc
WHERE s.sid = sc.Sid
と!s.sid = '01'
s.sidによってグループ、SNAME、セージ、SSEX
HAVING COUNT(CID)=(sdb.scからSELECT COUNT(CID)WHEREシド= '01「);

9.クエリは、学生が授業や番号「01」を学ぶ少なくとも同じ情報を持っている学生が学んできた
SELECT *を
SDBから。「学生は」S
SELECT sidのWHERE(シド
sdb.scから
(SELECTシドでWHEREシド
SDBからの.sc
シド= '01「));

10.クエリの学生が名を学んだことがない「ジョン・ドウを、」先生は、のいずれかでコースを教え
SELECT SNAME
SDBから。「学生は」S
中WHEREシドない
SELECT s.sid
SDBから。S、sdb.course AS「学生」 C AS、AS sdb.teacher T、sdb.sc
WHERE s.sid = sc.Sid
とsc.Cid = c.Cid
とc.Tid = t.Tid
と'ジョン・ドウ')などTNAME。

11、クエリ上記の二つの学生がコース番号、名前や成績評価点の平均を失敗した
SELECT s.sid、SNAME、AVG(スコア)
SDBから。「学生」S、sdb.sc
WHERE s.sid SC = .SID
(DISTINCTシドをSELECTにしていないs.sid
sdb.scから
スコア> = 60)
; s.sid、SNAMEによってグループ

12.「01」フラクションは、注文学生情報が降順でスコアによって、60回の未満のコースで取得
S. *を選択
SDBから。「学生」S、sdb.sc
s.sid = sc.Sid
およびCID = '01 'と
し、スコア< 60
スコアDESC順。

13.平均成績とのすべての学生のためのすべてのコースの成績平均点降順でスコア表示
SELECTスコアを、AVG(スコア)
sdb.scから
スコアによってグループ
AVG(スコア)DESCで注文を。

シド、選択
和(ケースCIDは= '01'場合次いで他ヌル終了スコア)score_01、
和(ケースシド= '02'の場合が他ヌル終了スコア)score_02、
和(ケースシド= '03'は、その後他ヌルスコアエンド)score_03、
平均(スコア)
sdb.scのから
シドでグループ
平均(スコア)DESC順。

14.クエリ全ての被験者の最高スコア、最低スコアおよび平均スコアは以下の形式で表示されます。コースID、コース名、最高スコア、最低スコア、平均スコア、通過速度、中間速度、良いレート、優れたレート(渡します> = 60、中程度である:70-80、良いです:> = 90):80-90、優れていました。
sc.Cid、CNAMEのコース名、平均(スコア)の平均、最大値(スコア)最高得点、分(スコア)最低スコア、選択
(SUM(ケース他のスコア> = 1、その後60 0終了)* 100 / COUNTを(スコア))通過率、
次いで80のスコア> = 70およびスコア<)平均速度は1他0エンド)* 100 / COUNT(スコア)、(SUM(ケース
次いで(SUM(ケーススコア> = 80およびスコア<90 1他0終了)* 100 /回数(スコア)) 良いレート、
(SUM(ケース> 90スコア=その後、他に1 0終了)* 100 /回数(スコア)) 優れた速度
sdb.scから、sdb.courseのC
sc.Cid = c.Cid WHERE
sc.Cidによってグループ、CNAME

点の数、各セグメント15の統計すべての被験者:コース番号、コース名、[100から85]、[85から70]、[70から60]、[60-0]との比率
を選択sc.Cidコース数、CNAMEのコース名、
(SUM(ケース<= 60、その後。1他0終了)* 1.00 / COUNT(音楽)スコア> = 0とスコア)、失敗した0_60 AS
(SUM(ケーススコア> 60 <=スコア70それから1他0終了)* 1.00 /カウント数(スコア)) パス60_70、
(SUM(ケーススコア> 70とスコア<= 85、その後。1他0終了)* 1.00 / COUNT(スコア))ASも70_85、
(和(ケーススコア> 85および<= 100次いで、1他0端)* 1.00 /カウント(スコア)スコア)として優れた85_100
sdb.scから、sdb.course C
WHERE sc.Cid = c.Cid
SCによってグループ.Cid、CNAME

16.検索レコードトップ3の全ての被験者
SELECTシド、シド、スコア
sdb.scから
WHERE(SELECT COUNT(*)
sdb.scから
WHERE a.Cid = sc.Cid
とsc.score> a.score) <3。
シド、スコアDESC順。

(sdb.scからgraderankとして(*ランクを選択))スコアDESCによってシド順序によってパーティション(上)SELECT * FROM A
a.graderank <= 3。

選択科目学生番号と名前の唯一の2つのコースについてのお問い合わせ17.
SELECT s.sid、SNAME
SDBから。「学生」S、sdb.sc
WHERE s.sid = sc.Sid
s.sidによってグループ、SNAME
HAVING COUNT( CID)= 2。

18.学生情報クエリ名は、の「風」という単語が含ま
SELECT *を
SDBから「学生」S.
ザ・SNAME「%風%」のような。

19.結果は、学生の選択科目クエリ「ジョン・ドウ」先生の助成プログラム、最高達成学生情報とスコアを繰り返さない
SELECT s.sid、SNAME、SSEX、セージは、スコア
SDBから。S、SDB AS「学生」 .sc
s.sid = sc.Sid WHERE
s.sidによってグループ、SNAME、SSEX、セージは、スコア
最大(スコア)を持つ=(MAX(スコア)を選択
SDBから。sdb.course C AS "学生" S AS、 sdb.teacher、sdb.sc AS T
s.sid = sc.Sid
とsc.Cid = c.Cid
とc.Tid = t.Tid
と'ジョン・ドウ'等TNAME)。

おすすめ

転載: www.cnblogs.com/hole/p/11699702.html