MySQL-7:多表查詢

今日內(nèi)容

1.多表查詢

2.事務(wù)

3.DCL

多表查詢:

  • 查詢語(yǔ)法:
    select 
        列名列表
    from
        表名列表
    where....
  • 數(shù)據(jù)準(zhǔn)備(數(shù)據(jù)庫(kù)表以及數(shù)據(jù)的創(chuàng)建):

       # 新增數(shù)據(jù)
       INSERT INTO dept (NAME) VALUES('開(kāi)發(fā)部'),('市場(chǎng)部'),('財(cái)務(wù)部');
       
       # 創(chuàng)建員工表
       CREATE TABLE emp(
        id INT PRIMARY KEY AUTO_INCREMENT,
        NAME VARCHAR(10),
        gender CHAR(1), -- 性別
        salary DOUBLE, -- 工資
        join_date DATE, -- 入職日期
        dept_id INT,
        FOREIGN KEY(dept_id) REFERENCES dept(id) -- 外鍵
       );
        
    # 新增數(shù)據(jù)
    INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('孫悟空','男',7200,'2014-02-24',1);
    INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('豬八戒','男',4200,'2015-03-15',2);
    INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('沙師弟','男',3600,'2013-02-24',2);
    INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('唐僧','男',9000,'2013-02-24',2);
    INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('白骨精','男',5400,'2018-08-08',3);
    INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('蜘蛛精','男',6100,'2019-01-01',1);
    
  • 笛卡爾積

    • 有兩個(gè)集合a,b,取這兩個(gè)集合的所以組成情況
    • 要完成多表查詢,需要消除無(wú)用的數(shù)據(jù)
  • 多表查詢分類
    1.內(nèi)鏈接查詢:
    (1)隱式內(nèi)鏈接:使用 where 條件,消除無(wú)用的數(shù)據(jù)。

    • 例子:
-- 查詢員工表的名稱,性別。部門表的名稱

-- 正規(guī)寫法 方便添加注釋(符合企業(yè)sql規(guī)范)
SELECT
   t1.name, -- 員工表的姓名
   t1.gender, -- 員工表的性別
   t2.name -- 部門表的名稱
FROM
   emp t1,
   dept t2
WHERE
   t1.dept_id=t2.id;

(2)顯式內(nèi)鏈接

  • 語(yǔ)法:
    select 字段列表 from 表明 inner join 表明2 on 條件
  • 例如:
-- 查詢員工表的名稱,性別。部門表的名稱(使用顯式內(nèi)鏈接) 
SELECT * FROM emp [INNER] JOIN dept ON emp.dept_id = dept.id;

-- INNER 是可選操作,可以直接使用 JOIN ON 如下:
SELECT * FROM emp JOIN dept ON emp.dept_id = dept.id;

(3)內(nèi)鏈接查詢注意事項(xiàng):

  • 從哪些表中查詢數(shù)據(jù)
  • 條件是什么?
  • 查詢哪些字段?

2.外鏈接查詢:
(1)左外連接:

  • 語(yǔ)法:select 字段列表 from 表1 left [outer] join 表2 on 條件
  • 查詢的是左表所有數(shù)據(jù)以及其交集部分。


    左外連接,圖片來(lái)自互聯(lián)網(wǎng)
 -- 左外連接 (LEFT JOIN ON)
 SELECT
    t1.*,
    t2.name
 FROM
    emp t1
LEFT JOIN
    dept t2
 ON
    t1.dept_id = t2.id;

(2)右外連接:

  • 語(yǔ)法:select 字段列表 from 表1 right [outer] join 表2 on 條件
  • 查詢的是右表所有數(shù)據(jù)以及其交集部分。


    右外連接,圖片來(lái)自互聯(lián)網(wǎng)
 -- 右外連接 (RIGHT JOIN ON)
SELECT
    t1.*,
    t2.name
FROM
    dept t2
RIGHT JOIN
    emp t1
 ON
    t1.dept_id = t2.id;

