工作上用數(shù)據(jù)庫存儲文件還是很便利的,所以有時候發(fā)現(xiàn)一張表存儲數(shù)據(jù)感覺數(shù)據(jù)結構不是很清晰的時候,就需要新加第二張表或者多張表來進行聯(lián)合查詢對象信,一般是用鍵將彼此聯(lián)系起來,在表中,每個主鍵的值都是唯一的。這樣做的目的是在不重復每個表中的所有數(shù)據(jù)的情況下,把表間的數(shù)據(jù)交叉捆綁在一起,下面,寫一點簡單的例子
先說一下兩張表各自要展現(xiàn)的內(nèi)容有哪些
第一張表是動物的種類信息,有貓、狗、鳥三種,表名:animal第二張表是一種動物的具體種類,貓有波斯貓(persian)、 伯曼貓(birman)、布偶貓 (ragdoll);狗有維茲拉犬(vizsla)、波利犬(puli)、蝴蝶犬(papillon);鳥有杜鵑鳥(cuckoo)、布谷鳥(eagle )、鷹(Egret),表名:classify。兩張表的聯(lián)系是有相同的anim_id ,請留意,”anim_id” 列把上面的兩個表聯(lián)系了起來表結構類型如下:
第一張表
| 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 |
這是查詢一種種類下的具體的動物詳細分類,大多時候用表聯(lián)合查詢是用來篩除一些臟數(shù)據(jù)信息的,現(xiàn)在我們將表2添加一些其他數(shù)據(jù),比如山羊(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 |
現(xiàn)在根據(jù)表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的數(shù)據(jù),如果兩個表共有的animal_id不進行指定的話,數(shù)據(jù)庫就會自己去匹配兩個表中相同的字段值,具體的情況要進行具體的分析,這里只給出了一種參考,具體的代碼操作,還需要自己去寫,也是比較簡單的
更多的多表查詢請移步:http://www.49028c.com.cn/sql/sql_join.asp
以上是我的理解,有什么不對的,歡迎指正,謝謝
新聞熱點
疑難解答
圖片精選