目錄
#1 視圖的介紹與作用
2 視圖的建立
修改視圖是指修改資料庫中已存在的表的定義。當基本表中的某些欄位發生變更時,
並不是所有的檢視都可以更新。可以在UPDATE、DELETE或INSERT等語句中使用視圖,以更新基本表的內容。對於可更新的視圖,在視圖中的行和基本表中的行之間必須具有一對一的關係,
#重命名視圖:
6.2 查询平均分最高的学校名称
首頁 資料庫 mysql教程 實例詳解MySQL資料庫視圖

實例詳解MySQL資料庫視圖

Jul 13, 2022 pm 12:10 PM
mysql

本篇文章為大家帶來了關於mysql的相關知識,其中主要整理了資料庫視圖的相關問題,包括了視圖的介紹與作用、視圖的創建、視圖的修改、視圖的更新、視圖的重新命名與刪除、視圖的練習等等內容,下面一起來看一下,希望對大家有幫助。

實例詳解MySQL資料庫視圖

推薦學習:mysql影片教學

#1 視圖的介紹與作用

檢視的介紹:

  • 視圖view 是一個虛擬表,非真實存在,其#本質是根據SQL語句取得動態的資料集,並為其命名, 使用者在使用時只需要使用視圖名稱即可取得結果集,並可以將其當作表格來使用。
  • 資料庫中只存放了視圖的定義,而並沒有存放視圖中的資料。 資料也存在於原來的資料表中。
  • 使用視圖查詢資料時,資料庫系統會從原來的表中取出對應的資料。因此, 視圖中的資料是依賴原來表中資料的。 當表格的資料改變,視圖中的資料也會隨之改變。

檢視的作用:

  • #簡化程式碼, 我們可以把重複使用的查詢封裝成視圖重複使用,同時可以使複雜的查詢易於理解;
  • #更安全,# 例如,如果有一張表中有很多數據,很多資訊不希望被其他人看到,這時就可以使用到視圖,對不同的使用者使用不同的視圖。

2 視圖的建立

建立視圖的語法如下:

create [or replace] [algorithm = {undefined | merge | temptable}]
view view_name [(column_list)]
as select_statement
[with [cascaded | local] check option]
登入後複製

參數說明:

  1. algorithm:# 表示視圖選擇的演算法,可選;
  2. ## view_name: 建立的視圖名稱;
  3. column_list: 指定視圖中各個屬性的名詞,預設與SELECT語句中查詢的屬性相同;
  4. select_statement: 表示一個完整的查詢語句,將查詢記錄匯入檢視中;
  5. ##[ with [cascaded | local] check option]: 表示更新視圖時要保證該視圖在權限範圍之內。
3 視圖的修改

修改視圖是指修改資料庫中已存在的表的定義。當基本表中的某些欄位發生變更時,

可以透過修改視圖來保持視圖和基本表之間的一致。

語法格式:

alter view 视图名 as select语句;
登入後複製

#4 視圖的更新

並不是所有的檢視都可以更新。可以在UPDATE、DELETE或INSERT等語句中使用視圖,以更新基本表的內容。對於可更新的視圖,在視圖中的行和基本表中的行之間必須具有一對一的關係,

如果視圖包含下述結構中的任何一種,則該視圖不可更新:

    聚合函數(SUM()、MIN()、MAX()等);
  • ##DISTINCT;
  • HAVING;
  • UNION或UNION ALL;
  • 位於選擇清單中的子查詢;
  • JOIN;
  • FROM子句中的不可更新視圖;
  • WHERE子句中的子查詢,引用FROM子句中的表;
  • 僅使用文字值(在該情況下,沒有要更新的基本表)。
注意:

視圖中雖然可以更新數據,但是有很多限制。 一般情況下,最好將視圖作為查詢資料的虛擬表,而不要透過視圖更新資料。
當真實表中修改了某個存在視圖中的欄位時,視圖需要更新,否則該視圖就會變成無效視圖!
5 視圖的重新命名與刪除


#重命名視圖:

rename table 视图名 to 新视图名;
登入後複製
刪除視圖:

drop view if exists 视图名;
登入後複製
刪除視圖時,只刪除了視圖的定義,而不會刪除真實表中的資料

如果想同時刪除多個視圖,則使用下面的語法格式:

drop view if exists 视图名1, 视图名2, 视图名3...;
登入後複製

6 視圖的練習


6.1 資料準備

#在進行練習時可以先根據下面程式碼建立用於練習的兩個基本表:

create table college(
    cno   int         null,
    cname varchar(20) null);
登入後複製
create table student(
    sid     int         null,
    name    varchar(20) null,
    gender  varchar(20) null,
    age     int         null,
    birth   date        null,
    address varchar(20) null,
    score   double      null);
登入後複製

两表的基本数据如下图所示:

實例詳解MySQL資料庫視圖

6.2 查询平均分最高的学校名称

结合之前学过的知识可以 尝试使用子查询和连接查询 来实现,参考代码如下:

SELECT cname
FROM (SELECT cname, rank() over (order by avg_score desc ) item
      FROM (SELECT cname, avg(score) avg_score
            FROM student
                     JOIN college ON sid = cno
            GROUP BY cname) t) tt
WHERE item = 1;
登入後複製

在上述代码中,先将student 与 college两表关联,将关联的查询作为子表,并根据子表进行平均数的排序,平均数序号为1的平均分数最高,再以此为子表进行子查询,查询出了平均分最高的学校。具体结果如下:
實例詳解MySQL資料庫視圖

