基礎(chǔ)Sql語句之一

檢索數(shù)據(jù)

  • 檢索單列
    select columnname from tablename
  • 檢索多列
    select column0, column1 from tablename
  • 檢索所有列
    select * from tablename
  • 沒有明確排序查詢,則返回的數(shù)據(jù)順序沒有特殊意義
  • 使用 distinct檢索不同行
    select distinct column0 from tablename
  • distinct關(guān)鍵字會(huì)應(yīng)用于所有列而不僅是前置他的列
  • 使用limit限制檢索結(jié)果
select column0 from tablename limit N          //返回前N行
select column0 from tablename limit M, N       //返回指定起始行M的N行
select column0 from tablename limit N offset M //返回指定起始行M的N行
  • 使用完全限定表名的Sql
    select TName.id from dbname.TName //select id from TName


排序檢索數(shù)據(jù)

  • 使用order by
    select column0 form tablename order by column1
  • 為了按多個(gè)列排序,只要指定列名并用逗號(hào)分隔即可
  • 排序默認(rèn)使用升序穗慕,對(duì)應(yīng)關(guān)鍵字為asc。也可以使用降序壁肋,對(duì)應(yīng)關(guān)鍵字為desc
    select column0 from tablename order by column1, column2 desc
  • desc 只應(yīng)用于位于其前面的列名


過濾數(shù)據(jù)

  • 使用where
    select * from tablename where column1 = N
  • 同時(shí)使用where和order by時(shí),order by應(yīng)位于where后
  • MySql執(zhí)行匹配默認(rèn)不區(qū)分大小寫
  • where子句操作符
    select * from tablename where column0 between M and N
操作符 說明
= 等于
<> 不等于
!= 不等于
< 小于
<= 小于等于
> 大于
>= 大于等于
between 在指定的兩個(gè)值之間
  • NULL 用于表示無值
    select * from tablename where column0 is null
  • 使用多個(gè)where籽慢,并用and與or連接(and優(yōu)先級(jí)高于or)
    select * from TName where C0 = N and (C1 = M or C2 = K)
  • 使用in指定條件范圍
    select * from TName where C0 in (N, M, K)
  • in操作符一般比or快且in可以包含其他select語句來建立動(dòng)態(tài)where子句
  • not 用來否定in、between猫胁、exists
    select * from TName where C0 not in (N, M, K)
  • 使用binary區(qū)分大小寫的匹配
    select * from TName where C0 = binary "Szn"


使用通配符進(jìn)行過濾

  • 為了在搜索子句中使用通配符箱亿,必須使用like操作符。通配符可以在搜索模式中任意位置使用弃秆,且可以使用多個(gè)通配符
  • %表示任何字符出現(xiàn)任意次數(shù)届惋,%不可匹配null
  • _表示能匹配任意單個(gè)字符髓帽,不能多也不能少
    select * from TName where C0 like "%szn%"
    select * from TName where C0 like "_szn%"
  • 顯而易見的是,使用通配符會(huì)增加搜索時(shí)間脑豹,最好別將其放置于搜索的開始處


用正則表達(dá)式進(jìn)行搜索

  • 使用regexp進(jìn)行正則搜索
    select * from TName where C0 regexp N //將返回所有C0中包含N的行
  • .表示任意一個(gè)字符
    select * from TName where C0 regexp ".szn"
  • |表示搜索為兩個(gè)串之一
    select * from TName where C0 regexp "szn|Hello"
  • []表示匹配給定的字符集合
    select * from TName where C0 regexp "[123]Szn"
  • [^]表示匹配任何不包含的字符
    select * from TName where C0 regexp "[^123]Szn"
  • [a-b]表示匹配a-b之間的所有字符
    select * from TName where C0 regexp "[0-9a-zA-Z]Szn"
  • 使用正則表達(dá)式時(shí)郑藏,對(duì)于. [] | -等特殊字符的匹配需要用兩個(gè)反斜杠進(jìn)行轉(zhuǎn)義
    select * from TName where C0 regexp "\\[]"
  • 字符類
    select * from TName where C0 regexp "[[:alnum:]]"
說明
[:alnum:] 任意字母與數(shù)字(同[a-zA-Z0-9])
[:alpha:] 任意字母(同[a-zA-Z])
[:blank:] 空格和制表
[:cntrl:] ASCII控制字符(ASCII 0-31和127)
[:digit:] 任意數(shù)字(同[0-9])
[:graph:] 與[:printf:]相同,單不包括空格
[:lower:] 任意小寫字母(同[a-z])
[:print:] 任意可打印字符
[:punct:] 不在[:alnum:]和[:cntrl:]中的任意字符
[:upper:] 任意大寫字母(同[A-Z])
[:xdigit:] 任意十六進(jìn)制數(shù)字(同[a-fA-F0-9])
  • 匹配多個(gè)實(shí)例
    select * from TName where C0 regexp "[a-z]{2}"
