国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

mysql高級語句之視圖、連接查詢與存儲過程

這篇具有很好參考價值的文章主要介紹了mysql高級語句之視圖、連接查詢與存儲過程。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

視圖

視圖和表的區(qū)別

視圖和表的聯(lián)系

視圖命令

視圖特點

NULL 值

null、空值和零的區(qū)別

連接查詢

內(nèi)連接

左連接

右連接

存儲過程

概述

簡介

存儲過程的優(yōu)點

語法

調(diào)用存儲過程

存儲過程的參數(shù)

查看存儲過程

查看指定存儲過程信息

修改存儲過程

刪除存儲過程


視圖

數(shù)據(jù)庫中的虛擬表,這張?zhí)摂M表中不包含真實數(shù)據(jù),只是做了真實數(shù)據(jù)的映射
視圖可以理解為鏡花水月/倒影,動態(tài)保存結(jié)果集(數(shù)據(jù))

作用場景:針對不同的人(權限身份),提供不同結(jié)果集的“表”(以表格的形式展示)

作用范圍:
select * from info;? ? ? ? ? ? ? ? ? #展示的部分是info表
select * from view_name;? ? ?#展示的一張或多張表?

功能:
簡化查詢結(jié)果集、靈活查詢、可以針對不同用戶呈現(xiàn)不同結(jié)果集、相對有更高的安全性
本質(zhì)而言視圖是一種select(結(jié)果集的呈現(xiàn))

PS:視圖適合于多表連接瀏覽時使用!不適合增、刪、改
而存儲過程適合于使用較頻繁的SQL語句,這樣可以提高執(zhí)行效率!

視圖和表的區(qū)別

1.視圖是已經(jīng)編譯好的sql語句。而表不是

2.視圖沒有實際的物理記錄。而表有。
show table status\G

3.表只用物理空間而視圖不占用物理空間,視圖只是邏輯概念的存在,表可以及時對它進行修改,但視圖只能有創(chuàng)建的語句來修改

4.視圖是查看數(shù)據(jù)表的一種方法,可以查詢數(shù)據(jù)表中某些字段構(gòu)成的數(shù)據(jù),只是一些SQL語句的集合。從安全的角度說,視圖可以不給用戶接觸數(shù)據(jù)表,從而不知道表結(jié)構(gòu)。

5.表屬于全局模式中的表,是實表;視圖屬于局部模式的表,是虛表。

6.視圖的建立和刪除只影響視圖本身,不影響對應的基本表。(但是更新視圖數(shù)據(jù),是會影響到基本表的)

視圖和表的聯(lián)系

視圖(view)是在基本表之上建立的表,它的結(jié)構(gòu)(即所定義的列)和內(nèi)容(即所有數(shù)據(jù)行)都來自基本表,它依據(jù)基本表存在而存在。一個視圖可以對應一個基本表,也可以對應多個基本表。視圖是基本表的抽象和在邏輯意義上建立的新關系。

視圖命令

創(chuàng)建視圖(單表)

create view v_name as select?列名 from?表名

查看表狀態(tài)?

show table status\G

視圖特點

修改表不能修改以函數(shù)、復合函數(shù)方式計算出來的字段
查詢方便、安全性
查詢方便:索引速度快、同時可以多表查詢更為迅速(視圖不保存真實數(shù)據(jù),視圖本質(zhì)類似select)
安全性:我們實現(xiàn)登陸的賬戶是root 所擁有權限 ,視圖無法顯示完整的約束

NULL 值

在 SQL 語句使用過程中,經(jīng)常會碰到 NULL 這幾個字符。通常使用 NULL 來表示缺失 的值,也就是在表中該字段是沒有值的。如果在創(chuàng)建表時,限制某些字段不為空,則可以使用 NOT NULL 關鍵字,不使用則默認可以為空。在向表內(nèi)插入記錄或者更新記錄時,如果該字段沒有 NOT NULL 并且沒有值,這時候新記錄的該字段將被保存為 NULL。需要注意 的是,NULL 值與數(shù)字 0 或者空白(spaces)的字段是不同的,值為 NULL 的字段是沒有 值的。在 SQL 語句中,使用 IS NULL 可以判斷表內(nèi)的某個字段是不是 NULL 值,相反的用 IS NOT NULL 可以判斷不是 NULL 值。

null、空值和零的區(qū)別

1、對象的內(nèi)容不同

null表示對象的內(nèi)容為空,即對象的內(nèi)容是空白的。

空值表示對象的內(nèi)容無法確定。

零表示對象的內(nèi)容確定為零。

2、對象的值不同

null表示對象計算中具有保留的值,用于指示指針不引用有效對象。

空值表示值未知,空值一般表示數(shù)據(jù)未知、不適用或?qū)⒃谝院筇砑訑?shù)據(jù)。

