0

教科書「SQL in a Nutshell」に沿ってクエリを求めます

メールアドレスを持つ従業員の場合、年齢と性別を表示します。

次のデータベース:

CREATE TABLE EMPLOYEES(
   PID SMALLINT NOT NULL,
   PRIMARY KEY(PID),
   CONSTRAINT EMPLOYEES_FK FOREIGN KEY (PID) REFERENCES PERSONS (PID)
);

CREATE TABLE PERSONS(
 PID SMALLINT NOT NULL,
 NAME VARCHAR(20) NOT NULL,
 GENDER CHAR(1) NOT NULL CHECK (GENDER IN ('M','F')),
 AGE SMALLINT NOT NULL CHECK (AGE BETWEEN 0 AND 120),
 BIRTHDATE DATE NOT NULL,
 PRIMARY KEY(PID)
);

CREATE TABLE HASE(
 PID SMALLINT NOT NULL,
 EADDR VARCHAR(30) NOT NULL,
 PRIMARY KEY(PID,EADDR),
 CONSTRAINT HASE_FK FOREIGN KEY (PID) REFERENCES PERSONS (PID)
);

私はSQLクエリに非常に慣れていないので、私の試みは次のとおりでした:

SELECT GENDER, AGE
FROM PERSONS AND EMPLOYEES
WHERE EXISTS HASE.EADDR
;

しかし、私は外部キーとの関係を正しくしているとは思いません。これは非常に基本的なことだと思いますが、クエリの作成方法がわかれば、他のクエリの作成に役立つと思います。

4

2 に答える 2

2

EXISTS を使用して結果を取得できます

SELECT Gender, Age
FROM Persons
  JOIN Employees ON Persons.PID = Employees.PID
WHERE Exists (SELECT PID
              FROM Hase
              WHERE Persons.PID = Hase.PID)

IN も使用できますが、EXISTS クエリの方が高速です。

SELECT Gender, Age
FROM Persons
  JOIN Employees ON Persons.PID = Employees.PID
WHERE Persons.PID IN  (SELECT PID
                       FROM Hase)
于 2013-03-11T21:22:21.577 に答える
1
SELECT DISTINCT
  persons.NAME,
  persons.GENDER,
  persons.AGE
FROM
  persons INNER JOIN employees
  ON persons.PID = employees.PID
  INNER JOIN hase
  ON persons.PID = hase.PID

こちらのフィドルをご覧ください。

于 2013-03-11T21:22:58.923 に答える