最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql連接查詢、聯(lián)合查詢、子查詢原理與用法實例詳解

 更新時間:2020年04月15日 11:30:07   作者:隨風行云  
這篇文章主要介紹了mysql連接查詢、聯(lián)合查詢、子查詢原理與用法,結(jié)合實例形式詳細分析了mysql連接查詢、聯(lián)合查詢、子查詢的基本概念、功能、原理、用法及操作注意事項,需要的朋友可以參考下

本文實例講述了mysql連接查詢、聯(lián)合查詢、子查詢原理與用法。分享給大家供大家參考,具體如下:

本文內(nèi)容:

  • 連接查詢
  • 聯(lián)合查詢
  • 子查詢
    • from子查詢
    • where子查詢
    • exists子查詢

首發(fā)日期:2018-04-11


連接查詢:

  • 連接查詢就是將多個表聯(lián)合起來查詢,連接查詢方式有內(nèi)連接、外連接、自然連接、交叉連接。連接查詢使得可以同時查看多張表中數(shù)據(jù)。
    • 內(nèi)連接:有條件連接,多個表之間依據(jù)指定條件連接,匹配結(jié)果是保留符合匹配結(jié)果的記錄。
    • 外連接:與內(nèi)連接不同的是不管匹配符不符合都保留,根據(jù)外連接連接方式來決定保留哪張表,比如保留左表的話,那么左表無法匹配右表時,保留左表數(shù)據(jù),然后置右表字段數(shù)據(jù)為null.
    • 自然連接:有條件連接,自動依據(jù)“同名字段”連接(多個同名字段就都作為條件)。
    • 交叉連接cross join:無條件連接,將每一條記錄與另外一個表的每一條記錄連接(笛卡爾積),結(jié)果是字段數(shù)等于原來字段數(shù)之和,記錄數(shù)等于之前各個表記錄數(shù)之乘積。
-- 實驗表結(jié)構(gòu)
create table student(
id int,
name varchar(15),
gender varchar(15),
cid int
);
create table class(
cid int,
cname varchar(15)
);
drop table student,class;
-- 實驗表數(shù)據(jù):
insert into student values(1,"lilei","male",1),(2,"hanmeimei","male",2),(3,"jack","male",1),(4,"alice","female",4); --這里特意創(chuàng)建了一個class中沒有的4
insert into class values(1,"linux"),(2,"python"),(3,"java"),(5,"html5");--這里特意創(chuàng)建了一個student中沒有的5
select * from student;
select * from class;

imageimage

內(nèi)連接:

  • 從左表中取出每一條記錄,去右表中與所有的記錄進行匹配,保留匹配成功的記錄,并將兩份記錄拼接。
  • 語法:select 字段列表 from 左表 [inner] join 右表 on 左表.字段 = 右表.字段;
    • 不使用on條件的時候,結(jié)果與交叉連接相同
    -- 內(nèi)連接
    -- select * from student inner join class; --結(jié)果與交叉連接相同
    select * from student join class on student.cid = class.cid;
    select * from student inner join class on student.cid = class.cid;
    image

外連接:

  • 與內(nèi)連接不同的是主表記錄不管匹配符不符合都保留,方式有左外連接、右外連接,左外連接是保留左表,右外連接是保留右表
  • 語法:
    • 左外連接:select 字段列表 from 左表 left join 右表 on 左表.字段 = 右表.字段;
    • 右外連接:select 字段列表 from 左表 right join 右表 on 左表.字段 = 右表.字段;
    select * from student left join class on student.cid = class.cid;
    image
    select * from student right join class on student.cid = class.cid;
    image

自然連接:

  • 自動匹配連接條件,系統(tǒng)以字段名字作為匹配模式(同名字段就作為條件,多個同名字段就都作為條件)
    • 自然內(nèi)連接:類似內(nèi)連接,但不提供連接條件。
    • 自然外連接:類似外連接,但不提供連接條件。
  • 語法:
    • 自然內(nèi)連接:select 字段列表 from 表名 natural join 表名;
    • 自然外連接:select 字段列表 from 表名 natural left\right join 表名;
    select * from student natural join class;
    image
    select * from student natural left join class;
    image

