MySQL的視圖

一、MySQL視圖的介紹和作用

MySQL視圖,加油兄弟們,孰能生巧,完整代碼在最后!!!

視圖是一個虛擬的表,并不是真是存在的,視圖其實并沒有真實的數據,他只是根據一個sql語句獲取的一個數據集,并為其命名,視圖只是代表查出來的數據,如果想要找數據,還是需要從原來的數據里面去找。

原表的數據發生變化,視圖的數據也會發生變化

可以簡化代碼,把重復使用的查詢封裝成視圖重復使用,像子查詢里面的需要在寫一次查詢語句,使用視圖,代碼更簡單一點

可以使用視圖,讓不一樣的人看到的數據不一樣

二、創建視圖

數據添加

因為視圖是根據原來的表產生的,所以原來的表發生變化,視圖也會發生變化

比如原來表把名字改為ikun,視圖也會變化

三、修改視圖

四、更新視圖

更新視圖其實事實上還是更新的視圖所對應的原表的數據,并不是所有情況下都可以使用,會有一些限制,好多情況下都不可以更新

將視圖中的甘寧修改為周瑜,原表的甘寧也變成了周瑜

直接插入兩個數據就不可以,因為原表一行不止兩個數據

比如:視圖包含聚合函數不可更新

視圖包含distinct不可更新

總的來是:視圖包含以下不可更新:聚合函數,distinct,group by,having,union,union all,子查詢,join,常量文字值

視圖雖然可以更新,但是大部分不可以,一般來說不要想通過視圖去修改表,可能會導致數據更新失敗

五、刪除視圖和重命名視圖

記住刪除視圖,并不會刪除表的數據,他只是刪除了視圖的定義

六、練習

看起來很復雜,但是其實只是簡單的四層嵌套,第一層分組算平均數,第二層排序號,第三層找出序號為1的,第四層找出部門名稱

創建視圖,可以使代碼更加簡潔

七、總結

八、完整代碼

-- 創建視圖?
?
?create database mydb6_view;
?
USE mydb6_view;
CREATE TABLE dept(
?? ?deptno INT PRIMARY KEY,
? dname VARCHAR(20),
?? ?loc VARCHAR(20)
);
INSERT INTO dept VALUES(10, '教研部','北京'),
(20, '學工部','上海'),
(30, '銷售部','廣州'),
(40, '財務部','武漢');

CREATE TABLE emp(
?? ?empno INT PRIMARY KEY,
?? ?ename VARCHAR(20),
?? ?job VARCHAR(20),
?? ?mgr INT,
?? ?hiredate DATE,
?? ?sal NUMERIC(8,2),
?? ?comm NUMERIC(8, 2),
?? ?deptno INT,
-- ?? ?FOREIGN KEY (mgr) REFERENCES emp(empno),
?? ?FOREIGN KEY (deptno) REFERENCES dept(deptno) ON DELETE SET NULL ON UPDATE CASCADE
);
?
?INSERT INTO emp VALUES
(1001, '甘寧', '文員', 1013, '2000-12-17', 8000.00, NULL, 20),
(1002, '黛綺絲', '銷售員', 1006, '2001-02-20', 16000.00, 3000.00, 30),
(1003, '殷天正', '銷售員', 1006, '2001-02-22', 12500.00, 5000.00, 30),
(1004, '劉備', '經理', 1009, '2001-4-02', 29750.00, NULL, 20),
(1005, '謝遜', '銷售員', 1006, '2001-9-28', 12500.00, 14000.00, 30),
(1006, '關羽', '經理', 1009, '2001-05-01', 28500.00, NULL, 30),
(1007, '張飛', '經理', 1009, '2001-09-01', 24500.00, NULL, 10),
(1008, '諸葛亮', '分析師', 1004, '2007-04-19', 30000.00, NULL, 20),
(1009, '曾阿牛', '董事長', NULL, '2001-11-17', 50000.00, NULL, 10),
(1010, '韋一笑', '銷售員', 1006, '2001-09-08', 15000.00, 0.00, 30),
(1011, '周泰', '文員', 1008, '2007-05-23', 11000.00, NULL, 20),
(1012, '程普', '文員', 1006, '2001-12-03', 9500.00, NULL, 30),
(1013, '龐統', '分析師', 1004, '2001-12-03', 30000.00, NULL, 20),
(1014, '黃蓋', '文員', 1007, '2002-01-23', 13000.00, NULL, 10);
?
?use mydb6_view;
create or replace?
? view view1_emp
? as?
? select ename,job from emp;
?
-- 查看表和視圖
show tables;
-- 雖然是一個視圖,但是也是會當作一個表來查看
?
?
-- 查看表和視圖的類型
show full tables;
?
select * from view1_emp;
?

