Oracle中 連線寫法記錄解惑

2021-08-17 07:07:19 字數 994 閱讀 1182

最近遇到乙個sql如下

select         i.client_id,      '3' status, '1' exchange_type

from dev.openstock_active op,

dev.prestock_account p,

dev.preclient_info i

where op.active_result = 1

and op.preengage_id = p.preengage_id(+)

and p.preengage_id is null

and op.preengage_id = i.preengage_id

and p.exchange_type(+) = '1'

其中 op.preengage_id = p.preengage_id(+) 為 left join 或 right join 的另一種寫法。p.exchange_type(+) = '1'卻 讓我一下看懵了。經過大神的講解。

p.exchange_type(+) = '1' 的 (+) 並不是表示 連線 1 這個字段 而是 作為 p表連線時的條件。將(+)這種寫法還原成left join寫法即可明白。舉個簡單的例子:

①select * from a

left join b

on a.id = b.id

where b.type ='1'

這種情況是 a表先關聯 b表 然後篩選出 b.type =『1』的記錄

②select * from a

left join b

on a.id =b.id and b.type ='1'

這種情況是 a表去關聯  b表中b.type ='1'的記錄

因此①②查詢出的數量上並不相同。而最開始的 p.exchange_type(+) = '1' 這種寫法 表示的就是 p.exchange_type = '1' 這個條件是加在 on之後 而不是在where之後的。即原sql符合的情景應該是② 例子表達的意思。

Oracle 中的Top寫法

oracle 中的top寫法 由於oracle不支援select top 語句,所以在oracle中經常是用order by 跟rownum 的組合來實現select top n的查詢。簡單地說,實現方法如下所示 select 列名1 列名n from select 列名1 列名n from 表名 ...

Oracle 的連線查詢記錄

先 兩張表 建表語句如下 create table a id number primary key,name varchar2 20 class varchar2 40 homeaddress varchar2 200 create table b classid number primary ke...

Oracle中PL SQL中if語句的寫法介紹

複製 如下 if語句 判斷使用者輸入的數字。set serveroutput on 接收鍵盤輸入 accept num prompt 請輸入乙個數字 declare nbfaqqlsysp 將螢幕輸入的數字付給變數 pnum number begin if pnum 0 then dbms outp...