Suppliers(sid: integer, sname: string, address: string)其中:sid为供应商号,sname为供应商名,address为地址。sid为主码 Parts(pid: integer, pname: string, color: string)其中pid为零件号,pname为零件名,color为颜色。pid为主码。 Catalog(sid: integer, pid: integer, cost: real) 其中主码是(sid,pid), sid, pid分别为外码 目录关系列出了供应商提供零件的价格。 关系代数: 1、查找地址在‘5 street‘的供应商sname 2、查找提供了红色零件的供应商sname SQL: 1. 创建表以及相应的约束。 2. 查找供应商提供零件的情况,输出sid、sname、pid、pname和cost。 3. 查找姓名中第三个字母是m的供应商sname。 4. 查找提供了零件名为‘bolt‘的供应商sname 5. 查找在每种零件上收取了最高价格的供应商的sid和pid 6. 查找提供零件种类超过10种的供应商sname。 7. 查找只提供了红色零件的供应商sid。 8. 查找提供了所有零件的供应商sname。 9. 查找供应了所有红色零件的供应商sname。 10. 创建视图p1(pid,pname,color), 包含pid在500到1000(包括500和1000)的零件信息。
时间: 2023-06-12 09:04:00 浏览: 91
SQL解答如下:
1. 创建表以及相应的约束。
```sql
CREATE TABLE Suppliers (
sid INTEGER PRIMARY KEY,
sname VARCHAR(50),
address VARCHAR(50)
);
CREATE TABLE Parts (
pid INTEGER PRIMARY KEY,
pname VARCHAR(50),
color VARCHAR(50)
);
CREATE TABLE Catalog (
sid INTEGER REFERENCES Suppliers(sid),
pid INTEGER REFERENCES Parts(pid),
cost REAL,
PRIMARY KEY(sid, pid)
);
```
2. 查找地址在‘5 street‘的供应商sname
```sql
SELECT sname FROM Suppliers WHERE address = '5 street';
```
3. 查找提供零件的情况,输出sid、sname、pid、pname和cost。
```sql
SELECT Suppliers.sid, Suppliers.sname, Parts.pid, Parts.pname, Catalog.cost
FROM Suppliers
JOIN Catalog ON Suppliers.sid = Catalog.sid
JOIN Parts ON Catalog.pid = Parts.pid;
```
4. 查找姓名中第三个字母是m的供应商sname。
```sql
SELECT sname FROM Suppliers WHERE SUBSTR(sname, 3, 1) = 'm';
```
5. 查找提供了零件名为‘bolt‘的供应商sname
```sql
SELECT sname
FROM Suppliers
JOIN Catalog ON Suppliers.sid = Catalog.sid
JOIN Parts ON Catalog.pid = Parts.pid
WHERE Parts.pname = 'bolt';
```
6. 查找在每种零件上收取了最高价格的供应商的sid和pid
```sql
SELECT sid, pid, MAX(cost) AS max_cost
FROM Catalog
GROUP BY pid, sid;
```
7. 查找提供零件种类超过10种的供应商sname。
```sql
SELECT sname
FROM Suppliers
JOIN (
SELECT sid, COUNT(DISTINCT pid) AS num_parts
FROM Catalog
GROUP BY sid
) AS num ON Suppliers.sid = num.sid
WHERE num_parts > 10;
```
8. 查找只提供了红色零件的供应商sid。
```sql
SELECT sid
FROM Catalog
WHERE pid IN (
SELECT pid
FROM Parts
WHERE color = 'red'
)
GROUP BY sid
HAVING COUNT(DISTINCT pid) = 1;
```
9. 查找提供了所有红色零件的供应商sname。
```sql
SELECT sname
FROM Suppliers
WHERE sid IN (
SELECT sid
FROM Catalog
WHERE pid IN (
SELECT pid
FROM Parts
WHERE color = 'red'
)
GROUP BY sid
HAVING COUNT(DISTINCT pid) = (
SELECT COUNT(*)
FROM Parts
WHERE color = 'red'
)
);
```
10. 创建视图p1(pid,pname,color),包含pid在500到1000(包括500和1000)的零件信息。
```sql
CREATE VIEW p1 AS
SELECT pid, pname, color
FROM Parts
WHERE pid BETWEEN 500 AND 1000;
```
阅读全文