1. 程式人生 > >資料庫查詢連線(JOIN)用法

資料庫查詢連線(JOIN)用法

概述

工作中寫SQL語句時需要用到在多個表之間各查詢點資料,然後組合,利用mybatis返回給一個bean物件。
現在把這幾個連線總結下,方便下次用時參考。

JOIN

下面是學生表student:

id name sex age
001 aaa boy 10
002 bbb girl 10
003 ccc girl 10
004 ddd boy 10
005 eee girl 10
006 fff boy 10

下面是學生成績表grades:

id math chinese english
001 90 94 95
002 91 97 93
003 92 98 96
004 93 92 91
007 94 90 90
008 95 95 96

現在,查詢學生的數學成績並對應姓名。可以先用不使用連線的SQL語句查詢:

select 
    student.name,
    grades.math
from
    student,grades
where
    student.id = grades.id

這樣的查詢結果為:

name math
aaa 90
bbb 91
ccc 92
ddd 93

INNER JOIN

先看一下用INNER JOIN 的SQL語句查詢上面的內容寫法:

select
    student.name,
    grades.math
from
    student
inner join
    grades
on 
    student.id = grades.id

INNER JOIN定義:在查詢的幾個表中,每個表都存在至少一個匹配時,INNER JOIN 關鍵字返回行。也就是共有部分,即,幾個表的交集。

LEFT JOIN

把上面內連線(INNER JOIN)的關鍵字改為left join效果如何呢?

select
    student.name,
    grades.math
from
    student
left join
    grades
on 
    student.id = grades.id

下面是查詢結果:

name math
aaa 90
bbb 91
ccc 92
ddd 93
eee
fff

會發現學生eee和fff沒有成績,原因是因為:
LEFT JOIN定義:關鍵字會從左表 (student) 那裡返回所有的行,即使在右表 (grades) 中沒有匹配的行。

RIGHT JOIN

有了LEFT JOIN,肯定會想,有沒有RIGHT JOIN呢?答案是,有的。

select
    student.name,
    grades.math
from
    student
right join
    grades
on 
    student.id = grades.id

下面是查詢結果:

name math
aaa 90
bbb 91
ccc 92
ddd 93
94
95

會發現,多了兩列沒有名字,只有成績的行。
RIGHT JOIN定義:關鍵字會右表 (grades) 那裡返回所有的行,即使在左表 (student) 中沒有匹配的行。

FULL JOIN

有了左連線,有了右連線,還有了內連線(交集),那有沒有取並集的連線呢?答案是,有的。

select
    student.name,
    grades.math
from
    student
full join
    grades
on 
    student.id = grades.id

查詢結果,想必也知道了:

name math
aaa 90
bbb 91
ccc 92
ddd 93
eee
fff
94
95

FULL JOIN定義:只要查詢的某個表存在匹配,FULL JOIN 關鍵字就會返回行。
但是:MySQL中沒有FULL JOIN,那麼MySQL中要用FULL JOIN的效果怎麼辦呢?

UNION

用法:

select
    student.name,
    grades.math
from
    student
left join
    grades
on 
    student.id = grades.id
union
select
    student.name,
    grades.math
from
    student
right join
    grades
on
    student.id = grades.id

UNION定義:UNION 操作符用於合併兩個或多個 SELECT 語句的結果集。
注意:
UNIONUNION ALL區別:UNION ALL會列出所有結果,有重複,UNION沒有重複。

總結

  • INNER JOIN: 如果查詢的表中都有至少一個匹配,則返回行
  • LEFT JOIN: 即使右表中沒有匹配,也從左表返回所有的行
  • RIGHT JOIN: 即使左表中沒有匹配,也從右表返回所有的行
  • FULL JOIN: 只要其中一個表中存在匹配,就返回行
  • UNION:合併多個SELECT 語句的結果集

相關推薦

資料庫查詢連線(JOIN)用法

概述 工作中寫SQL語句時需要用到在多個表之間各查詢點資料,然後組合,利用mybatis返回給一個bean物件。 現在把這幾個連線總結下,方便下次用時參考。 JOIN 下面是學生表student: id name sex ag

FULL JOIN 資料庫連線查詢SQL

 -- 普通查詢SELECT T1.NAME , T2.ORDERNO   FROM TABLE_NAME1 T1 , TABLE_NAME T2 WHERE T1.ID = T2.T1_ID   AND T1.STATUS = '1';--

RIGHT JOIN 資料庫連線查詢SQL

-- 普通查詢 SELECT T1.NAME , T2.ORDERNO   FROM TABLE_NAME1 T1 , TABLE_NAME T2  WHERE T1.ID = T2.T1_ID    AND T1.STATUS = '1';

LEFT JOIN 資料庫連線查詢SQL

 -- 普通查詢 SELECT T1.NAME , T2.ORDERNO   FROM TABLE_NAME1 T1 , TABLE_NAME T2  WHERE T1.ID = T2.T1_ID    AND T1.STATUS =