-- 修改視圖
alter view view1_emp
as?
select a.deptno,a.dname,a.loc,b.ename,b.sal from dept a,emp b where a.deptno = b.deptno;
?
select * from view1_emp;?
?
-- 更新視圖
create or replace view view1_emp
as?
select ename,job from emp;
?
select * from view1_emp;
?
update view1_emp set ename = '周瑜' where ename = '甘寧';

insert into view1_emp values('孫權','文員');

-- 視圖包含聚合函數不可更新
create or replace view ciew2_emp
AS
select count(*) cnt from emp;?
select * from ciew2_emp;
insert into ciew2_emp values(100);?
update ciew2_emp set cnt = 100;
?
?-- 視圖包含distinct不可更新
?create or replace view view2_emp
?AS
?select job from emp;
?select * from view2_emp;
?insert into view2_emp values('小雞');
?
?
?create or replace view view3_emp
?AS
?select deptno,count(*) cnt from emp group by deptno having cnt > 2;
?select * from view3_emp;
?insert into view3_emp values(30,100);
?
?-- union 就是把兩個表拼一起
?create or replace view view4_emp
?AS
?select empno,ename from emp where empno <= 1005
?union?
?select empno,ename from emp where empno > 1005;
?select * from view4_emp;
?insert into view4_emp values(1003,'小');
?
?
?-- 重命名視圖
?rename table view1_emp to myview1;
?
?
?-- 刪除視圖
?drop view if exists myview1;
?
?
?-- 查詢部門平均薪水最高的部門名稱
? SELECT
? ? a.deptno,
? ? a.dname,
? ? a.loc,
? ? avg_sal
? FROM
? ? dept a,
? ? (
? ? ? SELECT
? ? ? ? *
? ? ? FROM
? ? ? ? (
? ? ? ? ? SELECT
? ? ? ? ? ? *,
? ? ? ? ? ? rank() over (ORDER BY avg_sal DESC) rn
? ? ? ? ? FROM
? ? ? ? ? ? (SELECT deptno, avg(sal) avg_sal FROM emp GROUP BY deptno) t
? ? ? ? ) tt
? ? ? WHERE
? ? ? ? rn = 1
? ? ) ttt
? WHERE
? ? a.deptno = ttt.deptno;
?-- ---------------------------- 視圖---------
?create view test_view1
?as?
?select deptno,avg(sal) avg_sal from emp group by deptno;
?
?create view test_view2?
?AS
?select *,rank() over(order by avg_sal desc) rn from test_view1;
?
?create view test_view3
?as?
?select * from test_view2 tt where rn = 1;
?
?select * from test_view3;
?-- 使用視圖簡化后
?select a.deptno,a.dname,a.loc,avg_sal
?from dept a,test_view3 ttt?
?where a.deptno = ttt.deptno;
?
?create view view1
?as?
? ?SELECT
? ? a.deptno,
? ? a.dname,
? ? a.loc,
? ? avg_sal
? FROM
? ? dept a,
? ? (
? ? ? SELECT
? ? ? ? *
? ? ? FROM
? ? ? ? (
? ? ? ? ? SELECT
? ? ? ? ? ? *,
? ? ? ? ? ? rank() over (ORDER BY avg_sal DESC) rn
? ? ? ? ? FROM
? ? ? ? ? ? (SELECT deptno, avg(sal) avg_sal FROM emp GROUP BY deptno) t
? ? ? ? ) tt
? ? ? WHERE
? ? ? ? rn = 1
? ? ) ttt
? WHERE
? ? a.deptno = ttt.deptno;
? ??
select * from view1;


?-- 查詢員工比所屬領導薪資高的部門名、員工名、員工領導編號
?create view test_view4
?AS
?select a.ename ename,a.sal esal,b.ename mgrname,b.sal msal,a.deptno from emp a,emp b where a.mgr = b.empno and a.sal > b.sal;
?select * from test_view4;
?select * from dept a join test_view4 b on a.deptno = b.deptno;
?
?
?-- ?查詢工資等級為4級,2000年以后入職的工作地點為上海的員工編號、姓名和工資,并查詢出薪資在前三名的員工信息
?create view test_view5
?as?
?select a.deptno,a.dname,a.loc,b.empno,b.ename,b.sal from dept a join emp b on a.deptno = b.deptno and b.sal between '20010' and '30000' and year(hiredate) > '2000' and a.loc = '上海';
? select * from test_view5;
??
?select * from?
?(
?select *,rank() over(order by sal desc) rn?
?from test_view5
?)t?
?where rn <= 3;
?
?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/80207.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/80207.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/80207.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Scala與Go的異同教程

