SQL 简单 SELECT 查询

标签 sql

create table Person(

SSN INT,
Name VARCHAR(20),
primary key(SSN)

);

create table Car(

PlateNr INT,
Model VARCHAR(20),
primary key(PlateNr)

);

create table CarOwner(

SSN INT,
PlateNr INT,
primary key(SSN, PlateNR)
foreign key(SSN) references Person (SSN),
foreign key(PlateNr) references Car (PlateNr)

);

Insert into Person(SSN, Name) VALUES ('123456789','Max');
Insert into Person(SSN, Name) VALUES ('123456787','John');
Insert into Person(SSN, Name) VALUES ('123456788','Tom');


Insert into Car(PlateNr, Model) VALUES ('123ABC','Volvo');
Insert into Car(PlateNr, Model) VALUES ('321CBA','Toyota');
Insert into Car(PlateNr, Model) VALUES ('333AAA','Honda');

Insert into CarOwner(SSN, PlateNr) VALUES ('123456789','123ABC');
Insert into CarOwner(SSN, PlateNr) VALUES ('123456787','333AAA');

我遇到的问题是我想要进行的 SELECTE 查询。我不希望能够从该人中选择所有内容,并且不希望包括他所拥有的汽车的车牌号码,例如:

---------------------------------
 SSN            NAME     Car

123456789       Max      123ABC
123456787       John     3338AAA
123456788       Tom      

----------------------------------

因此,我希望能够显示 Person 表中的所有内容,并显示 CarOwner 的内容(如果此人实际上是 CarOwner)。到目前为止我所拥有的是:“SELECT * from Person, CarOwner WHERE Person.SSN = CarOwner.SSN;”。但这显然会导致只显示车主。

希望我解释得足够好,谢谢。

最佳答案

试试这个:

SELECT p.*, c.*
FROM Person p
LEFT OUTER JOIN CarOwner co
ON p.SSN = co.SSN
LEFT OUTER JOIN Car c
ON co.PlateNr = c.PlateNr

显示SQLFiddle

附注我更改了您的主键 PlateNr 的类型(采用 varchar 而不是 int)

关于SQL 简单 SELECT 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19028205/

相关文章:

php - 尝试解决 MySQL 查询逻辑问题的新手

mysql - 我如何将我可以插入表中的行数限制为 Mysql 服务器中的一行?

sql - MS SQL Server MAX 函数

java - PostgreSQL 和 JDBC : Is `UPDATE table ... RETURNING ... INTO` supported?

sql - Oracle SQLPlus 列出多个表中带有 'having' 的值

sql - 如何使用 SQL 在 Informix 中列出特定数据库的模式?

python - SQLite - 计算移动平均值

php - 当一个输入被填满时,如何使用ajax获取mysql数据

sql - 交通时刻表系统数据库设计

mysql - SQL如何引用变量列