1. 程式人生 > 其它 >MySQL高階SQL語句(三)

MySQL高階SQL語句(三)

排名的計算

表格自我連線(self join),然後將結果依序列出,算出每一行之前(包括那一行本身)有多少行數

算中位數

把排名表 設定為派生表 把 排名 count 一下 (基數+1) div 2 偶數 div 2

算累計總值

表格自我連線(self join),然後將結果依序列出,算出每一行之前(包括那一行本身)的總和

算總和百分百


算累計總和百分百

空值(NULL)和無值(“”)的區別

無值的長度為0,不佔用空間;而空值null 的長度是null,是佔用空間的;

IS NULL或者IS NOT NULL,是用來判斷欄位是不是NULL或者不是NULL,是不能查出是不是無值的;

無值的判斷使用=‘’或者<>‘’來處理。<>代表不等於;

在通過count()指定欄位統計又多少行數時,如果遇到NULL值會自動忽略掉,遇到空值會自動加入記錄中進行計算。

儲存過程

1、概述

儲存過程是一組為了完成特定功能的SQL語句集合

儲存過程在使用過程中是將常用或者複雜的工作預先使用 SQL 語句寫好並用一個指定的名稱儲存起來,這個過程經編譯和優化後儲存在資料庫伺服器中,當需要使用時,只需要呼叫即可

儲存過程在執行上比傳統SQL速度更快、執行效率更高。

2、優點

執行一次後,會將生成的二進位制程式碼駐留緩衝區,提高執行效率

SQL語句加上控制語句的集合,靈活性高

在伺服器端儲存,客戶端呼叫時,降低網路負載

可多次重複被呼叫,可隨時修改,不影響客戶端呼叫

可完成所有的資料庫操作,也可控制資料庫的資訊訪問許可權

3、 建立、呼叫、檢視和刪除儲存過程

建立儲存過程

DELIMITER ##                           #將語句的結束符號從分號;臨時改為兩個$$ (可以是自定義)
CREATE PROCEDURE proc()                #建立儲存過程,過程名為Proc, 不帶引數
-> BEGIN                               #過程體以關鍵字BEGIN開始
-> SELECT * FROM test5;                #過程體語句(自己根據需求進行編寫)
-> END ##                              #過程體以關鍵字END結束
DELIMITER ;                            #將語句的結束符號恢復為分號

呼叫儲存過程

CALL proc;

檢視儲存過程

SHOW CREATE PROCEDURE [資料庫.] 儲存過程名;       #檢視某個儲存過程的具體資訊

SHOW PROCEDURE STATUS [LIKE '%proc%'] \G

儲存過程的引數

  • IN輸入引數 表示呼叫者向過程傳入值(傳入值可以是字面量或變數)
  • OUT輸出引數 表示過程向呼叫者傳出值(可以返回多個值)(傳出值只能是變數)
  • INOUT輸入輸出引數 既表示呼叫者向過程傳入值,又表示過程向呼叫者傳出值(值只能是變數)

刪除儲存過程

儲存過程內容的修改方法是通過刪除原有儲存過程之後以相同名稱建立新的儲存過程

DROP PROCEDURE IF EXISTS proc;   # 僅當存在時刪除,不新增IF EXISTS時,如果指定的過程不存在,則產生一個錯誤

儲存過程的控制語句

1.條件控制語句 if-then-else … end if

2.迴圈語句while … end while