當瑞士軍刀遇到電鋸&#xff1a;Scala vs Go的相愛相殺之旅 各位準備禿頭的程序猿們&#xff08;放心&#xff0c;用Go和Scala不會加重你的發際線問題&#xff09;&#xff0c;今天我們來聊聊編程界的"冰與火之歌"——Scala和Go的異同。準備好瓜子飲料&#xff0c;我…

SaaS場快訂平臺項目說明【持續更新】

一、項目介紹 SaaS場快訂平臺是一個高效、便捷的體育場館在線預訂平臺。本項目采用SaaS方式開發&#xff0c;用戶不需要安裝軟件&#xff0c;直接通過互聯網訪問在線程序即可使用。本項目主要構建了一個體育館預訂系統&#xff0c;項目的功能主要包括&#xff1a;用戶注冊與登…

linux中常用的命令(三)

目錄 1- ls(查看當前目錄下的內容) 2- pwd (查看當前所在的文件夾) 3- cd [目錄名]&#xff08;切換文件夾&#xff09; 4- touch [文件名] &#xff08;如果文件不存在&#xff0c;新建文件&#xff09; 5- mkdir[目錄名] &#xff08;創建目錄&#xff09; 6-rm[文件名]&…

使用Simulink開發Autosar Nvm存儲邏輯

文章目錄 前言Autosar Nvm接口設計模型及接口生成代碼及arxmlRTE接口mappingRTE代碼分析總結 前言 之前介紹過Simulink開發Dem故障觸發邏輯&#xff0c;本文接著介紹另外一個常用的功能-Nvm存儲的實現。 Autosar Nvm接口 Autosar Nvm中一般在上電初始化的時調用Nvm_ReadAll獲…

Java—— 泛型詳解

泛型概述 泛型是JDK5中引入的特性&#xff0c;可以在編譯階段約束操作的數據類型&#xff0c;并進行檢查。 泛型的格式&#xff1a;<數據類型> 注意&#xff1a;泛型只能支持引用數據類型。 泛型的好處 沒有泛型的時候&#xff0c;可以往集合中添加任意類型的數據&#x…

通俗的橋接模式

橋接模式&#xff08;Bridge Pattern&#xff09; 就像一座橋&#xff0c;把兩個原本獨立變化的東西連接起來&#xff0c;讓它們可以各自自由變化&#xff0c;互不干擾。簡單來說&#xff0c;就是 “把抽象和實現分開&#xff0c;用組合代替繼承”。 一句話理解橋接模式 假設你…

【現代深度學習技術】注意力機制04:Bahdanau注意力

【作者主頁】Francek Chen 【專欄介紹】 ? ? ?PyTorch深度學習 ? ? ? 深度學習 (DL, Deep Learning) 特指基于深層神經網絡模型和方法的機器學習。它是在統計機器學習、人工神經網絡等算法模型基礎上&#xff0c;結合當代大數據和大算力的發展而發展出來的。深度學習最重…

爬蟲學習————開始

&#x1f33f;自動化的思想 任何領域的發展原因————“不斷追求生產方式的改革&#xff0c;即使得付出與耗費精力越來愈少&#xff0c;而收獲最大化”。由此&#xff0c;創造出方法和設備來提升效率。 如新聞的5W原則直接讓思考過程規范化、流程化。或者前端框架/后端輪子的…

每天五分鐘機器學習:KTT條件

本文重點 在前面的課程中,我們學習了拉格朗日乘數法求解等式約束下函數極值,如果約束不是等式而是不等式呢?此時就需要KTT條件出手了,KTT條件是拉格朗日乘數法的推廣。KTT條件不僅統一了等式約束與不等式約束的優化問題求解范式,KTT條件給出了這類問題取得極值的一階必要…

leetcode0829. 連續整數求和-hard

1 題目&#xff1a; 連續整數求和 官方標定難度&#xff1a;難 給定一個正整數 n&#xff0c;返回 連續正整數滿足所有數字之和為 n 的組數 。 示例 1: 輸入: n 5 輸出: 2 解釋: 5 2 3&#xff0c;共有兩組連續整數([5],[2,3])求和后為 5。 示例 2: 輸入: n 9 輸出: …

