别名除了用于列名和计算字段外,SQL还允许给表名起别名。这样做有两个主要理由:
1)缩短SQL语句。
2)允许在单条select语句中多次使用相同的表。
表别名不仅能用于where子句,它还可以用于select的列表,order by子句以及语句的其他部分。注意:表别名只在查询执行中使用,与列别名不一样。表别名不返回到客户机。
自联结通常作为外部语句用来替代从相同表中检索数据时使用的子查询语句。虽然最终的结果是相同,但有时候处理联结远比处理子查询快得多。
标准的联结返回所有数据,甚至相同的列多次出现。自然联结排除多次出现,使每个列只返回一次。这一般是通过对表使用通配符(select*),对所有其他表的列使用明确的子集来完成的。
外部联结:联结包含了那些在相关表中没有关联的行,这种类型的联结称为外部联结。
select语句使用了关键字outer join来指定联结的类型,与内部联结关联两个表中的行不同的是,外部联结还包含没有关联的行。在使用outer join语法时,必须使用right或left关键字指定包括其所有行的表(right指出的是outer join右边的表,而left指出的是outer join左边的表)。
MySQL不支持简化字符*=和=*的使用,这两种操作符在其他DBMS中是很流行的。
外部联结的类型:存在两种基本的外部联结形式,左外部联结和右外部联结。他们之间唯一的差别是所关联的表的顺序不同。换句话说,左外部联结可通过颠倒from或where子句中表的顺序转换为右外部联结。因此,两种类型的外部联结可互换使用。
使用联结和联结的条件:
1)注意所使用的联结类型。一般使用内部联结,但是用外部联结也是有效的。
2)保证使用正确的联结条件,否则将返回不正确的数据。
3)应该总是提供联结条件,否则会得出笛卡儿积。
4)在一个联结中可以包含多个表,甚至对于每个联结可以采用不同的联结类型。不过要注意,虽然这样做是合法的,一般也很有用,但应该在一起测试它们之前,分别测试每个联结。这将使故障排除更为简单。