元字符 說明
* 0或多個(gè)匹配
+ 1或多個(gè)匹配
? 0或1個(gè)匹配
{n} 指定n個(gè)匹配
{n,} 不少于n的匹配
{n, m} 匹配數(shù)目的范圍瘩欺,m不超過255
  • 定位符
    select * from TName where C0 regexp "^szn"
元字符 說明
^ 文本的開始
$ 文本的結(jié)尾
[[:<:]] 詞的開始
[[:>:]] 詞的結(jié)尾
  • 在沒有數(shù)據(jù)庫的情況下測試正則表達(dá)式
select "hello world" regexp "[[:<:]]world"  \\返回1
select "hello world" regexp "^world"        \\返回0


創(chuàng)建計(jì)算字段

  • 計(jì)算字段并不實(shí)際存在于數(shù)據(jù)庫表中必盖,而是在運(yùn)行時(shí)由select語句內(nèi)創(chuàng)建的
  • concat函數(shù)來拼接兩個(gè)列
  • as賦予別名
    select concat(C0, ",", C1) as Ct from TName
    select concat("1", "2") as Re \\Re:"12"
  • 執(zhí)行算術(shù)計(jì)算
    select C0 + C1 as Sum from TName


使用數(shù)據(jù)處理函數(shù)

  • 常用的文本處理函數(shù)
函數(shù) 說明 示例 結(jié)果
left() 返回串左邊的字符 select left("Hello", 2) "He"
right() 返回串右邊的字符 select right("Hello", 2) "lo"
length() 返回串的長度 select length("Hello") 5
locate() 得到字串的位置 select locate("ll", "Hello") 3
lower() 將串轉(zhuǎn)為小寫 select lower("Hello") "hello"
upper() 將串轉(zhuǎn)為大寫 select upper("Hello") "HELLO"
ltrim() 去掉串左邊的空格 select ltrim(" Hello ") "Hello "
rtirm() 去掉串由邊的空格 select rtrim(" Hello ") " Hello"
trim() 去掉串兩邊的空格 select trim(" Hello ") "Hello"
substring() 得到字串 select substring("Hello", 2)
select substring("Hello" from 2)
select substring("Hello", 2, 3)
select substring("Hello", -2)
select substring("Hello" from -4 for 3)
"ello"
"ello"
"ell"
"lo"
"ell"
  • 常用的日期和時(shí)間處理函數(shù)
  • MySql的日期時(shí)間建議使用2000-01-02 03:04:05這種格式
  • 以下列出的函數(shù)并不全,湊合著看吧
函數(shù) 說明 示例 結(jié)果
addDate() 增加一個(gè)日期(天俱饿、周等) select addDate("2000-01-02 03:04:05", 2) 2000-01-04 03:04:05
addTime() 增加一個(gè)時(shí)間(時(shí)歌粥、分等) select addTime("2000-01-02 03:04:05", "1:1:1")
select addTime("2000-01-02 03:04:05", "1:1")
select addTime("2000-01-02 03:04:05", 1)
2000-01-04 04:05:06
2000-01-04 04:05:05
2000-01-04 03:04:06
curDate() 返回當(dāng)前日期 select curdate() 2018-3-18
curTime() 返回當(dāng)前時(shí)間 select curtime() 21:53:45
date() 返回日期時(shí)間的日期部分 select date("2000-01-02 03:04:06") 2000-01-02
time() 返回日期時(shí)間的時(shí)間部分 select time("2000-01-01 01:02:03") 01:02:03
dateDiff() 計(jì)算日期之差 select datediff("2000-01-01 01:02:03", "2000-01-03 01:02:03") -2
date_Add() 等效于addDate()使用interval標(biāo)志后的效果 見下方表格 見下方表格
date_Format() 返回一個(gè)格式化的日期或時(shí)間串 格式化控制符一大堆不樂意記 懶得寫
year() 類似 day() 類似 day() 類似 day()
month() 類似 day() 類似 day() 類似 day()
day() 返回時(shí)間的天數(shù)部分 select day("2000-01-01 01:02:03") 1
hour() 類似 day() 類似 day() 類似 day()
minute() 類似 day() 類似 day() 類似 day()
second() 類似 day() 類似 day() 類似 day()
dayOfWeek() 對(duì)于一個(gè)日期,得到是星期幾 select dayofweek("2018-03-18 01:02:03") 1 (備注:1代表周日)
now() 得到當(dāng)前時(shí)間 select now() 2018-03-18 22:05:10
  • addDate(date, interval expr unit)
