Join
可以使用相同的屬性名稱但不同的域發生連接嗎?
問題
在執行任何類型的 Join時,所有常見屬性都以一種或另一種方式列在一個列下。但是,我一直無法找到處理同名但具有不同域的列的來源。
從視覺的角度來看,我正在考慮以下案例的列:
域不同,因為一個 B 列是數字,而另一個是字母。
題
是否可以使用同名但不同域的屬性進行聯接?
我認為你被你的術語誤導了。
SQL 是具有以下示意圖的標準
- 架構
- 桌子
- 柱子
- 屬性
*Oracle 在實例中沒有單獨的數據庫。模式與使用者相關聯。
SQL 是第 4 代語言,它將知道在哪裡查詢對象的需求與高級的、幾乎是人類語言風格的程式分開
當您在 SQL 中編寫查詢時,編譯器(稱為 SQL 優化器)會將其翻譯成機器級語言並檢索您的數據。因此,它高度依賴優化器來正確檢索它認為最好的數據。
這意味著您的 SQL 只不過是對優化器有意義的建議。您只需要知道結構的名稱是什麼,而不是在哪里或如何獲取它。
SQL 具有幫助優化器選擇正確數據集的提示和運算符,但優化器選擇首先解析的查詢的ORDER。
因此,您正在編寫邏輯查詢。如果連接了兩個表,您有責任通過專門呼叫可以連接的列來幫助優化器。
即使屬性不同,優化器也足夠靈活,知道如何動態轉換這些值。例如,‘13’ 的 VARCHAR 類型值仍然與 tinyint、integer、numeric 值相當相似,因此優化器會將這些列隱式轉換為相同的數據類型!
以下範例在 TSQL 中:
CREATE TABLE TableA (col_A int, col_B varchar(24) ) CREATE TABLE TableB (col_A varchar(24), col_B int) INSERT INTO TableA (col_A, col_B) VALUES (1, ‘My Value’) INSERT INTO TableB (col_A, col_B) VALUES (‘Not my Value’, 1) SELECT A.Col_B FROM TableA AS A INNER JOIN TableB AS B ON A.Col_A = B.col_B
請注意,我們使用別名來幫助優化器了解連接的含義以及要返回的列的含義。