工作上用数据库存储文件还是很便利的,所以有时候发现一张表存储数据感觉数据结构不是很清晰的时候,就需要新加第二张表或者多张表来进行联合查询对象信,一般是用键将彼此联系起来,在表中,每个主键的值都是唯一的。这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起,下面,写一点简单的例子
先说一下两张表各自要展现的内容有哪些
第一张表是动物的种类信息,有猫、狗、鸟三种,表名: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语句:
SELECT animal.anim_name, classify.detailed_name, classify.ageFROM animalINNER JOIN classifyON animal.animal_id = 1 AND classify.animal_id = 1ORDER 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语句
SELECT animal.anim_name, classify.detailed_name, classify.ageFROM animalINNER JOIN classifyON 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.vevb.com.cn/sql/sql_join.asp
以上是我的理解,有什么不对的,欢迎指正,谢谢
新闻热点
疑难解答