这种方式虽然能够解决问题,但是相对复杂,不容易看懂,为了简化代码,我们可以将每一个子查询创建为一个视图

视图解决方式代码:

-- 1 视图一,连接两表并计算平均数
CREATE VIEW t_view AS
SELECT cname, avg(score) avg_score
FROM student
         JOIN college ON sid = cno
GROUP BY cname;

-- 2 视图二,利用视图一对平均分数进行排序标号
CREATE VIEW tt_view AS
SELECT cname, rank() over (order by avg_score desc ) item
FROM (t_view);

-- 3 利用视图查询
SELECT cname
FROM (tt_view)
WHERE item = 1;
登入後複製

在创建完视图后,如果想要查询平均分前三名学校,则方便很多,创建好的视图可以直接使用!

参考代码及结果:

SELECT cnameFROM (tt_view)WHERE item = 1
   OR item = 2
   OR item = 3;
登入後複製

實例詳解MySQL資料庫視圖

推荐学习:mysql视频教程

以上是實例詳解MySQL資料庫視圖的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

MySQL:世界上最受歡迎的數據庫的簡介 MySQL:世界上最受歡迎的數據庫的簡介 Apr 12, 2025 am 12:18 AM

MySQL是一種開源的關係型數據庫管理系統,主要用於快速、可靠地存儲和檢索數據。其工作原理包括客戶端請求、查詢解析、執行查詢和返回結果。使用示例包括創建表、插入和查詢數據,以及高級功能如JOIN操作。常見錯誤涉及SQL語法、數據類型和權限問題,優化建議包括使用索引、優化查詢和分錶分區。

apache怎麼連接數據庫 apache怎麼連接數據庫 Apr 13, 2025 pm 01:03 PM

Apache 連接數據庫需要以下步驟:安裝數據庫驅動程序。配置 web.xml 文件以創建連接池。創建 JDBC 數據源,指定連接設置。從 Java 代碼中使用 JDBC API 訪問數據庫,包括獲取連接、創建語句、綁定參數、執行查詢或更新以及處理結果。

MySQL的位置:數據庫和編程 MySQL的位置:數據庫和編程 Apr 13, 2025 am 12:18 AM

MySQL在數據庫和編程中的地位非常重要,它是一個開源的關係型數據庫管理系統,廣泛應用於各種應用場景。 1)MySQL提供高效的數據存儲、組織和檢索功能,支持Web、移動和企業級系統。 2)它使用客戶端-服務器架構,支持多種存儲引擎和索引優化。 3)基本用法包括創建表和插入數據,高級用法涉及多表JOIN和復雜查詢。 4)常見問題如SQL語法錯誤和性能問題可以通過EXPLAIN命令和慢查詢日誌調試。 5)性能優化方法包括合理使用索引、優化查詢和使用緩存,最佳實踐包括使用事務和PreparedStatemen

為什麼要使用mysql?利益和優勢 為什麼要使用mysql?利益和優勢 Apr 12, 2025 am 12:17 AM

選擇MySQL的原因是其性能、可靠性、易用性和社區支持。 1.MySQL提供高效的數據存儲和檢索功能,支持多種數據類型和高級查詢操作。 2.採用客戶端-服務器架構和多種存儲引擎,支持事務和查詢優化。 3.易於使用,支持多種操作系統和編程語言。 4.擁有強大的社區支持,提供豐富的資源和解決方案。

MySQL的角色:Web應用程序中的數據庫 MySQL的角色:Web應用程序中的數據庫 Apr 17, 2025 am 12:23 AM

MySQL在Web應用中的主要作用是存儲和管理數據。 1.MySQL高效處理用戶信息、產品目錄和交易記錄等數據。 2.通過SQL查詢,開發者能從數據庫提取信息生成動態內容。 3.MySQL基於客戶端-服務器模型工作,確保查詢速度可接受。

docker怎麼啟動mysql docker怎麼啟動mysql Apr 15, 2025 pm 12:09 PM

在 Docker 中啟動 MySQL 的過程包含以下步驟:拉取 MySQL 鏡像創建並啟動容器,設置根用戶密碼並映射端口驗證連接創建數據庫和用戶授予對數據庫的所有權限

laravel入門實例 laravel入門實例 Apr 18, 2025 pm 12:45 PM

Laravel 是一款 PHP 框架,用於輕鬆構建 Web 應用程序。它提供一系列強大的功能,包括:安裝: 使用 Composer 全局安裝 Laravel CLI,並在項目目錄中創建應用程序。路由: 在 routes/web.php 中定義 URL 和處理函數之間的關係。視圖: 在 resources/views 中創建視圖以呈現應用程序的界面。數據庫集成: 提供與 MySQL 等數據庫的開箱即用集成,並使用遷移來創建和修改表。模型和控制器: 模型表示數據庫實體,控制器處理 HTTP 請求。

解決數據庫連接問題:使用minii/db庫的實際案例 解決數據庫連接問題:使用minii/db庫的實際案例 Apr 18, 2025 am 07:09 AM

在開發一個小型應用時,我遇到了一個棘手的問題:需要快速集成一個輕量級的數據庫操作庫。嘗試了多個庫後,我發現它們要么功能過多,要么兼容性不佳。最終,我找到了minii/db,這是一個基於Yii2的簡化版本,完美地解決了我的問題。

See all articles