继续上一篇中的问题
【常用的Select选择语句】
二、【 Select 语句之 from 子句的使用 】
1、【原理说明】
前面介绍了使用SELECT子句选择列,本小节讨论SELECT查询的对象(即数据源)的构成形式。先来看看下面的这个例子:
usexscjselect姓名,专业名,总学分from xs;
(1)实际上,这句话的逻辑是: select 子句指定了现在要进行选择操作了,但是对哪个表进行操作呢?被操作的表有from子句指定,换句话说:对于select语句来说,首先应该由from子句指定操作数据源(虽然from子句位于select之后)
(2)还有一个问题值得注意的是:from子句的执行结果实际上是一个临时表,比如上面的from xs 语句 实际上生成了一张和源xs表一样的临时表,所有的select语句中的子句的操作都会在from这张临时表上进行操作
(3)from子句的语法格式为:
FROM table_reference [, table_reference]…
其中,table_reference:
tbl_name [[AS] tbl_name_alias ] [{USE | IGNORE | FORCE} INDEX (key_list)] /*查询表*/
| join_table /*连接表*/
说明:table_reference指出了要查询的表或视图。
● {USE | IGNORE | FORCE} INDEX:USE INDEX告知MySQL选择一个索引来查找表中的行,IGNORE INDEX告知MySQL不要使用某些特定的索引,FORCE INDEX的作用接近USE INDEX(key_list),只有当无法使用一个给定的索引来查找表中的行时,才使用表扫描。
● tbl_name为要查询的表名,与列别名一样,可以使用AS选项为表指定别名,tbl_name_alias为表指定的别名。表别名主要用在相关子查询及连接查询中。如果FROM子句指定了表别名,这条SELECT语句中的其他子句都必须使用表别名来代替原始的表名。当同一个表在SELECT语句中多次被提到的时候,就必须要使用表别名来加以区分。
这句话什么意思呢?
也就是说:如果我们在from子句中为一张临时表(或者一张临时的连接表中的子表)指定了别名的话,那么我们在select语句中再提到对应的表名的时候,就必须使用这个别名
为什么呢?
实际上,这是非常的明显的,就像上面说的一样,select语句的所有的操作都是在由from子句生成的临时表上进行操作的,与源表没有任何的关系,所以当from为表起了一个别名的话,select语句中当让要使用这个别名才正确呀!如下面这个例子:
假如我们已经创建了两张表
student1