我建議您從關注此主題的一些教程開始。對於在SQL中從初級到中級移動的人而言,您的問題並不罕見。 SQLZoo是學習SQL的絕佳資源,因此請考慮以下事項。
在回答你的問題:
1)找到一個重複的所有記錄在一個特定的列
有兩個步驟在這裏:找到重複的記錄,並選擇那些記錄。要了解你應該沿着線做一些重複的記錄:
select possible_duplicate_field, count(*)
from table
group by possible_duplicate_field
having count(*) > 1
我們在這裏所做的一切選擇從一個表,然後我們想檢查重複字段分組它。計數函數然後給我一個該組內項目數的計數。 HAVING子句表示我們想要在分組之後進行過濾,以僅顯示具有多個條目的組。
這本身就很好,但它並沒有給你帶有這些值的實際記錄。如果您知道重複的值,那麼你會這樣寫:
select * from table where possible_duplicate_field = 'known_duplicate_value'
我們可以使用內選擇選擇來獲得比賽的名單:從鏈接
select *
from table
where possible_duplicate_field in (
select possible_duplicate_field
from table
group by possible_duplicate_field
having count(*) > 1
)
2)SUM價格在同一查詢內表
這是一個簡單的兩個表之間與這兩者的SUM JOIN:
select sum(tableA.X + tableB.Y)
from tableA
join tableB on tableA.keyA = tableB.keyB
您在這裏做的是將兩個表連接在一起,其中這兩個表由關鍵字段鏈接。在這種情況下,這是一個自然的連接,它可以像你期望的那樣工作(也就是讓我從左邊的表中得到一切,它在右邊表中有一個匹配的記錄)。
3)解釋4個連接的區別;左,右,外,內
考慮兩個表A和B.在這種情況下,「左」和「右」的概念稍微清晰一點,如果您從左到右閱讀您的SQL。所以,當我說:
select x from A join B ...
左表是「A」,右表是「B」。現在,當您明確聲明「LEFT」SQL語句時,您聲明您要加入的兩個表中的哪一個是主表。我的意思是:我首先掃描哪張表?順便說一下,如果你省略了LEFT或RIGHT,那麼SQL隱式地使用了LEFT。
對於INNER和OUTER,您聲明在其中一個表中不存在匹配項時要執行的操作。 INNER聲明您希望主表中的所有內容(如使用LEFT或RIGHT聲明的)在輔助表中存在匹配的記錄。因此,如果主表包含鍵「X」,「Y」和「Z」,並且輔助表包含鍵「X」和「Z」,那麼INNER將只返回「X」和「Z」記錄兩張桌子。
當使用OUTER時,我們說:給我一切從主表和任何匹配次表。因此,在前面的例子中,我們會在輸出記錄集中獲得「X」,「Y」和「Z」記錄。但是,應該來自輔助表的鍵值爲「Y」的字段中將存在NULL,因爲它不存在於輔助表中。
4)從一臺基於SELECT和WHERE條件
這是相當瑣碎,我很驚訝你從來沒有遇到過的數據複製到另一個。這是在INSERT語句中一個簡單的嵌套SELECT(這可能不是由你的數據庫的支持 - 如果沒有,請嘗試下一個選項):
insert into new_table select * from old_table where x = y
這是假設表具有相同的結構。如果你有不同的結構,那麼你需要指定列:
insert into new_table (list, of, fields)
select list, of, fields from old_table where x = y
這味道像hw。 –