左连接混淆的 Sql 查询[关闭]

Posted

技术标签:

【中文标题】左连接混淆的 Sql 查询[关闭]【英文标题】:Sql query with left join confusion [closed] 【发布时间】:2020-03-12 06:09:46 【问题描述】:

当我参加数据库开发人员职位的技术考试时,我遇到了一个问题:

显示任何未涵盖的物种的所有详细信息 为英国动物园工作的员工的专长。

表格:

Zoo: ZooName,City,Country,City
Animal: AnimalId,Species,ZooName,Gender,Dob
Employee:EmployeeId,FirstName,LastName,Gender
EmployeeContract: EmployeeId,ZooName,Salary,StartDate,EndDate
Species: Species,Status,TotalAnimals
Specialty:EmployeeId,Species

我不明白问题中“不属于员工的任何专长”的部分。我相信必须在 Species 和 Specialty 表之间留下连接,因为我们会找到没有员工反对该物种的物种,基本上这将是我们没有员工的物种,但我不确定我是否在想方向是否正确。

我发现很难弄清楚这其中的逻辑。谁能给我解释一下这个的逻辑,请

【问题讨论】:

请不要要求我们编写您的代码。显示您可以执行哪些部分或相关查询。员工是什么?有哪些特产?员工及其专长?动物园的品种有哪些?有哪些动物及其物种?请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。对于包含 DBMS 和 DDL(包括约束和索引)和输入为格式化为表的代码的 SQL。 How to Ask Re relational querying. 【参考方案1】:

首先让我们看看在另一个表中使用的每个表字段:

table Zoo ZooName 用于Animal 表格。 AnimalSpecies用于SpeciesSpecialty表。 EmployeeEmployeeId用于EmployeeContractSpecialty表。

问题是显示在英格兰动物园工作的员工的任何专业都不涵盖的物种的详细信息。

我相信他们要问的是在专业表中注册的物种数据,而处理动物的员工不在英格兰动物园注册。

你可以这样做:

Select s.Species, s.Status, s.TotalAnimals -- using Species table as select since the question ask for all the details for species
From Species s -- get species data
Left Join Specialty sp ON s.Species = sp.Species -- get specialty data
Left Join Animal a ON s.Species = a.Species -- get animal data
Left Join Zoo z on a.ZooName = z.ZooName -- get zoo data
Where Zoo.Country <> 'England' -- not in England Zoo

【讨论】:

以上是关于左连接混淆的 Sql 查询[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何将在左连接中具有连接的 sql 转换为查询构建器?

SQL 查询左连接问题

sql面试题_sql_分组查询左连接和右连接的区别

左连接 SQL 查询 - MS Access

带有大量左连接的 SQL 查询

如何在 LINQ 中使用左外连接进行 SQL 查询?