標(biāo)識(shí)符 意義 示例 結(jié)果
microsecond microseconds select addDate("2000-01-02 03:04:05", interval 1 microsecond) 2000-01-02 03:04:05.000001
second seconds select addDate("2000-01-02 03:04:05", interval 1 second) 2000-01-02 03:04:06
minute minutes select addDate("2000-01-02 03:04:05", interval 1 minute) 2000-01-02 03:05:05
hour hours select addDate("2000-01-02 03:04:05", interval 1 hour) 2000-01-02 04:04:05
day days select addDate("2000-01-02 03:04:05", interval 1 day) 2000-01-03 03:04:05
week weeks select addDate("2000-01-02 03:04:05", interval 1 week) 2000-01-09 03:04:05
month months select addDate("2000-01-02 03:04:05", interval 1 month) 2000-02-02 03:04:05
quarter quarters select addDate("2000-01-02 03:04:05", interval 1 quarter) 2000-04-02 03:04:05
year years select addDate("2000-01-02 03:04:05", interval 1 year) 2001-01-02 03:04:05
second_
microsecond
seconds.
microseconds
select addDate("2000-01-02 03:04:05", interval 1.1 second_microsecond) 2000-01-02 03:04:06.100000
minute_
microsecond
minutes:seconds.
microseconds
select addDate("2000-01-02 03:04:05", interval "1:1.000001" minute_microsecond) 2000-01-02 03:05:06.000001
minute_second minutes:seconds select addDate("2000-01-02 03:04:05", interval "1:1" minute_second) 2000-01-02 03:05:06
hour_
microsecond
hours:miniutes:
seconds.
microseconds
select addDate("2000-01-02 03:04:05", interval "1:1:1.1" hour_microsecond) 2000-01-02 04:05:06.100000
hour_second hours:minutes:
seconds
類似用法 類似結(jié)果
hour_miniute hours:minutes 類似用法 類似結(jié)果
day_microsecond days:hours:
minutes:
seconds.
microsecond
類似用法 類似結(jié)果
day_second 類似功能 類似用法 類似結(jié)果
day_minute 類似功能 類似用法 類似結(jié)果
day_hour 類似功能 類似用法 類似結(jié)果
year_month 類似功能 類似用法 類似結(jié)果
  • 常用的數(shù)值處理函數(shù)
函數(shù) 說明 示例 結(jié)果
abs() 絕對(duì)值 select abs(-1) 1
exp() e的N次方 select exp(1) 2.71828...
sqrt() 平方根 select sqrt(4) 2
mod() 取余數(shù) select mod(5, 3) 2
pi() 圓周率 select pi() 3.1415926...
rand() 隨機(jī)值 select rand() 0.691745...
sin() 正弦 select sin(pi() / 6) 0.499999...
cos 余弦 select cos(pi() / 3) 0.500000...
tan() 正切 select tan(pi() / 4) 0.99999...
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拍埠,一起剝皮案震驚了整個(gè)濱河市失驶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌枣购,老刑警劉巖嬉探,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異棉圈,居然都是意外死亡涩堤,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門迄损,熙熙樓的掌柜王于貴愁眉苦臉地迎上來定躏,“玉大人,你說我怎么就攤上這事芹敌∪叮” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵氏捞,是天一觀的道長碧聪。 經(jīng)常有香客問我,道長液茎,這世上最難降的妖魔是什么逞姿? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮捆等,結(jié)果婚禮上滞造,老公的妹妹穿的比我還像新娘。我一直安慰自己栋烤,他們只是感情好谒养,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著明郭,像睡著了一般买窟。 火紅的嫁衣襯著肌膚如雪丰泊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天始绍,我揣著相機(jī)與錄音瞳购,去河邊找鬼。 笑死亏推,一個(gè)胖子當(dāng)著我的面吹牛学赛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播径簿,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼罢屈,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了篇亭?” 一聲冷哼從身側(cè)響起缠捌,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎译蒂,沒想到半個(gè)月后曼月,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡柔昼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年哑芹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捕透。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡聪姿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出乙嘀,到底是詐尸還是另有隱情末购,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布虎谢,位于F島的核電站盟榴,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏婴噩。R本人自食惡果不足惜擎场,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望几莽。 院中可真熱鬧迅办,春花似錦、人聲如沸章蚣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至镊绪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間洒忧,已是汗流浹背蝴韭。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留熙侍,地道東北人榄鉴。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像蛉抓,于是被迫代替她去往敵國和親庆尘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354