例として以下のテーブルから1件以上の受注実績を持つ社員を取得する場合
SQL
1CREATE TABLE `社員` ( 2 `e_code` varchar(10) NOT NULL, 3 `name` varchar(10) NOT NULL 4) ENGINE=InnoDB DEFAULT CHARSET=utf8; 5 6-- 7-- Dumping data for table `社員` 8-- 9 10INSERT INTO `社員` (`e_code`, `name`) VALUES 11('0001', 'チャーリー'), 12('0002', 'ルシール'), 13('0003', 'ライナス'), 14('0004', 'シュローダー'), 15('0005', 'ペパミント'), 16('0006', 'マーシー'); 17 18-- 19-- Indexes for dumped tables 20-- 21 22-- 23-- Indexes for table `社員` 24-- 25ALTER TABLE `社員` 26 ADD PRIMARY KEY (`e_code`); 27
SQL
1CREATE TABLE `受注` ( 2 `o_number` int(11) NOT NULL, 3 `p_code` varchar(10) NOT NULL, 4 `e_code` varchar(10) NOT NULL 5) ENGINE=InnoDB DEFAULT CHARSET=utf8; 6 7-- 8-- Dumping data for table `受注` 9-- 10 11INSERT INTO `受注` (`o_number`, `p_code`, `e_code`) VALUES 12(1, 'A001', '0001'), 13(2, 'A002', '0001'), 14(3, 'B002', '0004'), 15(4, 'D001', '0005'); 16 17-- 18-- Indexes for dumped tables 19-- 20 21-- 22-- Indexes for table `受注` 23-- 24ALTER TABLE `受注` 25 ADD PRIMARY KEY (`o_number`); 26 27-- 28-- AUTO_INCREMENT for dumped tables 29-- 30 31-- 32-- AUTO_INCREMENT for table `受注` 33-- 34ALTER TABLE `受注` 35 MODIFY `o_number` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5; 36
SQLの実行文は以下のようになるようです。(http://www.sql-reference.com/select/subquery_exists.html参照)
SQL
1SELECT * 2FROM 社員 AS x 3WHERE EXISTS ( 4 SELECT * FROM 受注 5 WHERE e_code = x.e_code 6)
質問❶
WHERE e_code = x.e_code
の処理はINNER JOIN(どちらのテーブルに存在するものだけを繋ぐ)と同じでしょうか。
質問❷
今回のWHERE句で受注テーブルからの複数行、複数列の値が返ってくると思いますが、この際どのようにして社員テーブルから値を持ってきているのでしょうか。WHERE e_code = x.e_codeの処理はテーブルの紐付けのはずですし、WHERE句からは受注テーブルが返ってくるだけですよね。
質問❸
WHERE e_code = x.e_codeの実行結果だけを得たいのですがどう実行すればよいでしょうか。WHEREで結合?した結果を確認したいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/05 16:42
退会済みユーザー
2019/01/06 11:00