mysql交叉查询教程_史上最简单的 MySQL 教程(二十六)「连接查询(上)」
連接查詢連接查詢:將多張表(大于等于 2 張表)按照某個(gè)指定的條件進(jìn)行數(shù)據(jù)的拼接,其最終結(jié)果記錄數(shù)可能有變化,但字段數(shù)一定會(huì)增加。
連接查詢的意義:在用戶查詢數(shù)據(jù)的時(shí)候,需要顯示的數(shù)據(jù)來自多張表。
連接查詢?yōu)閖oin,使用方式為:左表join右表。
左表:join左邊的表;
右表:join右邊的表。
連接查詢分類:在 SQL 中將連接查詢分為四類,分別為內(nèi)連接、外鏈接、自然連接和交叉連接。
交叉連接交叉連接:cross join,從一張表中循環(huán)取出每一條記錄,每條記錄都去另外一張表進(jìn)行匹配,匹配的結(jié)果都保留(沒有條件匹配),而連接本身的字段會(huì)增加,最終形成的結(jié)果為笛卡爾積形式。
基本語法:左表 cross join 右邊;
其結(jié)果與多表查詢相同。
執(zhí)行如下 SQL 語句,進(jìn)行測(cè)試:
-- 將表 student 與 class 進(jìn)行交叉連接
select * from student cross join class;
-- 將表 student 與 class 進(jìn)行多表查詢
select * from student,class;
實(shí)際上,笛卡爾積形式(交叉連接和多表查詢)的結(jié)果并沒有什么實(shí)際意義,應(yīng)該盡量避免,其存在的價(jià)值就是保證連接這種結(jié)構(gòu)的完整性。
內(nèi)連接內(nèi)連接:inner join,從左表中取出每一條記錄,和右表中的所有記錄進(jìn)行匹配,并且僅當(dāng)某個(gè)條件在左表和右表中的值相同時(shí),結(jié)果才會(huì)保留,否則不保留。
基本語法:左表 + [inner] + join + 右表 + on + 左表.字段 = 右表.字段;
其中,關(guān)鍵字on表示連接條件,兩表中的條件字段有著相同的業(yè)務(wù)含義。
執(zhí)行如下 SQL 語句,進(jìn)行測(cè)試:
-- 將表 student 與 class 進(jìn)行內(nèi)連接
select * from student inner join class on student.grade = class.grade;
select * from student join class on student.grade = class.grade;
在這里,值得注意的是:如果兩表中有某個(gè)表的條件字段名唯一,那么在書寫連接條件的時(shí)候,可以省略表名,直接書寫字段名,MySQL 會(huì)自動(dòng)識(shí)別唯一字段名,但不建議這么做。此外,咱們會(huì)發(fā)現(xiàn),在上面的結(jié)果中有同名字段,這會(huì)給咱們理解數(shù)據(jù)的意義造成一定的困擾,這時(shí)就需要使用字段別名和表別名做區(qū)別啦!
執(zhí)行如下 SQL 語句,進(jìn)行測(cè)試:
-- 將表 student 與 class 進(jìn)行內(nèi)連接,起別名
select s.*,c.id as c_id,c.grade as c_grade,room from student as s inner join class as c on s.grade = c.grade;
最后,內(nèi)連接可以沒有連接條件,即可以沒有on及之后的內(nèi)容,這時(shí)內(nèi)連接的結(jié)果全部保留,與交叉連接的結(jié)果完全相同。而且在內(nèi)連接的時(shí)候可以使用where關(guān)鍵字代替on,但不建議這么做,因?yàn)閣here沒有on的效率高。
執(zhí)行如下 SQL 語句,進(jìn)行測(cè)試:
-- 將表 student 與 class 進(jìn)行內(nèi)連接,不加連接條件
select s.*,c.id as c_id,c.grade as c_grade,room from student as s inner join class as c;
-- 將表 student 與 class 進(jìn)行交叉連接
select s.*,c.id as c_id,c.grade as c_grade,room from student as s cross join class as c;
-- 使用 on 關(guān)鍵字進(jìn)行內(nèi)連接
select s.*,c.id as c_id,c.grade as c_grade,room from student as s inner join class as c on s.grade = c.grade;
-- 使用 where 關(guān)鍵字進(jìn)行內(nèi)連接
select s.*,c.id as c_id,c.grade as c_grade,room from student as s inner join class as c where s.grade = c.grade;
溫馨提示:符號(hào)[]括起來的內(nèi)容,表示可選項(xiàng);符號(hào)+,則表示連接的意思。
———— ☆☆☆ —— 返回 -> 史上最簡(jiǎn)單的 MySQL 教程
總結(jié)
以上是生活随笔為你收集整理的mysql交叉查询教程_史上最简单的 MySQL 教程(二十六)「连接查询(上)」的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iTextSharp.text.Rect
- 下一篇: 70后、80后、90后的区别(很有意思)