10.7为表和字段取别名
在查询时,可以为表和字段取一个别名。这个别名可以代替其指定的表和字段。本小 节将详细讲解如何为表和字段取别名。
10.7.1为表取别名
当表的名称特別长时,在査询中直接使用表名很不方便。这时可以为表取一个别名。
用这个别名来代替表的名称。例如,电力软件中的变压器表的名称为 power_system_transform。如果要使用该表下面的字段id,但同时查询的其他表中也有id 字段。这样就必须指明是哪个表下的id字段,如power_system_transform.id。因为变压器表的表名太长,使用起来不是很方便。为了解决这个问题,可以为变压器表取一个别名, 如将power_system_transform取个别名为t,那么t就代表了变压器表。t.id与power_system_transform.id表示的意思就相同了。本小节中将讲解怎么样为表取一个别名, 以及查询时如何使用别名。
MySQL中为表取别名的基本形式如下:
表名 表的别名
通过这种方式,“表的别名”就能在此次查询中代替“表名” 了。
【示例10-69】下面为department表取个别名d。然后查询表中d_id字段取值为1001 的记录。SQL代码如下:
SELECT * FROM department d WHERE d.d_id=1001;
代码中 “department d” 表示 department 表的别名为 d; d.d_id 表示department表的 d_id字段。代码执行结果如下:
mysql>SELECT * FROM department d ->WHERE d_id=1001; +------+--------+----------+---------+ | d_id | d_name | function | address | +------+--------+----------+---------+ | 1001 | 科研部 | 研发产品 | 3号楼5层 | +------+--------+----------+---------+ 1 row set(0.00 sec)
结果查询出了d_id字段取值为1001的记录。为表取名必须保证该数据库中没有其他表与该别名相同。如果相同了,数据库系统将不知道该名称指代的是哪个表了。
10.7.2 为字段取别名
当查询数据时,MySQL会显示每个输出列的名词。默认的情况下,显示的列名是创建表是定义的列名。例如,department表的列名分别是d_id、d_name、funcion和Baddress。 当查询department表时,就会相应显示这几个列名。有时为了显示结果更加直观,需要一个更加直观的名字来表不这一列。如department_name可以很直接的知道是部门名称。这时就需要将d_name字段取别名为department_name。本小节将详细讲解如何为字段取别名。
MySQL中为字段取别名的基本形式如下:
属性名[AS]别名
其中,“属性名”参数为字段原来的名称;“别名”参数为字段新的名称;“AS”关键字可有可无,实现的作用都是一样的。通过这种方式,显示结果中“别名”就代替‘‘属 性名” 了。
【示例10-70】下面为department表中d_id字段取名为department_id, d_name字段取名为department_name。在改名前,先查看department表的d_id字段和d_name字段的数据, 以便与改名后进行对比。查询结果如下:
mysql>SELECT d_id,d_name FROM department; +------+--------+ | d_id | d_name | +------+--------+ | 1002 | 生产部 | +------+--------+ | 1003 | 销售部 | +------+--------+ | 1001 | 科研部 | +------+--------+ 3 row set(0.00 sec)
查询结果直接显示d_id和d_name这两个名称。下面将d_id字段取名为department_id,d_name字段取名为department_name.SQL代码如下:
SELECT d_id AS department_id,d_name AS department_name FROM department;
mysql>SELECT d_id AS department_id,d_name AS department_name FROM department; +--------------+-----------------+ |department_id | department_name | +--------------+-----------------+ | 1002 | 生产部 | +--------------+-----------------+ | 1003 | 销售部 | +--------------+-----------------+ | 1001 | 科研部 | +--------------+-----------------+ 3 row set(0.00 sec)
查询结果中直接显示department_id和department_name两个名称。说明,这两个新的名称已经代替了d_id和d_name。为字段取名必须保证该表中没有其他字段与该别名相同。 如果名称相同,数据库系统将不知道该名称指代的是哪个字段了。而且,字段的别名只是显示的时候替代字段本来的名称。在查询条件中是不能使用新定义的别名的。如果査询条件中使用了别名,系统会报错。例如,将上面例子中的department_id作为查询条件,那么系统会出现报错。
表的别名不能与该数据库的其他表同名。字段的别名不能与该表的其他字段同名。在条件表达式中不能使用字段的别名,否则将会出现“ERROR 1054 (42S22): Unknown column”这样的错误提示信息。显示查询结果时字段的别名代替了字段名