带通配符的Mysql select语句

时间:2011-02-20 03:13:47

标签: sql mysql database select

我有一个mysql表EMPLOYEE

+-------------------+--------------+------+-----+---------+-------+
| Field             | Type         | Null | Key | Default | Extra |
+-------------------+--------------+------+-----+---------+-------+
| id                | int(11)      | YES  |     | NULL    |       |
| name              | varchar(30)  | YES  |     | NULL    |       |
| age               | int(11)      | YES  |     | NULL    |       |
| start_salary      | int(11)      | YES  |     | NULL    |       |
| current_salary    | int(11)      | YES  |     | NULL    |       |
| address           | varchar(255) | YES  |     | NULL    |       |
| designation       | varchar(10)  | YES  |     | NULL    |       |
+-======------------+--------------+------+-----+---------+-------+

现在,我想做一个像

这样的选择语句
SELECT (current_salary/start_salary) appraisal, * from EMPLOYEE;

但是上面的语句在mysql中无效。这不是家庭作业,而是假人。是否可以使用*作为通配符运算符,使用额外的列以及表的所有现有列?

做这样的事情的最佳方式是什么?

2 个答案:

答案 0 :(得分:4)

绝对是的。诀窍很简单,只需把通配符放在第一位 就是这样!

SELECT *, (current_salary/start_salary) appraisal from EMPLOYEE;

答案 1 :(得分:4)

理查德的答案是正确的,但你 CAN 也使用*作为最后一栏!

要指定 * 列将显示(而不是第一个),您只需为表格提供别名,然后使用alias.*,如下所示:

SELECT (E.current_salary/E.start_salary) appraisal, E.* from EMPLOYEE E;

在这种情况下,我使用E作为别名,但它可以是任何东西(emp,EMP)。

current_salary和start_salary中的 E. 是可选的,但强烈建议您在查询中开始使用别名。在使用多表(INNER / LEFT / RIGHT JOIN)的查询中,如果两个或多个表具有相同的列名,则需要别名(否则,MySql如何知道您想要哪个表nameID来自?)

请注意,对于列名在查询中唯一的表,您只能使用alias.*(即,同一查询中没有其他表具有相同名称的列)

并且*(没有任何别名,意思是“所有表中的所有列”)仅在所有表中的所有列名都是唯一的时才允许。