日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL总结4_多表查询

發(fā)布時間:2023/12/10 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL总结4_多表查询 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

MySQL總結4_多表查詢

一、多表查詢

  • 語法:

    select列名列表 from表名列表 where....
  • 案例

    # 創(chuàng)建部門表 CREATE TABLE dept(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20) ); INSERT INTO dept (NAME) VALUES ('開發(fā)部'),('市場部'),('財務部'); # 創(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) -- 外鍵,關聯(lián)部門表(部門表的主鍵) ); INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('孫悟空','男',7200,'2013-02-24',1); INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('豬八戒','男',3600,'2010-12-02',2); INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('唐僧','男',9000,'2008-08-08',2); INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('白骨精','女',5000,'2015-10-07',3); INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('蜘蛛精','女',4500,'2011-03-14',1);
  • 笛卡爾積

  • 有兩個集合A,B .取這兩個集合的所有組成情況。
  • 要完成多表查詢,需要消除無用的數(shù)據(jù)。
  • 二、分類

    2.1 內連接查詢

  • 隱式內連接:使用where條件消除無用數(shù)據(jù)。

    示例:

    -- 查詢所有員工信息和對應的部門信息SELECT * FROM emp,dept WHERE emp.`dept_id` = dept.`id`;-- 查詢員工表的名稱,性別。部門表的名稱SELECT emp.name 姓名,gender 性別,dept.name 部門 FROM emp,dept WHERE emp.`dept_id` = dept.`id`; -- 標準寫法 SELECT t1.name, -- 員工表的姓名t1.gender, -- 員工表的性別t2.name -- 部門表的名稱 FROMemp t1,dept t2 WHEREt1.`dept_id`= t2.`id`;
  • 顯式內連接:

    語法:

    語法: select 字段列表 from 表名1 [inner] join 表名2 on 條件 -- inner可省略

    示例

    SELECT * FROM emp INNER JOIN dept ON emp.`dept_id` = dept.`id`; -- 省略inner的寫法 SELECT * FROM emp JOIN dept ON emp.`dept_id` = dept.`id`;
  • 注意事項

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

  • 左外連接:

    語法:

    select 字段列表 from 表1 left [outer] join 表2 on 條件;

    注意:查詢的是左表所有數(shù)據(jù)以及其交集部分。

    示例:

    SELECT t1.*,t2.`name` FROM emp t1 LEFT JOIN dept t2 ON t1.`dept_id` = t2.`id`;
  • 右外連接

    語法:

    select 字段列表 from 表1 right [outer] join 表2 on 條件;

    注意:查詢的是右表所有數(shù)據(jù)以及其交集部分。

    示例:

    SELECT t1.*,t2.`NAME` FROM dept t2 RIGHT JOIN emp t1 ON t1.`dept_id`= t2.`id`;
  • 2.3 子查詢

  • 概念:查詢中嵌套查詢,稱嵌套查詢?yōu)樽硬樵儭?/p>

    示例:

    -- 1 查詢最高的工資是多少 9000 SELECT MAX(salary) FROM emp;-- 2 查詢員工信息,并且工資等于9000的 SELECT * FROM emp WHERE emp.`salary` = 9000;-- 一條sql就完成這個操作。子查詢 SELECT * FROM emp WHERE emp.`salary` = (SELECT MAX(salary) FROM emp);
  • 子查詢不同情況

  • 子查詢的結果是單行單列的:

    • 子查詢可以作為條件,使用運算符去判斷。 運算符: > >= < <= =

      示例:

      -- 查詢員工工資小于平均工資的人 SELECT * FROM emp WHERE emp.salary < (SELECT AVG(salary) FROM emp);
  • 子查詢的結果是多行單列的:

    • 子查詢可以作為條件,使用運算符in來判斷

      示例:

      -- 查詢'財務部'和'市場部'所有的員工信息 SELECT id FROM dept WHERE NAME = '財務部' OR NAME = '市場部'; SELECT * FROM emp WHERE dept_id = 3 OR dept_id = 2; -- 子查詢 SELECT * FROM emp WHERE dept_id IN (SELECT id FROM dept WHERE NAME = '財務部' OR NAME = '市場部');
  • 子查詢的結果是多行多列的:

    • 子查詢可以作為一張?zhí)摂M表參與查詢

      示例:

      -- 查詢員工入職日期是2011-11-11日之后的員工信息和部門信息 -- 子查詢 SELECT * FROM dept t1 ,(SELECT * FROM emp WHERE emp.`join_date` > '2011-11-11') t2 WHERE t1.id = t2.dept_id;-- 普通內連接 SELECT * FROM emp t1,dept t2 WHERE t1.`dept_id` = t2.`id` AND t1.`join_date` > '2011-11-11';
  • 總結

    以上是生活随笔為你收集整理的MySQL总结4_多表查询的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。