2017-09-02 19 views
0

我是新來的這個comunnity,我需要使用從mysql數據庫獲取數據的查詢,我有這個查詢,但我需要添加一個新表,但我不明白爲什麼查詢有一個別名,我不知道它是如何工作的,有人可以幫助我? 這是我的查詢:它如何工作與別名的MySQL查詢?

SELECT ins.matricula, pe.nombres, pe.appaterno, pe.apmaterno, co.calleynum, co.colonia, co.municipio, co.telfijo, co.telcelular, pe.fechanac, pe.sexo, co.email, pe.institucion, tu.tnombres, tu.tappaterno, tu.tapmaterno, tu.direccion, tu.telefono, ins.fechains, ins.niveledu, ins.fechaini, ins.horario 
FROM Inscripciones ins 
LEFT JOIN Perfiles pe 
     ON pe.idperfil=ins.idperfil 
LEFT JOIN Contactos co 
     ON co.idperfil = pe.idperfil 
LEFT JOIN Tutores tu 
     ON tu.matricula = ins.matricula 
WHERE pe.idperfil='$var' 

我已閱讀MySQL的文檔,但我不明白它是如何工作的。

+0

你明白'JOIN'是什麼嗎? – CodeGodie

+0

我知道JOIN可以連接兩個或更多的數據庫表,但我從來沒有使用別名,我不明白它是如何工作的。 – alexchvrches

+1

別名就是這個名字所說的。它是你的表名的另一個名字。所以在你的例子中,表名是'Inscripciones',並且在這行'FROM Inscripciones ins'中,你說''ins「'是'Inscripciones'的別名。它只是一種使查詢更小/更簡單的方法。別名就像一個暱稱(即邁克爾的別名是「邁克」) – CodeGodie

回答

0

在MySQL中,可以聲明一個「別名」來簡化後面的查詢。 通常,這是用「AS」運算符表示的,但也可以在沒有「AS」的情況下聲明 - 如您的示例中所示。

在您的例子:

SELECT ins.matricula, {...} 
FROM Inscripciones ins {...} 

ins被設置爲在 「Inscripciones」 表的別名。 這允許您在整個查詢中使用ins,而不是輸入「Inscripciones」。這可以在SELECT聲明中看到。 需要記住的一點 - SQL中的別名可以在首次使用後聲明。您的示例中就是這種情況,在您實際將ins作爲Inscripciones的別名之前,SELECT得到ins.matricula。 有時候這似乎違反直覺,但我保證,如果你稍微嘗試一下,這將是有意義的。

我發現包含「AS」的含義不那麼明確 - 當您讀/寫SQL查詢時,這可能會幫助它更有意義。 例如:... FROM Inscripciones AS ins

需要明確的是,使用別名不會改變您的查詢的結果,但可以幫助你編寫更乾淨的查詢,因爲你不必每次你想重新寫的表名用它。

+0

噢!我知道了!我現在明白了,抱歉弄得一團糟。謝謝你,你是一個很好的人,幫助我:) – alexchvrches

+0

不需要道歉 - 別名的概念一開始就很難掌握。 :) 另外,我沒有在我的答案中提到它,但如果這對你來說是一個非常新的概念,值得指出的是你可以使別名成爲你想要的。 例如:'SELECT * FROM dog AS cat WHERE cat.color =「black」;' 這當然沒有意義,但是允許的。 – slothluvchunk

0

表格不一定要有別名,除非您想多次使用同一個表格,但如果表格中的列名稱相同,則可以縮短鍵入的內容。

不必編寫

SELECT myfulltable1name.id, myfulltable2name.id 

的你可以寫

SELECT t1.id, t2.id 

(如果你已經化名你的表爲t1和t2)

這裏我們用一個例子查詢同一個表不止一次,需要一個別名來分隔它們:

SELECT 
    workAddresses.City as WorkCity, 
    homeAddresses.City as HomeCity 
FROM 
    Addresses workAddresses 
    INNER JOIN 
    Addresses homeAddresses 
    ON 
    workAddresses.UserID = homeAddresses.UserID 
WHERE 
    workAddresses.type = 'work' AND 
    homeAddresses.type = 'home' 

這裏的Addresses表存儲我們用戶的工作和家庭地址,並使用類型列來區分它們。我們希望在工作和家庭地址在同一行上的結果,所以我們必須兩次加入地址表,我們給他們明智的別名,以便我們可以知道哪個是哪個,並且我們使用where子句來確保我們的工作地址表別名僅指與類型「工作」的那些記錄

你會發現我也把一個別名選擇的列名,這樣你就可以知道這是工作的市是主城市

有時候,你必須使用別名,就像如果你犯了一個子查詢,則必須將結果別名以是可用的:

SELECT 
    workAddresses.City as WorkCity, 
    homeAddresses.City as HomeCity 
FROM 
    (SELECT * FROM Addresses WHERE type ='work') workAddresses 
    INNER JOIN 
    (SELECT * FROM Addresses WHERE type ='home') homeAddresses 
    ON 
    workAddresses.UserID = homeAddresses.UserID 

她e我們通過子查詢從地址表中獲取信息,括號內的sql語句必須具有別名

別名總是在引入別名的對象引入查詢中的第一個點處聲明。對於表,這是在FROM部分,對於列在SELECT部分​​

它可能會幫助您考慮它,就好像數據庫實際上首先執行from部分,將所有表連接在一起,然後執行在這裏,爲了過濾行,最後它進行選擇,以拉取所需的列。 C#有一種名爲LINQ的內置查詢語言,它以更合乎邏輯的方式呈現事物,FROM table WHERE something = something SELECT somecolumns - 更易於說「事物在第一次引入時會有別名,如變量命名」。 SQL是多年以來的事情。你已經習慣了

+0

我可以在哪裏表別名?例如,在'LEFT JOIN Perfiles pe'部分? – alexchvrches

+0

表格在寫入查詢時始終是別名,因此,它始終位於您正在進行連接的「from」部分。所選列在列部分是別名。表格通常是通過在表名之後立即寫入別名來實現的。通常在列名後面寫'AS aliasname'來替換列。我認爲這種差異是因爲一些早期的db在某些地方期望AS而不是其他的。現代數據庫不應該在乎你是否在表格/列名和別名之間寫入AS –

+0

爲你增加了更多信息 –

0

A SQL Alias正是名字所說的一個alias。這只是表名稱的另一個名稱(較短的名稱)。

所以在您的示例表名是Inscripciones,在這行FROM Inscripciones ins你說"ins"是一個別名Inscripciones。它只是一種使查詢更小/更簡單的方法。別名是像一個暱稱(即,用於邁克爾別名爲「邁克」)

別名通常與"AS"設置是這樣的:

SELECT * FROM Users AS u 

但可以縮短這樣的:

SELECT * FROM Users u 
0

MySQL查詢中的別名就像您的表的臨時短名稱。在需要創建複雜查詢時,不一定要使用它們,但可以節省您的時間。它們主要用於查詢,當您嘗試使用JOINS在單個查詢中獲取超過1個表的數據時。

假設您有一個表名'employee_records'。然後嘗試獲取表的字段將看起來employee_records.id等等。如果你使用別名表示'e',那麼選擇字段將變成e.id。

希望能夠讓你的觀點清楚。 欲瞭解更多關於SQL別名在這裏的簡單文字信息 - https://www.w3schools.com/sql/sql_alias.asp