window 顯示驅動開發-線性伸縮空間段

線性伸縮空間段類似于線性內存空間段。 但是&#xff0c;伸縮空間段只是地址空間&#xff0c;不能容納位。 若要保存位&#xff0c;必須分配系統內存頁&#xff0c;并且必須重定向地址空間范圍以引用這些頁面。 內核模式顯示微型端口驅動程序&#xff08;KMD&#xff09;必須實…

Cadence 高速系統設計流程及工具使用三

5.8 約束規則的應用 5.8.1 層次化約束關系 在應用約束規則之前&#xff0c;我們首先要了解這些約束規則是如何作用在 Cadence 設計對象上的。Cadence 中對設計對象的劃分和概念&#xff0c;如表 5-11 所示。 在 Cadence 系統中&#xff0c;把設計對象按層次進行了劃分&#…

ScaleTransition 是 Flutter 中的一個動畫組件,用于實現縮放動畫效果。

ScaleTransition 是 Flutter 中的一個動畫組件&#xff0c;用于實現縮放動畫效果。它允許你對子組件進行動態的縮放變換&#xff0c;從而實現平滑的動畫效果。ScaleTransition 通常與 AnimationController 和 Tween 一起使用&#xff0c;以控制動畫的開始、結束和過渡效果。 基…

深入解析:如何基于開源p-net快速開發Profinet從站服務

一、Profinet協議與軟協議棧技術解析 1.1 工業通信的"高速公路" Profinet作為工業以太網協議三巨頭之一,采用IEEE 802.3標準實現實時通信,具有: 實時分級:支持RT(實時)和IRT(等時實時)通信模式拓撲靈活:支持星型、樹型、環型等多種網絡結構對象模型:基于…

m個n維向量組中m,n的含義與空間的關系

向量的維度與空間的關系&#xff1a; 一個向量的維度由其分量個數決定&#xff0c;例如 ( n ) 個分量的向量屬于 Rn空間 。 向量組張成空間的維度&#xff1a; 當向量組有 ( m ) 個線性無關的 ( n ) 維向量時&#xff1a; 若 ( m < n )&#xff1a; 這些向量張成的是 Rn中的…

excel大表導入數據庫

前文介紹了數據量較小的excel表導入數據庫的方法&#xff0c;在數據量較大的情況下就不太適合了&#xff0c;一個是因為mysql命令的執行串長度有限制&#xff0c;二是node-xlsx這個模塊加載excel文件是整個文件全部加載到內存&#xff0c;在excel文件較大和可用內存受限的場景就…

Python 爬蟲基礎入門教程(超詳細)

一、什么是爬蟲&#xff1f; 網絡爬蟲&#xff08;Web Crawler&#xff09;&#xff0c;又稱網頁蜘蛛&#xff0c;是一種自動抓取互聯網信息的程序。爬蟲會模擬人的瀏覽行為&#xff0c;向網站發送請求&#xff0c;然后獲取網頁內容并提取有用的數據。 二、Python爬蟲的基本原…

Spring Security 深度解析:打造堅不可摧的用戶認證與授權系統

Spring Security 深度解析&#xff1a;打造堅不可摧的用戶認證與授權系統 一、引言 在當今數字化時代&#xff0c;構建安全可靠的用戶認證與授權系統是軟件開發中的關鍵任務。Spring Security 作為一款功能強大的 Java 安全框架&#xff0c;為開發者提供了全面的解決方案。本…

【物聯網】基于樹莓派的物聯網開發【1】——初識樹莓派

使用背景 物聯網開發從0到1研究&#xff0c;以樹莓派為基礎 場景介紹 系統學習Linux、Python、WEB全棧、各種傳感器和硬件 接下來程序貓將帶領大家進軍物聯網世界&#xff0c;從0開始入門研究樹莓派。 認識樹莓派 正面圖示&#xff1a; 1&#xff1a;樹莓派簡介 樹莓派…

第21節:深度學習基礎-激活函數比較(ReLU, Sigmoid, Tanh)

1. 引言 在深度學習領域,激活函數是神經網絡中至關重要的組成部分 它決定了神經元是否應該被激活以及如何將輸入信號轉換為輸出信號 激活函數為神經網絡引入了非線性因素,使其能夠學習并執行復雜的任務 沒有激活函數,無論神經網絡有多少層,都只能表示線性變換,極大地限…