第八章-连接与多张表的操作

1.引用某个查询的结果来安插至另一个表中

1 CREATE TABLE profession(
2     id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
3     ename VARCHAR(20)
4 )ENGINE = MYISAM DEFAULT CHARSET = utf8
5     AS 
6     SELECT ename FROM emp 
7     GROUP BY ename 
8     ORDER BY ename;  /*以SELECT的查询结果填满ename列*/

2.创建别名(可省略)

1 CREATE TABLE profession(
2     id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
3     mc_prof VARCHAR(20)
4 )AS
5     SELECT profession AS mc_prof FROM my_contacts
6     GROUP BY mc_prof
7     ORDER BY mc_prof;

 

join(联接)

cross join(交叉联接):把一张表中的每个值与另一张表的每个值配对,cross join返回两张表的每一行相乘的结果。

交叉连接可以省略不写,用逗号代替。

inner join(内联接):内联接基本上就是通过查询中的条件移除了某些结果数据行后的交叉联接。

SELECT mc.last_name ,mc.first_name, p.profession
FROM my_contacts AS mc
INNER JOIN profession AS p  /*联接my_contacts表和profession表*/
ON mc.prof_id = p.prof_id;  
/*这个地方的关键字on也可以换成where,on后面是联接条件*/

equijoin(相等联接):表之间为一对一关系的联接

non-equijoin(不等连接):返回任何不相等的记录

natural join(自然联接):在两张表中有相同的列名时才会有用

SELECT boys.boy, toys.toy
FROM boys
NATURAL JOIN
toys;

 

posted @ 2015-12-09 16:05  hell0x  阅读(155)  评论(0编辑  收藏  举报