プロが教えるわが家の防犯対策術!

SQL文の課題なのですが全くわかりません...
全てじゃなくてよろしいので、どなたか助けてください。
TOSYO 表
CREATE TABLE TOSYO(
TOSYONO CHAR(4) NOT NULL,
SYOMEI TEXT NOT NULL,
TYOSYA TEXT NOT NULL,
INDEX(TOSYONO),
PRIMARY KEY (TOSYONO))
TOSYONO SYOMEI TYOSYA
A001 S大学の真相 専修太郎
A002 SQL入門 朽木塔子
B002 神田明神 平将門
C003 無能の人 増相次郎

GAKUSEI表
CREATE TABLE GAKUSEI(
GAKUSEINO CHAR(5) NOT NULL,
SIMEI TEXT NOT NULL,
INDEX(GAKUSEINO),
PRIMARY KEY (GAKUSEINO))

GAKUSEINO SIMEI
C9601 高石邦生
C9703 吉良上野
D8801 田中桂子
Q8515 大石蔵子

KASIDASI表
CREATE TABLE KASIDASI(
KNO CHAR(3) NOT NULL,
GAKUSEINO CHAR(5) NOT NULL,
TOSYONO CHAR(5) NOT NULL,
KIGEN DATE,
HENKYAKU INT,
INDEX(KNO,GAKUSEINO,TOSYONO),
PRIMARY KEY (KNO),
FOREIGN KEY (GAKUSEINO) REFERENCES GAKUSEI (GAKUSEINO),
7
FOREIGN KEY (TOSYONO) REFERENCES TOSYO (TOSYONO)
)
KNO GAKUSEINO TOSYONO KIGEN HENKYAKU
001 D8801 C003 2014/12/30 1
002 Q8515 A001 2014/12/30 0
003 C9601 B002 2015/01/10 1
004 Q8515 C003 2015/01/12 0
005 Q8515 A002 2015/01/20 0
(HENKYAKU は,1が返却すみ,0が未返却)
次の照会をするSQL文を作成しなさい.回答は,課題1と同様に,テキストまたはワープロファイルに,転記して提出.
(1) 大石蔵子さんの貸し出しの状況の一覧(KASIDASI表から作成)
(2) まだ,未返却の貸し出しの一覧(KASIDASI表から作成)
(3) 期限が12月の貸し出しの一覧(KASIDASI表から作成)
(4) 未返却かつ期限が12月の貸し出しの一覧(KASIDASI表から作成)
(5) 未返却貸し出しで,貸出期限が古い順に出力するSQL(KASIDASI表から作成)
(6) KASIDASI表を基準に3つの表を内部結合し, VKASIDASIという仮想表を作成する.
(7) 各図書の貸し出し回数の一覧を表示するSQL文
(8) 各学生の貸し出し回数と一番遅い貸し出し期限を表示するSQL文
(1回も貸し出していない学生は表示しなくてよい)

A 回答 (1件)

きょうび先生のチェックも厳しいので、


こういう掲示板で質問して回答をそのままコピペして提出すると「不可」になる
可能性も高いですがよろしいですか?
(自分なりに理解した上で、書き直した方がよいかと・・・)

>(1) 大石蔵子さんの貸し出しの状況の一覧(KASIDASI表から作成)
SELECT K.KNO,K.GAKUSEINO,K.TOSYONO,K.KIGEN,K.HENKYAKU
FROM KASIDASI AS K
INNER JOIN GAKUSEI AS G ON G.GAKUSEINO=K.GAKUSEINO
AND G.SIMEI='大石蔵子';

>(2) まだ,未返却の貸し出しの一覧(KASIDASI表から作成)
SELECT *
FROM KASIDASI
WHERE HENKYAKU=0;

>(3) 期限が12月の貸し出しの一覧(KASIDASI表から作成)
SELECT *
FROM KASIDASI
WHERE KIGEN BETWEEN '2014-12-01' AND '2014-12-31';
※ただし、別の年の12月も拾いたいならやりかたは異なる

>(4) 未返却かつ期限が12月の貸し出しの一覧(KASIDASI表から作成)
SELECT *
FROM KASIDASI
WHERE KIGEN BETWEEN '2014-12-01' AND '2014-12-31'
AND HENKYAKU=0;

>(5) 未返却貸し出しで,貸出期限が古い順に出力するSQL(KASIDASI表から作成)
SELECT *
FROM KASIDASI
WHERE HENKYAKU =0
ORDER BY KIGEN ASC

>(6) KASIDASI表を基準に3つの表を内部結合し, VKASIDASIという仮想表を作成する.
CREATE VIEW VKASIDASI AS
SELECT K.KNO,K.GAKUSEINO,G.SIMEI,K.TOSYONO,T.SYOMEI,T.TYOSYA,K.KIGEN,K.HENKYAKU
FROM KASIDASI AS K
INNER JOIN GAKUSEI AS G ON K.GAKUSEINO=G.GAKUSEINO
INNER JOIN TOSYO AS T ON K.TOSYONO=T.TOSYONO;

>(7) 各図書の貸し出し回数の一覧を表示するSQL文
SELECT T.TOSYONO,T.SYOMEI,T.TYOSYA,SUB.COUNT AS COUNT FROM TOSYO AS T
LEFT JOIN (
SELECT TOSYONO,COUNT(*) AS COUNT FROM KASIDASI GROUP BY TOSYONO
) AS SUB ON T.TOSYONO=SUB.TOSYONO;
※1回も借りられていないものをどうするかによる

>(8) 各学生の貸し出し回数と一番遅い貸し出し期限を表示するSQL文
(1回も貸し出していない学生は表示しなくてよい)

SELECT G.GAKUSEINO,G.SIMEI,SUB.COUNT,SUB.LATE_KIGEN
FROM GAKUSEI AS G
INNER JOIN (
SELECT GAKUSEINO,COUNT(*) AS COUNT,MAX(KIGEN) AS LATE_KIGEN
FROM KASIDASI
GROUP BY GAKUSEINO) AS SUB ON G.GAKUSEINO=SUB.GAKUSEINO;
    • good
    • 0
この回答へのお礼

ご丁寧にありがとうございます!!
確かに考えがあまかったかもしれないです…
全く理解できてなかったもので、、
がんばってみます!
ありがとうございます!

お礼日時:2016/01/25 17:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!