mysql的跨库查询

avatar 2022年3月23日18:13:40 评论 1,165 次浏览

本章主要是针对跨库查表的内容,这里会创建两个库分别是team和test,在这两个库中创建了两个表,分别是student和wulaoer两个表,表中已经插入了数据。可以参考:https://www.wulaoer.org/?p=2232 这里会对于表的创建有说明。

下面看一下两个表的内容

mysql> select * from team.student;
+----+--------+------+-----+------------+---------+
| id | name   | age  | sex | hire_date  | dept_id |
+----+--------+------+-----+------------+---------+
|  1 | 小明   |   40 | 男  | 2010-06-21 |       1 |
|  2 | 小李   |   28 | 男  | 2010-06-21 |       1 |
|  3 | 小红   |   28 | 男  | 2010-06-21 |       1 |
+----+--------+------+-----+------------+---------+
3 rows in set (0.00 sec)
mysql> select * from test.wulaoer;
+----+--------------+-------+------+
| id | name         | grade | sex  |
+----+--------------+-------+------+
|  1 | 宋江         |    40 | 男   |
|  2 | 诸葛亮       |   100 | 男   |
|  3 | 皇母娘娘     |   900 | 女   |
|  4 | 孙悟空       |  5000 | 男   |
|  5 | 贾宝玉       |    36 | 女   |
|  7 | 司马懿       |    56 | 男   |
|  8 | 玉皇大帝     |   900 | 女   |
+----+--------------+-------+------+
7 rows in set (0.00 sec)

我这里在两个表中插入了数据,现在两个数据已经有了,需要注意的是必须在两个表的列中需要有唯一值,例如第一列中的id,序号都是唯一值,这样在查找时就可以根据id列查找了。

select * from 库名.表名,库名.表名 条件;
mysql> select * from team.student,test.wulaoer where grade = 40 and age = 40;
+----+--------+------+-----+------------+---------+----+--------+-------+------+
| id | name   | age  | sex | hire_date  | dept_id | id | name   | grade | sex  |
+----+--------+------+-----+------------+---------+----+--------+-------+------+
|  1 | 小明   |   40 | 男  | 2010-06-21 |       1 |  1 | 宋江   |    40 | 男   |
+----+--------+------+-----+------------+---------+----+--------+-------+------+
1 row in set (0.00 sec)

这里查找两个库中的表中年龄等于40的同学,两个表中表示年龄的列不一样,所以分别列出来并使用and,这样两个表中符合条件的数据就查询出来了。同样也可以使用id查询两个表符合条件的内容,这里使用了join。

mysql> select * from team.student as a join test.wulaoer as b ON a.id = b.id;
+----+--------+------+-----+------------+---------+----+--------------+-------+------+
| id | name   | age  | sex | hire_date  | dept_id | id | name         | grade | sex  |
+----+--------+------+-----+------------+---------+----+--------------+-------+------+
|  1 | 小明   |   40 | 男  | 2010-06-21 |       1 |  1 | 宋江         |    40 | 男   |
|  2 | 小李   |   28 | 男  | 2010-06-21 |       1 |  2 | 诸葛亮       |   100 | 男   |
|  3 | 小红   |   28 | 男  | 2010-06-21 |       1 |  3 | 皇母娘娘     |   900 | 女   |
+----+--------+------+-----+------------+---------+----+--------------+-------+------+
3 rows in set (0.00 sec)

这里使用join做关联,上面把team中的student表映射到a上,test库中的wulaoer表映射到b上,查找的时候就可以根据a和b来判断,在json中还有两个扩展

inner join:代表选择的是两个表的交集部分。
left join:代表选择的是前面一个表的全部,即使右表没有对应匹配的记录,右表不足的地方用NULL填充
right join:代表选择的是后面一个表的全部,即使左表没有对应匹配的记录,左表不足的地方用NULL填充
插入一些新的数据在两个表中,以便区分这三个查询。

上面是针对json的扩展部分,有需要的可以自己试试,这里就不做解释了,想了解的可以自己试试。

mysql> select * from team.student as a join test.wulaoer as b ON a.sex = b.sex;
+----+--------+------+-----+------------+---------+----+-----------+-------+------+
| id | name   | age  | sex | hire_date  | dept_id | id | name      | grade | sex  |
+----+--------+------+-----+------------+---------+----+-----------+-------+------+
|  1 | 小明   |   40 | 男  | 2010-06-21 |       1 |  1 | 宋江      |    40 | 男   |
|  2 | 小李   |   28 | 男  | 2010-06-21 |       1 |  1 | 宋江      |    40 | 男   |
|  3 | 小红   |   28 | 男  | 2010-06-21 |       1 |  1 | 宋江      |    40 | 男   |
|  1 | 小明   |   40 | 男  | 2010-06-21 |       1 |  2 | 诸葛亮    |   100 | 男   |
|  2 | 小李   |   28 | 男  | 2010-06-21 |       1 |  2 | 诸葛亮    |   100 | 男   |
|  3 | 小红   |   28 | 男  | 2010-06-21 |       1 |  2 | 诸葛亮    |   100 | 男   |
|  1 | 小明   |   40 | 男  | 2010-06-21 |       1 |  4 | 孙悟空    |  5000 | 男   |
|  2 | 小李   |   28 | 男  | 2010-06-21 |       1 |  4 | 孙悟空    |  5000 | 男   |
|  3 | 小红   |   28 | 男  | 2010-06-21 |       1 |  4 | 孙悟空    |  5000 | 男   |
|  1 | 小明   |   40 | 男  | 2010-06-21 |       1 |  7 | 司马懿    |    56 | 男   |
|  2 | 小李   |   28 | 男  | 2010-06-21 |       1 |  7 | 司马懿    |    56 | 男   |
|  3 | 小红   |   28 | 男  | 2010-06-21 |       1 |  7 | 司马懿    |    56 | 男   |
+----+--------+------+-----+------------+---------+----+-----------+-------+------+
12 rows in set (0.00 sec)

这里补充一点,在查找的时候如果两边不是唯一值在查询的时候就是类似循环的过程,这样查找的结果就不是想要的了,没有了看一些别的吧。。

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: