日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

MySQL表復合查詢的實現(xiàn)

瀏覽:22日期:2023-05-08 10:17:39
目錄
  • 前言
  • 一、案例準備
  • 二、基本查詢
  • 三、多表查詢
  • 四、子查詢
    • 4.1 單行子查詢
    • 4.2 多行子查詢
    • 4.3 多列子查詢
    • 4.4 FROM子句中的子查詢
    • 4.5 合并查詢
      • 4.5.1 UNION
      • 4.5.2 UNION ALL
  • 五、自連接
    • 六、內(nèi)外連接
      • 6.1 內(nèi)連接
        • 6.2 外連接
          • 6.2.1 左外連接
          • 6.2.2 右外連接

      前言

      對MySQL表的基本查詢還遠遠達不到實際開發(fā)過程中的需求,因此還需要掌握對數(shù)據(jù)庫表的復合查詢。本文介紹了多表查詢、子查詢、自連接、內(nèi)外連接等復合查詢的案例。

      一、案例準備

      來自oracle 9i的經(jīng)典測試表:

      emp員工表

      mysql> select * from emp;+--------+--------+-----------+------+---------------------+---------+---------+--------+| empno  | ename  | job       | mgr  | hiredate    | sal     | comm    | deptno |+--------+--------+-----------+------+---------------------+---------+---------+--------+| 007369 | SMITH  | CLERK     | 7902 | 1980-12-17 00:00:00 |  800.00 |    NULL |     20 || 007499 | ALLEN  | SALESMAN  | 7698 | 1981-02-20 00:00:00 | 1600.00 |  300.00 |     30 || 007521 | WARD   | SALESMAN  | 7698 | 1981-02-22 00:00:00 | 1250.00 |  500.00 |     30 || 007566 | JONES  | MANAGER   | 7839 | 1981-04-02 00:00:00 | 2975.00 |    NULL |     20 || 007654 | MARTIN | SALESMAN  | 7698 | 1981-09-28 00:00:00 | 1250.00 | 1400.00 |     30 || 007698 | BLAKE  | MANAGER   | 7839 | 1981-05-01 00:00:00 | 2850.00 |    NULL |     30 || 007782 | CLARK  | MANAGER   | 7839 | 1981-06-09 00:00:00 | 2450.00 |    NULL |     10 || 007788 | SCOTT  | ANALYST   | 7566 | 1987-04-19 00:00:00 | 3000.00 |    NULL |     20 || 007839 | KING   | PRESIDENT | NULL | 1981-11-17 00:00:00 | 5000.00 |    NULL |     10 || 007844 | TURNER | SALESMAN  | 7698 | 1981-09-08 00:00:00 | 1500.00 |    0.00 |     30 || 007876 | ADAMS  | CLERK     | 7788 | 1987-05-23 00:00:00 | 1100.00 |    NULL |     20 || 007900 | JAMES  | CLERK     | 7698 | 1981-12-03 00:00:00 |  950.00 |    NULL |     30 || 007902 | FORD   | ANALYST   | 7566 | 1981-12-03 00:00:00 | 3000.00 |    NULL |     20 || 007934 | MILLER | CLERK     | 7782 | 1982-01-23 00:00:00 | 1300.00 |    NULL |     10 |+--------+--------+-----------+------+---------------------+---------+---------+--------+14 rows in set (0.00 sec)

      dept部門表

      mysql> select * from dept;+--------+------------+----------+| deptno | dname      | loc      |+--------+------------+----------+|     10 | ACCOUNTING | NEW YORK ||     20 | RESEARCH   | DALLAS   ||     30 | SALES      | CHICAGO  ||     40 | OPERATIONS | BOSTON   |+--------+------------+----------+4 rows in set (0.00 sec)

      salgrade工資等級表

      mysql> select * from salgrade;+-------+-------+-------+| grade | losal | hisal |+-------+-------+-------+|     1 |   700 |  1200 ||     2 |  1201 |  1400 ||     3 |  1401 |  2000 ||     4 |  2001 |  3000 ||     5 |  3001 |  9999 |+-------+-------+-------+5 rows in set (0.00 sec)

      二、基本查詢

      MySQL表的基本查詢都是針對一張表進行的查詢操作,在實際開發(fā)過程中還遠遠不夠。以下是以下基本查詢的案例:

      查詢工資高于500或崗位為MANAGER的雇員,同時還要滿足他們的姓名首字母為大寫的J

      按照部門號升序而雇員的工資降序排序

      使用年薪進行降序排序

      注意:年薪 = 月薪 * 12 + 績效獎,其中有的績效comm為NULL,在MySQL中有NULL參與運算的結(jié)果都為NULL,因此要使用到ifnull函數(shù)。

      顯示工資最高的員工的名字和工作崗位

      注意:因為要使用到max聚合函數(shù),因此不能直接將聚會函數(shù)返回的結(jié)果作為where篩選的條件去找某一個具體的記錄。因此可以先找出最大的薪資,在根據(jù)薪資找到該條記錄。

      但是這樣的話就要使用兩條SQL語句,因此可以使用子查詢:

      內(nèi)部select查詢到的結(jié)果,作為外部where篩選的條件。

      顯示工資高于平均工資的員工信息

      和上面的一樣,也需要用到子查詢。

      顯示每個部門的平均工資和最高工資

      顯示平均工資低于2000的部門號和它的平均工資

      顯示每種崗位的雇員總數(shù),平均工資

      三、多表查詢

      實際開發(fā)中,數(shù)據(jù)往往來自不同的表,因此需要多表查詢。以下是使用emp、dept、salgrade三張表進行多表查詢的案例:

      顯示雇員名、雇員工資以及所在部門的名字

      由于以上要查詢的數(shù)據(jù)分別來自于emp表和dept表,因此要聯(lián)合這兩張表進行查詢:

      使用上面的查詢方法查詢出來的包含許多錯誤的結(jié)果,因此需要使用emp.deptno = dept.deptno條件來進行查詢:

      顯示部門號為10的部門名,員工名和工資

      顯示各個員工的姓名,工資,及工資級別

      四、子查詢

      子查詢是指嵌入到其他SQL語句中的select語句,也叫嵌套查詢。

      4.1 單行子查詢

      單行子查詢指的是返回一行記錄的子查詢,例如:

      顯示SMITH同一部門的員工

      首先從emp表中找出SMITH所在部門的部門號:

      然后將該部門號作為篩選的條件,篩選出與該部門號相同的員工信息,并且不包含SMITH:

      由此可見,子查詢就是將第一次select查詢的結(jié)果,作為第二次select查詢的篩選條件。

      4.2 多行子查詢

      多行子查詢就是返回多行記錄的子查詢,此時一般會用于INALLANY 這些關鍵字:

      IN:表示存在,即需滿足存在條件ALL:表示所有,即需滿足所有條件ANY:表示任一,即需滿足任一條件

      查詢案例:

      IN關鍵字:查詢和10號部門的工作崗位相同的雇員的名字,崗位,工資,部門號,但是不包含10號部門自己的

      首先查詢出10號部門所有的崗位

      然后將這些崗位信息作為下一次查詢的篩選條件進行查詢

      最后去掉10號部門的員工信息

      ALL關鍵字:顯示工資比部門30的所有員工的工資高的員工的姓名、工資和部門號

      首先查找出30號部門所有的員工工資

      然后將其作為篩選條件查找出比30號部門的所有員工工資都高的員工信息

      ANY關鍵字:顯示工資比部門30的任意員工的工資高的員工的姓名、工資和部門號(包含自己部門的員工)

      該案例的前面部分和上面的案例一樣,也是首先找出30號部門所有員工的工資,然后再使用ANY關鍵字找出比部門30的任意員工的工資高的員工信息:

      任一當然也包含了30號部門的內(nèi)部員工,因此只需大于30號部門最低的員工工資的員工都會被篩選出來。

      4.3 多列子查詢

      單行子查詢是指子查詢只返回單列,單行數(shù)據(jù);多行子查詢是指返回單列多行數(shù)據(jù),都是針對單列而言的。而多列子查詢則是指查詢返回多個列數(shù)據(jù)的子查詢語句。

      案例:查詢和SMITH的部門和崗位完全相同的所有雇員,不含SMITH本人

      首先查找出SMITH的部門號和崗位信息

      然后以SMITH的部門號和崗位信息作為篩選條件進行篩選

      最后去掉SMITH的相關信息

      4.4 FROM子句中的子查詢

      FROM子句中的子查詢就是指子查詢語句出現(xiàn)在FROM后面,其實就是把子查詢的結(jié)果當成一張臨時表使用。

      查詢案例:

      顯示每個高于自己部門平均工資的員工的姓名、部門、工資、平均工資

      首先對部門進行分組,獲取其部門號即平均工資

      將查詢結(jié)果作為一張臨時表,獲取其與emp表的笛卡爾積

      最后在笛卡爾積表當中篩選出每個高于自己部門平均工資的員工的姓名、部門、工資、平均工資

      查找每個部門工資最高的人的姓名、工資、部門、最高工資

      首先分組查詢獲取每個部門的部門號和最高工資

      然后將查詢結(jié)果作為臨時表,并獲取其與emp表的笛卡爾積

      從獲取的笛卡爾積中篩選出每個部門工資最高的人的姓名、工資、部門、最高工資

      顯示每個部門的信息(部門名,編號,地址)和人員數(shù)量

      方法一:使用子查詢

      首先對部門進行分組,查找每個部門對應的人數(shù)

      將查詢的結(jié)果作為臨時表,獲取其與dept表的笛卡爾積

      從笛卡爾積表中篩選出每個部門的信息及其部門人數(shù)

      方法二:使用多表

      4.5 合并查詢

      在實際應用中,為了合并多個SELECT的執(zhí)行結(jié)果,可以使用集合操作符 UNIONUNION ALL

      4.5.1 UNION

      該操作符用于取得兩個結(jié)果集的并集。當使用該操作符時,會自動去掉結(jié)果集中的重復行。

      案例:將工資大于2500或職位是MANAGER的人找出來

      可以發(fā)現(xiàn),使用 ORUNION 查詢出來的結(jié)果相同。

      4.5.2 UNION ALL

      該操作符用于取得兩個結(jié)果集的并集。當使用該操作符時,不會去掉結(jié)果集中的重復行。

      案例:將工資大于2500或職位是MANAGER的人找出來

      此時可以發(fā)現(xiàn)UNIONUNION ALL的唯一區(qū)別就是前者會對查找結(jié)果進行去重,而后者不會。

      五、自連接

      所謂的自連接是指在同一張表連接查詢。
      查詢案例:

      顯示員工FORD的上級領導的編號和姓名

      方法一:子查詢

      首先從emp表中找出FORD領導的編號,然后將其作為篩選條件查找出FORD的領導信息。

      方法二:自連接

      首先將兩張emp表分別作為leader表和worker表,查找出所有領導與員工之間的關系表

      然后從關系表中,查找出員工為FORD的領導信息

      六、內(nèi)外連接

      6.1 內(nèi)連接

      內(nèi)連接實際上就是利用WHERE子句對兩張表形成的笛卡爾積進行篩選,因此前面所有的復合查詢操作都屬于內(nèi)連接,同時內(nèi)連接也是實際開發(fā)過程中使用最多的連接查詢。

      內(nèi)連接語法:

      select 字段 from 表1 inner join 表2 on 連接條件 and 其他條件;

      案例:顯示SMITH的名字和部門名稱

      方法一:使用前面的查詢方式

      方法二:使用標準內(nèi)連接查詢

      首先通過內(nèi)連接查詢出所有員工與其所在部門名之間的關系

      從以上關系中篩選出SMITH與其部門名

      6.2 外連接

      外連接分為左外連接和右外連接。如果聯(lián)合查詢,左側(cè)的表完全顯示我們就說是左外連接,右側(cè)的表完全顯示就是右外連接。

      6.2.1 左外連接

      語法:

      select 字段 from 表1 inner join 表2 on 連接條件 and 其他條件;

      案例:

      -- 建兩張表create table stu (id int, name varchar(30)); -- 學生表insert into stu values(1,"jack"),(2,"tom"),(3,"kity"),(4,"nono");create table exam (id int, grade int); -- 成績表insert into exam values(1, 56),(2,76),(11, 8);

      查詢所有學生的成績,如果這個學生沒有成績,也要將學生的個人信息顯示出來

      可以發(fā)現(xiàn),左外連接以左表的內(nèi)容為準,顯示其全部內(nèi)容,如果右邊沒有對應信息,則顯示為NULL

      6.2.2 右外連接

      語法:

      select 字段 from 表名1 right join 表名2 on 連接條件;

      案例:

      對stu表和exam表聯(lián)合查詢,把所有的成績都顯示出來,即使這個成績沒有學生與它對應,也要顯示出來

      對dept表和emp表聯(lián)合查詢,列出部門名稱和這些部門的員工信息,同時列出沒有員工的部門

      dept表左外連接emp表:

      emp表右外連接dept表:

      由此可見左外連接和右外連接可以相互轉(zhuǎn)換。

      到此這篇關于MySQL表復合查詢的實現(xiàn)的文章就介紹到這了,更多相關MySQL 復合查詢內(nèi)容請搜索以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持!

      標簽: MySQL
      日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
      女人天堂亚洲aⅴ在线观看| 久热re这里精品视频在线6| 国产高清不卡| a天堂资源在线| 三级欧美在线一区| 在线亚洲国产精品网站| 成人日韩精品| 日韩精品第一区| 亚洲精品看片| av一区二区高清| 久久激情中文| 日韩欧美自拍| 国产精品视频一区二区三区综合| 视频一区中文字幕| 亚洲免费黄色| 尤物tv在线精品| 首页国产精品| 成人午夜在线| 国产精品欧美大片| 国产精品一区二区三区av麻| 欧美三区不卡| 日韩精品久久理论片| 蜜臀久久99精品久久久画质超高清 | 日韩不卡免费高清视频| 国内在线观看一区二区三区| 麻豆国产精品| 国产精品草草| 国产精品美女午夜爽爽| 国产农村妇女精品一二区| 午夜精品亚洲| 91九色精品| 蜜桃视频免费观看一区| 日韩国产在线一| 涩涩av在线| 丝袜诱惑制服诱惑色一区在线观看| 亚洲手机在线| 国产午夜久久| 九一国产精品| 婷婷综合六月| 91精品高清| 亚洲综合色婷婷在线观看| 日韩在线观看一区二区| 蜜桃久久久久久| 天堂精品久久久久| 国产一区二区三区视频在线| 欧美va天堂| 国产精品一区二区精品视频观看| 日韩不卡免费高清视频| 日本一区二区三区视频在线看| 欧美国产美女| 亚洲欧美日韩专区| 欧美激情麻豆| 模特精品在线| 美女在线视频一区| 亚洲色诱最新| 国产91在线精品| 日本 国产 欧美色综合| 福利片在线一区二区| 先锋影音久久久| 激情久久一区二区| 免费黄网站欧美| 成人va天堂| 国产精品一区二区三区www| 午夜精品亚洲| 麻豆mv在线观看| 欧美天堂亚洲电影院在线观看| 婷婷亚洲五月| 亚洲国内精品| 欧美99久久| 久久亚洲成人| 亚洲男人在线| 高清一区二区| 日韩午夜免费| 伊人久久大香线蕉av超碰演员| 一区二区三区国产在线| 国产成人精选| 91欧美极品| 日韩一级欧洲| 亚洲第一区色| 国产不卡av一区二区| 91嫩草精品| 丝瓜av网站精品一区二区| 日韩精品诱惑一区?区三区| 综合在线一区| 不卡中文一二三区| 日本欧美不卡| 国产69精品久久| 国产精品视频一区二区三区综合| 日韩一区精品视频| 婷婷中文字幕一区| 三上悠亚国产精品一区二区三区| 欧美成人精品午夜一区二区| 日本亚洲欧洲无免费码在线| 国产亚洲永久域名| 欧美日韩第一| 91精品国产调教在线观看| 黄色网一区二区| 另类综合日韩欧美亚洲| 最新国产精品| 丝瓜av网站精品一区二区 | 亚洲字幕久久| 亚洲三区欧美一区国产二区| 亚洲伦乱视频| 亚洲bt欧美bt精品777| 精品99在线| 六月丁香综合在线视频| 奇米狠狠一区二区三区| 蘑菇福利视频一区播放| 97精品国产| 老司机精品视频网| 97精品国产99久久久久久免费| 秋霞国产精品| 超碰成人av| 岛国av在线网站| 国产一区精品福利| 免费在线亚洲欧美| 国产精品毛片视频| 欧美日本二区| 国产日韩亚洲欧美精品| 91九色综合| 国产欧美69| 欧美国产免费| 色爱综合网欧美| 国产精品成人a在线观看| 红杏一区二区三区| 久久一区精品| 久久中文欧美| 国产一区二区三区免费在线| 97精品国产一区二区三区| 成人美女视频| 久久精品国产99久久| 亚洲不卡av不卡一区二区| 婷婷国产精品| 亚洲免费成人| 久久性天堂网| 人人精品久久| 国产精品入口久久| 九九九精品视频| 亚洲综合在线电影| 亚洲精品一区二区妖精| 影院欧美亚洲| 亚洲精品韩国| 久久a爱视频| 日韩啪啪电影网| 99riav1国产精品视频| 香蕉久久一区| 国产精品白浆| 日韩高清成人| 国产一区白浆| 国产日韩三级| 日韩免费高清| 午夜一级久久| 国产精品99久久免费观看| 欧美日一区二区三区在线观看国产免 | 国产精品99久久免费观看| 国产精品99一区二区三区| 亚洲一级影院| 水蜜桃久久夜色精品一区的特点| 日韩va亚洲va欧美va久久| 欧美日韩一二三四| 亚洲免费资源| 精品国产三区在线| 久久久久国产精品一区三寸| 国产精品普通话对白| 欧美视频久久| 欧美精品1区| 欧美羞羞视频| 在线日韩成人| 日本精品黄色| 亚洲免费婷婷| 麻豆国产一区| 私拍精品福利视频在线一区| 中文字幕一区二区三区日韩精品 | 最新日韩欧美| 日韩国产一二三区| 丝袜诱惑一区二区| 在线精品观看| 三级在线看中文字幕完整版| 中文一区一区三区免费在线观| 精品91福利视频| 亚洲日本三级| 另类中文字幕国产精品| 日本欧美韩国一区三区| 在线日韩电影| 国产精品久久久久av蜜臀| 午夜久久一区| 久久久亚洲欧洲日产| 亚洲激情精品| 大香伊人久久精品一区二区| 在线综合视频| 高清日韩中文字幕| 日本va欧美va瓶| 999国产精品视频| 国产精品久久久久久av公交车| 五月天久久网站| 高清一区二区| 国产欧美在线观看免费| 国产农村妇女精品一区二区| а√天堂8资源在线| 日韩av一区二区在线影视|