零表示對象的值等于零。

連接查詢

MySQL 的連接查詢,通常都是將來自兩個或多個表的記錄行結(jié)合起來,基于這些表之間的 共同字段,進行數(shù)據(jù)的拼接。首先,要確定一個主表作為結(jié)果集,然后將其他表的行有選擇 性的連接到選定的主表結(jié)果集上。使用較多的連接查詢包括:內(nèi)連接、左連接和右連接

內(nèi)連接

MySQL 中的內(nèi)連接就是兩張或多張表中同時符合某種條件的數(shù)據(jù)記錄的組合。通常在 FROM 子句中使用關鍵字 INNER JOIN 來連接多張表,并使用 ON 子句設置連接條件,內(nèi)連接是系統(tǒng)默認的表連接,所以在 FROM 子句后可以省略 INNER 關鍵字,只使用 關鍵字 JOIN。同時有多個表時,也可以連續(xù)使用 INNER JOIN 來實現(xiàn)多表的內(nèi)連接,不過為了更好的性能,建議最好不要超過三個表

語法

SELECT column_name(s)FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name;

內(nèi)連查詢:通過inner join 的方式將兩張表指定的相同字段的記錄行輸出出來
面試時,直接了當?shù)恼f 用inner join 就可以

左連接

左連接也可以被稱為左外連接,在 FROM 子句中使用 LEFT JOIN 或者 LEFT OUTER JOIN 關鍵字來表示。左連接以左側(cè)表為基礎表,接收左表的所有行,并用這些行與右側(cè)參 考表中的記錄進行匹配,也就是說匹配左表中的所有行以及右表中符合條件的行。

SELECT column_name(s)FROM table1 LEFT JOIN table2 ON table1.column_name = table2.column_name;

左連接中左表的記錄將會全部表示出來,而右表只會顯示符合搜索條件的記錄,右表記錄不足的地方均為 NULL。?

右連接

右連接也被稱為右外連接,在 FROM 子句中使用 RIGHT JOIN 或者 RIGHT OUTER JOIN 關鍵字來表示。右連接跟左連接正好相反,它是以右表為基礎表,用于接收右表中的所有行,并用這些記錄與左表中的行進行匹配

SELECT column_name(s)FROM table1 RIGHT JOIN table2 ON table1.column_name = table2.column_name;

在右連接的查詢結(jié)果集中,除了符合匹配規(guī)則的行外,還包括右表中有但是左表中不匹 配的行,這些記錄在左表中以 NULL 補足

存儲過程

概述


前面學習的 MySQL 相關知識都是針對一個表或幾個表的單條 SQL 語句,使用這樣的SQL 語句雖然可以完成用戶的需求,但在實際的數(shù)據(jù)庫應用中,有些數(shù)據(jù)庫操作可能會非常復雜,可能會需要多條 SQL 語句一起去處理才能夠完成,這時候就可以使用存儲過程, 輕松而高效的去完成這個需求,有點類似shell腳本里的函數(shù)

簡介

1、存儲過程是一組為了完成特定功能的SQL語句集合。 ?兩個點 第一 觸發(fā)器(定時任務) 第二個判斷?
2、存儲過程這個功能是從5.0版本才開始支持的,它可以加快數(shù)據(jù)庫的處理速度,增強數(shù)據(jù)庫在實際應用中的靈活性。存儲過程在使用過程中是將常用或者復雜的工作預先使用SQL語句寫好并用一個指定的名稱存儲起來,這個過程經(jīng)編譯和優(yōu)化后存儲在數(shù)據(jù)庫服務器中。當需要使用該存儲過程時,只需要調(diào)用它即可。操作數(shù)據(jù)庫的傳統(tǒng) SQL 語句在執(zhí)行時需要先編譯,然后再去執(zhí)行,跟存儲過程一對比,明顯存儲過程在執(zhí)行上速度更快,效率更高
存儲過程在數(shù)據(jù)庫中L 創(chuàng)建并保存,它不僅僅是 SQL語句的集合,還可以加入一些特殊的控制結(jié)構(gòu),也可以控制數(shù)據(jù)的訪問方式。存儲過程的應用范圍很廣,例如封裝特定的功能、 在不同的應用程序或平臺上執(zhí)行相同的函數(shù)等等。

存儲過程的優(yōu)點

1.執(zhí)行一次后,會將生成的二進制代碼駐留緩沖區(qū),提高執(zhí)行效率
2.SQL語句加上控制語句的集合,靈活性高
3.在服務器端存儲,客戶端調(diào)用時,降低網(wǎng)絡負載
4.可多次重復被調(diào)用,可隨時修改,不影響客戶端調(diào)用
5.可完成所有的數(shù)據(jù)庫操作,也可控制數(shù)據(jù)庫的信息訪問權限

語法

