码迷,mamicode.com
首页 > 数据库 > 详细

mysql基础

时间:2018-08-23 22:21:41      阅读:284      评论:0      收藏:0      [点我收藏+]

标签:distinct   HERE   hid   ems   空格   函数   字符   数字   扩展正则   

1、通配符的使用:

  SQL的模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零个字符)。在 MySQL中,SQL的模式缺省是忽略大小写的。下面显示一些例子。  

  注意在你使用SQL模式时,你不能使用=或!=;而使用LIKE或NOT LIKE比较操作符。

  (1)为了找出以“b”开头的名字: 

mysql> SELECT * FROM pet WHERE name LIKE "b%";

  (2)为了找出以“fy”结尾的名字:

mysql> SELECT * FROM pet WHERE name LIKE "%fy";

   (3)为了找出包含一个“w”的名字:

mysql> SELECT * FROM pet WHERE name LIKE "%w%";

  (4)为了找出包含正好2个字符开头第三个是a的名字,使用“_”模式字符:

mysql> SELECT * FROM pet WHERE name LIKE "__a";

由MySQL提供的模式匹配的其他类型是使用扩展正则表达式。当你对这类模式进行匹配测试时,使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,它们是同义词)。

2、正则表达式的使用:

  (1)“.” 匹配任何单个的字符。 

  (2)一个字符类“[...]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”、“b”或“c”。为了命名字符的一个范围,使用一个“-”。“[a-z]” 匹配任何小写字母,而“[0-9]”匹配任何数字。 

  (3)“ * ”匹配零个或多个在它前面的东西。例如,“x*”匹配任何数量的“x”字符,“[0-9]*”匹配的任何数量的数字,而“.*”匹配任何数量的任何东西。 

正则表达式是区分大小写的,但是如果你希望,你能使用一个字符类匹配两种写法。例如,“[aA]”匹配小写或大写的“a”而“[a-zA-Z]”匹配两种写法的任何字母。 

如果它出现在被测试值的任何地方,模式就匹配(只要他们匹配整个值,SQL模式匹配)。 

为了定位一个模式以便它必须匹配被测试值的开始或结尾,在模式开始处使用“^”或在模式的结尾用“$”。 
为了说明扩展正则表达式如何工作,上面所示的LIKE查询在下面使用REGEXP重写:

  (1)为了找出以“b”开头的名字,使用“^”匹配名字的开始并且“[bB]”匹配小写或大写的“b”:

mysql> SELECT * FROM pet WHERE name REGEXP "^[bB]";

  (2)为了找出以“fy”结尾的名字,使用“$”匹配名字的结尾:

mysql> SELECT * FROM pet WHERE name REGEXP "fy$";

  (3)为了找出包含一个“w”的名字,使用“[wW]”匹配小写或大写的“w”:

mysql> SELECT * FROM pet WHERE name REGEXP "[wW]";

  (4)为了找出包含正好5个字符的名字,使用“^”和“$”匹配名字的开始和结尾,和5个“.”实例在两者之间:

mysql> SELECT * FROM pet WHERE name REGEXP "^.....$";

  (5)你也可以使用“{n}”“重复n次”操作符重写先前的查询:

mysql> SELECT * FROM pet WHERE name REGEXP "^.{5}$";

 3、使用数据处理函数:

  常用的文本处理函数:

  left(str,len)    返回串左边的字符

select left("abcd",2);

  right(str,len)    返回串右边的字符

select right("abcd",1);

  length(str)    返回串的长度

select length("abcd");

  lower(str)     将串转换为小写

select lower(ABCD);

  upper(str)     将串转换为大写 

select upper(abcd);

  instr(str,substr)

  这个函数返回字符串在某一个字段的内容中的位置, 没有找到字符串返回0,否则返回位置(从1开始)

select instr("substr","bs");    【返回 3】

  locate(substr,str)      locate(substr,str,pos) 

    第一个语法返回字符串 str中子字符串substr的第一个出现位置。第二个语法返回字符串 str中子字符串substr的第一个出现位置, 起始位置在pos。如若substr 不在str中,则返回值为0。 

SELECT LOCATE(bar, foobarbar);  【返回 4】
SELECT LOCATE(bar, foobarbar,5);  【返回 7】

  position(substr IN str) 

  返回子串 substr 在字符串 str 中第一次出现的位置。如果子串 substr 在 str 中不存在,返回值为 0。

SELECT POSITION(bar, ‘foobarbar);   【返回 4】

  ltrim(str)    去掉串左边的空格

select ltrim("  aac");

  rtrim(str)    去掉串右边的空格

select rtrim("  aac");

聚集函数如下表:

  
AVG() 返回某列的平均值
COUNT() 返回某列的行数
MAX() 返回某列的最大值
MIN() 返回某列的最小值
SUM() 返回某列值之和

 distinct与聚集函数:

  MySQL5.0.3以及之后的版本,聚集函数和distinct可以搭配使用,比如:

  ①对所有的行执行计算,指定all参数或不给参数(all是默认所有行为,不需要指定,如果不指定distinct,则假定为all);

  ②只包含不同的值,指定distinct参数;

  ③如果指定列名,则distinct只能用于count();distinct不能用于count(*),因此不允许使用count(distinct);distinct必须使用列名,不能用于计算或者表达式;

select avg(distinct prod_price) as avg_price from products where vend_id = 1003;

  这条SQL语句中,使用avg()函数返回vend列中vend_id=1003的对应的price平均价格,因为使用了distinct参数,因此平均值只考虑不同的值(唯一值)

组合聚集函数:
  select语句可以包含多个聚集函数,比如:

select count*as num_items,

          min(prod_price) as price_min,

          max(prod_price) as price_max,

          avg(prod_price) as price_avg

from products;

这条SQL语句,使用了单条select语句执行4个聚集计算,返回四个值(products表中items的数目、price的最高、最低以及平均值)

PS:在指定别名以包含某个聚集函数的结果时,不应该使用表中实际的列名;这样便于使用SQL更加容易和理解,以及排除方便排除错误。

mysql基础

标签:distinct   HERE   hid   ems   空格   函数   字符   数字   扩展正则   

原文地址:https://www.cnblogs.com/tg666/p/9526303.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!