質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

737閲覧

SQLにおける内部結合を用いた外部結合(join on や join usingを用いた外部結合)

Tomatomat

総合スコア1

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2021/06/09 05:02

前提・実現したいこと

create table 学生(
学籍番号 varchar(3) not null,
氏名 varchar(12),
出身校 varchar(10),
primary key (学籍番号)
);

create table 修得単位(
学籍番号 varchar(3) not null,
学年 int,
修得単位数 int,
primary key (学籍番号, 学年)
);

create table 履修(
学籍番号 varchar(3) not null,
科目名 varchar(16),
単位数 int,
primary key (学籍番号, 科目名)
);

insert into 学生(学籍番号, 氏名, 出身校) values('501', '吉水 小百合', '情報学園');
insert into 学生(学籍番号, 氏名, 出身校) values('601', '木村 拓弥', '先端学院');
insert into 学生(学籍番号, 氏名, 出身校) values('602', '坂東 太郎', '実学高校');
insert into 学生(学籍番号, 氏名, 出身校) values('701', '大沢 たつお', '両道高校');
insert into 学生(学籍番号, 氏名, 出身校) values('702', '綾瀬 なつか', '情報学園');

insert into 修得単位(学籍番号, 学年, 修得単位数) values('501', 1, 48);
insert into 修得単位(学籍番号, 学年, 修得単位数) values('501', 2, 40);
insert into 修得単位(学籍番号, 学年, 修得単位数) values('501', 3, 38);
insert into 修得単位(学籍番号, 学年, 修得単位数) values('601', 1, 39);
insert into 修得単位(学籍番号, 学年, 修得単位数) values('601', 2, 44);
insert into 修得単位(学籍番号, 学年, 修得単位数) values('701', 1, 37);
insert into 修得単位(学籍番号, 学年, 修得単位数) values('702', 1, 45);

insert into 履修(学籍番号, 科目名, 単位数) values('501', '卒業研究', 8);
insert into 履修(学籍番号, 科目名, 単位数) values('601', 'Webデザイン', 2);
insert into 履修(学籍番号, 科目名, 単位数) values('601', '画像処理', 4);
insert into 履修(学籍番号, 科目名, 単位数) values('601', 'CG表現', 2);
insert into 履修(学籍番号, 科目名, 単位数) values('603', 'データベース', 6);
insert into 履修(学籍番号, 科目名, 単位数) values('603', 'Webデザイン', 2);
insert into 履修(学籍番号, 科目名, 単位数) values('701', 'データベース', 6);
insert into 履修(学籍番号, 科目名, 単位数) values('701', '情報検索', 2);
insert into 履修(学籍番号, 科目名, 単位数) values('701', 'Java言語', 4);
insert into 履修(学籍番号, 科目名, 単位数) values('702', 'Java言語', 4);
insert into 履修(学籍番号, 科目名, 単位数) values('702', 'Webデザイン', 2);

-- select * from 学生;
-- select * from 修得単位;
-- select * from 履修;

上記SQLに対して、以下の問いに答えなさい
(1)「履修」テーブルから, 単位数が3以上である行を抽出するビューを作成する命令を示せ. ただし, ビューの名称は「長期間講義」とする.

(2)join on文を用いて, 「学生」テーブルと「履修」テーブルを左外部結合するための命令を示せ. ただし, 結合条件は「両テーブルの学籍番号が等しい」であるとする.

(3)join using文を用いて, 「学生」テーブルと「履修」テーブルを完全外部結合するための命令を示せ. ただし, 結合条件は「両テーブルの学籍番号が等しい」とする.

(2)、(3)が全く分かりません。外部結合にどのようにして内部結合を利用するのでしょうか?
内部結合を利用すれば、Null値は削られてしまうのではないですか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2021/06/09 05:30

ご利用のSQLは間違いなくMySQLで間違いないですか? 完全外部結合サポートしていないと思うのですが・・
Tomatomat

2021/06/09 05:35

MySQLで間違いないと思います。full outer joinではなくleft outer joinの結果とright outer joinの結果をunionするという解説はされたのですが、join usingを用いた方法を問われたため、やり方がわからず質問させていただきました。
yambejp

2021/06/09 06:11

> left outer joinの結果とright outer joinの結果をunionする 結合するキーの一覧をつくってleft joinする方法が楽だと思います (回答はそういう方法です)
guest

回答1

0

ベストアンサー

(1)create view 長期間講義 as select * from 履修 where 単位数>=3

(2)select * from 学生 as t1 left join 履修 as t2 on t1.学籍番号=t2.学籍番号

(3)select * from (select 学籍番号 from 学生 union select 学籍番号 from 履修) as t1
left join 学生 using(学籍番号)
left join 履修 using(学籍番号)

投稿2021/06/09 05:35

yambejp

総合スコア116734

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2021/06/09 05:37

そもそもが履修テーブルの学籍番号で学生テーブルに存在しないという運用方法に 問題があると思います
Tomatomat

2021/06/09 05:56

結局無理やり使うしかないということですね... ありがとうございました。助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問