Oracle資料庫高階查詢(三)連線查詢

2021-09-30 15:11:04 字數 1445 閱讀 7585

,謝謝現在我們有這樣乙個需求

查詢所有使用者的使用者姓名,**,訂單號,已經訂單狀態,商品所屬分類名稱

其實我們這些資料**於兩張表

圖書表es_product和圖書類別表es_sort

我們可以通過表連線實現

select es_product.id,name,price,sortname from es_product,es_sort where es_product.sort_id=es_sort.id and es_sortname='圖書'
或者
select a.id,a.name,a.price,b.sortname from es_product a,es_sort b where a.sort_id =b.id and b.sortname='圖書'
那什麼時候用子查詢,什麼時候用表查詢呢

其實子查詢並不要求兩個表有相關字段,只要得到子查詢的結果結果集就可以,用於父查詢。

而連線查詢,則必須要求兩個表有相關的字段。當查詢的列來自於多個表時,可以使用表連線查詢

其中表連線包括以下連線

非等值連線示例如下;

另外乙個需求如下

查詢所有使用者的**,姓名,訂單號,訂購日期以及訂單狀態

使用這樣乙個內連線就是錯誤的,因為

它只是顯示了下過訂單的使用者資料,而沒下過訂單的就漏掉了

也就是說當不滿足條件的列也要顯示處理。

只限制其中乙個表的行,而不限制另外乙個表的行時使用外連線

在oracle中使用+來表示外連線是最常見的寫法

達到上述需求我們可以這樣書寫

select a.realname,b.tel,b.id,createtime,status from es_user a leef outer join es_order b on a.id=b.user_id
還可以這樣寫

select a.realname,b.tel,b.id,createtime,status from es_user a,es_order b where  a.id =b.user_id(+)
當左表存在這條記錄,而右表不匹配的時候

而右連線是以右表來匹配

這個時候也可以寫+,不過這個時候的+應該寫在條件的左邊了

oracle資料庫(三) 高階查詢

根據員工的上級編號進行層級關聯 select level empno,ename,mgr from emp connect by prior empno mgr start with mgr is null order bylevel translate expr,from string,to st...

實驗三 連線查詢

1 查詢每個學生的資訊及其選修課程的資訊,寫出sql語句和貼上執行輸出結果的截圖 2 用自身連線方式查詢表courses中和課程 c 的課時數 hour 相同的課程資訊,寫出sql語句和貼上執行輸出結果的截圖 3 用左外連線方式查詢每個學生的資訊及其選修課程的資訊,寫出sql語句和貼上執行輸出結果的...

Oracle資料庫 高階子查詢

子查詢是巢狀在sql與劇中的另乙個select語句 子查詢 內查詢 在主查詢執行之前執行 主查詢 外查詢 使用子查詢的結果 查詢工資大於149號員工工資的員工的資訊 主查詢與子查詢返回的多個列進行比較 多列子查詢中的比較分為兩種 查詢與141號或174號員工的manager id和departmen...