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