資料庫表的連線(Left join , Right Join, Inner Join)用法詳解

表A記錄如下: aID        aNum  1           a20050111 2           a20050112 3           a20050113 4          a20050114 5           a20050115 表B記錄如下: bID        bN

Oracle資料庫之外連線和分組查詢:left,right,full join 和表連線

資料庫開發時經常要編寫過程來優化資料庫的增刪該查和一些簡單的業務操作,或在java中呼叫,或定義job按時執行(如每天,每週,每月...的統計任務),其中查詢操作最有可能面臨效能瓶頸。 因此,我們通常希望(遇過按月查詢幾億條資料的情況)查詢操作能夠儘可能地快,減少對資料量大

連線查詢JOIN

定義: 連線查詢又稱為多表查詢,當查詢的欄位來源於多個表時,那麼就會用到多表查詢。 分類 按照年代分類 sql92標準:在Mysql中只是支援內連線; sql99標準:在Mysql中支援了內連線、外連線(左外連線、右外連線)和交叉連線;也是推薦的一種寫法。

連線join查詢與where後使用子查詢的效能分析

宣告:本文摘自https://www.cnblogs.com/cdf-opensource-007/p/6540521.html 子查詢就是在一條查詢語句中還有其它的查詢語句,主查詢得到的結果依賴於子查詢的結果。 子查詢的子語句可以在一條sql語句的FROM,JOIN,和WHERE後面,本文主要針對在WH

資料庫查詢函式exists和in的簡單用法

一、in和 exists函式簡介: in 是把外表和內表作hash 連線,而exists是對外表作loop迴圈,每次loop迴圈再對內表進行查詢。 如果兩個表中一個較小,一個是大表,則子查詢表大的用exists,子查詢表小的用in: 例如:表A(小表),表B(大表)  &nb

MySQL連線資料庫查詢

package com.goldmsg.filepusher.jetty; /** * 連線資料庫的工具類,被定義成不可繼承且是私有訪問 * Created by zhouhaiming on 2016/9/21. */ import com.mysql.jdbc.Statement; i

資料庫查詢:內連線、左連線、右連線、全連線

用兩個表(a_table、b_table),關聯欄位a_table.a_id和b_table.b_id來演示一下MySQL的內連線、外連線( 左(外)連線、右(外)連線、全(外)連線)。 MySQL版本:Server version: 5.6.31 MySQL Community Server

連線資料庫:配置,用法

config.php裡面配置資料庫的連線資訊,可以是多個數據庫   具體用法: 查詢構造器 Db::name("表名")這種寫法的顯著好處是:如果表的字首發生改變,也絲毫不受影響!   事務 *注意:如果上述程式碼中,Db::commit()被

資料庫連線查詢

學生表 CREATE TABLE student ( stuid VARCHAR (10) PRIMARY KEY, stuname VARCHAR (50) ); 分數表 CREATE TABLE score ( stuid VARCHAR (10),

基於MySQL資料庫連線查詢

用兩個表(a_table、b_table),關聯欄位a_table.a_id和b_table.b_id來演示一下MySQL的內連線、外連線( 左(外)連線、右(外)連線、全(外)連線)。 MySQL版本:mysql5.1.17 管理工具版本:navicat12 資料庫表:a_table、

MySQL連線查詢(inner join,left join和right join的區別)

關係資料庫由多個相關表組成,這些表使用已知為外來鍵列的常用列連結在一起。 因此,從業務角度來看,每個表中的資料是不完整的。 例如,在示例資料庫(yiibaidb)中,使用orderNumber列連結的orders和orderdetails表。 orders和orderdetails表的 ER 圖如下所示

Mysql中通過processlist方式查詢Mysql資料庫當前連線的使用者及會話資訊

在Mysql中,可以通過如下方式查詢Mysql資料庫當前連線的使用者及會話資訊:1. show full processlist mysql> show full processlist; +----------+-----------+---------------

Python 入門:字串連線join用法

原文解釋如下: >>> a = 'abc' >>> help(a.join) Help on built-in function join: join(...) method of builtins.str insta

PHP中MongoDB資料庫連線、新增、修改、查詢、刪除等操作例項

PHP 擴充套件mongon.mod.dll下載http://cn.php.net/manual/en/mongo.installation.php#mongo.installation.windows 然後php.ini新增 extension=php_mongo.dll

Sql語句優化-查詢兩表不同行NOT IN、NOT EXISTS、連線查詢Left Join

在實際開發中,我們往往需要比較兩個或多個表資料的差別,比較那些資料相同那些資料不相同,這時我們有一下三種方法可以使用:1. IN或NOT IN,2. EXIST或NOTEXIST,3.使用連線查詢(inner join,left join 或者 right join)。

SQL資料庫查詢連線、右連線、內連線 例項

例子 Table A aid   adate  1      a1  2      a2  3      a3 TableB bid bdate  1    b1  2    b2  4    b4  兩個表a,b相連線,要取出id相同的欄位  select * fro