《MYSQL教程mysql select語句的from子句》要點(diǎn):
本文介紹了MYSQL教程mysql select語句的from子句,希望對(duì)您有用。如果有疑問,可以聯(lián)系我們。
MYSQL數(shù)據(jù)庫本節(jié)內(nèi)容:
mysql數(shù)據(jù)庫中select語句的from子句用法.
MYSQL數(shù)據(jù)庫一,表別號(hào)
FROM子句是SELECT語句中最先開始處理的子句,FROM子句指定了要查詢的表,表的后面可能還跟著一個(gè)別號(hào).
表可以直接是表名,也可以在前面加上數(shù)據(jù)庫的名字.
MYSQL數(shù)據(jù)庫例如:
?
MYSQL數(shù)據(jù)庫二,笛卡爾積
FROM子句可以有一個(gè)表指定,也可以跟多個(gè)表指定,如從兩張內(nèi)外讀取數(shù)據(jù):
?
MYSQL數(shù)據(jù)庫later是存放遲到信息的表,有學(xué)生學(xué)號(hào)(studentNO)和遲到次數(shù)(laterNum)兩列.
MYSQL數(shù)據(jù)庫以上查詢語句中從student和later兩張表中查詢數(shù)據(jù).
當(dāng)FROM子句中指定兩張表時(shí),FROM子句返回一個(gè)中間成果集,這個(gè)中間成果集的列數(shù)等于兩張表的列相加,行數(shù)等于兩張表的行數(shù)相乘,這通常叫做相關(guān)兩張表的笛卡爾積.
MYSQL數(shù)據(jù)庫例如:
?
MYSQL數(shù)據(jù)庫有student表和later表兩張表,student表中存放了張三,李四,王五,趙六四個(gè)學(xué)生的信息,later表中存放的是學(xué)生遲到的次數(shù),其中2號(hào)李四遲到3次,4號(hào)趙六遲到2次.
那么:
?
MYSQL數(shù)據(jù)庫執(zhí)行FROM子句后,FROM子句返回的中間成果集(笛卡爾積)如下:
?
MYSQL數(shù)據(jù)庫FROM子句中表指定的順序冰不影響FROM子句執(zhí)行的成果,執(zhí)行后的中間成果集是一樣的.
?
三,表的聯(lián)接
例句:
?
MYSQL數(shù)據(jù)庫當(dāng)FROM子句指定兩張或兩張以上的表時(shí),叫做表的聯(lián)接(join),進(jìn)行比擬的兩列叫做聯(lián)接條件.
上面的FROM先將student表和later表聯(lián)接,生成一個(gè)笛卡爾積中間結(jié)果集,然后執(zhí)行WHERE子句,找出表student和表later的studentNO相等的行.
?
MYSQL數(shù)據(jù)庫WHERE子句執(zhí)行完后,結(jié)果集中剩下了上面標(biāo)藍(lán)的兩行數(shù)據(jù),然后執(zhí)行SELECT子句,得到如下最閉幕果集:
?
MYSQL數(shù)據(jù)庫四,顯式聯(lián)接
上面的聯(lián)接是一個(gè)隱式聯(lián)接,因?yàn)镾ELECT語句中并沒有join關(guān)鍵字.
join是聯(lián)接的關(guān)鍵字,可以通過join顯式的指定一個(gè)聯(lián)接.
例如:
?
MYSQL數(shù)據(jù)庫顯式聯(lián)接與上面的隱式聯(lián)接返回的最閉幕果集是一樣的,只不過將聯(lián)接條件放到了FROM子句中,而隱式聯(lián)接中聯(lián)接條件是放在WHERE子句中的.
?
五,左外聯(lián)接,右外聯(lián)接
上面的SELECT語句中,指定了INNER JOIN關(guān)鍵字,表明這是一個(gè)顯式聯(lián)接,并且是一個(gè)內(nèi)聯(lián)接.
MYSQL數(shù)據(jù)庫顯式聯(lián)接中的內(nèi)連接跟隱式聯(lián)接的返回成果是一樣的,顯式聯(lián)接還有另外一種:外聯(lián)接.
MYSQL數(shù)據(jù)庫以上示例中,找出了有過遲到的李四和趙六的遲到次數(shù).
MYSQL數(shù)據(jù)庫但是張三和王五沒有出現(xiàn)在最閉幕果集中,因?yàn)樗麄儧]有遲到過.
MYSQL數(shù)據(jù)庫有時(shí)需要把沒有遲到過的人也查出來,這就需要外聯(lián)接.
外聯(lián)接通過OUTER JOIN關(guān)鍵字來指定,必須指定是左連接(LEFT)還是右聯(lián)接,表示是哪個(gè)表要聯(lián)接哪個(gè)表.
好比要找出所有人的遲到信息,沒有遲到的人也需要顯示出來,則用下面的語句:
?
MYSQL數(shù)據(jù)庫將得到下面的成果集:
?
MYSQL數(shù)據(jù)庫指定student表左連接到later表,所以student表中的所有行必需出現(xiàn)在FROM子句的結(jié)果集中,也就是later表中沒有對(duì)應(yīng)值的以空值填充.
?
左聯(lián)接經(jīng)常用在以下情況中,就是聯(lián)接條件中,被聯(lián)接的表中的聯(lián)接列式聯(lián)接表中聯(lián)接列的子集.
MYSQL數(shù)據(jù)庫也就是在上面的例子中,student表中的studentNO是4行,而later表中的studentNO是兩行(只有遲到過的學(xué)生才會(huì)在later表有記錄),所以later表的studentNO是student表的studentNO列的子集.如果要查出所有學(xué)生的遲到信息(包含沒遲到過的),就需要用外聯(lián)接.
?
右外聯(lián)接與左外聯(lián)接正好相反,被聯(lián)接的表的所有行必須出現(xiàn)在FROM子句的結(jié)果集中.
所以將兩個(gè)表對(duì)調(diào)一下,然后用右外聯(lián)接與左外連接的結(jié)果是一樣的:
?
MYSQL數(shù)據(jù)庫使用USING
在顯式聯(lián)接中,如果聯(lián)接條件的兩個(gè)列名字相同,而且聯(lián)接條件是二者相等,則可以用USING.
?
MYSQL數(shù)據(jù)庫這與上面的成果集是一樣的.
維易PHP培訓(xùn)學(xué)院每天發(fā)布《MYSQL教程mysql select語句的from子句》等實(shí)戰(zhàn)技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養(yǎng)人才。
轉(zhuǎn)載請(qǐng)注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/12760.html