場景
基礎知識回顧:mysql中視圖的基礎使用以及常見運算符的使用示例。
注:
博客:
霸道流氓氣質-CSDN博客
實現
Mysql中視圖的使用
視圖的創建
CREATE VIEW stu_view AS
SELECT * FROM bus_student;
視圖查詢
SELECT * FROM stu_view;
查看視圖基本信息
SHOW TABLE STATUS LIKE 'stu_view';
執行結果顯示,表的 Comment 的值為 VIEW 說明該表為視圖,其他信息為 NULL 說明這是一個虛表。
查看視圖詳細信息
執行結果顯示視圖的名稱、創建視圖的語句等信息
SHOW CREATE VIEW stu_view;
修改視圖
使用 CREATE OR REPLACE VIEW 語句可以修改視圖。當視圖存在時可以對視圖進行修改,當視圖不存在時可以創建視圖。
CREATE OR REPLACE VIEW stu_view AS
SELECT id,name,age FROM bus_student;
除了可以使用 CREATE OR REPLACE 修改視圖以外,用戶還可以使 ALTER 修改
ALTER VIEW stu_view AS
SELECT id,name FROM bus_student;
更新視圖
CREATE OR PLAC ALTER 主要是對視圖的結構進行修改,其實在 MySQL 中還可以對視圖內
容進行更新,也就是對視圖進 UPDATE 操作,通過視圖增加、刪除、修改數據表中的數據,當然對視圖
的更新操作實際上是對數據表進行操作
UPDATE stu_view SET name='公眾號:霸道的程序猿' WHERE id =1;
當視圖中包含以下內容時視圖的更新操作不能被執行
視圖中不包含基表中被定義為非空的列?
在定義視圖的 SELECT 語句后的字段列表中使用了數學表達式。
在定義視圖的 SELECT 語句后的字段到表中使用了聚合函數。
在定義視圖的 SELECT 語句中使用了 DISTINCT UNION TOP GROUP BY HAVING 子句
注意:雖然修改視圖的方法有很多,但不建議對視圖頻繁修改,一般將視圖作為虛擬表未完成查詢操作
刪除視圖
DROP VIEW IF EXISTS stu_view;
Mysql 常用的運算符
算數運算符
CREATE TABLE test1(a INT);
INSERT INTO test1 VALUES(10);
SELECT a,a+10,a-1+2,a+10.5,a*2,a/2,a/3,a%3,a/0 FROM test1;
運行結果
10?20?11?20.5?20?5.0000?3.3333?1 NULL
比較運算符=
SELECT5=6,'8'=8,'0.02'=0,'badao'='badao',(1+6)=(2+5),NULL=NULL;
運行結果
0?1?0?1?1?
-- 在進行數值比較時有以下規則
-- 若有一個或兩個操作數為 NULL,則比較運算的結果為 NULL
-- 若同一個比較運算中的兩個操作數都是字符串,則按照字符串進行比較。
-- 若兩個操作數均為整數,則按照整數進行比較
-- 若一個字符串和一個數字進行相等判斷,則 MySQL可以自動將字符串轉換為數字。
安全等于運算符<=>
具有=運算符的所有功能,不同的是<=>可以用來判斷 NULL 值。當兩個操作數均為
NULL 其返回值為1,而不為 NULL; 當其中一個操作數為 NULL 時,其返回值為0,而不為 NULL
SELECT5<=>6,'8'<=>8,'0.02'<=>0,'badao'<=>'badao',(1+6)<=>(2+5),NULL<=>NULL;
運行結果
0?1?0?1?1?1
不等于運算符<> 或者!=
用來判斷左邊的操作數是否小于等于右邊的操作數,如果小于或等于,返回值為1 ,否則返回值0
注意<=不能用于判斷空值
SELECT'badao'<='badao',5<=6,8<=8,8.8<=8,(1+2)<=(1+3),NULL<= NULL;
運行結果
1?1?1?0?1?NULL
小于運算符<?
SELECT 'badao'<'badao',5<6,8<8,8.8<8,(1+2)<(1+3),NULL<NULL;
運行結果
0?1?0?0?1?NULL
大于或等于運算符>=
SELECT'badao'>='badao',5>=6,8>=8,8.8>=8,(1+2)>=(1+3),NULL>=NULL;
運行結果
1?0?1?1?0?NULL
大于運算符>
SELECT 'badao'>'badao',5>6,8>8,8.8>8,(1+2)>(1+3),NULL>NULL;
運行結果
0?0?0?1?0?NULL
IS NULL 、IS NOT NULL 運算符
SELECT NULL IS NULL,ISNULL(NULL),ISNULL(2),6 IS NOT NULL,NULL IS NOT NULL;
運行結果
1?1?0?1?0
BETWEEN AND 運算符
SELECT 6 BETWEEN 1 AND 10,10 BETWEEN 1 AND 5;
運行結果
1?0
LEAST運算符
返回最小值 假如任意一個自變量為 NULL ,返回值為 NULL。
SELECT LEAST(1,2,3),LEAST('a','b','c'),LEAST(100,NULL);
運行結果
1?a? NULL
GREATEST 運算符
返回最大值,假如任意1個變量為NULL,返回值為 NULL
SELECT GREATEST(1,2,3),GREATEST('a','b','c'),GREATEST(100,NULL);
運行結果
3? c? NULL
IN NOT IN 運算符
IN 運算符用來判斷操作數是否為 IN 列表中的-個值,如果是,返回值為 1,否則返回值為0
NOT IN 運算符用來判斷操作數是否為 IN 列表中的一個值,如果不是,返回值為1 否則返回值為0
SELECT 2 IN (2,4,'AA'),'A' IN (3,'DD');
-- 1? 0
SELECT 2 NOT IN (2,4,'AA'),'A' NOT IN (3,'DD');
-- 0 1
LIKE 運算符
LIKE 運算符用來匹配字符串, 其語法格式為 expr LIKE 匹配條件 。如果 expr 足匹配條件,
返回值 TRUE 如果不匹配 返回 FALSE。若 expr 或匹配條件中 的任何一個為 NULL ,則為NULL
%配任何字符, 甚至包括零字符。
_只能匹配一個字符。
SELECT 'BADAO' LIKE 'BADAO','BADAO' LIKE 'BADA_','BADAO' LIKE '%O','BADAO' LIKE 'B____','B' LIKE NULL;
-- 1?1?1?1?NULL
REGEEXP 運算符
-- REGEXP 算符用來匹配字符串,其語法格式為“expr REGEXP 匹配條件”。如果 expr 滿足匹配條件,
-- 返回1:如果不滿足, 返回0。若 expr 或匹配條件中的任意個為 NULl 結果為 NULL
-- REGEXP 算符在進行匹配時常用下面幾種通配符。
-- (1)^:匹配以該字符后面的字符開頭的字符串
-- (2)$:匹配以該字符前面的字符結尾的字符串
-- (3).:匹配任何一個單字符
-- (4)[...]:匹配方括號內的任何字符 例如[abc]匹配a、b、c。 為了指定字符的范圍,使用[-]例如
-- [a-z]匹配任意字母,而[0-9]匹配任意數字
-- (5)*:匹配零個或多個在它前面的字符 例如,"x*"匹配任意數量'x'字符,"[0-9]*"匹配任意數量
-- 的數字,而".*"匹配任意數量的任意字符
SELECT 'BADAO' REGEXP '^B','BADAO' REGEXP 'O$','BADAO' REGEXP '.DAO','BADAO' REGEXP '[AB]'
-- 1?1?1?1
邏輯運算符
邏輯非運算符NOT 或者 !
邏輯非運算符 NOT 或者 ! 當操作數為0時返回值為1, 當操作數為1時返回值為0,當操作數NULL 時返回值為 NULL
SELECT NOT 6,NOT(6-6),NOT -6,NOT NULL,NOT 6+6;
-- 0 1 0 NULL 0
SELECT !6,!(6-6),!-6,!NULL,!6+6;
-- 0 1 0 NULL 6
NOT 和 !的優先級不同,NOT的優先級低于+,!的優先級高于+
邏輯與運算符AND 或者 &&
SELECT 6 AND -6,6 AND 0,6 AND NULL,0 AND NULL;
-- 1 0 NULL 0
SELECT 6 && -6,6 && 0,6 && NULL,0 && NULL;
-- 1 0 NULL 0
邏輯或運算符OR 或者 ||
SELECT 6 OR -6,6 OR 0,6 OR NULL,0 OR NULL;
-- 1 1 1 NULL
SELECT 6 || -6,6 || 0,6 || NULL,0 || NULL;
-- 1 1 1 NULL
XOR 邏輯異或運算符
當任意一個操作符為NULL 時返回值為NULL;對于非NULL的操作數,如果兩個操作數都是非零值或者都是零值,則返回0
如果一個為零值,一個為非零值,則返回1
SELECT 6 XOR 6,0 XOR 0,6 XOR 0,6 XOR NULL,6 XOR 6 XOR 6;
-- 0 0 1 NULL 1
位運算符
按位或運算符 |
按位或運算符實際是將參與運算的兩個數據接對應的二進制數進行邏輯或運算,對應的二進制位有一個或兩個為1 ,
則該位的運算結果為1 ,否則為0
SELECT 8|12,6|4|1;
-- 12 7
-- 10 的二進制數為 1000, 12 二進制數為 1100 在接位或之后結果為 1100 ,即整數 12;
-- 6的二進制數0110, 4的二進制數為 0100, 1的二進制數為 0001 ,在按位或之后結果為 0111 ,即整數7
按位與運算 &
按位與運算符實際是將參與運算的兩個操作數接對應的二進制數逐位進行邏輯與運算 對應的二進制
位都為1,則該位的運算結果為1,否則為0
SELECT 8&12,6&4&1;
-- 8 0
按位異或運算符^
接位異或運算符實際是將兩個數據按對應的二進制數逐位進行邏輯異或運算,
當對應的二進制數不同時對應位的結果才為1, 如果兩個對應位數都為0或都為l,則對應位的運算結果為0
SELECT 8^12,6^4^1;
-- 4 3
按位左移運算符<<
按位左移運算符<<的功能是讓指定二進制數的所有位都左移指定的位數。在左移指定位數之后 左邊
高位的數值將被移出并丟棄,右邊低位空出的位置用0補齊
語法格式為a<<n,這里的n指定值a移動的位置。
SELECT 6<<2,8<<1;
-- 24 16
-- 6的二進制數為 00000110 ,左移兩位之后變成 00011000 ,即十進制數24; 8的二進制數為 00001000,
-- 左移一位之后變成 00010000 ,即十進制16
按位右移運算符>>
按位右移運算符>>的功能是讓指定二進制數的所有位都右移指定的位數。
在右移指定位數之后,右邊低位的數值將被移出并丟棄,左邊高位空出的位置用0補齊。
其語法格式為a>>n,這里的n指定值a要移動的位置。
SELECT 6>>2,8>>2;
-- 1 2
-- 6的二進制數為 00000110 ,右移一位之后變成 00000011 ,即十進制數3;8的二進制數為 00001000,
-- 右移兩位之后變成 00000010 即十進制數2
按位取反運算符~
按位取反運算符實際是將參與運算的數據接對應的二進制數逐位反轉, 1取反后變為0, 0取反后變1
SELECT 6&~2;
-- 4
-- 對于邏輯運算 由于按位取反運算符“~”的級別高于接位運算符“&”, 因此先對2進行取
-- 反操作,取反的結果為 1101;然后再與十進制數6進行運算,結果為 0100 即整數4
Mysql中運算符的優先級
按照優先級從低到高
-- 1、== :=
-- 2、|| OR
-- 3、XOR
-- 4、&&、AND
-- 5、NOT
-- 6、BETWEEN? CASE? WHEN THEN ELSE
-- 7、= <=> >= > <= < <> != IS LIKE REGEXP IN
-- 8、|
-- 9、&
-- 10、<< >>
-- 11、- +
-- 12、* / %
-- 13、^
-- 14、-(負號) ~
-- 15、!