交叉連接:

  • 將每一條記錄與另外一個表的每一條記錄連接
  • 語法:
    • select 字段列表 from 表名 cross join 表名;
    • select 字段列表 from 表名 ,表名;
    select * from student cross join class;
    select * from student,class;
    image

補充:

  • 在多個表中,為了區(qū)分每個表,以及簡便使用,可以使用表別名。
      select * from student inner join class on student.cid = class.cid;-- 原本結(jié)果
      select id,name,gender,c.cid,cname from student as s inner join class as c on s.cid = c.cid;-- 使用表別名
  • 可以多重連接。
  • 外連接可以模擬自然連接,只需要將連接條件on 左表.字段 = 右表.字段變成"using 字段名"即可。


聯(lián)合查詢:

  • 聯(lián)合查詢是將多個查詢結(jié)果在記錄上進行拼接。(相當于將其他表的查詢記錄結(jié)果連接到第一個表的后面)【因為是拼接,所以多個查詢結(jié)果的字段數(shù)必須相同】【拼接不在意數(shù)據(jù)類型,比如第一個表的第一個字段是int,但后面的表中的varchar依然可以拼接到第一列中】
  • 語法:select語句 union select語句…;
    select name,gender from student
    union 
    select * from class;
    -- 因為class就兩個字段,所以第一個只選出兩個字段
    image

補充:

  • union可以有選項,加在union 后面,all選項是不對相同去重,distinct是去重。
  • 聯(lián)合查詢一般用來處理同一表中以不同方法顯示不同數(shù)據(jù)。(比如,想將學生各科成績表中的兩科(這里假設為python 跟linux)同時查詢出來)
  • union和order by同時使用報錯時
    • 如果你想針對聯(lián)合查詢中的某個查詢結(jié)果排序,需要將這個select語句用括號括起來?!玖硗猓捎诼?lián)合查詢的拼接機制,需要在order by 后面加上limit子句才行,limit的數(shù)量可以是一個很大的值。】
    • 如果是針對最終的聯(lián)合查詢結(jié)果,就在最后一個select語句中使用order by 【建議給最后一個字段加上括號,再加ordery by,使用情況是有同名字段】


子查詢:

  • 子查詢是嵌套在查詢語句中的查詢。
  • 子查詢按照出現(xiàn)的位置可以分為三類:
    • from子查詢:子查詢跟在from之后的;一般用在“先查出二維表,再處理”的情況。
      • 比如:
        -- 這是一個無意義的例子。僅為舉例使用
        select cid,cname from (select * from class where cname="python") as c;
    • where子查詢:子查詢跟在where條件中;一般用在“先查詢出指定條件再查詢”的情況
      • 比如:
        select * from student where cid=(select cid from class where cname="python");
    • exist子查詢:子查詢在exist語句里面;一般用作“存在才做”的情況
      • 比如:
        -- 這是一個如果學生沒有選擇cid=1的課,那么不輸出對應課程信息的例子
        select * from class where exists(select * from student where cid=1) and cid=1;
    • 事實上,有些人認為union之后跟著的也是子查詢,不過這里不把這些當作子查詢,只把上面幾個與“查詢”非常緊密相關的當作子查詢。

補充:

  • 事實上,還可以根據(jù)結(jié)果來分類子查詢:
    • 標量子查詢,子查詢得到的結(jié)果是一行一列,情況一般發(fā)生于where子查詢只查詢出一行一列的情況。
    • 列子查詢,子查詢得到的結(jié)果是一列多行,情況一般發(fā)生于where子查詢查詢出一列多行的情況。
    • 行子查詢,子查詢得到的結(jié)果是多列一行(或者多行多列) ,情況一般發(fā)生在where子查詢查詢出多列一行的情況。
    • 表子查詢,子查詢得到的結(jié)果是多行多列 ,情況一般發(fā)生在from子查詢中
  • where子查詢中有時候還使用一些其他關鍵字,如any,all,some,但對=來說,=基本可以實現(xiàn)他們的功能了。

