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