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' fromemployee_data, employee_perwhere m_status = 'Y' ANDemp_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_perwhere 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 bwhere 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 条评论:
发表评论
指向此帖子的链接:
创建链接