Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 理解带有Join和Groups的SQL语句_Mysql_Sql_Sql Server - Fatal编程技术网

Mysql 理解带有Join和Groups的SQL语句

Mysql 理解带有Join和Groups的SQL语句,mysql,sql,sql-server,Mysql,Sql,Sql Server,我是SQL和PHP编程新手,所以我需要一些帮助来从其他人的代码中完全理解这个SQL select语句 $sql = "SELECT a.*, b.name as city, c.name as state, c.code as state_code FROM hotel a JOIN city b on a.IDCity = b.IDCity JOIN state c on b.IDState = c.IDState"; 这就是我的理解(或猜测): 它从旅馆的桌子上选择所有的东西 它正在从

我是SQL和PHP编程新手,所以我需要一些帮助来从其他人的代码中完全理解这个SQL select语句

$sql = "SELECT a.*, b.name as city, c.name as state, c.code as state_code 
FROM hotel a
JOIN city b on a.IDCity = b.IDCity
JOIN state c on b.IDState = c.IDState";
这就是我的理解(或猜测):

  • 它从旅馆的桌子上选择所有的东西
  • 它正在从城市表中选择名称
  • 它从状态表中选择名称
  • 它从状态表中选择代码
  • 它将城市名称与从hotels表到创建IDCITY的所有内容连接起来
  • 它将州名与城市名合并以创建IDState字段
这是我一点也不明白的:

  • 这个select语句是如何从不同的表中获取字段的,但它只声明“fromHotelA”
  • 什么是a。BC在这个代码中?我猜是他们的组,但为什么他们的两个c代表名称作为状态,代码作为状态代码
  • 如果答案是a。BC我猜它们是组,它们也表示从哪个表中获取信息?这到底是怎么回事
这个select语句是如何从不同的表中获取字段的,但它只声明“fromHotelA”

来自hotel a,表示从hotel表中提取基本信息,该表现在别名为“a”,因此名为hotel的表现在也被称为“a”

什么是a。BC在这个代码中?我猜是他们的组,但为什么他们的两个c代表名称作为状态,代码作为状态代码

基本表hotel及其数据现在增加了两个表,表city称为b,表state称为c

JOIN city b on a.IDCity = b.IDCity
JOIN state c on b.IDState = c.IDState";
c、 名称实际上是表“c”的列名。表状态的别名为“c”

如果答案是a。BC我猜它们是组,它们也表示从哪个表中获取信息?这到底是怎么回事

该表有行,也就是说有1行有5个字段(也称为列),如果您间接知道另一个表中的某些数据,则可以添加第6列。如果我们知道你有一辆车,我们知道所有的车都有方向盘,我们可以间接地说你有一个方向盘

FROM hotel a
hotel
表中抓取所有行,并使用
a
作为这些行的速记

JOIN city b on a.IDCity = b.IDCity
返回
a
city
表中所有可能的行组合,并使用
b
作为
city
表中原始列的缩写。然后过滤结果并保留a.IDCity=b.IDCity条件为真的行。换句话说,保留
a
中的
IDCity
列与
b
中的
IDCity
列匹配的行

JOIN state c on b.IDState = c.IDState
对于通过加入
a
b
而产生的每一行,使用匹配的
IDState
返回
state
中的所有行,并调用这些行
c

作为练习,将a.IDCity=b.IDCity上的
替换为1=1上的
并解释结果

。它可以从hotels表中选择所有内容:

不完全正确,它从hotels表中选择每一列(不一定是每一行)

。是从城市表中选择名字吗

正确的

。它从状态表中选择名称

正确的

。它从状态表中选择代码

正确的

。它把城市的名字和从旅馆到其他的一切联系在一起 用于创建IDCITY?的表。它将国家名称与国家名称连接起来 要创建IDState字段的城市

Hotels
有一个名为
IdCity
的列,用于标识该酒店的城市。因此,您使用该表中的该列与
City
表联接,该表也有一个
IdCity
列(可能是该表的键)。此联接是一个
内部联接
,因此仅返回表
Hotels
中具有
IdCity
的行,该行对应于
City
表中现有的
IdCity
。然后,该结果以相同的方式连接到
状态
表(在这种情况下,使用
城市
状态
表中的公共列
IdState

.此select语句如何从不同的表中获取字段, 但它只说“从a酒店”

不是的,
JOIN
s就是这样做的,使用公共列关联表以从这些表中获取数据

.什么是a。BC在这个代码中?我猜是他们的团体,但是 那么,为什么他们的两个c代表“名称”为“状态”,而“代码”为“状态代码”

这些是表别名。您使用它们是为了可读性和清晰性。您是说
Hotels
表将被称为
a
City
表将被称为
b
State
表将被称为
c
。然后,在使用列时,将这些列用作前缀,因此
b.name
表示城市表中的
列名。
as something
正在重命名
SELECT
中的列,因此
c.name as state
意味着您的结果集将调用该列
state

.如果a。BC是组,我猜它们也表示 要从中获取信息的表?这到底是怎么回事


正如我在前面的要点中所说,它们不是表别名。

查询是从
Hotels
中选择每一列。
a
是一个别名,用作代码中表示酒店的指针。这完全是可选的。如果不使用别名,则HOTELS.IDCITY=CITY.IDCITY
等上的连接将是

Hotels表中的记录将有一个名为
IDCity
的字段。该ID与名为
IDCity
City
表中的对应ID匹配FROM hotel a JOIN city b on a.IDCity = b.IDCity JOIN state c on b.IDState = c.IDState
SELECT a.*, b.name as city, c.name as state, c.code as state_code