网站开发日志

2009年10月5日星期一

分享家:Addthis中国

mysql命令行 - 表格联结

到目前为止,mysql命令行系列里用到查询语句都是针对一个表,在这一节里我们要学习:

如何在多个表里查询?

关系型数据库管理系统(RDBMS)的优点在于可以把不同表里的数据关联起来。如果两个表是关联的那么它们比较具备至少一个相关的列。例如:employee_data表的emp_id列和employee_per的e_id列是相关的。我们可以利用这个相关性,从employee_data里查询员工的名字,同时在employee_per里把对于的员工配偶的名字查找出来,如下:

select CONCAT(f_name, " ", l_name) AS Name,
s_name as 'Spouse Name' from
employee_data, employee_per
where m_status = 'Y' AND
emp_id = e_id;
+-----------------+-----------------+
| Name            | Spouse Name     |
+-----------------+-----------------+
| Manish Sharma   | Anamika Sharma  |
| John Hagan      | Jane Donner     |
| Ganesh Pillai   | Sandhya Pillai  |
| Anamika Sharma  | Manish Sharma   |
| John MacFarland | Mary Shelly     |
| Alok Nanda      | Manika Nanda    |
| Paul Simon      | Muriel Lovelace |
| Arthur Hoopla   | Rina Brighton   |
| Kim Hunter      | Matt Shikari    |
| Danny Gibson    | Betty Cudly     |
| Mike Harper     | Stella Stevens  |
| Monica Sehgal   | Edgar Alan      |
| Peter Champion  | Ruby Richer     |
+-----------------+-----------------+
13 rows in set (0.00 sec)

注意:这里我们用到SELECT f_name, l_name, s_name, 但是没有指明f_name或者s_name是那个表里的列。之所以可以这么写是因为f_name,l_name,s_name都是独一无二的列名,所以mysql知道它们指的是那个表里的值。但是在实际运用中,不同的表常常具有相同的列名。为了避免混淆,我们通常要用到标识,如下:

select CONCAT(employee_data.f_name, " ", employee_data.l_name)
AS Name, employee_per.s_name AS 'Spouse Name'
from employee_data, employee_per
where employee_per.m_status = 'Y'
AND employee_data.emp_id = employee_per.e_id;

注意:上述例子里employee_data.f_name指的是employee_data这个表里的f_name列;同理empoyee_per.s_name指的是employee_per表里的s_name列。此外还有另外一种相对简单的写法:

select CONCAT(a.f_name, " ", a.l_name)
AS Name, b.s_name AS 'Spouse Name'
from employee_data a, employee_per b
where a.m_status = 'Y'
AND a.emp_id = b.e_id;

注意:这个我们把employee_data用a来标识,employee_per用b来标识,这样就可以用a.f_name来表示employee_data这个表里的f_name列,是不是要简单许多?

标签: ,

相关文章:

0 条评论:

发表评论

指向此帖子的链接:

创建链接