MySQL-Join
来源:互联网 发布:淘宝助手怎么上传宝贝 编辑:程序博客网 时间:2024/06/05 16:01
环境准备
三个table:书籍信息book、作者信息author、出版社信息publish。
create database temp;use temp;create table book (id int not null auto_increment, name varchar(20) not null, author int not null, pub int not null, price int default 0, primary key (id));create table author (id int not null auto_increment, name varchar(20) not null, age int, primary key (id));create table publish (id int not null auto_increment, name varchar(20) not null, city varchar(20), primary key (id));
增加测试数据:
insert into author (name, age) values ("Tom", 20);insert into author (name, age) values ("Jerry", 25);insert into publish (name, city) values ("PUB Tigger", "BJ");insert into publish (name, city) values ("PUB Lion", "SH");insert into publish (name, city) values ("PUB Rabbit", "SZ");insert into book (name, author, pub, price) values ("Good Mood", 1, 1, 110);insert into book (name, author, pub, price) values ("Rainy Day", 2, 3, 230);insert into book (name, author, pub, price) values ("On the Road", 2, 2, 220);
验证:
MariaDB [temp]> select * from book;+----+-------------+--------+-----+-------+| id | name | author | pub | price |+----+-------------+--------+-----+-------+| 1 | Good Mood | 1 | 1 | 110 || 2 | Rainy Day | 2 | 3 | 230 || 3 | On the Road | 2 | 2 | 220 |+----+-------------+--------+-----+-------+3 rows in set (0.00 sec)MariaDB [temp]> select * from author;+----+-------+------+| id | name | age |+----+-------+------+| 1 | Tom | 20 || 2 | Jerry | 25 |+----+-------+------+2 rows in set (0.00 sec)MariaDB [temp]> select * from publish;+----+------------+------+| id | name | city |+----+------------+------+| 1 | PUB Tigger | BJ || 2 | PUB Lion | SH || 3 | PUB Rabbit | SZ |+----+------------+------+3 rows in set (0.00 sec)
Join
根据三个表,查询完整的信息;Join有两种使用方式。
MariaDB [temp]> select book.name, author.name as author, publish.name as publish, publish.city, book.price from book, author, publish where book.author=author.id and book.pub=publish.id;+-------------+--------+------------+------+-------+| name | author | publish | city | price |+-------------+--------+------------+------+-------+| Good Mood | Tom | PUB Tigger | BJ | 110 || Rainy Day | Jerry | PUB Rabbit | SZ | 230 || On the Road | Jerry | PUB Lion | SH | 220 |+-------------+--------+------------+------+-------+3 rows in set (0.00 sec)MariaDB [temp]> select book.name, author.name as author, publish.name as publish, publish.city, book.price from book inner join author inner join publish on book.author=author.id and book.pub=publish.id;+-------------+--------+------------+------+-------+| name | author | publish | city | price |+-------------+--------+------------+------+-------+| Good Mood | Tom | PUB Tigger | BJ | 110 || Rainy Day | Jerry | PUB Rabbit | SZ | 230 || On the Road | Jerry | PUB Lion | SH | 220 |+-------------+--------+------------+------+-------+3 rows in set (0.00 sec)MariaDB [temp]>
同一个table被查询两次
对上面的场景进行增强,假设一本书有两个作者。
新建一个表book_en。
create table book_en (id int not null auto_increment, name varchar(20) not null, author1 int not null, author2 int not null, pub int not null, price int default 0, primary key (id));insert into book_en (name, author1, author2, pub, price) values ("A Bad Habit", 1, 2, 1, 110);insert into book_en (name, author1, author2, pub, price) values ("Keep Healthy", 2, 1, 3, 230);insert into book_en (name, author1, author2, pub, price) values ("Toast", 1, 2, 2, 220);
查询:
MariaDB [temp]> select * from book_en;+----+--------------+---------+---------+-----+-------+| id | name | author1 | author2 | pub | price |+----+--------------+---------+---------+-----+-------+| 4 | A Bad Habit | 1 | 2 | 1 | 110 || 5 | Keep Healthy | 2 | 1 | 3 | 230 || 6 | Toast | 1 | 2 | 2 | 220 |+----+--------------+---------+---------+-----+-------+3 rows in set (0.00 sec)MariaDB [temp]> select * from author;+----+-------+------+| id | name | age |+----+-------+------+| 1 | Tom | 20 || 2 | Jerry | 25 |+----+-------+------+2 rows in set (0.00 sec)MariaDB [temp]> select book_en.name as name, a1.name as author1, a2.name as author2, publish.name as publish, publish.city as city, book_en.price from book_en, author a1, author a2, publish where book_en.author1=a1.id and book_en.author2=a2.id and book_en.pub=publish.id;+--------------+---------+---------+------------+------+-------+| name | author1 | author2 | publish | city | price |+--------------+---------+---------+------------+------+-------+| Keep Healthy | Jerry | Tom | PUB Rabbit | SZ | 230 || A Bad Habit | Tom | Jerry | PUB Tigger | BJ | 110 || Toast | Tom | Jerry | PUB Lion | SH | 220 |+--------------+---------+---------+------------+------+-------+3 rows in set (0.00 sec)MariaDB [temp]> select book_en.name as name, a1.name as author1, a2.name as author2, publish.name as publish, publish.city as city, book_en.price from book_en inner join author a1 inner join author a2 inner join publish where book_en.author1=a1.id and book_en.author2=a2.id and book_en.pub=publish.id;+--------------+---------+---------+------------+------+-------+| name | author1 | author2 | publish | city | price |+--------------+---------+---------+------------+------+-------+| Keep Healthy | Jerry | Tom | PUB Rabbit | SZ | 230 || A Bad Habit | Tom | Jerry | PUB Tigger | BJ | 110 || Toast | Tom | Jerry | PUB Lion | SH | 220 |+--------------+---------+---------+------------+------+-------+3 rows in set (0.00 sec)MariaDB [temp]>
上面的where可以改成on。
另外一个例子
城市city,两个城市之间的距离distance。
建表&准备测试数据
create table city (id int not null auto_increment, name varchar(20), primary key (id));create table distance (id int not null auto_increment, from_id int not null, to_id int not null, dist int not null, primary key (id));insert into city (name) values("BJ");insert into city (name) values("SH");insert into city (name) values("SZ");insert into distance (from_id, to_id, dist) values (1, 2, 1200);insert into distance (from_id, to_id, dist) values (2, 3, 2300);insert into distance (from_id, to_id, dist) values (3, 1, 3100);
数据验证
MariaDB [temp]> select * from distance;+----+---------+-------+------+| id | from_id | to_id | dist |+----+---------+-------+------+| 1 | 1 | 2 | 1200 || 2 | 2 | 3 | 2300 || 3 | 3 | 1 | 3100 |+----+---------+-------+------+3 rows in set (0.00 sec)MariaDB [temp]> select * from city;+----+------+| id | name |+----+------+| 1 | BJ || 2 | SH || 3 | SZ |+----+------+3 rows in set (0.00 sec)
Join
MariaDB [temp]> select c1.name as city1, c2.name as city2, distance.dist dist from distance inner join city c1 inner join city c2 where distance.from_id=c1.id and distance.to_id=c2.id;+-------+-------+------+| city1 | city2 | dist |+-------+-------+------+| BJ | SH | 1200 || SH | SZ | 2300 || SZ | BJ | 3100 |+-------+-------+------+3 rows in set (0.01 sec)MariaDB [temp]> select c1.name as city1, c2.name as city2, distance.dist dist from city c1 inner join city c2 inner join distance on distance.from_id=c1.id and distance.to_id=c2.id;+-------+-------+------+| city1 | city2 | dist |+-------+-------+------+| BJ | SH | 1200 || SH | SZ | 2300 || SZ | BJ | 3100 |+-------+-------+------+3 rows in set (0.00 sec)MariaDB [temp]>
0 0
- mysql join
- mysql join
- mysql join
- mysql join
- mysql join
- MySQL join
- MySQL-Join
- MySQL join
- join mysql
- mysql left join right join inner join
- mysql left join,right join,inner join
- Mysql-left join,right join,inner join
- mysql left join,right join,inner join
- MySQL join left join right join 区别
- MySQL Left Join,Right Join
- MySQL Left Join,Right Join
- mysql left join right join
- Mysql Inner Join , Outer Join
- RabbitMQ(五)—路由选择
- 5.2 服务端开发
- VMware怎么安装VMware tools
- 谈一谈Elasticsearch的集群部署
- Android性能优化之实现一个线程多个任务--HandlerThread
- MySQL-Join
- Android网络定位或GPS定位
- 小白 android build类 小结
- PHP文件操作-读取数据库文件路径复制到另一个目录
- Java StringBuffer和StringBuilder类
- Android Studio2.0应用结构解析
- 获取状态栏高度的方法
- vim 基本操作
- 关于redhat 文件名进行列表查看 日期显示乱码解决