国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MySQL---多表聯(lián)合查詢(下)(內(nèi)連接查詢、外連接查詢、子查詢(ALL/ANY/SOME/IN/EXISTS關(guān)鍵字)、自關(guān)聯(lián)查詢)

這篇具有很好參考價值的文章主要介紹了MySQL---多表聯(lián)合查詢(下)(內(nèi)連接查詢、外連接查詢、子查詢(ALL/ANY/SOME/IN/EXISTS關(guān)鍵字)、自關(guān)聯(lián)查詢)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1. 內(nèi)連接查詢

數(shù)據(jù)準備:

use mydb3;

-- 創(chuàng)建部門表
create table if not exists dept3(
  deptno varchar(20) primary key ,  -- 部門號
  name varchar(20) -- 部門名字
);
?
-- 創(chuàng)建員工表
create table if not exists emp3(
  eid varchar(20) primary key , -- 員工編號
  ename varchar(20), -- 員工名字
  age int,  -- 員工年齡
  dept_id varchar(20)  -- 員工所屬部門
);

-- 給dept3表添加數(shù)據(jù)
insert into dept3 values('1001','研發(fā)部');
insert into dept3 values('1002','銷售部');
insert into dept3 values('1003','財務部');
insert into dept3 values('1004','人事部');

-- 給emp表添加數(shù)據(jù)
insert into emp3 values('1','喬峰',20, '1001');
insert into emp3 values('2','段譽',21, '1001');
insert into emp3 values('3','虛竹',23, '1001');
insert into emp3 values('4','阿紫',18, '1001');
insert into emp3 values('5','掃地僧',85, '1002');
insert into emp3 values('6','李秋水',33, '1002');
insert into emp3 values('7','鳩摩智',50, '1002'); 
insert into emp3 values('8','天山童姥',60, '1003');
insert into emp3 values('9','慕容博',58, '1003');
insert into emp3 values('10','丁春秋',71, '1005');

內(nèi)連接查詢語法:

-- 語法:
-- 隱式內(nèi)連接(SQL92標準):select * from A,B where 條件; 
-- 顯示內(nèi)連接(SQL99標準):select * from A inner join B on 條件;

-- 查詢每個部門的所屬員工
select * from dept3,emp3 where dept3.deptno = emp3.dept_id;
select * from dept3 inner join emp3 on dept3.deptno = emp3.dept_id;
-- 查詢研發(fā)部和銷售部的所屬員工
select * from dept3,emp3 where dept3.deptno = emp3.dept_id and name in( '研發(fā)部','銷售部');
select * from dept3 join emp3 on dept3.deptno = emp3.dept_id and name in( '研發(fā)部','銷售部');
?
-- 查詢每個部門的員工數(shù),并升序排序
select deptno,count(1) as total_cnt from dept3,emp3 where dept3.deptno = emp3.dept_id group by deptno order by total_cnt;
?
select deptno,count(1) as total_cnt from dept3 join emp3 on dept3.deptno = emp3.dept_id group by deptno order by total_cnt;
-- 查詢研發(fā)部和銷售部的所屬員工
select * from dept3,emp3 where dept3.deptno = emp3.dept_id and name in( '研發(fā)部','銷售部');
select * from dept3 join emp3 on dept3.deptno = emp3.dept_id and name in( '研發(fā)部','銷售部');
?
-- 查詢每個部門的員工數(shù),并升序排序
select deptno,count(1) as total_cnt from dept3,emp3 where dept3.deptno = emp3.dept_id group by deptno order by total_cnt;
?
select deptno,count(1) as total_cnt from dept3 join emp3 on dept3.deptno = emp3.dept_id group by deptno order by total_cnt;

-- 查詢?nèi)藬?shù)大于等于3的部門,并按照人數(shù)降序排序
select deptno,count(1) as total_cnt from dept3,emp3 where dept3.deptno = emp3.dept_id group by deptno having total_cnt >= 3 order by total_cnt desc;
?
select deptno,count(1) as total_cnt from dept3 join emp3 on dept3.deptno = emp3.dept_id group by deptno having total_cnt >= 3 order by total_cnt desc;

2. 外連接查詢

語法:?左外連接:left outer join:

??????????? select * from A left outer join B on 條件;

MySQL---多表聯(lián)合查詢(下)(內(nèi)連接查詢、外連接查詢、子查詢(ALL/ANY/SOME/IN/EXISTS關(guān)鍵字)、自關(guān)聯(lián)查詢)

? ? ? ? ? ??右外連接:right outer join:

??????????? select * from A right outer join B on 條件;

MySQL---多表聯(lián)合查詢(下)(內(nèi)連接查詢、外連接查詢、子查詢(ALL/ANY/SOME/IN/EXISTS關(guān)鍵字)、自關(guān)聯(lián)查詢)

? ? ? ? ? ? 滿外連接: full outer join:

????????????select * from A full outer join B on 條件;

MySQL---多表聯(lián)合查詢(下)(內(nèi)連接查詢、外連接查詢、子查詢(ALL/ANY/SOME/IN/EXISTS關(guān)鍵字)、自關(guān)聯(lián)查詢)

-- 外連接查詢
-- 查詢哪些部門有員工,哪些部門沒有員工
use mydb3;
select * from dept3 left outer join emp3 on dept3.deptno = emp3.dept_id;
?
-- 查詢哪些員工有對應的部門,哪些沒有
select * from dept3 right outer join emp3 on dept3.deptno = emp3.dept_id;
?
?
-- 使用union關(guān)鍵字實現(xiàn)左外連接和右外連接的并集
select * from dept3 left outer join emp3 on dept3.deptno = emp3.dept_id
union 
select * from dept3 right outer join emp3 on dept3.deptno = emp3.dept_id;

3. 子查詢

子查詢就是指的在一個完整的查詢語句之中,嵌套若干個不同功能的小查詢。通俗一點就是包含select嵌套的查詢。

子查詢可以返回的數(shù)據(jù)類型一共分為四種:

單行單列:返回的是一個具體列的內(nèi)容,可以理解為一個單值數(shù)據(jù);

單行多列:返回一行數(shù)據(jù)中多個列的內(nèi)容;

多行單列:返回多行記錄之中同一列的內(nèi)容,相當于給出了一個操作范圍;

多行多列:查詢返回的結(jié)果是一張臨時表。

-- 查詢年齡最大的員工信息,顯示信息包含員工號、員工名字,員工年齡
select eid,ename,age from emp3 where age = (select max(age) from emp3);
?
?
-- 查詢年研發(fā)部和銷售部的員工信息,包含員工號、員工名字
select eid,ename,t.name from emp3 where dept_id in (select deptno,name from dept3 where name = '研發(fā)部' or name = '銷售部') ;
?
?
-- 查詢研發(fā)部20歲以下的員工信息,包括員工號、員工名字,部門名字
select eid,age,ename,name from (select * from dept where name = '研發(fā)部 ')t1,(select * from emp3 where age <20)t2

ALL關(guān)鍵字:

與子查詢返回的所有值比較為true 則返回true。

ALL可以與=、>>=、<、<=<>結(jié)合是來使用,分別表示等于、大于、大于等于、小于、小于

于、不等于其中的所有數(shù)據(jù)。

ALL表示指定列中的值必須要大于子查詢集的每一個值,即必須要大于子查詢集的最大值;如果是

小于號即小于子查詢集的最小值。同理可以推出其它的比較運算符的情況。

-- 語法:
-- select …from …where c > all(查詢語句)
-- 等價于:
-- select ...from ... where c > result1 and?c > result2 and?c > result3

-- 查詢年齡大于‘1003’部門所有年齡的員工信息
select * from emp3 where age > all(select age from emp3 where dept_id = '1003’);

-- 查詢不屬于任何一個部門的員工信息 
select * from emp3 where dept_id != all(select deptno from dept3); 

ANY與SOME關(guān)鍵字:

與子查詢返回的任何值比較為true,則返回true。

ANY可以與=、>、>=、<、<=、<>結(jié)合是來使用,分別表示等于、大于、大于等于、小于、小于

等于、不等于其中的任何一個數(shù)據(jù)。

表示指定列中的值要大于子查詢中的任意一個值,即必須要大于子查詢集中的最小值。同理可以推

出其它的比較運算符的情況。

SOME和ANY的作用一樣,SOME可以理解為ANY的別名。

-- 語法:
-- select …from …where c > any(查詢語句)
-- 等價于:
-- select ...from ... where c > result1 or?c > result2 or?c > result3

-- 查詢年齡大于‘1003’部門任意一個員工年齡的員工信息
select * from emp3 where age > all(select age from emp3 where dept_id = '1003’);

IN關(guān)鍵字:

IN關(guān)鍵字,用于判斷某個記錄的值,是否在指定的集合中。

在IN關(guān)鍵字前邊加上not可以將條件反過來。

-- 語法:
-- select …from …where c in(查詢語句)
-- 等價于:
-- select ...from ... where c = result1 or?c = result2 or?c = result3

-- 查詢研發(fā)部和銷售部的員工信息,包含員工號、員工名字
select eid,ename,t.name from emp3 where dept_id in (select deptno from dept3 where name = '研發(fā)部' or name = '銷售部') ;

EXISTS關(guān)鍵字:

該子查詢?nèi)绻坝袛?shù)據(jù)結(jié)果”(至少返回一行數(shù)據(jù)), 則該EXISTS() 的結(jié)果為“true”,外層查詢執(zhí)行

子查詢?nèi)绻皼]有數(shù)據(jù)結(jié)果”(沒有任何數(shù)據(jù)返回),則該EXISTS()的結(jié)果為“false”,外層查詢

不執(zhí)行。

EXISTS后面的子查詢不返回任何實際數(shù)據(jù),只返回真或假,當返回真時 where條件成立。

EXISTS關(guān)鍵字,比IN關(guān)鍵字的運算效率高,因此,在實際開發(fā)中,特別是大數(shù)據(jù)量時,推

薦使用EXISTS關(guān)鍵字。

-- 語法:
-- select …from …where exists(查詢語句)

-- 查詢公司是否有大于60歲的員工,有則輸出
select * from emp3 a where exists(select * from emp3 b where a.age > 60);
?
-- 查詢有所屬部門的員工信息
select * from emp3 a where exists(select * from dept3 b where a.dept_id = b.deptno);

4. 自關(guān)聯(lián)查詢

MySQL有時在信息查詢時需要進行對表自身進行關(guān)聯(lián)查詢,即一張表自己和自己關(guān)聯(lián),一張表當

成多張表來用。

注意自關(guān)聯(lián)時表必須給表起別名。

-- 語法:
-- select 字段列表 from 表1 a , 表1 b where 條件;
-- 或者 
-- select 字段列表 from 表1 a [left] join 表1 b on 條件;

-- 創(chuàng)建表,并建立自關(guān)聯(lián)約束
create table t_sanguo(
    eid int primary key ,
    ename varchar(20),
    manager_id int,
 foreign key (manager_id) references t_sanguo (eid)  -- 添加自關(guān)聯(lián)約束
);

-- 添加數(shù)據(jù) 
insert into t_sanguo values(1,'劉協(xié)',NULL);
insert into t_sanguo values(2,'劉備',1);
insert into t_sanguo values(3,'關(guān)羽',2);
insert into t_sanguo values(4,'張飛',2);
insert into t_sanguo values(5,'曹操',1);
insert into t_sanguo values(6,'許褚',5);
insert into t_sanguo values(7,'典韋',5);
insert into t_sanguo values(8,'孫權(quán)',1);
insert into t_sanguo values(9,'周瑜',8);
insert into t_sanguo values(10,'魯肅',8);
?
-- 進行關(guān)聯(lián)查詢
-- 1.查詢每個三國人物及他的上級信息,如:  關(guān)羽  劉備 
select * from t_sanguo a, t_sanguo b where a.manager_id = b.eid;

(日常美圖時間)

MySQL---多表聯(lián)合查詢(下)(內(nèi)連接查詢、外連接查詢、子查詢(ALL/ANY/SOME/IN/EXISTS關(guān)鍵字)、自關(guān)聯(lián)查詢)

?文章來源地址http://www.zghlxwxcb.cn/news/detail-444905.html

