欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL多表聯(lián)合查詢、連接查詢、子查詢的實(shí)現(xiàn)

 更新時(shí)間:2023年07月25日 10:24:16   作者:小賈-同志  
本文主要介紹了MySQL多表聯(lián)合查詢、連接查詢、子查詢的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

 【1】連接查詢

連接查詢的意義: 在用戶查看數(shù)據(jù)的時(shí)候,需要顯示的數(shù)據(jù)來自多張表.

內(nèi)連接查詢

內(nèi)連接查詢是最常見的連接查詢,內(nèi)連接查詢可以查詢兩張或兩張以上的表

內(nèi)連接:[inner] join:從左表中取出每一條記錄,去右表中與所有的記錄進(jìn)行匹配: 匹配必須是某個(gè)條件在左表中與右表中相同最終才會(huì)保留結(jié)果,否則不保留.

基本語法:左表 [inner] join 右表 on 左表.字段 = 右表.字段;on表示連接條件: 條件字段就是代表相同的業(yè)務(wù)含義(如my_student.c_id和my_class.id)

當(dāng)兩個(gè)表中存在相同意義的字段的時(shí)候,就可以通過該字段來連接查詢這兩個(gè)表,當(dāng)該字段的值相同時(shí)就可以查出該記錄。

內(nèi)連接可以沒有連接條件: 沒有on之后的內(nèi)容,這個(gè)時(shí)候系統(tǒng)會(huì)保留所有結(jié)果。

例:

select a.id,a.name,a.sex,b.country,b.city,b.street 
from student a 
join addr b 
on a.addrid=b.addrid;

外連接查詢

以某張表為主,取出里面的所有記錄, 然后每條與另外一張表進(jìn)行連接: 不管能不能匹配上條件,最終都會(huì)保留: 能匹配,正確保留; 不能匹配,其他表的字段都置空NULL。

左連接

left join: 左外連接(左連接), 以左表為主表基本語法: from 左表 left join 右表 on 左表.字段 = 右表.字段;

左表不管能不能匹配上條件,最終都會(huì)保留:能匹配,正確的保留; 若不能匹配,右表的字段都置NULL。

例:

select a.id,a.name,a.addrid,b.country,b.city
from student a left join addr b
on a.addrid=b.addrid;

右連接

right join: 右外連接(右連接), 以右表為主表基本語法: from 左表 right join 右表 on 左表.字段 = 右表.字段;右表不管能不能匹配上條件,最終都會(huì)保留:能匹配,正確的保留; 若不能匹配,左表的字段都置NULL。

例:

select a.id,a.name,a.addrid,b.country,b.city
from student a right join addr b
on a.addrid=b.addrid;

【2】聯(lián)合查詢

聯(lián)合查詢聯(lián)合查詢結(jié)果是將多個(gè)select語句的查詢結(jié)果合并到一塊因?yàn)樵谀撤N情況下需要將幾個(gè)select語句查詢的結(jié)果合并起來顯示。比如現(xiàn)在需要查詢兩個(gè)公司的所有員工的信息,這就需要從甲公司查詢所有員工信息,再從乙公司查詢所有的員工信息,然后將兩次的查詢結(jié)果進(jìn)行合并??梢允褂胾nion和union all關(guān)鍵字進(jìn)行操作

語法格式如下:

select 語句1
union[union 選項(xiàng)]
select 語句2
union|[union 選項(xiàng)]
select 語句n

其中union選項(xiàng)有兩個(gè)選項(xiàng)可選

  • all:表示無論重復(fù)都輸出
  • distinct: 去重(整個(gè)重復(fù))(默認(rèn)的)
select *from addr
union all
select *from addr;

select id,addrid 
from addr 
union all 
select id,addrid 
from student;

聯(lián)合查詢只要求字段一樣, 跟數(shù)據(jù)類型和順序無關(guān)

select id,addrid,sex,score 
from student 
union all 
select sex,addrid,id,score 
from student;

