基础Sql语句之一
检索数据
【基础Sql语句之一】
- 检索单列
select columnname from tablename
- 检索多列
select column0, column1 from tablename
- 检索所有列
select * from tablename
- 没有明确排序查询,则返回的数据顺序没有特殊意义
- 使用 distinct检索不同行
select distinct column0 from tablename
- distinct关键字会应用于所有列而不仅是前置他的列
- 使用limit限制检索结果
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
排序检索数据
- 使用order by
select column0 form tablename order by column1
- 为了按多个列排序,只要指定列名并用逗号分隔即可
- 排序默认使用升序,对应关键字为asc。也可以使用降序,对应关键字为desc
select column0 from tablename order by column1, column2 desc
- desc 只应用于位于其前面的列名
过滤数据
- 使用where
select * from tablename where column1 = N
- 同时使用where和order by时,order by应位于where后
- MySql执行匹配默认不区分大小写
- where子句操作符
select * from tablename where column0 between M and N
操作符 | 说明 |
---|---|
= | 等于 |
<> | 不等于 |
!= | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
between | 在指定的两个值之间 |
- NULL 用于表示无值
select * from tablename where column0 is null
- 使用多个where,并用and与or连接(and优先级高于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语句来建立动态where子句
- not 用来否定in、between、exists
select * from TName where C0 not in (N, M, K)
- 使用binary区分大小写的匹配
select * from TName where C0 = binary "Szn"
使用通配符进行过滤
- 为了在搜索子句中使用通配符,必须使用like操作符。通配符可以在搜索模式中任意位置使用,且可以使用多个通配符
- %表示任何字符出现任意次数,%不可匹配null
- _表示能匹配任意单个字符,不能多也不能少
select * from TName where C0 like "%szn%"
select * from TName where C0 like "_szn%"
- 显而易见的是,使用通配符会增加搜索时间,最好别将其放置于搜索的开始处
用正则表达式进行搜索
- 使用regexp进行正则搜索
select * from TName where C0 regexp N //将返回所有C0中包含N的行
- .表示任意一个字符
select * from TName where C0 regexp ".szn"
- |表示搜索为两个串之一
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"
- 使用正则表达式时,对于. [] | -等特殊字符的匹配需要用两个反斜杠进行转义
select * from TName where C0 regexp "\\[]"
- 字符类
select * from TName where C0 regexp "[[:alnum:]]"
类 | 说明 |
---|---|
[:alnum:] | 任意字母与数字(同[a-zA-Z0-9]) |
[:alpha:] | 任意字母(同[a-zA-Z]) |
[:blank:] | 空格和制表 |
[:cntrl:] | ASCII控制字符(ASCII 0-31和127) |
[:digit:] | 任意数字(同[0-9]) |
[:graph:] | 与[:printf:]相同,单不包括空格 |
[:lower:] | 任意小写字母(同[a-z]) |
[:print:] | 任意可打印字符 |
[:punct:] | 不在[:alnum:]和[:cntrl:]中的任意字符 |
[:upper:] | 任意大写字母(同[A-Z]) |
[:xdigit:] | 任意十六进制数字(同[a-fA-F0-9]) |
- 匹配多个实例
select * from TName where C0 regexp "[a-z]{2}"
元字符 | 说明 |
---|---|
* | 0或多个匹配 |
+ | 1或多个匹配 |
? | 0或1个匹配 |
{n} | 指定n个匹配 |
{n,} | 不少于n的匹配 |
{n, m} | 匹配数目的范围,m不超过255 |
- 定位符
select * from TName where C0 regexp "^szn"
元字符 | 说明 |
---|---|
^ | 文本的开始 |
$ | 文本的结尾 |
[[:<:]] | 词的开始 |
[[:>:]] | 词的结尾 |
- 在没有数据库的情况下测试正则表达式
select "hello world" regexp "[[:<:]]world"\\返回1
select "hello world" regexp "^world"\\返回0
创建计算字段
- 计算字段并不实际存在于数据库表中,而是在运行时由select语句内创建的
- concat函数来拼接两个列
- as赋予别名
select concat(C0, ",", C1) as Ct from TName
select concat("1", "2") as Re \\Re:"12"
- 执行算术计算
select C0 + C1 as Sum from TName
使用数据处理函数
- 常用的文本处理函数
函数 | 说明 | 示例 | 结果 |
---|---|---|---|
left() | 返回串左边的字符 | select left("Hello", 2) |
"He" |
right() | 返回串右边的字符 | select right("Hello", 2) |
"lo" |
length() | 返回串的长度 | select length("Hello") |
5 |
locate() | 得到字串的位置 | select locate("ll", "Hello") |
3 |
lower() | 将串转为小写 | select lower("Hello") |
"hello" |
upper() | 将串转为大写 | 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" |
- 常用的日期和时间处理函数
- MySql的日期时间建议使用2000-01-02 03:04:05这种格式
- 以下列出的函数并不全,凑合着看吧
函数 | 说明 | 示例 | 结果 |
---|---|---|---|
addDate() | 增加一个日期(天、周等) | select addDate("2000-01-02 03:04:05", 2) |
2000-01-04 03:04:05 |
addTime() | 增加一个时间(时、分等) | 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() | 返回当前日期 | select curdate() |
2018-3-18 |
curTime() | 返回当前时间 | select curtime() |
21:53:45 |
date() | 返回日期时间的日期部分 | select date("2000-01-02 03:04:06") |
2000-01-02 |
time() | 返回日期时间的时间部分 | select time("2000-01-01 01:02:03") |
01:02:03 |
dateDiff() | 计算日期之差 | select datediff("2000-01-01 01:02:03", "2000-01-03 01:02:03") |
-2 |
date_Add() | 等效于addDate()使用interval标志后的效果 | 见下方表格 | 见下方表格 |
date_Format() | 返回一个格式化的日期或时间串 | 格式化控制符一大堆不乐意记 | 懒得写 |
year() | 类似 day() | 类似 day() | 类似 day() |
month() | 类似 day() | 类似 day() | 类似 day() |
day() | 返回时间的天数部分 | select day("2000-01-01 01:02:03") |
1 |
hour() | 类似 day() | 类似 day() | 类似 day() |
minute() | 类似 day() | 类似 day() | 类似 day() |
second() | 类似 day() | 类似 day() | 类似 day() |
dayOfWeek() | 对于一个日期,得到是星期几 | select dayofweek("2018-03-18 01:02:03") |
1 (备注:1代表周日) |
now() | 得到当前时间 | select now() |
2018-03-18 22:05:10 |
- addDate(date, interval expr unit)
标识符 | 意义 | 示例 | 结果 |
---|---|---|---|
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 |
类似用法 | 类似结果 |
hour_miniute | hours:minutes | 类似用法 | 类似结果 |
day_microsecond | days:hours: minutes: seconds. microsecond |
类似用法 | 类似结果 |
day_second | 类似功能 | 类似用法 | 类似结果 |
day_minute | 类似功能 | 类似用法 | 类似结果 |
day_hour | 类似功能 | 类似用法 | 类似结果 |
year_month | 类似功能 | 类似用法 | 类似结果 |
- 常用的数值处理函数
函数 | 说明 | 示例 | 结果 |
---|---|---|---|
abs() | 绝对值 | select abs(-1) |
1 |
exp() | e的N次方 | select exp(1) |
2.71828... |
sqrt() | 平方根 | select sqrt(4) |
2 |
mod() | 取余数 | select mod(5, 3) |
2 |
pi() | 圆周率 | select pi() |
3.1415926... |
rand() | 随机值 | 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... |
推荐阅读
- Python基础|Python基础 - 练习1
- Java|Java基础——数组
- Java基础-高级特性-枚举实现状态机
- 数据库总结语句
- 营养基础学20180331(课间随笔)??
- iOS面试题--基础
- HTML基础--基本概念--跟着李南江学编程
- py连接mysql
- 2019-01-18Mysql中主机名的问题
- MySql数据库备份与恢复