2017-06-13 78 views
0

第一次在這裏。除了詢問SQL查詢外,我完全不熟悉SQL,沒有任何經驗。我在查詢中遇到困難。我很難理解它們,什麼時候使用它們,而不是寫它們。我通過ONLC參加了一個SQL基礎課程,但是我沒有從中學到很多東西。該課程花費太多時間將表添加到數據庫。我不需要,我將成爲一個閱讀用戶,只需要編寫查詢。當我在課外尋求幫助時,導師也表示「在課外有生活」。瞭解子查詢

爲了解決我的問題,我將無法訪問我公司的沙箱數據庫至少一個月。我有Oracle 11g Express Edition的人力資源數據庫,並且正在使用SQL開發人員。我已經確認我們將要使用的程序將使用Oracle數據庫。更糟的是,我沒有任何人,我的公司裏沒有人,據我所知,他知道SQL。我可能能夠聯繫我的老公司的某個人,但如果是這樣的話,這是一個很大的問題。我試圖看看例子,但他們仍然讓我感到困惑。甚至不要從相關的子查詢開始。

對我來說,似乎你可以使用連接和其他策略來避免子查詢。我花了很長時間才瞭解加入,而且我仍然不是最適合他們的人。任何和所有的建議將會有所幫助。如果有人能幫助我,我願意使用Skype。我通過看例子和聽到它解釋給我的最好的東西學習。當我說解釋我的意思是一行一行。我必須爲我的工作學習這個,否則我會被解僱。

我意識到,我問了很多,但我的背景是作爲一個醫務人員/ RN,編程是一個全新的世界對我來說。

謝謝!

+0

抱歉,SO不是輔導服務。 – OldProgrammer

+0

也許嘗試hackhands,如果你需要Skype /逐行解釋。 – artm

+0

誰或手什麼? – brtnremtp

回答

2

如果你(因爲你寫的)手頭的「僱員」表,您可以從中選擇3列,並創建一個新的表像這樣:

create table ls 
as 
select 
    employee_id 
, last_name 
, department_id 
from employees; 

請注意,這是一個組合一個SELECT和一個CREATE TABLE。按照......選擇首先執行的思路,其輸出用於「寫入」稱爲ls的新表。

現在,你可以嘗試這樣的事情(下面的查詢說明):

select * 
from ls 
where department_id = ( 
    select department_id 
    from ls 
    where last_name = 'De Haan' 
    ) 
; 

看(主查詢)WHERE子句。 department_id必須與名字爲'De Haan'的人工作的department_id相等。首先,子查詢(寫在圓括號中)選擇一個department_id。這個department_id然後在主查詢的WHERE中使用。在主查詢中使用「相等」符號時,子查詢必須返回一個值。您可以嘗試這一點通過自身即

select department_id from ls where last_name = 'De Haan'; 

運行子查詢如果你的子查詢返回多個值,使用IN(...),例如

select * 
from ls 
where department_id in ( 
    select department_id 
    from ls 
    where last_name = 'King' 
    ) 
; 

您可以使用Oracle的APEX( apex.oracle.com)如果你需要一個練習環境。只需要一個工作區。

補遺(實施例2頁涉及的表):假設,在後一階段中,我們發現,對LS表需要一salary列,所以我們添加一個。

alter table ls 
add salary number ; 

這一欄是空的 - 通過執行檢查:

select * from ls; 

現在,我們希望從員工表中的原始工資值來填充新列。我們可以爲此使用子查詢。請注意,UPDATE沒有WHERE子句,即它將更新所有行。 SELECT的WHERE子句與2個表的employee_id匹配。

update ls 
set salary = (
    select salary 
    from employees 
    where ls.employee_id = employees.employee_id 
) 
; 

運行檢查,使用內加入(全 「差異」 必須爲0):

select 
    employees.employee_id 
, employees.salary 
, ls.salary 
, employees.salary - ls.salary difference 
from employees join ls on (employees.employee_id = ls.employee_id) ; 
+0

讓它聽起來很簡單。我理解這個例子,但它花了很多時間去點擊它。任何有多個表的子查詢的想法? – brtnremtp

+0

很高興知道這個例子很有幫助!請參閱「附錄」中的2表格場景。 – stefan