您好,欢迎访问一九零五行业门户网

mysql join 三个表联接查询实例详解

首先创建三个表;分别为books表、authors表和authorbook表。 
mysql创建表代码如下:
mysql> create table books( -> bookid smallint not null primary key, -> booktitle varchar(60) not null, -> copyright year not null -> ) -> engine=innodb;query ok, 0 rows affected (0.03 sec)mysql> create table authors( -> authid smallint not null primary key, -> authfn varchar(20), -> authmn varchar(20), -> authln varchar(20) -> ) -> engine=innodb;query ok, 0 rows affected (0.06 sec)mysql> create table authorbook( -> authid smallint not null, -> bookid smallint not null, -> primary key (authid, bookid), -> foreign key (authid) references authors (authid), -> foreign key (bookid) references books (bookid) -> ) -> engine=innodb;query ok, 0 rows affected (0.03 sec)
然后分别向这三个表中插入一些数据:
mysql> insert into books values (12786, 'java', 1934), -> (13331, 'mysql', 1919), -> (14356, 'php', 1966), -> (15729, 'perl', 1932), -> (16284, 'oracle', 1996), -> (17695, 'pl/sql', 1980), -> (19264, 'javascript', 1992), -> (19354, 'www.java2s.com', 1993);query ok, 8 rows affected (0.03 sec)records: 8 duplicates: 0 warnings: 0mysql> insert into authors values (1006, 'h', 's.', 't'), -> (1007, 'j', 'c', 'o'), -> (1008, 'b', null, 'e'), -> (1009, 'r', 'm', 'r'), -> (1010, 'j', 'k', 't'), -> (1011, 'j', 'g.', 'n'), -> (1012, 'a', null, 'p'), -> (1013, 'a', null, 'w'), -> (1014, 'n', null, 'a');query ok, 9 rows affected (0.03 sec)records: 9 duplicates: 0 warnings: 0mysql> insert into authorbook values (1006, 14356), -> (1008, 15729), -> (1009, 12786), -> (1010, 17695), -> (1011, 15729), -> (1012, 19264), -> (1012, 19354), -> (1014, 16284);query ok, 8 rows affected (0.05 sec)records: 8 duplicates: 0 warnings: 0
现在开始对这三个表进行联合查询操作。
需求:获取所有书籍的名称、作者和发布时间。
下面请看mysql使用join如何实现:
mysql> select booktitle, copyright, concat_ws(' ', authfn, authmn, authln) as author -> from books join authorbook using (bookid) -> join authors using (authid) -> where copyright order by booktitle;+-----------+-----------+--------+| booktitle | copyright | author |+-----------+-----------+--------+| java | 1934 | r m r || perl | 1932 | b e || perl | 1932 | j g. n || php | 1966 | h s. t |+-----------+-----------+--------+4 rows in set (0.00 sec)
大家可以自己把mysql代码粘贴过去在自己的电脑上运行一下,多动手多思考应该可以理解。
其它类似信息

推荐信息