CREATE PROCEDURE <過程名> ( [過程參數(shù)[,…] ] ) <過程體>

[過程參數(shù)[,…] ] 格式
<過程名>:盡量避免與內(nèi)置的函數(shù)或字段重名
<過程體>:語句
[ IN | OUT | INOUT ] <參數(shù)名><類型>

創(chuàng)建存儲過程

DELIMITER $$?? ??? ??? ??? ??? ??? ??? ?#將語句的結(jié)束符號從分號;臨時改為兩個$$(可以自定義)
CREATE PROCEDURE Proc()?? ??? ??? ??? ??? ?#創(chuàng)建存儲過程,過程名為Proc,不帶參數(shù)
-> BEGIN?? ??? ??? ??? ??? ??? ??? ??? ?#過程體以關鍵字 BEGIN 開始
-->過程體語句
--> END $$								#過程體以關鍵字 END 結(jié)束
DELIMITER ;								#將語句的結(jié)束符號恢復為分號

調(diào)用存儲過程

CALL Proc();

1. 存儲過程的主體都分,被稱為過程體
2.以BEGIN開始,以END結(jié)束,若只有一條sQL語句,則可以省略BEGIN-END
3.以DELIMITER開始和結(jié)束 ?
DEL工M工TER $$ ? ? ?$$是用戶自定義的結(jié)束符?
省略存儲過程其他步驟
DELIMITER ; ?分號前有空格

存儲過程的參數(shù)

IN 輸入?yún)?shù):表示調(diào)用者向過程傳入值(傳入值可以是字面量或變量)
OUT 輸出參數(shù):表示過程向調(diào)用者傳出值(可以返回多個值)(傳出值只能是變量)
INOUT 輸入輸出參數(shù):既表示調(diào)用者向過程傳入值,又表示過程向調(diào)用者傳出值(值只能是變量)

即表示調(diào)用者向過程傳入值,又表示過程向調(diào)用者傳出值(只能是變量)

查看存儲過程

SHOW PROCEDURE STATUS

查看指定存儲過程信息

mysql> SHOW PROCEDURE STATUS like '%proc%'\G

修改存儲過程

ALTER PROCEDURE <過程名>[<特征>... ]
ALTER PROCEDURE GetRole MODIFIES SQL DATA SQL SECURITY INVOKER;

MODIFIES sQLDATA:表明子程序包含寫數(shù)據(jù)的語句
SECURITY:安全等級
invoker:當定義為INVOKER時,只要執(zhí)行者有執(zhí)行權限,就可以成功執(zhí)行。

刪除存儲過程

存儲過程內(nèi)容的修改方法是通過刪除原有存儲過程,之后再以相同的名稱創(chuàng)建新的存儲過程。文章來源地址http://www.zghlxwxcb.cn/news/detail-694044.html

DROP PROCEDURE IF EXISTS Proc;

