MySQL——高阶语句(中)
MySQL——高階語句(中)
- 一、正則表達式
- 二、運算符
- 三、比較運算符
- 四、邏輯運算符
- 五、位運算符
- 六、連接查詢
- 1.內(nèi)連接
- 2.左連接
- 3.右連接
一、正則表達式
MySQL 正則表達式通常是在檢索數(shù)據(jù)庫記錄的時候,根據(jù)指定的匹配模式匹配記錄中符合要求的特殊字符串。 MySQL 的正則表達式使用REGEXP這個關鍵字來指定正則表達式的匹配模式, REGEXP 操作符所支持的匹配模式如下:匹配模式 描述 實例 ^ 匹配文本的開始字符 ‘^bd’ 匹配以 bd 開頭的字符串 $ 匹配文本的結束字符 ‘qn$’ 匹配以 qn 結尾的字符串 . 匹配任何單個字符 ‘s.t’ 匹配任何 s 和 t 之間有一個字符的字符串 * 匹配零個或多個在它前面的字符 ‘fo*t’ 匹配 t 前面有任意個 o + 匹配前面的字符 1 次或多次 ‘hom+’ 匹配以 ho 開頭,后面至少一個m 的字符串 字符串 匹配包含指定的字符串 ‘clo’ 匹配含有 clo 的字符串 p1|p2 匹配 p1 或 p2 ‘bg|fg’ 匹配 bg 或者 fg [...] 匹配字符集合中的任意一個字符 ‘[abc]’ 匹配 a 或者 b 或者 c [^...] 匹配不在括號中的任何字符 ‘[^ab]’ 匹配不包含 a 或者 b 的字符串 {n} 匹配前面的字符串 n 次 ‘g{2}’ 匹配含有 2 個 g 的字符串 {n,m} 匹配前面的字符串至少 n 次,至多m 次 ‘f{1,3}’ 匹配 f 最少 1 次,最多 3 次PS: ^表示匹配開始字符,單需要看'^'所處在的位置,例如:[^]表示不包含 ^[],則表示已...為開頭二、運算符
MySQL的運算符用于對記錄中的字段值進行運算。MysQ的運算符共有四種,分別是:算術運算符、比較運算符、邏輯運算符和位運算符 算數(shù)運算: 運算符 描述 + 加法 - 減法 * 乘法 / 除法 % 取余 在除法運算和求余數(shù)運算中,除數(shù)不能為0,若除數(shù)是0,返回的結果則為NULL。 PS:如果有多個運算符,按照先乘除后加減的優(yōu)先級進行運算,相同優(yōu)先級的運算符沒有先后順序。三、比較運算符
字符串的比較默認不區(qū)分大小寫,可使用binary來區(qū)分常用比較運算符(比較對象:數(shù)字,字符)
= 等于 !=或<> 不等于 LIKE 通配匹配符 > 大于 >= 大于等于 < 小于 <= 小于等于 IS NULL 判斷一個值是否為NULL IS NOT NULL 判斷一個值是否不為NULL BETWEEN AND 兩者之間 GREATEST 兩個或多個參數(shù)是返回最大值 LEAST 兩個或多個參數(shù)時返回最小值 IN 在集合中- 等于(=)
等號(=)用來判斷數(shù)字、字符串和表達式是否相等的,如果相等則返回1,如果不相等則返回0。
如果比較的兩者有一個值是NULL,則比較的結果就是NULL。
PS:其中字符的比較是根據(jù)AscII碼來判斷的,如果ASCcIT碼相等,則表示兩個字符相同;如果AsCcIT碼不相等,則表示兩個字符不相同。例如字符串(字母)比較:(‘a(chǎn)’ > ‘b’)其實比較的是底層ascii碼
需要關注的ascii碼有: a、A、0
- 不等于(!=或<>)
用于針對數(shù)字、字符串和表達式不相等的比較,如果不相等則返回1,如果相等則返回0,與等于(=)的返回值相反,同時不等于(!=,<>)無法用于判斷是否為null
- 大于、大于等于、小于、小于等于運算符
大于(>)運算符用來判斷左側的操作數(shù)是否大于右側的操作數(shù),若大于返回1,否則返回0,同樣不能用于判斷NULL。
小于(<〉運算符用來判斷左側的操作數(shù)是否小于右側的操作數(shù),若小于返回 1,否則返回0,同樣不能用于判斷NULL。
大于等于(>=)判斷左側的操作數(shù)是否大于等于右側的操作數(shù),若大于等于返回1,否則返回0,不能用于判斷 NULL。
小于等于(<=)判斷左側的操作數(shù)是否小于等于右側的操作數(shù),若小于等于返回1,否則返回0,不能用于判斷NULL。
- 判斷一個值為/不為null( IS NULL、IS NOT NULL)
IS NULL判斷一個值是否為 NULL,如果為NULL返回1,否則返回0。
IS NOT NULL 判斷一個值是否不為 NULL,如果不為NULL返回1,否則返回0。
- 兩者之間(BETWEEN … AND …)BETWEENAND
比較運算通常用于判斷一個值是否落在某兩個值之間。
例如,判斷某數(shù)字是否在另外兩個數(shù)字之間,也可以判斷某英文字母是否在另外兩個字母之間,具體操作,條件符合返回1,否則返回0。
- 當有兩個或多個參數(shù)時,返回其中最大/最小值,如果一個為null,則返回為null (least greatest)
- 在/不在集合中(in , not in)
IN判斷一個值是否在對應的列表中,如果是返回1,否則返回0
NOT IN判斷一個值是否不在對應的列表中,如果不在則返回1,否則返回0
- 通配符匹配
LIKE用來匹配字符串,如果匹配成功則返回1,反之返回 0。LIKE支持兩種通配符:
'%’用于匹配任意數(shù)目的字符,
而“_”只能匹配一個字符。
NOT LIKE 正好跟LIKE相反,如果沒有匹配成功則返回1,反之返回0。如:
若要判斷某字符串能否匹配成功,分單字符匹配和多字符匹配,也可以判斷不匹配,
四、邏輯運算符
邏輯運算符又被稱為布爾運算符,通常用來判斷表達式的真假,如果為真返回1,否則返回0,真和假也可以用TRUB和FALSE 表示。 MySQL中支持使用的邏輯運算符有四種NOT 或 ! 邏輯非 AND 或 && 邏輯與 OR 邏輯或 XOR 邏輯異或- 邏輯非( NOT 或 !)
邏輯非將跟在他后面的值取反,如果 NOT后面的操作數(shù)為0時,所得值為1;如果操作數(shù)為非0時,所得值為0;如果操作數(shù)為NULL時,所得值為NULL
小結:返回值為0、1、null值(根據(jù)匹配條件判斷為何值)
- 邏輯與( AND或&& )
AND 和& &都是邏輯與運算符,具體語法規(guī)則為:
當所有操作數(shù)都為非零值并且不為 NULL時,返回值為 1;當一個或多個操作數(shù)為0 時,返回值為0;
操作數(shù)中有任何一個為NULL時,返回值為NULL。
- 邏輯或( OR )
OR 是邏輯或運算符,具體語法規(guī)則為:
當兩個操作數(shù)都為非 NULL值時,如果有任意一個操作數(shù)為非零值,則返回值為1,否則結果為0;
當有一個操作數(shù)為NULL時,如果另一個操作數(shù)為非零值,則返回值為 1,否則結果為NOLL;
假如兩個操作數(shù)均為NULL時,則返回值為NULL。
使用或運算符OR進行邏輯判斷,運行結果如下:示例:
- 邏輯異或
XOR表示邏輯異或,具體語法規(guī)則為:
當任意一個操作數(shù)為NULL時,返回值為NULL;
對于非 NULL的操作數(shù),如果兩個操作數(shù)都是非0值或者都是0值,則返回值為1;
如果一個為0值,另一個為非0值,返回值為1
五、位運算符
位運算符是在二進制數(shù)上進行計算的運算符。 位運算會先將操作數(shù)變成二進制數(shù),進行位運算。 然后再將計算結果從二進制數(shù)變回十進制數(shù)。& 按位與 | 按位或 ^ 按位異或 ! 取反 << 左移 >> 右移10轉換為二進制數(shù)是1010,15轉換為二進制數(shù)是1111
-
按位與運算(&),是對應的二進制位都是1的,它們的運算結果為1,否則為0,所以10 & 15的結果為10。
select 10 & 15;
-
按位或運算(|),是對應的二進制位有一個或兩個為1的,運算結果為1,否則為0,所以10 │15的結果為15。
select 10 |15; -
按位異或運算(^),是對應的二進制位不相同時,運算結果1,否則為0,所以10 ^15的結果為5。select 10 ^ 15;
-
按位取反(~),是對應的二進制數(shù)逐位反轉,即1取反后變?yōu)?,0取反后變?yōu)?。數(shù)字 1的二進制是0001,取反后變?yōu)?110,數(shù)字5的二進制是0101,將1110 和 0101進行求與操作,其結果是二進制的0100,轉換為十進制就是4
select 5 &~1;
六、連接查詢
MySgL的連接查詢,通常都是將來自兩個或多個表的行結合起來,基于這些表之間的共同字段,進行數(shù)據(jù)的拼接。
首先,要確定一個主表作為結果集,然后將其他表的行有選擇性的連接到選定的主表結果集上。
使用較多的連接查詢包括:內(nèi)連接、左連接和右連接
1.內(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; 示例: select a.a_id,a.a_name,a.a_level from test1 a inner join test2 b on a.a_id = b.b_id;2.左連接
左連接也可以被稱為左外連接,在 FROM子句中使用LEFT JOIN或者 LEFT OUTER JOIN關鍵字來表示。 左連接以左側表為基礎表,接收左表的所有行,并用這些行與右側參考表中的記錄進行匹配, 也就是說匹配左表中的所有行以及右表中符合條件的行。 示例: select * from test1 a left join test2 b on a.a_name=b.b_name;3.右連接
右連接也被稱為右外連接,在 FROM子句中使用RIGHT JOIN 或者 RIGHT OUTER JOIN 關鍵字來表示。右連接跟左連接正好相反,它是以右表為基礎表,用于接收右表中的所有行,并用這些記錄與左表中的行進行匹配select * from test1 a right join test2 b on a.a_name=b.b_name;總結
以上是生活随笔為你收集整理的MySQL——高阶语句(中)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 告别卡顿!华硕tuf十铨16G内存,让你
- 下一篇: 3招教你轻松解决电脑速度慢的烦恼