Oracle數據庫之多表查詢一


   上一篇給大家介紹了數據的單表查詢,相信大家對於單表的查詢應該都有了一些了解。單表查詢在數據庫中的使用會有一些,但並不是很多,但是作為初學者,我們需要學習單表查詢的思路。今天呢,我們為大家介紹一下數據庫中的多表查詢,左查詢和右查詢。因為多表查詢在實際項目中的應用還是比較廣泛的。我們一定要掌握,掌握了多表查詢對於后面的子查詢、分組查詢的學習就非常的簡單了!

第一步:首先開啟數據庫監聽服務:

1.Win + R   ---> cmd --->輸入lsnrctl start --->顯示如下圖,則開啟成功!開啟監聽服務使用的命令是:lsnrctl start  

第二步:然后在開啟數據庫的主服務orcl,使用的命令是:net start oracleserviceorcl 

我們使用自己提前造好的測試數據進行本篇文章的詳解。接着往下看。

我們創建一個t_student表和一個t_score表。

 通過sql語句查看兩張表中的信息,如下:

select * from t_student; select * from t_score;

t_student表:

t_score表:

需求1:如果我想查詢張山的數學成績,應該怎么辦呢?很顯然張山和成績並不在一個表中,他們分別在不同的表中,所以,我們需要將兩張表結合看。我們通過上面的截圖可以狠清晰的發現t_student表和t_score表是通過主鍵ID關聯的,所以我們可以通過主鍵ID來把兩張表進行關聯,在查詢我們想要的結果。在做這個操作之前呢?我們先來看一個概念:笛卡爾積。

笛卡爾是一個叫法而已,源於數學家,笛卡爾。之所以這么叫是因為,在數據庫中在進行多張表直接關聯的時間會產生笛卡爾積,那么我們具體來看一下什么情況下會產生笛卡爾積呢?

需求2:我們繼續需求1討論,現在我想通過一條sql語句把學生表和成績表關聯起來,如果不知道笛卡爾積的可能會出現下面的情況:

select * from t_student,t_score;  #查詢學生表和成績表

查詢結果:

通過上面的圖,可以狠清楚的看見產生了12條數據,這12條數據的由來是怎么樣的呢?因為我們是4個學生,但是只有三個學生有對應的各科成績,所以最后執行select * from s_student,t_score;語句時,會產生 4*3 =12條數據,這種現象在數據中就是產生了笛卡爾積了,很顯然這個結果並不是我們想要的,因為我們只要看每一位學生,對應的成績。那么如何去掉笛卡爾積,只顯示我們想要的數據呢?繼續往下看。

select * from t_student t1,t_score t2 where t1.id=t2.id;

我們運行上面這條sql語句會發現,下面的查詢結果是我們真正想要的。查看結果如下:

對於上面的sql語句,我們來解析一下:

select * from t_student t1,t_score t2 where t1.id=t2.id; #t1 t2 是表的別名 #t1.id = t2.id 是通過主鍵將t_student表和t_score表進行關聯,篩選我們要找的數據,剔除不符合的數據。 # * 代表查找的所有結果

當然,除了上面的這種寫法,還有一個比較變態的寫法,這種寫法對比第一種寫法在展示上面不是那么容易理解,但是這里面小編也為大家介紹一下,因為多了解一些總是沒錯的。來,我們看一下另外一種sql的語法格式,我們還是以上面的例子為基礎給大家演示:

select * from t_student t1 inner join t_student t2 on t1.id=t2.id; #語法解析:
------>inner join 是鏈接另一個表的命令 ------> on  后面跟的是兩個表之間通過什么關聯在一起的  很顯然我們使用的是id進行關聯的

同樣的查詢的結果也是和上面的一樣的,我們截圖來看下:

所以,通過上面的例子,我們應該知道一點,在進行多張表關聯的時候,一定要通過主鍵進行關聯。不然的話無法有效鏈接,會產生笛卡爾積。如果表的數據有成百上千條,那估計產生的笛卡爾積會相當的龐大,所以,請小伙伴一定要注意哈!

我們知道了笛卡爾積以后呢,繼續分享下一個知識點:左查詢和右查詢。來先看一下概念:

  • 左查詢:以左表的數據為准,將右表中不滿足的數據過濾掉,其中left左邊的為左邊,右邊的為右表。
  • 右查詢:以右邊的數據為准,將左表中不滿足的數據過濾掉,其中right右邊的為右邊,左邊的為左邊。

 來看一下左鏈接的實例,查詢的sql語句如下:

select * from t_student t1 left join t_score t2 on t1.id=t2.id; #sql解析:
-----left join  鏈接另一張表的sql命令   以left左邊的表為主,將left右表中不滿足的數據顯示出來。 

如果你知道了左查詢,那么同樣的,右查詢就變得很easy了,好了,那me我們在看一下右查詢的使用:

查詢的右查詢的sql語句如下:

select  * from t_student t1 right join t_score t2 on t1.id=t2.id; #sql語句解析:
---right join 鏈接另一張表的sql命令 right代表的是right單詞右表的為主表,將左邊不符合條件的表篩選出來 ---on   是通過什么進行關聯的  很顯然我們是通過id進行關聯的

我們查看一下查看的結果:

關於左查詢和右查詢的實例是不是很簡單理解呢?OK,那么我們總結一下知識點吧!

  • 1.多張表進行關聯的時候,一定不要忘記要通過主鍵關聯,不然會產生笛卡爾積
  • 2.左查詢:以left關鍵字左邊的表為主,將left右邊的表中不滿足條件的數據過濾掉
  • 3.右查詢:以right關鍵字右表的表為主,將right左邊的表中不滿足條件的數據過濾掉

 

 好了,關於多表查詢、左查詢、右查詢方面的知識我們就介紹到這里了哈!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM