Sqlite数据库多表联合查询

前言

工作上用数据库存储文件还是很便利的,所以有时候发现一张表存储数据感觉数据结构不是很清晰的时候,就需要新加第二张表或者多张表来进行联合查询对象信,一般是用键将彼此联系起来,在表中,每个主键的值都是唯一的。这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起,下面,写一点简单的例子

先说一下两张表各自要展现的内容有哪些

  • 第一张表是动物的种类信息,有猫、狗、鸟三种,表名:animal
  • 第二张表是一种动物的具体种类,猫有波斯猫(persian)、 伯曼猫(birman)、布偶猫 (ragdoll);狗有维兹拉犬(vizsla)、波利犬(puli)、蝴蝶犬(papillon);鸟有杜鹃鸟(cuckoo)、布谷鸟(eagle )、鹰(Egret),表名:classify。
  • 两张表的联系是有相同的anim_id ,请留意,”anim_id” 列把上面的两个表联系了起来

表结构类型如下:

第一张表

animal_id anim_name
1 cat
2 dog
3 bird

第二张表

classify_id animal_id detailed_name age
1 1 persian 1
2 1 birman 2
3 1 ragdoll 5
4 2 vizsla 3
5 2 puli 8
6 2 papillon 1
7 3 cuckoo 4
8 3 eagle 2
9 3 papillon 3

下面查询种类为猫的都有哪些详细种类,这些猫的年龄有多大

SQL语句:

1
2
3
4
5
SELECT animal.anim_name, classify.detailed_name, classify.age
FROM animal
INNER JOIN classify
ON animal.animal_id = 1 AND classify.animal_id = 1
ORDER BY classify.classify_id

然后得到的表结果如下:

anim_name detailed_name age
cat persian 1
cat birman 2
cat ragdoll 5

这是查询一种种类下的具体的动物详细分类,大多时候用表联合查询是用来筛除一些脏数据信息的,现在我们将表2添加一些其他数据,比如山羊(goat)的信息,但是表1不变

修改后的第二张表

classify_id animal_id detailed_name age
1 1 persian 1
2 1 birman 2
3 1 ragdoll 5
4 2 vizsla 3
5 2 puli 8
6 2 papillon 1
7 3 cuckoo 4
8 3 eagle 2
9 3 papillon 3
10 4 goat 1

现在根据表1的主键来查询表2的信息,具体说来就是,都有什么动物种类,这些对应的动物种类下都有什么详细分类

这个时候的sql语句

1
2
3
4
5
SELECT animal.anim_name, classify.detailed_name, classify.age
FROM animal
INNER JOIN classify
ON animal.animal_id = classify.animal_id
ORDER BY classify.classify_id

然后得到的表结果如下:

classify_id animal_id detailed_name age
1 1 persian 1
2 1 birman 2
3 1 ragdoll 5
4 2 vizsla 3
5 2 puli 8
6 2 papillon 1
7 3 cuckoo 4
8 3 eagle 2
9 3 papillon 3

其实也就是我们之前未进行修改的表2的数据,如果两个表共有的animal_id不进行指定的话,数据库就会自己去匹配两个表中相同的字段值,具体的情况要进行具体的分析,这里只给出了一种参考,具体的代码操作,还需要自己去写,也是比较简单的

更多的多表查询请移步:http://www.w3school.com.cn/sql/index.asp

最后

以上是我的理解,有什么不对的,欢迎留言指正,谢谢

-------------本文结束感谢您的阅读-------------

本文标题:Sqlite数据库多表联合查询

文章作者:Litchiny

原始链接:http://litchiny.github.io/2017/02/28/Sqlite数据库多表联合查询/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。