Oracle SQL案例,比较不同表和联接中的列

时间:2016-09-19 20:20:56

标签: sql oracle

说明:

  • 选择列ENameVehicleName
  • 如果EName不拥有车辆,请将空显示为VehicleName

相关的SQL表和列:

Table         | Columns
--------------+-------------------------
Emp           | EmpNo, EName
Vehicle       | VehicleId, VehicleName
EmpVehicle    | EmpNo, VehicleId

我目前的尝试是:

SELECT Emp.EName, Vehicle.VehicleName
FROM Emp
INNER JOIN EmpVehicle ON Emp.EmpNo = EmpVehicle.EmpNo
INNER JOIN Vehicle ON EmpVehicle.VehicleId = Vehicle.VehicleId

以上查询的作用是,它显示所有员工姓名的EmpVehicle.VehicleIdVehicle.VehicleName条目,但我不知道如何包含没有涉及联接的车辆的员工姓名。

我能够确定EmpNo列中的所有Emp.EmpNo值都不在EmpVehicle.EmpNo列中,并且我的上述查询仅显示员工编号为在EmpVehicle.EmpNo列。

您如何编写一个案例,查看列Emp.EmpNo中的员工编号是否不在列EmpVehicle.EmpNo中,以及在显示的VehicleName中是否未返回Null?

2 个答案:

答案 0 :(得分:3)

您应该LEFT JOIN保留Emp表中与INNER JOIN不匹配的数据:

SELECT Emp.EName, Vehicle.VehicleName
FROM Emp
LEFT JOIN EmpVehicle
ON Emp.EmpNo = EmpVehicle.EmpNo
LEFT JOIN Vehicle
ON EmpVehicle.VehicleId = Vehicle.VehicleId

答案 1 :(得分:0)

您可以使用左连接,这样您就可以看到没有车辆的emp

SELECT Emp.EName, Vehicle.VehicleName
FROM Emp
LEFT  JOIN EmpVehicle ON Emp.EmpNo = EmpVehicle.EmpNo
LEFT  JOIN Vehicle
ON EmpVehicle.VehicleId = Vehicle.VehicleId

检查EmpVehicle.EmpNo为空,以选择没有车辆的emp.EName

SELECT Emp.EName 
FROM Emp
LEFT  JOIN EmpVehicle ON Emp.EmpNo = EmpVehicle.EmpNo
WHERE EmpVehicle.EmpNo is null