91aaa在线国内观看,亚洲AV午夜福利精品一区二区,久久偷拍人视频,久久播这里有免费视播

<strong id="fvuar"></strong>

  • <sub id="fvuar"><dl id="fvuar"><em id="fvuar"></em></dl></sub>

    1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

      手機(jī)站
      千鋒教育

      千鋒學(xué)習(xí)站 | 隨時隨地免費(fèi)學(xué)

      千鋒教育

      掃一掃進(jìn)入千鋒手機(jī)站

      領(lǐng)取全套視頻
      千鋒教育

      關(guān)注千鋒學(xué)習(xí)站小程序
      隨時隨地免費(fèi)學(xué)習(xí)課程

      當(dāng)前位置:首頁  >  技術(shù)干貨  > 大數(shù)據(jù)從0到1的完美落地之Mysql操作多表查詢

      大數(shù)據(jù)從0到1的完美落地之Mysql操作多表查詢

      來源:千鋒教育
      發(fā)布人:syq
      時間: 2023-03-20 13:47:00 1679291220

        多表查詢是指在關(guān)系型數(shù)據(jù)庫中,通過同時查詢多個數(shù)據(jù)表來檢索相關(guān)數(shù)據(jù)的操作。這種查詢方式通常用于需要在多個數(shù)據(jù)表中搜索和比較數(shù)據(jù)的情況,以獲取更完整和準(zhǔn)確的結(jié)果。

        在多表查詢中,使用聯(lián)接(join)操作將多個表連接在一起,并使用條件語句來指定要檢索的數(shù)據(jù)。聯(lián)接操作可以使用不同的方式進(jìn)行,包括內(nèi)部聯(lián)接、外部聯(lián)接、左聯(lián)接、右聯(lián)接等,這些方式可以根據(jù)查詢需求選擇不同的聯(lián)接方式。

        多表查詢可以提高查詢效率,避免重復(fù)的數(shù)據(jù)輸入,并且可以根據(jù)需要獲取更詳細(xì)的查詢結(jié)果。不過,在進(jìn)行多表查詢時,需要注意數(shù)據(jù)庫表之間的關(guān)系、數(shù)據(jù)類型和查詢條件等因素,以確保查詢結(jié)果的準(zhǔn)確性和完整性。

        舉個例子,如果我們需要查詢一篇文章的作者姓名和發(fā)表時間,那么這個信息通常會被保存在不同的兩個表中,一張表存儲文章的信息,包括文章標(biāo)題、內(nèi)容等;另一張表存儲作者的信息,包括姓名、ID等。在這種情況下,如果只查詢文章表,我們只能獲取文章的基本信息,無法獲得作者的信息;但如果使用多表查詢,我們就可以將兩個表聯(lián)接起來,獲取文章的作者信息,從而得到更全面和詳細(xì)的查詢結(jié)果。

        多表查詢基本寫法

      1

        TIPS:

        其實(shí),連接兩張表進(jìn)行查詢,標(biāo)準(zhǔn)SQL采用的是join的語法。上述的select * from A, B;的寫法,其實(shí)只是在MySQL中的“方言”,只在MySQL中生效,在其他的DBMS中就不一定能使用了。

        select * from A, B; 其實(shí)是等價于 select * from A inner join B; 的。那么什么是inner join呢?后面會講。

        笛卡爾積

        在做連接查詢的時候,一張表中的每一行數(shù)據(jù)都會和另一張表中的每一行數(shù)據(jù)進(jìn)行關(guān)聯(lián),形成笛卡爾積。

        假如A表中有m行數(shù)據(jù),B表中有n行數(shù)據(jù),連接查詢之后的結(jié)果就是m*n行數(shù)據(jù),其中有太多的數(shù)據(jù)是我們不需要的了。

      2

        連接查詢條件限制

        通過上圖,我們知道了在兩張表進(jìn)行連接查詢的時候,會出現(xiàn)大量的無效的數(shù)據(jù)。因此,我們就需要通過一些操作,去除連接查詢之后的無用的數(shù)據(jù),只得到我們需要的數(shù)據(jù)!而這個過程是可以通過條件的限制來實(shí)現(xiàn)的:

        1.MySQL的查詢方言

      3

        2.標(biāo)準(zhǔn)SQL的語法

      4

        連接查詢分類

        將兩張表連接在一起查詢的時候,通常情況下我們需要進(jìn)行一定的條件限制,來達(dá)到去除查詢結(jié)果笛卡爾積中多余的數(shù)據(jù),保留我們需要的數(shù)據(jù)的目的。通常情況下,進(jìn)行連接查詢的多張表之間是有一定的邏輯關(guān)聯(lián)的,具體表現(xiàn)為有一個相同的字段,在兩張表中都會出現(xiàn)。因此,我們在進(jìn)行連接查詢的時候就會使用這個字段的值進(jìn)行數(shù)據(jù)的過濾。

        那么,連接查詢就會出現(xiàn)這樣的幾種情況:

        A表中,通過關(guān)聯(lián)的字段,可以在B表中查詢到數(shù)據(jù)。

        A表中,通過關(guān)聯(lián)的字段,無法在B表中查詢到數(shù)據(jù)。

        B表中,通過關(guān)聯(lián)的字段,無法的A表中查詢到數(shù)據(jù)。

        此時,根據(jù)所需的不同結(jié)果,可以將連接查詢分為兩類: 內(nèi)連接、外連接

      5

        內(nèi)連接

        內(nèi)連接,使用inner join來表示,在進(jìn)行查詢的時候,inner是可以省略的,因此通常情況下直接寫join就是內(nèi)連接。

        所謂內(nèi)連接,以左表為驅(qū)動表,右表為從動表。查詢結(jié)果中保留A表的數(shù)據(jù)通過連接的字段,在B表中能夠查詢到的數(shù)據(jù)。

      -- 查詢員工的編號、職位、入職時間、部門編號、部門名稱select empno, job, hiredate, deptno, dname from emp join dept on emp.deptno = dept.deptno;-- 查詢LOCATION在NEW YORK的員工數(shù)量select count(*) from emp join dept on emp.deptno = dept.deptno where loc = 'NEW YORK';

        外連接

        外連接,使用outer join來表示,但是外連接還有更加明細(xì)的分類: 左外連接和右外連接。

        左外連接: 以左表為驅(qū)動表,右表為從動表,查詢結(jié)果中保留A表的數(shù)據(jù)通過連接的字段,在B表中能夠查詢到的數(shù)據(jù)。如果通過這個連接字段無法在B表中查詢到數(shù)據(jù),則B表與之關(guān)聯(lián)的就是null數(shù)據(jù)。

        右外連接: 以右表為驅(qū)動表,左表為從動表,查詢結(jié)果中保留B表的數(shù)據(jù)通過連接的字段,在A表中能夠查詢到的數(shù)據(jù)。如果通過這個連接字段無法在A表中查詢到數(shù)據(jù),則A表與之關(guān)聯(lián)的就是null數(shù)據(jù)。

        總結(jié)來說

        左外連接查詢結(jié)果: 包含左表中的所有數(shù)據(jù),右表與之關(guān)聯(lián)的數(shù)據(jù),如果在右表沒有與之關(guān)聯(lián)的數(shù)據(jù),則用null填充。

        右外連接查詢結(jié)果: 包含右表中的所有數(shù)據(jù),左表與之關(guān)聯(lián)的數(shù)據(jù),如果在左表沒有與之關(guān)聯(lián)的數(shù)據(jù),則用null填充。

        語法: 左外連接使用 left outer join來表示,右外連接使用 right outer join來表示。

        而outer是可以省略不寫的,也就是: 左外連接: left join,右外連接: right join

      -- 查詢所有的部門的人數(shù)select deptno, dname, count(empno) from dept left join emp on dept.deptno = emp.deptno;

        全連接

        全連接,又叫全外連接。全連接的意義是保留兩張表中的所有的數(shù)據(jù)。如果在另外一張表中沒有與之連接的數(shù)據(jù),使用null進(jìn)行填充。也就是說,其實(shí)全連接就是將左外連接和右外連接的查詢結(jié)果合并到一起并去除重復(fù)的數(shù)據(jù)。

        MySQL不支持全連接!

        雖然MySQL不支持全連接,但是可以使用其他的方式來間接實(shí)現(xiàn);

        將左外連接和右外連接的查詢結(jié)果,使用union合并到一起即可。

        自然連接

        我們在進(jìn)行連接查詢的時候,通常會在需要連接的兩張表中找到字段關(guān)聯(lián)在一起,而絕大多數(shù)情況下我們所需要進(jìn)行的是等值連接。在進(jìn)行數(shù)據(jù)庫和表的設(shè)計的時候,這樣用來聯(lián)系多張表之間的關(guān)系的字段,一般情況下命名是相同的。

        所謂“自然連接“指的就是找到需要進(jìn)行連接查詢的兩張表中名字相同、類型也相同的字段,自動的使用這個字段作為連接的字段。如果不存在這樣的名字相同的字段,會有錯誤。

      7

        子查詢

        子查詢簡介

        有的時候,當(dāng)一個查詢語句A所需要的數(shù)據(jù),不是直觀在表中體現(xiàn),而是由另外一個查詢語句B查詢出來的結(jié)果,那么查詢語句A就是主查詢語句,查詢語句B就是子查詢語句。這種查詢我們稱之為高級關(guān)聯(lián)查詢,也叫做子查詢。

        子查詢語句的返回數(shù)據(jù)形式:

      8

        子查詢語句的位置可以在以下幾個子句中:

      9

        在where子句中

      # 需求:查詢工資大于員工編號為7369這個員工的所有員工信息。# 解析:# 第一步:目的是查詢工資大于某一個數(shù)num的所有員工信息# select * from emp where sal>num# 第二步:num的值7369員工的工資# select sal from emp where empno = 7369;# 第三步:將主查詢中的代詞使用子查詢語句替換select * from emp where sal>(select sal from emp where empno = 7369);# 需求:查詢工資大于10號部門的平均工資的所有員工信息select * from emp where sal>(select avg(ifnull(sal,0)) from emp where deptno=10);# 需求:查詢工資大于10號部門的平均工資的非10號部門的員工信息。select * from emp where sal>(select avg(ifnull(sal,0)) from emp where deptno=10) and deptno<>10;# 需求:查詢與7369同部門的同事信息。select * from emp where deptno=(select deptno from emp where empno=7369) and empno<>7369;

        在from子句中

      # 需求:查詢員工的姓名,工資,及其部門的平均工資。# 解析:# 第一步:先查詢每個部門的平均工資# select deptno,avg(ifnull(sal,0)) from emp group by deptno;# 第二步:將上一個查詢語句的返回結(jié)果當(dāng)成一張表,與員工表進(jìn)行關(guān)聯(lián)查詢select A.ename, A.sal, B.avg_salfrom emp A join (select deptno,avg(ifnull(sal,0)) avg_sal from emp group by deptno) B on A.deptno = B.deptno

        在having子句中

      # 需求:查詢平均工資大于30號部門的平均工資的部門號,和平均工資select deptno,avg(ifnull(sal,0)) from emp group by deptno having avg(ifnull(sal,0))>(select avg(ifnull(sal,0)) from emp where deptno=30);

        在select子句中

      12

        SQL完整的執(zhí)行順序

      13

        合并查詢結(jié)果集

        合并查詢結(jié)果集概述

        合并結(jié)果集,就是將兩次或者多次的查詢結(jié)果,合并到一起,存入一張查詢結(jié)果虛擬表中。

        進(jìn)行結(jié)果集合并的多張表,要求字段的數(shù)量是完全相同的。

        A查詢的結(jié)果有5個字段,B查詢的結(jié)果有5個字段。此時是可以合并到一起的。

        A查詢的結(jié)果有5個字段,B查詢的結(jié)果有3個字段。此時是無法合并到一起的。

        合并查詢結(jié)果集語法

        union: 對兩次的查詢結(jié)果進(jìn)行合并,對最終的合并結(jié)果會進(jìn)行去重的處理。

        union all : 對兩次的查詢結(jié)果的直接合并,沒有進(jìn)行去重的處理。

      tags:
      聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
      10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
      請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
      免費(fèi)領(lǐng)取
      今日已有369人領(lǐng)取成功
      劉同學(xué) 138****2860 剛剛成功領(lǐng)取
      王同學(xué) 131****2015 剛剛成功領(lǐng)取
      張同學(xué) 133****4652 剛剛成功領(lǐng)取
      李同學(xué) 135****8607 剛剛成功領(lǐng)取
      楊同學(xué) 132****5667 剛剛成功領(lǐng)取
      岳同學(xué) 134****6652 剛剛成功領(lǐng)取
      梁同學(xué) 157****2950 剛剛成功領(lǐng)取
      劉同學(xué) 189****1015 剛剛成功領(lǐng)取
      張同學(xué) 155****4678 剛剛成功領(lǐng)取
      鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
      董同學(xué) 138****2867 剛剛成功領(lǐng)取
      周同學(xué) 136****3602 剛剛成功領(lǐng)取
      相關(guān)推薦HOT
      python字符串截???

      在Python中,字符串是一種非常常見的數(shù)據(jù)類型,它可以用來表示文本、數(shù)字、符號等內(nèi)容。在實(shí)際應(yīng)用中,我們經(jīng)常需要對字符串進(jìn)行截取,以便獲取...詳情>>

      2023-11-02 17:56:27
      Python socket C/S結(jié)構(gòu)的聊天室應(yīng)用實(shí)現(xiàn)?

      隨著互聯(lián)網(wǎng)的發(fā)展,聊天室應(yīng)用成為人們?nèi)粘I钪惺殖R姷囊环N社交方式。Python語言的Socket模塊是實(shí)現(xiàn)網(wǎng)絡(luò)通信的重要工具,可以輕松地實(shí)現(xiàn)C/...詳情>>

      2023-11-02 17:53:38
      用while求1到100的奇數(shù)和?

      在計算機(jī)編程中,循環(huán)語句是非常重要的一部分。而while語句是其中最基本也是最常用的一種。它的作用是在滿足一定條件的情況下,重復(fù)執(zhí)行一段代...詳情>>

      2023-11-02 17:50:57
      python創(chuàng)建一個集合?

      在Python中,集合是一種無序且不重復(fù)的數(shù)據(jù)類型,可以用于存儲一組元素。創(chuàng)建一個集合非常簡單,只需要使用大括號{}或者set()函數(shù)即可。使用大...詳情>>

      2023-11-02 17:34:02
      linux改文件屬主命令?

      Linux文件相關(guān)命令1、命令一:cat cat命令應(yīng)該是在Linux中查看文件內(nèi)容最常見的命令了。使用cat命令會打印指定文件的所有內(nèi)容到標(biāo)準(zhǔn)輸出上,比...詳情>>

      2023-10-31 19:58:15