mysql join 三个表联接查询实例详解
时间:2016-05-31
开网站开发中,mysql join多表联接查询操作是经常会遇到的,对于刚入门的朋友来说,这是一个难点,本文章将通过实例向大家讲解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: 0
mysql> 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: 0
mysql> 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> SELECT BookTitle, Copyright, CONCAT_WS(' ', AuthFN, AuthMN, AuthLN) AS Author
-> FROM Books JOIN AuthorBook USING (BookID)
-> JOIN Authors USING (AuthID)
-> WHERE Copyright<1980
-> 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代码粘贴过去在自己的电脑上运行一下,多动手多思考应该可以理解。
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- Android实现Path平滑的涂鸦效果实例
- Android CameraManager类详解
- Android开发实现自定义水平滚动的容器示例
- Android Studio开发之 JNI 篇的简单示例
- Android自定义View播放Gif动画的示例
- Android下拉框PopupWindow使用详解
- Android实现自动文本框提示功能
- Android开发实现拍照功能的方法实例解析
- Android开发实现模仿360二维码扫描功能实例详解
- Android中控制和禁止ScrollView自动滑动到底部的方法
- ImageView 实现Android colorPikcer 选择器的示例代码
- Android Notification.Builder通知案例分享
- SimpleCommand实现上传文件或视频功能(四)
- SimpleCommand框架ImageLoader API详解(三)
- Android PopupMenu弹出菜单的实现