select * from table where username = ‘张三’;(查找名字叫做张三的用户信息)
select * from table where price >= 10;(查找价格大于或等于10元的商品信息)
select * from table where price <>13;(查找价格不等于13元的商品信息)
select * from table where price between 13 and 17;(查找价格为13到17的商品)
1)select * from table where id = 1 or id = 2 and price >=13;(当or和and同时存在时,sql会先执行and的语句。即查找出id为2且价格大于等于13或者id=1的商品信息)
2)select * from table where (id = 1 or id = 2) and price >=13;(查找商品id为1或者2且他们的价格小于等于13的商品)
select * from tabel where price in (1,3,13);(查找商品价格为1,3,13的商品信息)
本条语句也可以 select * from tabel price = 1 or price = 3 or price = 13;
1.使用in的语法更清晰
2.使用in的次序更清楚,而or还要考虑次序的规则
3.in的操作速度会比or的操作速度更快
4.in的最大优点是可以包含其他的where语句
select * from table where price not in (1,3);(查找价格不为1和3的商品信息)
select * from reader where name != ‘赵正义’;
select * from table where username like ‘ZW%’;(查找出用户名以ZW开头的信息,%告诉MySQL接受ZW之后的任意字符,不管它有多少字符,这个搜索是区分大小写的)
select * from table where username like ‘%ZW%(查找出用户名包含ZW的信息的用户信息)’
select * from table where username like ‘e%s’(查找出用用户名以e开头,以s结尾的信息)
解决办法:1.后面再增加通配符%
2.使用函数去掉首尾空格
select * from table where username like ‘_ZW’;
1.通配符的查询效率很低,尽量使用其他的操作符
2.不要将通配符放在搜索模式的开始处,像like ‘%ZW’,造成索引失效;
3.注意通配符的位置。
4.通配符%不能匹配到NULL值
如:select * from table where username like ‘zhangsan’;
select * from table where username regexp ‘zhangsan’;
第一个不能查出叫做zhangsanfeng的信息,而第二个可以查出叫做zhangsanfeng的信息。
select username from table where username regexp ‘ZW’;(查找含有用户名含有zw的信息)
select username from table where username regexp ‘.000’;(.是正则表达式语言中一个特殊的字符。它表示可以匹配任意一个字符。因此,1000和2000都可以匹配)
select * from table where username regexp ‘Z|W’;(查找出用户名含有Z或者W的用户信息)
|是正则表达式当中or操作符。
select * from table where username regexp ‘[123]TON’;(查找开头为1,2,3中之一后接TON的用户名信息);
【123】(等价于【1|2|3】)是正则表达式当中的匹配指定的单一字符,指定的字符中取一,是另一种形式的or语言。【^123】排除指定的字符,匹配其余的任意字符。
select * from table where phone regexp ‘[1-7]ZW’;(查找口头为1到7这个范围的数字且含有ZW的信息)
select * from table where username regexp ‘.’;(在正则表达式中,.代表可以匹配任意字符,因此需要增加\来进行转义,使其表达可以匹配带有.的字符)
MySQL使用两个转义字符对其进行编译,MySQL自己解释一个,正则表达式库解释另一个。
[:alnum:] 任意字母和数字(同[a-zA-Z0-9])
[:alpha:] 任意字符(同[a-zA-Z])
[:blank:] 空格和制表(同[\\t])
[:cntrl:] ASCII控制字符(ASCII 0到31和127)
[:digit:] 任意数字(同[0-9])
[:graph:] 与[:print:]相同,但不包括空格
[:lower:] 任意小写字母(同[a-z])
[:print:] 任意可打印字符
[:punct:] 既不在[:alnum:]又不在[:cntrl:]中的任意字符
[:space:] 包括空格在内的任意空白字符(同[\\f\\n\\r\\t\\v])
[:upper:] 任意大写字母(同[A-Z])
[:xdigit:] 任意十六进制数字(同[a-fA-F0-9])
select product from table where regexp ‘\\([0-9] sticks?\\)’(\\是对()是对其转义,正则表达式中,?代表?前的字符可以出现一次或者零次。如:s可以出现一次或者零次。查询的结果为(1 sticks) 或(1 stick)).
正则表达式
*0个或多个匹配
+1个或多个匹配(等于{1,})
? 0个或1个匹配(等于{0,1})
{n} 指定数目的匹配
{n,} 不少于指定数目的匹配
{n,m} 匹配数目的范围(m不超过255)
定位元字符
^ 文本的开始
$ 文本的结尾
[[:<:]] 词的开始
[[:>:]] 词的结尾
select * from table where regexp ‘^[0-9\\.]’;
(查出表格中以数字或者.开头的用户信息)
1)拼接
a)含义:将值连接在一起拼接成单个值。MySQL使用concat()函数。多数DBMS使用+或||实现拼接。
b)实例:
concat()连接每一个串,每一个串必须用,号隔开。上条语句包含四个串,vend_name,(左圆括号,)右圆括号,vend_country.
2)去除空格
a)含义:将串的空格删除去掉。去除串两端的空格使用trim()函数,去掉串左边的空格使用Ltrim()函数,去掉右边的空格使用Rtrim()函数。
b)实例:
3)使用别名
a)含义:为新的拼接字段赋予一个新的名字。使用关键字as.
b)实例:
a)含义:对检索的字段进行算术计算。
b)实例:
计算检索出来的数据quantity*item_price作为expanded_price新字段。
a)常用的文本处理函数
函 数 说 明
Left() 返回串左边的字符
Length() 返回串的长度
Locate() 找出串的一个子串
Lower() 将串转换为小写
LTrim() 去掉串左边的空格
Right() 返回串右边的字符
RTrim() 去掉串右边的空格
Soundex() 返回串的SOUNDEX值
SubString() 返回子串的字符
Upper() 将串转换为大写
b)实例
a)常见日期和时间函数
函 数 说 明
AddDate() 增加一个日期(天、周等)
AddTime() 增加一个时间(时、分等)
CurDate() 返回当前日期
CurTime() 返回当前时间
Date() 返回日期时间的日期部分
DateDiff() 计算两个日期之差
Date_Add() 高度灵活的日期运算函数
Date_Format() 返回一个格式化的日期或时间串
Day() 返回一个日期的天数部分
DayOfWeek() 对于一个日期,返回对应的星期几
Hour() 返回一个时间的小时部分
Minute() 返回一个时间的分钟部分
Month() 返回一个日期的月份部分
Now() 返回当前日期和时间
Second() 返回一个时间的秒部分
Time() 返回一个日期时间的时间部分
Year() 返回一个日期的年份部分
b)实例
order_date是个dateTime的类型数据时,其不单单有日期还有具体的时间,使用Date()的函数就可以只筛选出日期,而且时间的范围应该用beteen and的关键字进行连接。
此方法无需记住该月份有多少天。
函 数 说 明
Abs() 返回一个数的绝对值
Cos() 返回一个角度的余弦
Exp() 返回一个数的指数值
Mod() 返回除操作的余数
Pi() 返回圆周率
Rand() 返回一个随机数
Sin() 返回一个角度的正弦
Sqrt() 返回一个数的平方根
Tan() 返回一个角度的正切
a)常见的聚集函数
函 数 说 明
AVG() 返回某列的平均值
COUNT() 返回某列的行数
MAX() 返回某列的最大值
MIN() 返回某列的最小值
SUM() 返回某列值之和
b)一些注意事项
1.count(*)是计算当前表格的列数,包含null值的列数。而count(column)则不包含null值的函数。
2.max()也可以找出文本数据的最大值,如select max(name) from t_student;同理min()亦是如此。
1)使用distinct()函数。对于只包含不同值的计算。
2)实例:
distinct()函数可以将相同的商品的价格去除。
1)group by关键字。对指定的列进行分组。
2)实例:
注意事项:
group by语句必须在order by语句之前。
1)使用关键字having进行分组。
2)having和where的区别。having是对分组进行过滤,而where是对表格行进行过滤。having是对分组后的数据进行过滤,而where是对分组前的数据进行操作。
3)实例
注意事项:
1.order by默认以升序排列,acs是按升序排列,decs是按降序排列。
2.order by接多个字段列排序时,字段与字段之间用,号连接。
先按price升序进行排序,当价格相同时再按output(出版社)进行排序。
子句 | 说明 |
---|---|
select | 要返回的列或表达式 |
from | 从中检索数据的表 |
where | 仅在从表选择数据时使用 |
group by | 分组说明 |
having | 对分组后的数据进行过滤 |
order by | 进行牌序 |
limit | 要检索的行数 |