更多關于MySQL相關內(nèi)容感興趣的讀者可查看本站專題:《MySQL查詢技巧大全》、《MySQL事務操作技巧匯總》、《MySQL存儲過程技巧大全》、《MySQL數(shù)據(jù)庫鎖相關技巧匯總》及《MySQL常用函數(shù)大匯總

希望本文所述對大家MySQL數(shù)據(jù)庫計有所幫助。

相關文章

  • Mysql DDL常見操作匯總

    Mysql DDL常見操作匯總

    這篇文章主要介紹了Mysql DDL常見操作匯總,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • MySQL查看event執(zhí)行記錄的實現(xiàn)

    MySQL查看event執(zhí)行記錄的實現(xiàn)

    在使用EVENT的過程中,我們可能會需要查看EVENT的執(zhí)行記錄,以便了解它們是否按預期執(zhí)行,本文就來介紹一下MySQL查看event執(zhí)行記錄的實現(xiàn),感興趣的可以了解一下
    2023-11-11
  • Windows安裝MySQL8.0.x 版本教程

    Windows安裝MySQL8.0.x 版本教程

    這篇文章介紹了Windows安裝MySQL8.0.x 版本的方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-04-04
  • mysql的union和union all用法詳解

    mysql的union和union all用法詳解

    union 和 union all 的區(qū)別是,union 會自動壓縮多個結(jié)果集合中的重復結(jié)果,而 union all 則將所有的結(jié)果全部顯示出來,不管是不是重復,本文給大家介紹mysql的union和union all用法,感興趣的朋友一起看看吧
    2023-08-08
  • 詳細談談MYSQL中的COLLATE是什么

    詳細談談MYSQL中的COLLATE是什么

    mysql COLLATE是校對集的意思,可以理解為,排序規(guī)則等,下面這篇文章詳細的給大家介紹了關于MYSQL中COLLATE是什么的相關資料,需要的朋友可以參考下
    2021-06-06
  • mysql中between的用法及說明

    mysql中between的用法及說明

    這篇文章主要介紹了mysql中between的用法及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • MySQL綠色解壓縮版安裝與配置操作步驟

    MySQL綠色解壓縮版安裝與配置操作步驟

    這篇文章主要介紹了MySQL綠色解壓縮版安裝與配置操作步驟,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-05-05
  • mysql中的7種日志小結(jié)

    mysql中的7種日志小結(jié)

    這篇文章主要介紹了mysql中的7種日志小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • mysql?DISTINCT選取多個字段,獲取distinct后的行信息方式

    mysql?DISTINCT選取多個字段,獲取distinct后的行信息方式

    這篇文章主要介紹了mysql?DISTINCT選取多個字段,獲取distinct后的行信息方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • mysql的in會不會讓索引失效?

    mysql的in會不會讓索引失效?

    今天小編就為大家分享一篇關于mysql的in會不會讓索引失效?,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04

最新評論

台山市| 福清市| 梨树县| 泉州市| 区。| 福州市| 松原市| 惠州市| 宿州市| 南木林县| 金乡县| 隆昌县| 噶尔县| 武冈市| 冀州市| 昌江| 岗巴县| 察雅县| 潍坊市| 金昌市| 温宿县| 宝丰县| 隆化县| 肇庆市| 贵定县| 射洪县| 余干县| 镇安县| 交城县| 西乌| 长宁区| 青川县| 满城县| 普格县| 天台县| 扎囊县| 临颍县| 霍州市| 东乌珠穆沁旗| 长治县| 丰镇市|