用SQL命令创建三张表:Sailors、Boats、Reserves.查找定过船而没有定过相同的船的水手姓名
时间: 2023-05-13 09:06:48 浏览: 118
SELECT Sailors.sname
FROM Sailors
WHERE Sailors.sid NOT IN (
SELECT Reserves.sid
FROM Reserves
WHERE Reserves.bid IN (
SELECT Reserves.bid
FROM Reserves
GROUP BY Reserves.bid
HAVING COUNT(*) > 1
)
);
相关问题
用SQL命令创建三张表:Sailors、Boats、Reserves.统计水手表中人数最少的级别组及人数
以下是创建三张表的 SQL 命令:
CREATE TABLE Sailors (
sid INT PRIMARY KEY,
sname VARCHAR(255),
rating INT,
age INT
);
CREATE TABLE Boats (
bid INT PRIMARY KEY,
bname VARCHAR(255),
color VARCHAR(255)
);
CREATE TABLE Reserves (
sid INT,
bid INT,
day DATE,
PRIMARY KEY (sid, bid, day),
FOREIGN KEY (sid) REFERENCES Sailors(sid),
FOREIGN KEY (bid) REFERENCES Boats(bid)
);
要统计水手表中人数最少的级别组及人数,可以使用以下 SQL 命令:
SELECT rating, COUNT(*) AS num_sailors
FROM Sailors
GROUP BY rating
HAVING COUNT(*) = (
SELECT MIN(num_sailors)
FROM (
SELECT COUNT(*) AS num_sailors
FROM Sailors
GROUP BY rating
) AS sailor_counts
);
sql三张表联合查询
假设有三张表 A、B、C,它们之间存在关联关系,可以使用 SQL 的 JOIN 操作进行联合查询。常见的 JOIN 操作有 INNER JOIN(内连接)、LEFT JOIN(左连接)、RIGHT JOIN(右连接)和 FULL JOIN(全连接)。
以下是一个 INNER JOIN 的示例:
```
SELECT *
FROM A
INNER JOIN B ON A.id = B.a_id
INNER JOIN C ON B.id = C.b_id;
```
上述 SQL 语句中,使用 INNER JOIN 连接了三张表 A、B 和 C。通过 ON 子句指定了 A 和 B 表之间的关联条件,以及 B 和 C 表之间的关联条件。最终查询结果将包含 A、B 和 C 表中满足关联条件的所有数据。
如果需要使用其他类型的 JOIN 操作,只需要将 INNER JOIN 替换为对应的操作符即可。例如,使用 LEFT JOIN 进行左连接:
```
SELECT *
FROM A
LEFT JOIN B ON A.id = B.a_id
LEFT JOIN C ON B.id = C.b_id;
```
上述 SQL 语句中,使用 LEFT JOIN 连接了三张表 A、B 和 C。最终查询结果将包含 A 表中的所有数据,以及 B 和 C 表中满足关联条件的数据。如果 B 或 C 表中没有与 A 表关联的数据,则对应的列将填充 NULL 值。