了解查询的工作原理

时间:2017-01-24 22:05:15

标签: sql

我有以下架构:

  • 电影(标题,年份,长度,类型,工作室名称,制作人C#)
  • StarsIn(movieTitle,movieYear,starName)
  • MovieStar(姓名,地址,性别,出生日期)
  • MovieExec(name,address,cert#,netWorth)
  • Studio(姓名,地址,presC#)

谁是2009年电影头像中的男明星?

让我们摆脱查询的性别方面,那么它会减少到谁是2009年电影头像中的明星?

Select x StarName  
From StarsIn x    
Where  x.movieTitle='avatar'   
       x.movieYear=2009;  

我很难加入两张桌子。您如何解决此查询的性别方面?

谁是米高梅的总裁?

Select e.Name  
FROM MovieExec e, Studio St  
where St.name='MGM'
      AND st.presC#=e.cert#;

解决最老问题。

Select x.StarName    
FROM StarsIn x, MovieStar y   
where y.gender = 'Male'
     AND x.movieTitle = 'avatar' 
     AND x.movieYear = 2009  
     AND  x.starName = y.name;

1 个答案:

答案 0 :(得分:5)

您展示的基本查询开头是错误的。您不能将表别名用作选择列表中的列。选择x StarName错误。我假设您要查看列starname,因此您需要将其指定为x.starname

您也不能仅列出where子句中的条件。多个条件必须与andor结合使用。在您的情况下,这应该是and

因此,您问题的基本查询应该是:

select x.starname
from StarsIn x    
where x.movieTitle = 'avatar'   
  and x.movieYear = 2009;

使用from关键字在JOIN子句中完成连接表,并使用ON关键字定义连接条件,该关键字应比较包含相同值的两个表中的列。这通常是一个表的主键列和另一个表的相应外键列。

在您的示例中,我假设starsin.starnameMovieStar.name匹配,因此连接条件应该在这两列之间:

select x.starname 
from StarsIn x    
  JOIN moviestar m ON x.starname = m.name --<< this is the  JOIN
where x.movieTitle = 'avatar'   
  and x.movieYear = 2009
  and m.gender = 'male';