日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 从句_MySQL select语句之from从句

發布時間:2024/3/12 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 从句_MySQL select语句之from从句 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://www.lovestblog.cn,歡迎轉載該文,但請注明文章出處,謝謝合作。

mysql的from從句用來指定參與查詢的表,當然也可以是生成的中間表,在表前我們有時需要指定數據庫,這主要是用在我們需要訪問當前數據庫之外的數據庫中的表的情況,在這中情況下我們采用"."操作符來進行,如userdb.user,其實userdb為數據庫名,user為表名,這是對mysql數據庫而言的,對于DB2和Oracle就不是通過指定數據庫名了,而是指定sql用戶了,這就是說不同sql用戶可以建立相同名字的表,但是同一個sql用戶只能建立唯一名字的表。這就是它們在這表規范上面的區別。對于列規范,mysql可以在需要查詢的列則可以采用如下形式進行訪問:“數據庫名.表名.列名”。對于多個表的規范,也就是涉及查詢多個表的情況下,執行的過程是采用笛卡爾積的形式進行的。也就是說生成的中間表的列數為兩個表中列數的總和,而行的總數等于一個表中的行的數量與另外一個表中行的數量的乘積。

對于from從句中使用假名的情況,比如select u.id,name,age,a.account from utb as u,atb as a where u.id=a.user_id,在我們使用假名之后,那么在該sql語句的任何地方都只能使用假名,不能使用真實的表名,同時上面的as關鍵字也是可以省略的,也就是說對于上面的語句不能用atb來取代a,utb來取代u了。雖然from從句不是我們指定的第一條語句,但是絕對是第一個被處理的語句,所以在聲明假名前使用假名不會導致錯誤。如果一條from從句引用到兩個有著相同名稱的表,則必須使用假名。如:

select p.playerno

from players as p,players as par

where par.fn="jp" and par.ln="l" and p.birth_date

對于多個表間的連接處理可能會導致有相同的結果,即有重復的結果,sql并不會自動從最終結果中刪除重復的行,這是如果我們不希望在結果中出現重復的行,那么我們可以在select后直接指定distinct。如:

select distinct T.playerno

from teams as T,penalties as pen

where T.playerno=pen.playerno。

接下來說說連接哈,對于內連接,如果是兩個表的話,就取兩個表的一個交集,如果是左外連接的話,那就是左邊的表全取,右邊沒有的用null替代,弱國是右外連接的話,那就是右邊的表全取,左邊沒有的用null表示。下面看看一個具體的例子:

--表stu --表exam

id name id grade

1, Jack 1, 56

2, Tom 2, 76

3, Kity 11, 89

4, nono

內連接 (顯示兩表id匹配的)

select stu.id,exam.id,stu.name, exam.grade from stu (inner) join exam on stu.id=exam.id

--------------------------------

1 1 Jack 56

2 2 Tom 76

左連接(顯示join 左邊的表的所有數據,exam只有兩條記錄,所以stu.id,grade 都用NULL 顯示)

select stu.id,exam.id,stu.name, exam.grade from stu left (outer) join exam on stu.id=exam.id

1 1 Jack 56

2 2 Tom 76

3 NULL Kity NULL

4 NULL nono NULL

右連接(與作連接相反,顯示join右邊表的所有數據)

select stu.id,exam.id,stu.name, exam.grade from stu right join exam on stu.id=exam.id

1 1 Jack 56

2 2 Tom 76

NULL 11 NULL 89

內連接取交集,外連接分左和右,

左連接左邊的全取,

右連接右邊的全取

對于連接的列的名稱相同的話,那么可以使用using來替代條件,如上面的內連接可以這樣改寫:

select stu.id,exam.id,stu.name, exam.grade from stu inner join exam using(id)。

對于左外連接使用的情況一般是當左表的連接列中存在未出現在右表的連接列中的值時,左外連接才有用。

還有個全外連接的,也就是說只要在兩個表中出現的記錄都會在中間表中出現,當右表有而左表沒有或當左表有而右表沒有的時候用null表示。具體語法如下:select stu.id,exam.id,stu.name, exam.grade from stu full join exam using(id)。

交叉連接:就是顯示求表的笛卡爾積,select * from teams cross join penalties.這句完全等價于select teams.*,penalties.* from teams,penalties.

聯合連接:select * from teams union join penalties,這個其實很容易理解,產生結果所包含的列為兩個表所有的列和,對于數據的列出,首先列出左表的數據,對于屬于右表的列,用null表示,接下來列出右表的數據,對于屬于左表的列用null表示。

自然連接:select * from teams nature inner join penalties where division='first';此句完全等同于select t.playerno,t.teamno,t.division,pen.paymentno,pen.payment_date,pen.amount from teams as t inner join penalties as pen on t.playerno=pen.playerno where dividion='first'.相比就知道,我們無須顯示指出必須要連接到哪些列,sql會自動查找兩表中是否有相同名稱的列,且假設他們必須在連接條件中使用。此處的on或using從句是多余的,因此不允許使用。

下面看個例子創建一個稱為towns的虛擬表:

select *

from (select 'Stratford' as town,4 as number

union

select 'Plymouth',6

union

select 'Inglewood',1

union

select 'Douglas',2) as towns

order by town;結果為:

town number

----------------------

Douglas 2

Inglewood 1

Plymouth 6

Stratford 4

1

0

分享到:

2009-09-24 15:44

瀏覽 2267

分類:數據庫

評論

總結

以上是生活随笔為你收集整理的mysql 从句_MySQL select语句之from从句的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。