到了這里,關于mysql高級語句之視圖、連接查詢與存儲過程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 4.2.1 SQL語句、索引、視圖、存儲過程

    怎么執(zhí)行一條select語句 1.連接器 接收連接-》管理連接-》校驗用戶信息 2.查詢緩存 kv存儲,命中直接返回,否則繼續(xù)執(zhí)行 8.0已經(jīng)刪除 3.分析器 詞法句法分析生成語法樹 4.優(yōu)化器 指定執(zhí)行計劃,選擇查詢成本最小的計劃 5.執(zhí)行器 根據(jù)執(zhí)行計劃,從存儲引擎獲取數(shù)據(jù),并返回客

    2024年02月06日
    瀏覽(28)
  • 【Mysql】X-DOC:Mysql數(shù)據(jù)庫大量數(shù)據(jù)查詢加速(定時JOB和存儲過程應用案例)

    【Mysql】X-DOC:Mysql數(shù)據(jù)庫大量數(shù)據(jù)查詢加速(定時JOB和存儲過程應用案例)

    在某中臺系統(tǒng)中,設計了大量的基礎數(shù)據(jù)(維度數(shù)據(jù)、維度映射關系等)來支撐業(yè)務功能,業(yè)務表中存在大量的維度外鍵關聯(lián)字段,其優(yōu)點是可以實現(xiàn)前端的選擇錄入,數(shù)據(jù)校驗,確保錄入數(shù)據(jù)的準確性;缺點是在做業(yè)務報表時,需要做大量的維度關聯(lián)(join)操作。 受限于

    2024年02月12日
    瀏覽(23)
  • MySQL(視圖,存儲函數(shù),存儲過程)

    MySQL(視圖,存儲函數(shù),存儲過程)

    作業(yè)1: ?作業(yè)實現(xiàn): 首先創(chuàng)建學生表,課程表,以及學生選課表。 ?1.用SQL語句創(chuàng)建學生表student,定義主鍵,姓名不能重名,性別只能輸入男或女,所在系的默認值是 “計算機”。 2.修改student 表中年齡(age)字段屬性,數(shù)據(jù)類型由int 改變?yōu)閟mallint。 3.為SC表建立按學號(

    2024年01月21日
    瀏覽(21)
  • MySQL:存儲過程與函數(shù)、視圖

    MySQL:存儲過程與函數(shù)、視圖

    一、學習目標 掌握如何創(chuàng)建存儲過程 掌握如何創(chuàng)建存儲函數(shù) 熟悉變量的使用方法 熟悉如何定義條件和處理程序 了解光標的使用方法 掌握流程控制的使用 掌握如何調(diào)用存儲過程和函數(shù) 熟悉如何查看存儲過程和函數(shù) 掌握修改存儲過程和函數(shù)的方法 熟悉如何刪除存儲過程和函

    2024年02月05日
    瀏覽(24)
  • MySQL基礎(五)視圖、存儲過程和存儲函數(shù)、變量

    MySQL基礎(五)視圖、存儲過程和存儲函數(shù)、變量

    目錄 常見的數(shù)據(jù)庫對象? ?編輯 ?視圖 創(chuàng)建視圖 改變視圖 優(yōu)缺點 存儲過程與存儲函數(shù) ?創(chuàng)建存儲過程 ?創(chuàng)建存儲函數(shù) 存儲過程和存儲函數(shù)的區(qū)別? 存儲過程和函數(shù)的查看、修改、刪除? 查看 修改 刪除 存儲過程的優(yōu)缺點 優(yōu)點 缺點 變量 系統(tǒng)變量 查看系統(tǒng)變量 修改變量

    2024年02月13日
    瀏覽(15)
  • MySQL之存儲過程、存儲函數(shù)、備份還原、索引及視圖

    -- 創(chuàng)建統(tǒng)計記錄條數(shù)的存儲函數(shù)count_sch() -- 創(chuàng)建存儲過程avg_sai() 一、備份與還原 1、使用mysqldump命令備份數(shù)據(jù)庫中的所有表 2、備份booksDB數(shù)據(jù)庫中的books表 3、使用mysqldump備份booksDB和test數(shù)據(jù)庫 4、使用mysqldump備份服務器中的所有數(shù)據(jù)庫 5、使用mysql命令還原第二題導出的book表

    2024年02月16日
    瀏覽(19)
  • SQL Server判斷數(shù)據(jù)庫、表、列、視圖、存儲過程、函數(shù)是否存在

    在寫一些業(yè)務邏輯相對復雜點的存儲過程的時候,經(jīng)常會用到臨時表或者數(shù)據(jù)表作為臨時結(jié)果的保存。但每次在作表是否存在的判斷時,往往想不起完整的SQL寫法。因此,記錄一些常用的數(shù)據(jù)庫對象是否存在的判斷方法,可以達到快速查找的目的。正是:好記性不如爛筆頭。

    2024年02月02日
    瀏覽(514)
  • MySQL小記——存儲過程、觸發(fā)器、函數(shù)、視圖

    目錄 存儲過程 procedure 語法 參數(shù) 調(diào)用存儲過程 call 刪除存儲過程 drop 帶有IF邏輯的存儲過程 if then elseif else 帶有循環(huán)的存儲過程 while do 變量 觸發(fā)器 Trigger 語法 old和new 視圖 View 函數(shù) 自定義函數(shù) 內(nèi)置函數(shù) 存儲過程是數(shù)據(jù)庫中的一個對象,存儲在服務端,用來封裝多條SQL語句

    2024年02月08日
    瀏覽(99)
  • MySQL之視圖,觸發(fā)器與存儲過程

    MySQL之視圖,觸發(fā)器與存儲過程

    視圖是一個虛擬表(非真實存在),其本質(zhì)是【根據(jù)SQL語句獲取動態(tài)的數(shù)據(jù)集,并為其命名】,用戶使用時只需使用【名稱】即可獲取結(jié)果集,可以將該結(jié)果集當做表來使用。 使用視圖我們可以把查詢過程中的臨時表摘出來,用視圖去實現(xiàn),這樣以后再想操作該臨時表的數(shù)據(jù)

    2024年02月08日
    瀏覽(87)
  • MySQL函數(shù)、視圖、存儲過程及觸發(fā)器

    MySQL函數(shù)、視圖、存儲過程及觸發(fā)器

    MySQL在我們工作中都會用到,那么我們最常接觸的就是增刪改查,而對于增刪改查來說,我們更多的是查詢。但是面試中,面試官又不會問你什么查詢是怎么寫的,都是問一些索引啊,事務啊, 底層結(jié)構(gòu)這些東西,所以我打算分四篇去逐一的過一遍MySQL的知識點。 以下為四篇

    2023年04月09日
    瀏覽(90)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包