0

現在、次の宿題に取り組んでいます。

CREATE TABLE T_1
(COURSE_NO CHAR(8) PRIMARY KEY,
COURSE_NAME CHAR(50) );

CREATE TABLE T_2
(COURSE_NO CHAR(8),
COURSE_NAME CHAR(50) );

CREATE TABLE T_3
(COURSE_NO CHAR(8),
STUDENT_ID CHAR(15),
GRADE CHAR (2));

INSERT INTO T_1
VALUES
('CS100','Data Structures'),
('CS200','Object Oriented Programming'),
('CS300','Distributed Systems'),
('EE100','Circuit Analysis'),
('EE200','VLSI Design'),
('EE300','Packet Switching Networks');

INSERT INTO T_2
VALUES
('EE100','Circuit Analysis'),
('EE200','VLSI Design'),
('EE300','Packet Switching Networks'),
('MA100','Calculus'),
('MA200','Advanced Calculus'),
('MA300','Number Theory');

INSERT INTO T_3
VALUES
('CS100','150-70-5879','B'),
('CS100','280-90-8766','A'),
('EE100','430-76-6858','B'),
('CS200','720-60-5000','B');

与えられたタプルを指定するように要求されています: (T1 - T2) 結合 (T2 - T1) 結合 (T1 交差 T2)。

これで、MySQL がマイナス演算子にどちらかの結合を使用することがわかりました。次のように、それぞれのマイナスを独自の方法で処理できます。

SELECT *
FROM T_1
LEFT JOIN T_2
ON T_1.Course_No = T_2.Course_no
WHERE T_2.Course_no IS NULL;

T2 - T1 に対してもこれを行うことができますが、すべてを 1 つのクエリで実行するか、(T1-T2) U (T2-T1) または (T2-T1) U (T1nT2) を実行する方法についてはわかりません。

何か助けはありますか?

4

2 に答える 2

9

T1 ∖ T2 _

T <sub> 1</sub>∖T<sub>2</ sub>

T2 ∖ T1 _

T <sub> 2</sub>∖T<sub>1</ sub>

T1∩T2 _ _ _

T <sub>1</sub>∩T<sub>2</ sub>

したがって、(T1 T2 (T2 ∖ T1T1∩T2= T1∪T2

T <sub> 1</sub>∪T<sub>2</ sub>

SELECT * FROM T_1 UNION SELECT * FROM T_2

sqlfiddleでそれを参照してください。

于 2012-10-20T17:59:37.637 に答える
3

最善ではありませんが、非常に直感的な方法:

q1 = (T1 - T2): (SELECT course_no FROM T_1
                 WHERE course_no NOT IN (SELECT course_no FROM T_2))
q2 = (T2 - T1): same way, change T_1 and T_2
q3 = (T1 intersect T2): (SELECT course_no FROM T_1
                         WHERE course_no IN (SELECT course_no FROM T_2))

answer = q1 union q2 union q3

次の sql-query を取得します。

(SELECT course_no FROM T_1 WHERE course_no NOT IN (SELECT course_no FROM T_2))
UNION
(SELECT course_no FROM T_2 WHERE course_no NOT IN (SELECT course_no FROM T_1))
UNION
(SELECT course_no FROM T_1 WHERE course_no IN (SELECT course_no FROM T_2))

T_3 はどうですか?

編集:

T_1 = CS100, CS200, CS300, EE100, EE200, EE300
T_2 = EE100, EE200, EE300, MA100, MA200, MA300

q1 = T_1 - T_2 = CS100, CS200, CS300
q2 = T_2 - T_3 = MA100, MA200, MA300
q3 = T_1 intersect T_2 = EE100, EE200, EE300

answer = q1 union q2 union q3 = CS100, CS200, CS300, MA100, MA200, MA300, EE100, EE200, EE300
于 2012-10-20T17:05:06.827 に答える