##本單元目標
一探赫、為什么要學(xué)習(xí)數(shù)據(jù)庫
二、數(shù)據(jù)庫的相關(guān)概念? ? ?
DBMS撬呢、DB伦吠、SQL
三、數(shù)據(jù)庫存儲數(shù)據(jù)的特點
四魂拦、初始MySQL
MySQL產(chǎn)品的介紹? ? ? ?
MySQL產(chǎn)品的安裝? ? ? ? ? ★? ? ? ?
MySQL服務(wù)的啟動和停止? ? ★
MySQL服務(wù)的登錄和退出? ? ★? ? ?
MySQL的常見命令和語法規(guī)范? ? ?
五毛仪、DQL語言的學(xué)習(xí)? ★? ? ? ? ? ? ?
基礎(chǔ)查詢? ? ? ? ★? ? ? ? ? ?
條件查詢? ? ★
排序查詢? ? ★
常見函數(shù)? ? ? ? ★? ? ? ? ? ? ?
分組函數(shù)? ? ? ? ★? ? ? ? ? ? ?
分組查詢 ? ★
連接查詢 ★
子查詢? ? ? √? ? ? ? ? ? ? ? ?
分頁查詢? ? ? ★? ? ? ? ? ? ?
union聯(lián)合查詢 √
六、DML語言的學(xué)習(xí)? ? ★? ? ? ? ? ?
插入語句
修改語句
刪除語句
七芯勘、DDL語言的學(xué)習(xí)?
庫和表的管理 √
常見數(shù)據(jù)類型介紹? √? ? ? ? ?
常見約束? ? √
八箱靴、TCL語言的學(xué)習(xí)
事務(wù)和事務(wù)處理? ? ? ? ? ? ? ?
九、視圖的講解? ? ? ? ? √
十荷愕、變量? ? ? ? ? ? ? ? ? ? ?
十一衡怀、存儲過程和函數(shù)?
十二、流程控制結(jié)構(gòu)? ? ?
##數(shù)據(jù)庫的好處
1.持久化數(shù)據(jù)到本地
2.可以實現(xiàn)結(jié)構(gòu)化查詢安疗,方便管理
##數(shù)據(jù)庫相關(guān)概念
1抛杨、DB:數(shù)據(jù)庫,保存一組有組織的數(shù)據(jù)的容器
2荐类、DBMS:數(shù)據(jù)庫管理系統(tǒng)怖现,又稱為數(shù)據(jù)庫軟件(產(chǎn)品),用于管理DB中的數(shù)據(jù)
3玉罐、SQL:結(jié)構(gòu)化查詢語言屈嗤,用于和DBMS通信的語言
##數(shù)據(jù)庫存儲數(shù)據(jù)的特點
1、將數(shù)據(jù)放到表中吊输,表再放到庫中
2饶号、一個數(shù)據(jù)庫中可以有多個表,每個表都有一個的名字璧亚,用來標識自己讨韭。表名具有唯一性。
3癣蟋、表具有一些特性透硝,這些特性定義了數(shù)據(jù)在表中如何存儲,類似java中 “類”的設(shè)計疯搅。
4濒生、表由列組成,我們也稱為字段幔欧。所有表都是由一個或多個列組成的罪治,每一列類似java 中的”屬性”
5丽声、表中的數(shù)據(jù)是按行存儲的,每一行類似于java中的“對象”觉义。
##MySQL產(chǎn)品的介紹和安裝
###MySQL服務(wù)的啟動和停止
方式一:計算機——右擊管理——服務(wù)
方式二:通過管理員身份運行
net start 服務(wù)名(啟動服務(wù))
net stop 服務(wù)名(停止服務(wù))
###MySQL服務(wù)的登錄和退出?
方式一:通過mysql自帶的客戶端
只限于root用戶
方式二:通過windows自帶的客戶端
登錄:
mysql 【-h主機名 -P端口號 】-u用戶名 -p密碼
退出:
exit或ctrl+C
###MySQL的常見命令
1.查看當(dāng)前所有的數(shù)據(jù)庫
show databases;
2.打開指定的庫
use 庫名
3.查看當(dāng)前庫的所有表
show tables;
4.查看其它庫的所有表
show tables from 庫名;
5.創(chuàng)建表
create table 表名(
列名 列類型,
列名 列類型雁社,
。晒骇。霉撵。
);
6.查看表結(jié)構(gòu)
desc 表名;
7.查看服務(wù)器的版本
方式一:登錄到mysql服務(wù)端
select version();
方式二:沒有登錄到mysql服務(wù)端
mysql --version
或
mysql --V
###MySQL的語法規(guī)范
1.不區(qū)分大小寫,但建議關(guān)鍵字大寫,表名洪囤、列名小寫
2.每條命令最好用分號結(jié)尾
3.每條命令根據(jù)需要徒坡,可以進行縮進 或換行
4.注釋
單行注釋:#注釋文字
單行注釋:-- 注釋文字
多行注釋:/* 注釋文字? */
###SQL的語言分類
DQL(Data Query Language):數(shù)據(jù)查詢語言
select
DML(Data Manipulate Language):數(shù)據(jù)操作語言
insert 、update瘤缩、delete
DDL(Data Define Languge):數(shù)據(jù)定義語言
create喇完、drop、alter
TCL(Transaction Control Language):事務(wù)控制語言
commit剥啤、rollback
###SQL的常見命令
show databases锦溪; 查看所有的數(shù)據(jù)庫
use 庫名; 打開指定 的庫
show tables ; 顯示庫中的所有表
show tables from 庫名;顯示指定庫中的所有表
create table 表名(
字段名 字段類型,
字段名 字段類型
); 創(chuàng)建表
desc 表名; 查看指定表的結(jié)構(gòu)
select * from 表名;顯示表中的所有數(shù)據(jù)
##DQL語言的學(xué)習(xí)
###進階1:基礎(chǔ)查詢
語法:
SELECT 要查詢的東西
【FROM 表名】;
類似于Java中 :System.out.println(要打印的東西);
特點:
①通過select查詢完的結(jié)果 铐殃,是一個虛擬的表格海洼,不是真實存在
② 要查詢的東西 可以是常量值、可以是表達式富腊、可以是字段坏逢、可以是函數(shù)
###進階2:條件查詢
條件查詢:根據(jù)條件過濾原始表的數(shù)據(jù),查詢到想要的數(shù)據(jù)
語法:
select
要查詢的字段|表達式|常量值|函數(shù)
from
表
where
條件 ;
分類:
一赘被、條件表達式
示例:salary>10000
條件運算符:
> < >= <= = != <>
二是整、邏輯表達式
示例:salary>10000 && salary<20000
邏輯運算符:
and(&&):兩個條件如果同時成立,結(jié)果為true民假,否則為false
or(||):兩個條件只要有一個成立浮入,結(jié)果為true,否則為false
not(!):如果條件成立羊异,則not后為false事秀,否則為true
三、模糊查詢
示例:last_name like 'a%'
###進階3:排序查詢
語法:
select
要查詢的東西
from
表
where
條件
order by 排序的字段|表達式|函數(shù)|別名 【asc|desc】
###進階4:常見函數(shù)
一野舶、單行函數(shù)
1易迹、字符函數(shù)
concat拼接
substr截取子串
upper轉(zhuǎn)換成大寫
lower轉(zhuǎn)換成小寫
trim去前后指定的空格和字符
ltrim去左邊空格
rtrim去右邊空格
replace替換
lpad左填充
rpad右填充
instr返回子串第一次出現(xiàn)的索引
length 獲取字節(jié)個數(shù)
2、數(shù)學(xué)函數(shù)
round 四舍五入
rand 隨機數(shù)
floor向下取整
ceil向上取整
mod取余
truncate截斷
3平道、日期函數(shù)
now當(dāng)前系統(tǒng)日期+時間
curdate當(dāng)前系統(tǒng)日期
curtime當(dāng)前系統(tǒng)時間
str_to_date 將字符轉(zhuǎn)換成日期
date_format將日期轉(zhuǎn)換成字符
4睹欲、流程控制函數(shù)
if 處理雙分支
case語句 處理多分支
情況1:處理等值判斷
情況2:處理條件判斷
5、其他函數(shù)
version版本
database當(dāng)前庫
user當(dāng)前連接用戶
二、分組函數(shù)
sum 求和
max 最大值
min 最小值
avg 平均值
count 計數(shù)
特點:
1窘疮、以上五個分組函數(shù)都忽略null值袋哼,除了count(*)
2、sum和avg一般用于處理數(shù)值型
max闸衫、min涛贯、count可以處理任何數(shù)據(jù)類型
? ? 3、都可以搭配distinct使用蔚出,用于統(tǒng)計去重后的結(jié)果
4疫蔓、count的參數(shù)可以支持:
字段、*身冬、常量值,一般放1
? 建議使用 count(*)
##進階5:分組查詢
語法:
select 查詢的字段岔乔,分組函數(shù)
from 表
group by 分組的字段
特點:
1酥筝、可以按單個字段分組
2、和分組函數(shù)一同查詢的字段最好是分組后的字段
3雏门、分組篩選
針對的表 位置 關(guān)鍵字
分組前篩選: 原始表 group by的前面 where
分組后篩選: 分組后的結(jié)果集 group by的后面 having
4嘿歌、可以按多個字段分組,字段之間用逗號隔開
5茁影、可以支持排序
6宙帝、having后可以支持別名
##進階6:多表連接查詢
笛卡爾乘積:如果連接條件省略或無效則會出現(xiàn)
解決辦法:添加上連接條件
一、傳統(tǒng)模式下的連接 :等值連接——非等值連接
1.等值連接的結(jié)果 = 多個表的交集
2.n表連接募闲,至少需要n-1個連接條件
3.多個表不分主次步脓,沒有順序要求
4.一般為表起別名,提高閱讀性和性能
二浩螺、sql99語法:通過join關(guān)鍵字實現(xiàn)連接
含義:1999年推出的sql語法
支持:
等值連接靴患、非等值連接 (內(nèi)連接)
外連接
交叉連接
語法:
select 字段,...
from 表1
【inner|left outer|right outer|cross】join 表2 on? 連接條件
【inner|left outer|right outer|cross】join 表3 on? 連接條件
【where 篩選條件】
【group by 分組字段】
【having 分組后的篩選條件】
【order by 排序的字段或表達式】
好處:語句上要出,連接條件和篩選條件實現(xiàn)了分離,簡潔明了!
三负敏、自連接
案例:查詢員工名和直接上級的名稱
sql99
SELECT e.last_name,m.last_name
FROM employees e
JOIN employees m ON e.`manager_id`=m.`employee_id`;
sql92
SELECT e.last_name,m.last_name
FROM employees e,employees m
WHERE e.`manager_id`=m.`employee_id`;
##進階7:子查詢
含義:
一條查詢語句中又嵌套了另一條完整的select語句霞掺,其中被嵌套的select語句,稱為子查詢或內(nèi)查詢
在外面的查詢語句传于,稱為主查詢或外查詢
特點:
1囱挑、子查詢都放在小括號內(nèi)
2、子查詢可以放在from后面格了、select后面看铆、where后面、having后面盛末,但一般放在條件的右側(cè)
3弹惦、子查詢優(yōu)先于主查詢執(zhí)行否淤,主查詢使用了子查詢的執(zhí)行結(jié)果
4、子查詢根據(jù)查詢結(jié)果的行數(shù)不同分為以下兩類:
① 單行子查詢
結(jié)果集只有一行
一般搭配單行操作符使用:> < = <> >= <=
非法使用子查詢的情況:
a棠隐、子查詢的結(jié)果為一組值
b石抡、子查詢的結(jié)果為空
② 多行子查詢
結(jié)果集有多行
一般搭配多行操作符使用:any、all助泽、in啰扛、not in
in: 屬于子查詢結(jié)果中的任意一個就行
any和all往往可以用其他查詢代替
##進階8:分頁查詢
應(yīng)用場景:
實際的web項目中需要根據(jù)用戶的需求提交對應(yīng)的分頁查詢的sql語句
語法:
select 字段|表達式,...
from 表
【where 條件】
【group by 分組字段】
【having 條件】
【order by 排序的字段】
limit 【起始的條目索引,】條目數(shù);
特點:
1.起始條目索引從0開始
2.limit子句放在查詢語句的最后
3.公式:select * from? 表 limit (page-1)*sizePerPage,sizePerPage
假如:
每頁顯示條目數(shù)sizePerPage
要顯示的頁數(shù) page
##進階9:聯(lián)合查詢
引入:
union 聯(lián)合嗡贺、合并
語法:
select 字段|常量|表達式|函數(shù) 【from 表】 【where 條件】 union 【all】
select 字段|常量|表達式|函數(shù) 【from 表】 【where 條件】 union 【all】
select 字段|常量|表達式|函數(shù) 【from 表】 【where 條件】 union? 【all】
.....
select 字段|常量|表達式|函數(shù) 【from 表】 【where 條件】
特點:
1隐解、多條查詢語句的查詢的列數(shù)必須是一致的
2、多條查詢語句的查詢的列的類型幾乎相同
3诫睬、union代表去重煞茫,union all代表不去重
##DML語言
###插入
語法:
insert into 表名(字段名,...)
values(值1摄凡,...);
特點:
1续徽、字段類型和值類型一致或兼容,而且一一對應(yīng)
2亲澡、可以為空的字段钦扭,可以不用插入值,或用null填充
3床绪、不可以為空的字段客情,必須插入值
4、字段個數(shù)和值的個數(shù)必須一致
5癞己、字段可以省略裹匙,但默認所有字段,并且順序和表中的存儲順序一致
###修改
修改單表語法:
update 表名 set 字段=新值,字段=新值
【where 條件】
修改多表語法:
update 表1 別名1,表2 別名2
set 字段=新值末秃,字段=新值
where 連接條件
and 篩選條件
###刪除
方式1:delete語句
單表的刪除: ★
delete from 表名 【where 篩選條件】
多表的刪除:
delete 別名1概页,別名2
from 表1 別名1,表2 別名2
where 連接條件
and 篩選條件;
方式2:truncate語句
truncate table 表名
兩種方式的區(qū)別【面試題】
#1.truncate不能加where條件练慕,而delete可以加where條件
#2.truncate的效率高一丟丟
#3.truncate 刪除帶自增長的列的表后惰匙,如果再插入數(shù)據(jù),數(shù)據(jù)從1開始
#delete 刪除帶自增長列的表后铃将,如果再插入數(shù)據(jù)项鬼,數(shù)據(jù)從上一次的斷點處開始
#4.truncate刪除不能回滾,delete刪除可以回滾
##DDL語句
###庫和表的管理
庫的管理:
一劲阎、創(chuàng)建庫
create database 庫名
二绘盟、刪除庫
drop database 庫名
表的管理:
#1.創(chuàng)建表
CREATE TABLE IF NOT EXISTS stuinfo(
stuId INT,
stuName VARCHAR(20),
gender CHAR,
bornDate DATETIME
);
DESC studentinfo;
#2.修改表 alter
語法:ALTER TABLE 表名 ADD|MODIFY|DROP|CHANGE COLUMN 字段名 【字段類型】;
#①修改字段名
ALTER TABLE studentinfo CHANGE? COLUMN sex gender CHAR;
#②修改表名
ALTER TABLE stuinfo RENAME [TO]? studentinfo;
#③修改字段類型和列級約束
ALTER TABLE studentinfo MODIFY COLUMN borndate DATE ;
#④添加字段
ALTER TABLE studentinfo ADD COLUMN email VARCHAR(20) first;
#⑤刪除字段
ALTER TABLE studentinfo DROP COLUMN email;
#3.刪除表
DROP TABLE [IF EXISTS] studentinfo;
###常見類型
整型:
小數(shù):
浮點型
定點型
字符型:
日期型:
Blob類型:
###常見約束
NOT NULL
DEFAULT
UNIQUE
CHECK
PRIMARY KEY
FOREIGN KEY
##數(shù)據(jù)庫事務(wù)
###含義
通過一組邏輯操作單元(一組DML——sql語句),將數(shù)據(jù)從一種狀態(tài)切換到另外一種狀態(tài)
###特點
(ACID)
原子性:要么都執(zhí)行,要么都回滾
一致性:保證數(shù)據(jù)的狀態(tài)操作前和操作后保持一致
隔離性:多個事務(wù)同時操作相同數(shù)據(jù)庫的同一個數(shù)據(jù)時龄毡,一個事務(wù)的執(zhí)行不受另外一個事務(wù)的干擾
持久性:一個事務(wù)一旦提交吠卷,則數(shù)據(jù)將持久化到本地,除非其他事務(wù)對其進行修改
相關(guān)步驟:
1沦零、開啟事務(wù)
2祭隔、編寫事務(wù)的一組邏輯操作單元(多條sql語句)
3、提交事務(wù)或回滾事務(wù)
###事務(wù)的分類:
隱式事務(wù)路操,沒有明顯的開啟和結(jié)束事務(wù)的標志
比如
insert疾渴、update、delete語句本身就是一個事務(wù)
顯式事務(wù)屯仗,具有明顯的開啟和結(jié)束事務(wù)的標志
1搞坝、開啟事務(wù)
取消自動提交事務(wù)的功能
2、編寫事務(wù)的一組邏輯操作單元(多條sql語句)
insert
update
delete
3魁袜、提交事務(wù)或回滾事務(wù)
###使用到的關(guān)鍵字
set autocommit=0;
start transaction;
commit;
rollback;
savepoint? 斷點
commit to 斷點
rollback to 斷點
###事務(wù)的隔離級別:
事務(wù)并發(fā)問題如何發(fā)生瞄沙?
當(dāng)多個事務(wù)同時操作同一個數(shù)據(jù)庫的相同數(shù)據(jù)時
事務(wù)的并發(fā)問題有哪些?
臟讀:一個事務(wù)讀取到了另外一個事務(wù)未提交的數(shù)據(jù)
不可重復(fù)讀:同一個事務(wù)中慌核,多次讀取到的數(shù)據(jù)不一致
幻讀:一個事務(wù)讀取數(shù)據(jù)時,另外一個事務(wù)進行更新申尼,導(dǎo)致第一個事務(wù)讀取到了沒有更新的數(shù)據(jù)
如何避免事務(wù)的并發(fā)問題垮卓?
通過設(shè)置事務(wù)的隔離級別
1、READ UNCOMMITTED
2师幕、READ COMMITTED 可以避免臟讀
3粟按、REPEATABLE READ 可以避免臟讀、不可重復(fù)讀和一部分幻讀
4霹粥、SERIALIZABLE可以避免臟讀灭将、不可重復(fù)讀和幻讀
設(shè)置隔離級別:
set session|global? transaction isolation level 隔離級別名;
查看隔離級別:
select @@tx_isolation;
##視圖
含義:理解成一張?zhí)摂M的表
視圖和表的區(qū)別:
使用方式 占用物理空間
視圖 完全相同 不占用,僅僅保存的是sql邏輯
表 完全相同 占用
視圖的好處:
1后控、sql語句提高重用性庙曙,效率高
2、和表實現(xiàn)了分離浩淘,提高了安全性
###視圖的創(chuàng)建
語法:
CREATE VIEW? 視圖名
AS
查詢語句;
###視圖的增刪改查
1捌朴、查看視圖的數(shù)據(jù) ★
SELECT * FROM my_v4;
SELECT * FROM my_v1 WHERE last_name='Partners';
2、插入視圖的數(shù)據(jù)
INSERT INTO my_v4(last_name,department_id) VALUES('虛竹',90);
3张抄、修改視圖的數(shù)據(jù)
UPDATE my_v4 SET last_name ='夢姑' WHERE last_name='虛竹';
4砂蔽、刪除視圖的數(shù)據(jù)
DELETE FROM my_v4;
###某些視圖不能更新
包含以下關(guān)鍵字的sql語句:分組函數(shù)、distinct署惯、group? by左驾、having、union或者union all
常量視圖
Select中包含子查詢
join
from一個不能更新的視圖
where子句的子查詢引用了from子句中的表
###視圖邏輯的更新
#方式一:
CREATE OR REPLACE VIEW test_v7
AS
SELECT last_name FROM employees
WHERE employee_id>100;
#方式二:
ALTER VIEW test_v7
AS
SELECT employee_id FROM employees;
SELECT * FROM test_v7;
###視圖的刪除
DROP VIEW test_v1,test_v2,test_v3;
###視圖結(jié)構(gòu)的查看
DESC test_v7;
SHOW CREATE VIEW test_v7;
##存儲過程
含義:一組經(jīng)過預(yù)先編譯的sql語句的集合
好處:
1、提高了sql語句的重用性诡右,減少了開發(fā)程序員的壓力
2安岂、提高了效率
3、減少了傳輸次數(shù)
分類:
1稻爬、無返回?zé)o參
2嗜闻、僅僅帶in類型,無返回有參
3桅锄、僅僅帶out類型琉雳,有返回?zé)o參
4、既帶in又帶out友瘤,有返回有參
5翠肘、帶inout,有返回有參
注意:in辫秧、out束倍、inout都可以在一個存儲過程中帶多個
###創(chuàng)建存儲過程
語法:
create procedure 存儲過程名(in|out|inout 參數(shù)名? 參數(shù)類型,...)
begin
存儲過程體
end
類似于方法:
修飾符 返回類型 方法名(參數(shù)類型 參數(shù)名,...){
方法體;
}
注意
1、需要設(shè)置新的結(jié)束標記
delimiter 新的結(jié)束標記
示例:
delimiter $
CREATE PROCEDURE 存儲過程名(IN|OUT|INOUT 參數(shù)名? 參數(shù)類型,...)
BEGIN
sql語句1;
sql語句2;
END $
2盟戏、存儲過程體中可以有多條sql語句绪妹,如果僅僅一條sql語句,則可以省略begin end
3柿究、參數(shù)前面的符號的意思
in:該參數(shù)只能作為輸入 (該參數(shù)不能做返回值)
out:該參數(shù)只能作為輸出(該參數(shù)只能做返回值)
inout:既能做輸入又能做輸出
#調(diào)用存儲過程
call 存儲過程名(實參列表)
##函數(shù)
###創(chuàng)建函數(shù)
學(xué)過的函數(shù):LENGTH邮旷、SUBSTR、CONCAT等
語法:
CREATE FUNCTION 函數(shù)名(參數(shù)名 參數(shù)類型,...) RETURNS 返回類型
BEGIN
函數(shù)體
END
###調(diào)用函數(shù)
SELECT 函數(shù)名(實參列表)
###函數(shù)和存儲過程的區(qū)別
關(guān)鍵字 調(diào)用語法 返回值 應(yīng)用場景
函數(shù) FUNCTION SELECT 函數(shù)() 只能是一個 一般用于查詢結(jié)果為一個值并返回時蝇摸,當(dāng)有返回值而且僅僅一個
存儲過程 PROCEDURE CALL 存儲過程() 可以有0個或多個 一般用于更新
##流程控制結(jié)構(gòu)
###系統(tǒng)變量
一婶肩、全局變量
作用域:針對于所有會話(連接)有效,但不能跨重啟
查看所有全局變量
SHOW GLOBAL VARIABLES;
查看滿足條件的部分系統(tǒng)變量
SHOW GLOBAL VARIABLES LIKE '%char%';
查看指定的系統(tǒng)變量的值
SELECT @@global.autocommit;
為某個系統(tǒng)變量賦值
SET @@global.autocommit=0;
SET GLOBAL autocommit=0;
二貌夕、會話變量
作用域:針對于當(dāng)前會話(連接)有效
查看所有會話變量
SHOW SESSION VARIABLES;
查看滿足條件的部分會話變量
SHOW SESSION VARIABLES LIKE '%char%';
查看指定的會話變量的值
SELECT @@autocommit;
SELECT @@session.tx_isolation;
為某個會話變量賦值
SET @@session.tx_isolation='read-uncommitted';
SET SESSION tx_isolation='read-committed';
###自定義變量
一律歼、用戶變量
聲明并初始化:
SET @變量名=值;
SET @變量名:=值;
SELECT @變量名:=值;
賦值:
方式一:一般用于賦簡單的值
SET 變量名=值;
SET 變量名:=值;
SELECT 變量名:=值;
方式二:一般用于賦表 中的字段值
SELECT 字段名或表達式 INTO 變量
FROM 表;
使用:
select @變量名;
二、局部變量
聲明:
declare 變量名 類型 【default 值】;
賦值:
方式一:一般用于賦簡單的值
SET 變量名=值;
SET 變量名:=值;
SELECT 變量名:=值;
方式二:一般用于賦表 中的字段值
SELECT 字段名或表達式 INTO 變量
FROM 表;
使用:
select 變量名
二者的區(qū)別:
作用域 定義位置 語法
用戶變量 當(dāng)前會話 會話的任何地方 加@符號啡专,不用指定類型
局部變量 定義它的BEGIN END中 BEGIN END的第一句話 一般不用加@,需要指定類型
###分支
一险毁、if函數(shù)
語法:if(條件,值1们童,值2)
特點:可以用在任何位置
二辱揭、case語句
語法:
情況一:類似于switch
case 表達式
when 值1 then 結(jié)果1或語句1(如果是語句,需要加分號)
when 值2 then 結(jié)果2或語句2(如果是語句病附,需要加分號)
...
else 結(jié)果n或語句n(如果是語句问窃,需要加分號)
end 【case】(如果是放在begin end中需要加上case,如果放在select后面不需要)
情況二:類似于多重if
case
when 條件1 then 結(jié)果1或語句1(如果是語句完沪,需要加分號)
when 條件2 then 結(jié)果2或語句2(如果是語句域庇,需要加分號)
...
else 結(jié)果n或語句n(如果是語句嵌戈,需要加分號)
end 【case】(如果是放在begin end中需要加上case,如果放在select后面不需要)
特點:
可以用在任何位置
三听皿、if elseif語句
語法:
if 情況1 then 語句1;
elseif 情況2 then 語句2;
...
else 語句n;
end if;
特點:
只能用在begin end中J烨骸!N疽獭b殖!S掷鳌>鸥!8仓隆V堆!;吐琛@芨帷!璧诵!
三者比較:
應(yīng)用場合
if函數(shù) 簡單雙分支
case結(jié)構(gòu) 等值判斷 的多分支
if結(jié)構(gòu) 區(qū)間判斷 的多分支
###循環(huán)
語法:
【標簽:】WHILE 循環(huán)條件? DO
循環(huán)體
END WHILE 【標簽】;
特點:
只能放在BEGIN END里面
如果要搭配leave跳轉(zhuǎn)語句汰蜘,需要使用標簽,否則可以不用標簽
leave類似于java中的break語句之宿,跳出所在循環(huán)W宀佟!澈缺!