1. 程式人生 > >MySQL中的運算子,隱式轉換,特有的limit語句

MySQL中的運算子,隱式轉換,特有的limit語句

常規比較運算子

mysql>help comparison operators
這裡寫圖片描述

怎麼比較空值:
mysql>select * from t40 where id <=>null;

in、not in、between and操作符

between…and:加數值,表示在什麼什麼之間。
where year in(1920,1921)–》年在1920,或者在1921

like

  • %:任意多個字元
  • _:單個任意字元
  • 轉義字元:
    where name like '%/_%' ESCAPE '/';
    即查詢名字當中帶_的

regexp操作符

regexp是mysql特有的。正則表示式,功能強大,類似like。
eg:
select * from PLAYERS where BIRTH_DATE REGEXP ‘…[0,2,4,6,8]-.[0,2,4,6,8]-.[0,2,4,6,8]’;
—》
. :表示任意字元
[]:表示其中的任意一個字元
* :任意多個字元
^b:以b開頭的
fy$:以fy結尾的
regexp ‘w‘:含有w的
上面的句子表示:前三個字元是任意,第四個字元是0或2或4或6或8
第五個字元是-,第六個字元是任意,第七個。。

邏輯操作符

與(and)或(or)非(not)異或(xor)

字串函式

  1. lower(列名或者字串)
    將字串引數值轉換為全小寫字母后返回
  2. upper(列名或者字串)
    將字串引數值轉換為全大寫字母后返回
    這裡寫圖片描述

  3. concat(列名1,列名2…)
    將多個字串引數首尾相連後返回(緊緊相連,中間無分隔符)
    這裡寫圖片描述

  4. concat_ws(指定分隔符,列1,列2)
  5. substr(字串或者列名,開始位置,長度)
    如果省略長度,則預設取到字串的末尾
    長度為負值,則為從字串的尾部開始取。
  6. length(字串或者列名)
    返回字串的儲存長度
    eg:select length(’你好’);

這裡寫圖片描述
utf8編碼時“你好”是佔6個位元組,gbk編碼是佔4個位元組
7. char_length(字串或列名)
返回字串中字元的個數
這裡寫圖片描述


8. instr(源字串,子串)
從源字串中返回子串所在的位置。
這裡寫圖片描述
9. lpad(源字串,指定長度,給定字元)
在源字串的左邊填充給定字元到指定的長度,返回填充後的字串。
這裡寫圖片描述
10. rpad(源字串,指定長度,給定字元)
在源字串的右邊填充給定字元到指定的長度,返回填充後的字串。
這裡寫圖片描述
11. trim([{both | leading | trailing } [remstr] FROM] 源字串),trim([remstr FROM]源字串) –》裁剪命令
從源字串中去掉兩端、字首或字尾字元並返回,如果不指定remstr,則去掉str兩端的空格。不指定both、leading、trailing,則預設為both
這裡寫圖片描述

(預設把左右的空格裁剪掉。)
這裡寫圖片描述
12. replace(str,from str,to str)
在源字串str中查詢所有的子串form str (大小寫敏感),找到後使用替代字串to str替換它。返回的是替換後的字串。
這裡寫圖片描述
(e被替換成E)
13. ltrim(str),rtrim(str)
去掉字串左邊或者右邊的空格。
14. repeat(str,count)
將字串str重複count次後返回。
eg:select repeat(’mysql‘,3);
15. reverse(str)
將字串str反轉後返回。
eg:select reverse(‘abc’);

字串_數字函式

  1. mysql> select ascii(97);
    這裡寫圖片描述
  2. mysql> select char(97);
    這裡寫圖片描述

3.

select char(77,121,83,81,76); ==char(77,121,83,81,76 using ascii);

這裡寫圖片描述
4. format(數,小數位數,[語言])
語言預設為’en_US’
這裡寫圖片描述
(四捨五入)
5. space(N)
返回由N個空格構成的字串。
這裡寫圖片描述
6. left(str,len)
返回最左邊的len長度的子串。
這裡寫圖片描述
7. right(str,len)
返回最右邊的len長度的子串。
8. strcmp(str1,str2)
如果兩個字串相等則返回0,否則返回1。
這裡寫圖片描述
9. round(X[,D])
將數字X四捨五入到指定的小數位數D,如果不指定D,預設為0,如果D為負數,則從小數點左邊進行四捨五入。
10. truncate(X,D)
將數字X截斷到指定的小數位數D,不四捨五入。
11. mod(N,M)
返回N/M後的餘數。
12. ceil(X)
返回不小於x(小數)的最小整數。
13. floor(x)
返回不大於x(小數)的最大整數。
14. rand();
返回一個隨機的浮點數。
rand(5);—》產生可重複5次的隨機數列。
這裡寫圖片描述