3.子查詢:

  • 概念:查詢中嵌套查詢,稱嵌套查詢?yōu)樽硬樵儭?/li>
     -- 子查詢
     -- 查詢工資最高的員工的信息

     -- 1、查詢最高的工資是多少?
     SELECT MAX(salary) FROM emp;

    -- 查詢的結(jié)果是 9000

     -- 2.查詢員工信息,并且工資等于最高的
     SELECT * FROM emp WHERE emp.salary=9000;
     
     -- 一條SQL就能完成
    SELECT * FROM emp WHERE emp.salary=(
        SELECT MAX(salary) FROM emp
        );

  • 子查詢的不同情況
    1、子查詢的結(jié)果是單行單列的:
    • 子查詢可以作為條件,使用運(yùn)算符(>、<、>=、<=、=)去判斷。
-- 查詢員工工資小于平均工資的人
SELECT * FROM emp WHERE emp.salary < (SELECT AVG(salary) FROM emp);

2、子查詢的結(jié)果是多行單列的:

  • 可以使用運(yùn)算符IN來(lái)判斷
-- 查詢‘財(cái)務(wù)部’和'市場(chǎng)部'所有的員工信息
-- 1、先查詢財(cái)務(wù)部的id
SELECT id FROM dept WHERE name='財(cái)務(wù)部' OR name='市場(chǎng)部';
-- 2、再根據(jù)ID查詢信息
SELECT * FROM emp WHERE dept_id = 3 OR dept_id=2;

-- 其中第二條語(yǔ)句可以改寫成如下:(相當(dāng)與上面這條 )
SELECT * FROM emp WHERE dept_id IN(3,2);

-- 子查詢
SELECT * FROM emp WHERE dept_id IN(SELECT id FROM dept WHERE name='財(cái)務(wù)部' OR name='市場(chǎng)部');

3、子查詢的結(jié)果是多行多列的:

  • 子查詢可以作為一張?zhí)摂M表來(lái)進(jìn)行查詢
-- 多行多列
-- 例:查詢員工入職日期是2015年-11-11之后的員工信息和部門信息(子查詢)
-- 括號(hào)里的叫做虛擬表
SELECT * FROM dept t1,(SELECT * FROM emp WHERE emp.join_date > '2015-11-11') t2
WHERE t1.id = t2.dept_id;

-- 例:查詢員工入職日期是2015年-11-11之后的員工信息和部門信息(普通內(nèi)鏈接查詢)
SELECT * FROM emp t1, dept t2 
WHERE t1.dept_id = t2.id AND t1.join_date > '2015-11-11';

事務(wù)

DCL

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ORACLE自學(xué)教程 --create tabletestone ( id number, --序號(hào)usernam...
    落葉寂聊閱讀 1,242評(píng)論 0 0
  • 1. 了解SQL 1.1 數(shù)據(jù)庫(kù)基礎(chǔ) ? 學(xué)習(xí)到目前這個(gè)階段,我們就需要以某種方式與數(shù)據(jù)庫(kù)打交道。在深入學(xué)習(xí)MyS...
    鋒享前端閱讀 1,320評(píng)論 0 1
  • 數(shù)據(jù)庫(kù)的概述 1.數(shù)據(jù)庫(kù)的作用:倉(cāng)庫(kù),存儲(chǔ)數(shù)據(jù)。 2.關(guān)系型的數(shù)據(jù)庫(kù),保存實(shí)體與實(shí)體之間的關(guān)系。 3.常見(jiàn)的數(shù)據(jù)庫(kù)...
    三萬(wàn)_chenbing閱讀 958評(píng)論 0 3
  • 和外婆剛剛通過(guò)電話,老人家精神很好。我是相當(dāng)佩服外婆的,八十五歲,獨(dú)自生活在自己的小房子里,雖然親戚們都在附近,但...
    風(fēng)之女孩閱讀 574評(píng)論 0 1
  • 1. 很多人覺(jué)得:把一件事堅(jiān)持到底,得靠強(qiáng)大的意志力。自己之所以半途而廢,是因?yàn)橐庵玖Σ粓?jiān)定。但事實(shí)上,人的意志力...
    共剪西窗燭閱讀 948評(píng)論 1 1

友情鏈接更多精彩內(nèi)容