檢索數(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... |