聯(lián)合查詢的意義:

  • 查詢同一張表,但是需求不同 如查詢學(xué)生信息, 男生身高升序, 女生身高降序
  • 多表查詢: 多張表的結(jié)構(gòu)是完全一樣的,保存的數(shù)據(jù)(結(jié)構(gòu))也是一樣的.

聯(lián)合查詢order by的使用

在聯(lián)合查詢中: order by不能直接使用(不能出現(xiàn)兩次),需要對查詢語句使用括號才行;

select *from student 
where sex="woman" 
order by score
union
select *from 
student where sex="man" 
order by score;

這種情況是會(huì)報(bào)錯(cuò)的。因?yàn)檎Z句中不允許出現(xiàn)兩個(gè)order by。

select *from student where sex="woman" 
union
select *from student where sex="man" order by score;

如果是上邊這樣只出現(xiàn)一次他的意義就是等合并完成之后再進(jìn)行排序就沒有任何意義了,因?yàn)橛职亚斑卻ex分好的類打亂了

(select *from student 
where sex="woman" 
order by score )
union
(select *from 
student where sex="man" 
order by score;)

這種方式的目的是為了讓兩個(gè)結(jié)果集先分別order by,然后再對兩個(gè)結(jié)果集進(jìn)行union。但是你會(huì)發(fā)現(xiàn)這種方式雖然不報(bào)錯(cuò)了,但是兩個(gè)order by并沒有產(chǎn)生最后的效果,所以應(yīng)該改成如下:

select *from
(select *from student 
where sex="woman" 
order by score)student
union
select *from
(select *from student 
where sex="man" 
order by score)student ;

也就是說,order by不能直接出現(xiàn)在union的子句中,但是可以出現(xiàn)在子句的子句中。

【3】子查詢

通常我們在查詢的SQL中嵌套查詢,稱為子查詢。子查詢通常會(huì)使復(fù)雜的查詢變得簡單,但是相關(guān)的子查詢要對基礎(chǔ)表的每一條數(shù)據(jù)都進(jìn)行子查詢的動(dòng)作,所以當(dāng)表單中數(shù)據(jù)過大時(shí),一定要慎重選擇

帶in關(guān)鍵字的子查詢

使用in關(guān)鍵字可以將原表中特定列的值與子查詢返回的結(jié)果集中的值進(jìn)行比較如果某行的特定列的值存在,則在select語句的查詢結(jié)果中就包含這一行。

例:查詢成績大于80的學(xué)生的所有信息,先在子查詢中查出成績大于80的結(jié)果集,然后將原成績表中的成績與結(jié)果集進(jìn)行比較,如果存在,就輸出這條學(xué)生的記錄。

select *
from student 
where score in
(select score from student where score>80);

帶比較運(yùn)算符的子查詢

如果可以確認(rèn)子查詢返回的結(jié)果只包含一個(gè)單值,那么可以直接使用比較運(yùn)算符連接子查詢。經(jīng)常使用的比較運(yùn)算符包括等于(=)、不等于(<>或!=)、小于(<)、大于(>)、小于等于(<=)和大于等于(>=)。

select *
from student 
where score> 
(select score 
from scholarship
where dengji=1);

查詢獎(jiǎng)學(xué)金等級為1的學(xué)生信息

帶exists的子查詢

exists: 是否存在的意思, exists子查詢就是用來判斷某些條件是否滿足(跨表),exists是接在where之后exists返回的結(jié)果只有0和1.

例:如果存在成績大于90的人則列出整個(gè)表的記錄

select *
from student 
where exists
(select *from student where score>90);

帶any關(guān)鍵字的子查詢

any關(guān)鍵字表示滿足其中的任意一個(gè)條件,使用any關(guān)鍵字時(shí),只要滿足內(nèi)層查詢語句結(jié)果的的任意一個(gè),就可以通過該條件來執(zhí)行外層查詢語句。

select *
from student 
where addrid<any
(select addrid 
from addr);

帶all關(guān)鍵字的子查詢

