常见的多变查询,和遇到的一些坑。。。。
首先兩個表的數據如下:
drugs表:
drugsType表:
很顯然drugs的外鍵是typeid,typeid這列對應的是drugsType的主鍵id.為了方便測試我把drugs表中的外鍵設置可以為空
常見的連接:
1:外連接
外連接可分為:左連接、右連接、完全外連接。
左連接關鍵詞:left outer join和left join都可以用
?select * from drugs d left join drugsType t on d.typeid=t.id ? ?? 的效果如下
很顯然可以看出138條和157條數據,drugs表對應的外鍵的表中的數據沒有顯示出來,這就是所謂左連接查詢,左連接查詢意思就是顯示左表中的全部數據,右表符合 on 條件的數據才顯示出來,因為drugs表中的兩條數據沒有與之外鍵表對應也就沒有顯示出來。
右連接:關鍵詞:right?outer join和right?join都可以用
select * from drugs d right?join drugsType t on d.typeid=t.id? 效果如下:
很顯然可以看出138條和157條數據,只顯示drugs對應的外鍵的表中的數據顯示出來啦,這就是所謂右連接查詢,右連接查詢意思就是顯示右表中的全部數據,左表符合 on 條件的數據才顯示出來,因為drugsType表中的兩條數據沒有與之主鍵表對應也就沒有顯示出來。
2:內連接:關鍵詞:inner join
? select * from drugs d INNER join drugsType t on d.typeid=t.id ? 效果如下:
很顯然可以看出138條和157條數據,因為drugsType表中的兩條數據沒有與之主鍵表的數據所以都沒有顯示出來,這就是內連接查詢,內連接查詢意思就是顯示符合條件全部數據。
3:隱性連接,俗稱where連接:
關鍵詞where
select * from drugs d,drugsType t where d.typeid=t.id ?? 效果如下:
很顯然可以看出138條和157條數據,因為drugsType表中的兩條數據沒有與之主鍵表的數據所以都沒有顯示出來,這就是隱性連接查詢,隱性連接查詢意思就是顯示符合條件全部數據。跟內連接,結果相同,只不過這個內連接,不怎么推廣,不推薦用,隨著數據庫的發展和更新,大多數人用顯性連接,也就是內外連接
之所以寫這個博客是因為今天寫項目的時候出現的bug,根據前臺的人反饋的信息,新增的數據,在分類查詢的時候,出不來數據,后來想到是外鍵設置可以為空的了,因此查不出來數據。
轉載于:https://www.cnblogs.com/zoli/p/11158152.html
總結
以上是生活随笔為你收集整理的常见的多变查询,和遇到的一些坑。。。。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java50道经典习题-程序18 乒乓球
- 下一篇: C#实现进度条progress cont