到了這里,關(guān)于MySQL---多表聯(lián)合查詢(下)(內(nèi)連接查詢、外連接查詢、子查詢(ALL/ANY/SOME/IN/EXISTS關(guān)鍵字)、自關(guān)聯(lián)查詢)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關(guān)文章

  • 五、多表查詢-3.4連接查詢-聯(lián)合查詢union

    五、多表查詢-3.4連接查詢-聯(lián)合查詢union

    1、查詢薪資低于5000的員工 ?2、查詢年齡大于50歲的員工 ?3、將薪資低于5000的員工,和 年齡大于50歲的 員工全部查詢出來(把上面兩部分的結(jié)果集直接合并起來) ?4、 去重 ,“鹿杖客”既薪資低于5000,年齡也大于50歲,所以有兩條數(shù)據(jù) union all 改為 union,即可去重 ? ?5、

    2024年02月11日
    瀏覽(36)
  • MySQL-多表聯(lián)合查詢

    MySQL-多表聯(lián)合查詢

    ???歡迎您來到我的MySQL基礎復習專欄 ☆* o(≧▽≦)o *☆哈嘍~我是小小惡斯法克?? ?博客主頁: 小小惡斯法克的博客 ??該系列文章專欄: 重拾MySQL ??文章作者技術(shù)和水平很有限,如果文中出現(xiàn)錯誤,希望大家能指正?? ?? 感謝大家的關(guān)注!??? 目錄 ??聯(lián)合查詢 ??子

    2024年01月17日
    瀏覽(15)
  • 連接查詢(多表查詢)——MySQL

    連接查詢(多表查詢)——MySQL

    又稱多表查詢,當 查詢的字段涉及多個表 的時候,就要用到連接查詢 分類: 為表起別名: 提高語句的簡潔度 區(qū)分多個重名字段 注意 :如果為表起了別名,則查詢的字段就 不能使用原來的別名去限定 查詢A、B 交集部分數(shù)據(jù) 語法: 隱式內(nèi)連接 select 字段列表 from 表1,表

    2024年02月04日
    瀏覽(23)
  • MySQL ——多表連接查詢

    MySQL ——多表連接查詢

    內(nèi)連接 : 假設A和B表進行連接,使用內(nèi)連接的話,凡是A表和B表能夠匹配上的記錄查詢出來。A和B兩張表沒有主付之分,兩張表是平等的。 :inner join on 語句:select * from a_table a inner join b_table b on a.a_id = b.b_id; 說明:組合兩個表中的記錄,返回關(guān)聯(lián)字段相符的記錄,也就

    2024年04月16日
    瀏覽(21)
  • MySQL每日一練:多表查詢——連接查詢、子查詢

    MySQL每日一練:多表查詢——連接查詢、子查詢

    目錄 1、首先創(chuàng)建員工表emp和部門表dept: dept表: emp表:? 2、插入數(shù)據(jù): dept表: emp表: 3、 按條件查找 dept表: emp表:? dept表: emp表: 1.找出銷售部門中年紀最大的員工的姓名 ?2.求財務部門最低工資的員工姓名 ?3.列出每個部門收入總和高于8000的部門名稱? ?4.求工資在

    2024年02月15日
    瀏覽(21)
  • MySQL單表查詢與多表連接查詢

    單表查詢 創(chuàng)建數(shù)據(jù)表emp 插入數(shù)據(jù) -- 1. 查詢出部門編號為30的所有員工 -- 2. 所有銷售員的姓名、編號和部門編號。 -- 3. 找出獎金高于工資的員工。 -- 4. 找出獎金高于工資60%的員工。 -- 5. 找出部門編號為10中所有經(jīng)理,和部門編號為20中所有銷售員的詳細資料。 -- 6. 找出部門

    2024年02月13日
    瀏覽(18)
  • ⑧【MySQL】數(shù)據(jù)庫查詢:內(nèi)連接、外連接、自連接、子查詢、多表查詢

    ⑧【MySQL】數(shù)據(jù)庫查詢:內(nèi)連接、外連接、自連接、子查詢、多表查詢

    個人簡介:Java領域新星創(chuàng)作者;阿里云技術(shù)博主、星級博主、專家博主;正在Java學習的路上摸爬滾打,記錄學習的過程~ 個人主頁:.29.的博客 學習社區(qū):進去逛一逛~ 多表關(guān)系 : 一對一 :在 任意一方 加入外鍵,關(guān)聯(lián)另一方的主鍵,并設置外鍵為唯一(UNIQUE)。 一對多(

    2024年02月05日
    瀏覽(24)
  • MySQL每日一練:多表查詢——連接查詢、子查詢(1)

    MySQL每日一練:多表查詢——連接查詢、子查詢(1)

    目錄 1、首先創(chuàng)建員工表emp和部門表dept: dept表: emp表:? 2、插入數(shù)據(jù): dept表: emp表: 3、 按條件查找 dept表: emp表:? dept表: emp表: 1.找出銷售部門中年紀最大的員工的姓名 ?2.求財務部門最低工資的員工姓名 ?3.列出每個部門收入總和高于8000的部門名稱? ?4.求工資在

    2024年02月15日
    瀏覽(22)
  • 【MySQL系列】MySQL復合查詢的學習 _ 多表查詢 | 自連接 | 子查詢 | 合并查詢

    【MySQL系列】MySQL復合查詢的學習 _ 多表查詢 | 自連接 | 子查詢 | 合并查詢

    「前言」文章內(nèi)容大致是對MySQL復合查詢的學習。 「歸屬專欄」MySQL 「主頁鏈接」個人主頁 「筆者」楓葉先生(fy) 前面篇章講解的mysql表的查詢都是對一張表進行查詢,在實際開發(fā)中這遠遠不夠,下面將講解復合查詢,首先回顧一下基本的查詢。 使用的數(shù)據(jù)庫是之前篇章的雇

    2024年02月11日
    瀏覽(23)
  • 【MYSQL】聚合函數(shù)和單表/多表查詢練習、子查詢、內(nèi)外連接

    【MYSQL】聚合函數(shù)和單表/多表查詢練習、子查詢、內(nèi)外連接

    目錄 1.聚合函數(shù) 1.1.group by子句 1.2.having語句 2.單表查詢? 2.2單表查詢 3.多表查詢 ?3.2.子查詢 5.內(nèi)鏈接 6.外連接 函數(shù) 說明 count 返回查詢到的數(shù)據(jù)的數(shù)量 sum 返回查詢到的數(shù)據(jù)的總和 avg 返回查詢到的數(shù)據(jù)的平均值 max 返回查詢到的數(shù)據(jù)的最大值 min 返回查詢到的數(shù)據(jù)的最小值

    2024年02月04日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包