濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > mysql連接查詢、聯(lián)合查詢、子查詢?cè)砼c用法實(shí)例詳解

mysql連接查詢、聯(lián)合查詢、子查詢?cè)砼c用法實(shí)例詳解

熱門標(biāo)簽:南寧外呼系統(tǒng)招商 400電話到哪辦理優(yōu)惠 上海市三維地圖標(biāo)注 怎么更改高德地圖標(biāo)注 鄭州網(wǎng)絡(luò)外呼系統(tǒng)價(jià)錢 電話機(jī)器人是電腦呼號(hào)嗎 博樂(lè)電銷機(jī)器人 機(jī)器人打電銷電話 云南大數(shù)據(jù)外呼系統(tǒng)

本文實(shí)例講述了mysql連接查詢、聯(lián)合查詢、子查詢?cè)砼c用法。分享給大家供大家參考,具體如下:

本文內(nèi)容:

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

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


連接查詢:

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

內(nèi)連接:

  • 從左表中取出每一條記錄,去右表中與所有的記錄進(jìn)行匹配,保留匹配成功的記錄,并將兩份記錄拼接。
  • 語(yǔ)法:select 字段列表 from 左表 [inner] join 右表 on 左表.字段 = 右表.字段;
    • 不使用on條件的時(shí)候,結(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;

外連接:

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

自然連接:

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

交叉連接:

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

補(bǔ)充:

  • 在多個(gè)表中,為了區(qū)分每個(gè)表,以及簡(jiǎn)便使用,可以使用表別名。
      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)合查詢是將多個(gè)查詢結(jié)果在記錄上進(jìn)行拼接。(相當(dāng)于將其他表的查詢記錄結(jié)果連接到第一個(gè)表的后面)【因?yàn)槭瞧唇?,所?strong>多個(gè)查詢結(jié)果的字段數(shù)必須相同】【拼接不在意數(shù)據(jù)類型,比如第一個(gè)表的第一個(gè)字段是int,但后面的表中的varchar依然可以拼接到第一列中】
  • 語(yǔ)法:select語(yǔ)句 union select語(yǔ)句…;
    select name,gender from student
    union 
    select * from class;
    -- 因?yàn)閏lass就兩個(gè)字段,所以第一個(gè)只選出兩個(gè)字段

補(bǔ)充:

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


子查詢:

  • 子查詢是嵌套在查詢語(yǔ)句中的查詢。
  • 子查詢按照出現(xiàn)的位置可以分為三類:
    • from子查詢:子查詢跟在from之后的;一般用在“先查出二維表,再處理”的情況。
      • 比如:
        -- 這是一個(gè)無(wú)意義的例子。僅為舉例使用
        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子查詢:子查詢?cè)趀xist語(yǔ)句里面;一般用作“存在才做”的情況
      • 比如:
        -- 這是一個(gè)如果學(xué)生沒(méi)有選擇cid=1的課,那么不輸出對(duì)應(yīng)課程信息的例子
        select * from class where exists(select * from student where cid=1) and cid=1;
    • 事實(shí)上,有些人認(rèn)為union之后跟著的也是子查詢,不過(guò)這里不把這些當(dāng)作子查詢,只把上面幾個(gè)與“查詢”非常緊密相關(guān)的當(dāng)作子查詢。

補(bǔ)充:

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

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

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

您可能感興趣的文章:
  • 詳解Mysql多表聯(lián)合查詢效率分析及優(yōu)化
  • MySQL全文索引、聯(lián)合索引、like查詢、json查詢速度哪個(gè)快
  • mysql多表聯(lián)合查詢操作實(shí)例分析
  • Mysql兩表聯(lián)合查詢的四種情況總結(jié)
  • 淺談mysql的子查詢聯(lián)合與in的效率
  • 對(duì)MySQL幾種聯(lián)合查詢的通俗解釋
  • Mysql聯(lián)合查詢UNION和UNION ALL的使用介紹
  • Mysql聯(lián)合查詢UNION和Order by同時(shí)使用報(bào)錯(cuò)問(wèn)題的解決辦法
  • mysql多表聯(lián)合查詢返回一張表的內(nèi)容實(shí)現(xiàn)代碼
  • 詳解MySQL 聯(lián)合查詢優(yōu)化機(jī)制

標(biāo)簽:益陽(yáng) 恩施 杭州 澳門 白銀 定西 秦皇島 寧夏

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《mysql連接查詢、聯(lián)合查詢、子查詢?cè)砼c用法實(shí)例詳解》,本文關(guān)鍵詞  mysql,連接,查詢,聯(lián)合,子,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《mysql連接查詢、聯(lián)合查詢、子查詢?cè)砼c用法實(shí)例詳解》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于mysql連接查詢、聯(lián)合查詢、子查詢?cè)砼c用法實(shí)例詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    通江县| 千阳县| 兴隆县| 阳春市| 昭苏县| 城步| 廊坊市| 延边| 丹寨县| 海阳市| 通化市| 剑河县| 长宁区| 满洲里市| 北海市| 三门峡市| 瓦房店市| 恩施市| 抚松县| 会东县| 伊吾县| 曲麻莱县| 虹口区| 定州市| 邳州市| 丹江口市| 洮南市| 汾阳市| 墨玉县| 潼南县| 冷水江市| 罗源县| 伊吾县| 滕州市| 闻喜县| 汉阴县| 绥棱县| 贵定县| 乌恰县| 渭源县| 墨竹工卡县|