day06-多表查詢02

来源:https://www.cnblogs.com/liyuelian/archive/2022/10/06/16758516.html
-Advertisement-
Play Games

多表查詢02 4.表複製 自我複製數據(蠕蟲複製) 有時,為了對某個sql語句進行效率測試,我們需要海量數據時,可以用此法為表創建海量數據 -- 為了對某個sql語句進行效率測試,我們需要海量數據時,可以用此法為表創建海量數據 CREATE TABLE my_tab01( id INT , `nam ...


多表查詢02

4.表複製

  • 自我複製數據(蠕蟲複製)

有時,為了對某個sql語句進行效率測試,我們需要海量數據時,可以用此法為表創建海量數據

-- 為了對某個sql語句進行效率測試,我們需要海量數據時,可以用此法為表創建海量數據

CREATE TABLE my_tab01(
	id INT ,
	`name` VARCHAR(32),
	sal DOUBLE,
	job VARCHAR(32),
	deptno INT
	)
	
DESC my_tab01
SELECT * FROM my_tab01

-- 演示如何自我複製
-- 1.先把emp表的記錄複製到my_tab01
INSERT INTO my_tab01
	(id,`name`,sal,job,deptno)
	SELECT empno,ename,sal,job,deptno FROM emp;
	
-- 2.自我複製
INSERT INTO my_tab01
	SELECT * FROM my_tab01;

SELECT COUNT(*) FROM my_tab01;
image-20221006174155021 image-20221006174200172 image-20221006174205629 image-20221006174252650

.....

image-20221006174357492 image-20221006174516944
  • 思考:如何刪掉一張表的重覆記錄
-- 如何刪掉一張表的重覆記錄
-- 1.先創建一張表 my_tab02
CREATE TABLE my_tab02 LIKE emp; -- 這個語句將 emp表的結構(列),複製到my_tab02
DESC my_tab02;
-- 2.讓my_tab02 有重覆的記錄
INSERT INTO my_tab02 
	SELECT * FROM emp;
	
SELECT * FROM my_tab02;

-- 3.考慮去重
/*
	思路:
	(1)先創建一張臨時表 my_tmp,該表的結構和 my_tab02 一樣
	(2)把 my_tab02 的記錄通過 distinct 關鍵字處理後,把記錄複製到 my_tmp
	(3)清除掉 my_tab02 的記錄
	(4)把 my_tmp 的記錄複製到 my_tab02 中
	(5)drop 掉 my_tmp表
*/
-- 3.1 先創建一張臨時表 my_tmp,該表的結構和 my_tab02 一樣
CREATE TABLE my_tmp LIKE my_tab02;
-- 3.2 把 my_tab02 的記錄通過 distinct 關鍵字處理後,把記錄複製到 my_tmp
INSERT INTO my_tmp 
	SELECT DISTINCT * FROM my_tab02;
-- 3.3 清除掉 my_tab02 的記錄
DELETE FROM my_tab02;
-- 3.4 把 my_tmp 的記錄複製到 my_tab02 中
INSERT INTO my_tab02
	SELECT * FROM my_tmp;
-- 3.5 drop 掉 my_tmp表
DROP TABLE my_tmp;

SELECT * FROM my_tab02;
image-20221006182000102

5.合併查詢

  • 介紹

有時候在實際應用中,為了合併多條select語句的結果,可以使用集合操作符號union、union all、

5.1union all

該操作符用於取得兩個結果集的集。當使用該操作符時,不會取消重覆行

image-20221006183411014 image-20221006183321973

5.2union

該操作符與union all相似。但是會自動去掉結果集中的重覆行

image-20221006183534971 image-20221006183600851

6.外連接

前面我們學習的查詢,是利用where子句對兩張表或者多張表,形成的笛卡爾集進行篩選,根據關聯條件,顯示所有匹配的記錄,匹配不上的就不顯示

比如:列出部門名稱和這些部門的員工名稱和工作,同時要求顯示出那些沒有員工的部門

-- 外連接
-- 比如:列出部門名稱和這些部門的員工名稱和工作,同時要求顯示出那些沒有員工的部門

-- 使用我們學過的多表查詢的SQL,看看效果如何?
SELECT dname,ename,job
	FROM emp,dept
	WHERE emp.deptno = dept.deptno
	ORDER BY dname
-- 原先的辦法只能顯示有員工的記錄,如果有一個部門沒有員工,就無法顯示該部門

如下:只能顯示三個部門

image-20221006194634553

這時候就需要用到外連接

  • 外連接
  1. 左外連接(如果左側的表完全顯示,我們就說是左外鏈接)

    select ... from 表1 left join 表2 on 條件
    

    表1就是左表 ,表2就是右表

    左側的表完全顯示是指,即使左邊的表跟右邊的表沒有匹配上,也會將左側的表完全顯示

  2. 右外連接(如果右側的表完全顯示,我們就說是右外鏈接)

    select ... from 表1 right join 表2 on 條件
    

    表1為左表 ,表2為右表

    右側的表完全顯示是指,即使右邊的表跟左邊的表沒有匹配上,也會將右側的表完全顯示

例子

先創建兩張表stu,exam

-- 創建 stu
CREATE TABLE stu(
	id INT,
	`name` VARCHAR(32)
);
INSERT INTO stu VALUES(1,'jack'),(2,'tom'),(3,'kity'),(4,'nono');
SELECT * FROM stu;
-- 創建 exam
CREATE TABLE exam(
	id INT,
	grade INT
);
INSERT INTO exam VALUES(1,56),(2,76),(11,8);
SELECT * FROM exam;

image-20221006200302805image-20221006200349190

要求1:使用左連接(顯示所有人的成績,如果沒有成績,也要顯示該人的姓名和id號 )

-- 使用左連接
-- (顯示所有人的成績,如果沒有成績,也要顯示該人的姓名和id號)
SELECT `name`,stu.id,grade
	FROM stu,exam
	WHERE stu.id = exam.id

-- 改成左外連接
SELECT `name`,stu.id,grade
	FROM stu LEFT JOIN exam
	ON stu.id = exam.id
image-20221006204806757

要求2:右連接(顯示所有成績,如果沒有名字匹配就顯示空)

-- 右外連接
SELECT `name`,stu.id,grade
	FROM stu RIGHT JOIN exam
	ON stu.id = exam.id
image-20221006205057034

例子2

列出部門名稱和這些部門的員工信息(名字和工作),同時列出那些沒有員工的部門

  1. 使用左外連接實現
  2. 使用右外連接實現
-- 列出部門名稱和這些部門的員工信息(名字和工作),同時列出那些沒有員工的部門
-- 1. 使用左外連接實現
SELECT dname,ename,job
	FROM dept LEFT JOIN emp
	ON dept.deptno = emp.deptno

-- 2. 使用右外連接實現
SELECT dname,ename,job
	FROM emp RIGHT JOIN dept
	ON dept.deptno = emp.deptno
image-20221006210249311

在實際的開發中絕大多數情況下使用的是前面學過的連接


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 想象你的電腦上跑著機器學習,但是你又想聽歌,但是你的電腦只有一個CPU,如果把所有的CPU資源都拿去跑機器學習的話,你必須等程式跑完之後才能聽歌。但是現實是,你可以在機器學習程式運行的時候放著自己喜歡的歌,甚至還可以打開微信聊天。這就是操作系統一個很重要的功能,那就是操作系統需要支持多個進程同時 ...
  • 痞子衡嵌入式半月刊: 第 64 期 這裡分享嵌入式領域有用有趣的項目/工具以及一些熱點新聞,農曆年分二十四節氣,希望在每個交節之日準時發佈一期。 本期刊是開源項目(GitHub: JayHeng/pzh-mcu-bi-weekly),歡迎提交 issue,投稿或推薦你知道的嵌入式那些事兒。 上期回顧 ...
  • 事務 四大屬性 1,原子性:事務是一個完整的整體,要麼都執行,要麼都不執行 2,一致性:當事務完成時,數據必須處於一致狀態 3,隔離性:對數據修改的所有併發事務是彼此隔離的,即事務必須是獨立的,不應以任何方式依賴於或影響其他 4,永久性:事務完成後,對資料庫的操作永久保留 事務控制 BEGIN:開始 ...
  • MySQL約束 基本介紹 約束用於確保資料庫的數據滿足特定的商業規則 在mysql中,約束包括:not null,unique,primary key,foreign key 和check 5種 1.primary key(主鍵) 欄位名 欄位類型 primary key 用於唯一地標識表行的數據, ...
  • 一、什麼是關係型和非關係型資料庫,兩者都包含那種資料庫 1、關係型資料庫 關係型資料庫是指採用了關係模型來組織數據的資料庫。簡單來說,關係模式就是二維表格模型。 常見關係型資料庫管理系統(ORDBMS): Oracle、MySql、Microsoft SQL Server、 SQLite、Postg ...
  • 一、CentOS 7.9 安裝 redis-6.2.0 1 下載地址:https://download.redis.io/releases/redis-6.2.0.tar.gz 2 安裝gcc來進行編譯 Redis 由 C語言編寫,所以需要系統中有 gcc 編譯器 使用 gcc --version  ...
  • 一、CentOS 7.9 安裝 mongodb5.0.13 1 下載地址:https://www.mongodb.com/try/download/community2 2 安裝前的準備 # 操作系統內核版本 uname -a # 操作系統發行版本 cat /etc/redhat-release 3 ...
  • 一、CentOS 7.9 安裝 mysql-5.7.35 1 下載地址:https://downloads.mysql.com/archives/community/ 2 mysql-5.7.35 安裝包上傳到linux伺服器 使用Xftp 或者 wget 在伺服器上下載 # 推薦使用wget yu ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...