all和any剛好是相反的,all關(guān)鍵字表示滿足所有結(jié)果,使用all關(guān)鍵字,要滿足內(nèi)層查詢語句的所有結(jié)果,才可以通過該條件來執(zhí)行外層查詢語句。

select *
from student 
where addrid>all
(select addrid 
from addr);

到此這篇關(guān)于MySQL多表聯(lián)合查詢、連接查詢、子查詢的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)MySQL多表聯(lián)合查詢、連接查詢、子查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!                                                          

相關(guān)文章

  • MySQL系列教程小白數(shù)據(jù)庫基礎(chǔ)

    MySQL系列教程小白數(shù)據(jù)庫基礎(chǔ)

    這篇文章主要為大家介紹了MySQL系列中的數(shù)據(jù)庫基礎(chǔ),非常適合數(shù)據(jù)庫小白的入門基礎(chǔ)篇,詳細(xì)的講解了數(shù)據(jù)庫的基本概念以及基礎(chǔ)命令及操作示例,有需要的朋友可以借鑒參考下
    2021-10-10
  • mysql數(shù)據(jù)庫id主鍵自增加刪除后不連續(xù)如何解決

    mysql數(shù)據(jù)庫id主鍵自增加刪除后不連續(xù)如何解決

    這篇文章主要介紹了mysql數(shù)據(jù)庫id主鍵自增加刪除后不連續(xù)的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • sql與各個(gè)nosql數(shù)據(jù)庫使用場景的講解

    sql與各個(gè)nosql數(shù)據(jù)庫使用場景的講解

    今天小編就為大家分享一篇關(guān)于sql與各個(gè)nosql數(shù)據(jù)庫使用場景的講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • 記一次mysql5.7測試數(shù)據(jù)庫被刪表的問題

    記一次mysql5.7測試數(shù)據(jù)庫被刪表的問題

    這篇文章主要介紹了記一次mysql5.7測試數(shù)據(jù)庫被刪表的問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • mysql千萬級數(shù)據(jù)分頁查詢性能優(yōu)化

    mysql千萬級數(shù)據(jù)分頁查詢性能優(yōu)化

    本文給大家分享的是作者在使用mysql進(jìn)行千萬級數(shù)據(jù)量分頁查詢的時(shí)候進(jìn)行性能優(yōu)化的方法,非常不錯(cuò)的一篇文章,對我們學(xué)習(xí)mysql性能優(yōu)化非常有幫助
    2017-11-11
  • mysql使用報(bào)錯(cuò)1142(42000)的問題及解決

    mysql使用報(bào)錯(cuò)1142(42000)的問題及解決

    這篇文章主要介紹了mysql使用報(bào)錯(cuò)1142(42000)的問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • linux下mysql5.7.19(tar.gz)安裝圖文教程

    linux下mysql5.7.19(tar.gz)安裝圖文教程

    這篇文章主要為大家詳細(xì)介紹了linux下mysql5.7.19tar.gz安裝圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • MySQL?臨時(shí)表創(chuàng)建與使用詳細(xì)說明

    MySQL?臨時(shí)表創(chuàng)建與使用詳細(xì)說明

    MySQL臨時(shí)表是存儲在內(nèi)存或磁盤的臨時(shí)數(shù)據(jù)表,會(huì)話結(jié)束時(shí)自動(dòng)銷毀,適合存儲中間計(jì)算結(jié)果或臨時(shí)數(shù)據(jù)集,其名稱以#開頭(如#TempTable),本文給大家介紹MySQL臨時(shí)表創(chuàng)建與使用詳細(xì)說明,感興趣的朋友跟隨小編一起看看吧
    2025-08-08
  • 一篇文章帶你了解清楚Mysql?鎖

    一篇文章帶你了解清楚Mysql?鎖

    這篇文章主要介紹了一篇文章帶你了解清楚Mysql?鎖的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • 詳解MySQL中的SQRT函數(shù)的使用方法

    詳解MySQL中的SQRT函數(shù)的使用方法

    這篇文章主要介紹了詳解MySQL中的SQRT函數(shù)的使用方法,是MySQL入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-05-05

最新評論