Mysql 理解带有Join和Groups的SQL语句
我是SQL和PHP编程新手,所以我需要一些帮助来从其他人的代码中完全理解这个SQL select语句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 = "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我猜它们是组,它们也表示从哪个表中获取信息?这到底是怎么回事
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