日期時間函式

一、
得到日期和時間:
mysql>select now(5);
等價於select sysdate(5);
得到時區:
mysql>select @@session.time_zone;
mysql>select @@session.time_zone=’+10:00’;
得到日期:select curdate();
得到時間:select curtime();
二、
①date_add
mysql>select now(),date_add(now(),interval 5 day); 加五天
mysql>select now(),date_add(now(),interval 100 minute);加100分鐘
②date_sub
用法同date_add
③dateoff(’2015-12-16’,’2015-12-19’); 差多少天
④mysql>date(now()); 得到日期
year(now()); 得到年份
quarter(now()); 得到是哪個季度
week(now());
day(now());
hour(now());
……
⑤select extract(week from now()); 得到是第幾周/年/月/。。。
select dayofweek(now()); 得到是一週的第幾天
三、
型別轉換:顯式和隱式
☆儘量不要發生隱式型別轉換!!
如何避免:
①定義列時,
存數字,則定義為decimal
存字串時,則定義為varchar
存日期時,則定義為date
②select或者insert時,對常量來說:
數字:不加”(單引號)
字串:一定要加” –》字串不加單引號可能會出現災難性後果!!!
日期:可加可不加,最好加”

cast函式

cast函式:顯示型別轉換
cast(列名 as 型別)
cast(常量 as 型別)
eg:
mysql>explain select * from t1 where name=cast(123 as char);
情況:
①字串轉成數字、日期等
②數字轉換成字串、日期等
③日期轉換成數字、字串等

ifnull函式

在mysql裡碰見空值的時候有用。
例子:

mysql> select PLAYERNO,ifnull(LEAGUENO,'No LEAGUENO') from PLAYERS;

–》就是說,在LEAGUENO為空值時,用“No LEAGUENO”來替換空值顯示。

if函式

①mysql> select if(LEAGUENO is not null,LEAGUENO,’Sorry No LEAGUENO’) from PLAYERS;
–》如果LEAGUENO 為空,就顯示“Sorry No LEAGUENO”
②原來:
這裡寫圖片描述
執行:
mysql>select name,if(year(BIRTH_DATE)<1950,’老隊員’,’主力隊員’),year(BIRTH_DATE) from PLAYERS;
–》如果出生年份<1950年,就顯示為’老隊員’,否則就顯示’主力隊員’
結果:
這裡寫圖片描述

case函式

用法①:加上類似’M”F’的列屬性
這裡寫圖片描述

mysql> select name,case sex
    -> when 'M' then '男性' 
    -> when 'F' then '女性'
    -> else '無效值' end sex_format    
    -> from PLAYERS;

這裡寫圖片描述
用法②:不加列屬性的

mysql>select name,year(birth_date),case
    ->when year(birth_date)<1950 then '老隊員'
    -> when year(birth_date)<1960 then '成年隊員'
    -> when yaer(birth_date)<1970 then '年輕隊員'
    -> else '小隊員' end grade
    -> from PLAYERS;

這裡寫圖片描述

聚集函式

distinct:去重,放在select裡用–》select distinct 列 from 表;
desc:降序
select avg(ifnull(列名,0)) from 表名;
—》當列的屬性值為NULL時,用0代替null進行計算

聚集函式:只能用在select和having語句中!!
sum():求和,null不參與計算
avg():求平均值,null不參與計算
count():求行數
max():求最大值
min():求最小值
group_concat():mysql裡特有的分組函式,這些值一個挨一個的放置,例:
這裡寫圖片描述

SQL基本查詢語句

select [all | distinct] <目標列表達式> <聚集函式>
from <表名或檢視名>
[where<條件>]
[group by<列名1>[having<條件>]] –》having是選擇組的條件
[order by<列名1>[asc | desc]]

mysql獨有的limit子句

例:得到編號最大的前四個球員的編號和名字

select playerno,name
from    players
order by playerno DESC
limit 4

–》行先按照球員編號進行排序,然後使用limit從中挑出最前面的四行。如果沒有order by子句,返回的四行就是不可預料的,所以,
limit常與order by一起用