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 回答