MySQL学习笔记

 

1.使用DISTINCT只返回不同的值,要应用于所有列而不仅是前置它的列. 

   SELECT DISTINCT prod_name

   FROM products;

 

2.LIMIT限制结果,LIMIT 5指示MySQL返回前5行,LIMIT 5,3指示MySQL返回从第6行开始的3行(第1行为行0)。

   SELECT prod_name

   FROM products LIMIT 5,3

   等效于

   SELECT prod_name

   FROM products LIMIT 3 offset 5;

 

3.ORDER BY排序,默认为升序ASC,DESC关键字表示降序

   SELECT prod_id,prod_price,prod_name

    FROM products

    ORDER BY prod_price,prod_name;

 

4.BETWEEN AND 匹配范围中所有的值,包括指定的开始值和结束值。

 

5.空值检查

  SELECT cust_id

  FROM customers

  WHERE cust_email IS NULL;

 

6.IN操作符

   SELECT prod_name,prod_price

   FROM products

   WHERE vend_id IN (1002,1003)

   ORDER BY prod_name;

 

7.NOT操作符

   MySQL支持使用NOT对IN,BEWTEEN和EXISTS子句取反

   SELECT prod_name,prod_price

   FROM products

   WHERE vend_id NOT IN (1002,1003);

 

8.用通配符进行过滤

   %表示任何字符出现任意次数, _下划线只匹配单个字符,不能多也不能少

   SELECT prod_id,prod_name

   FROM products

   WHERE prod_name LIKE '%anvil%';

  '%anvil%'表示匹配任何位置包含文本anvil的值

   SELECT prod_id,prod_name

   FROM products

   WHERE prod_name LIKE '_ ton anvil';

 

9.用正则表达式进行搜索

   检索列prod_name包含文本1000的所有行:   点匹配任一字符

   SELECT prod_name                                     SELECT prod_name

   FROM products   FROM products

   WHERE prod_name REGEXP '1000'   WHERE prod_name REGEXP '.000'

   ORDER BY prod_name; ORDER BY prod_name;

   输出

+-----------------+

|   prod_name  |

+-----------------+

| JetPack 1000 |

| JetPack 2000 |

 

  匹配不区分大小写,为区分大小写,可使用BINARY关键字。例如

  SELECT prod_name

  FROM products

  WHERE prod_name REGEXP BINARY 'JetPack'; 

 

  匹配其中之一,使用|,如

  SELECT prod_name

  FROM products

  WHERE prod_name REGEXP '1000|2000|3000'

 

  匹配几个字符之一

  SELECT prod_name

  FROM products

  WHERE prod_name REGEXP '[123] ton'

   [^123 ]匹配除这些字符外的任何东西

 

  匹配范围[0123456789]等价于[0-9],范围不一定是数值,如[a-z]

 

  匹配特殊字符,要用\\为前导,例如\\-\\\匹配\

 

   空白元字符

  +--------------------------------------------------------------------------------------+

  |    元字符 说明  |

  -----------------------------------------------------------------------------------------

\\f 换页

\\n 换行

\\r 回车

\\t 制表

\\v 纵向制表

   -----------------------------------------------------------------------------------------

 

  字符类

  +---------------------------------------------------------------------------------------+

  | 类  说明   |

  ------------------------------------------------------------------------------------------

   [:alnum:] 任意字母和数字(同[a-zA-Z0-9])

   [:alpha:] 任意字符(同a-zA-Z)

   [:blank:]   空格和制表(同[ \\t])

   [:cntrl:] ASCII控制字符(ASCII 0到31和127)

   [:digit:] 任意数字(同[0-9])

   [:print:] 任意可打印字符

   [:graph:] 与[:print:]相同,但不包括空格

   [:lower:] 任意小写字母(同[a-z])

   [:upper:] 任意大写字母(同[A-Z])

   [:punct:] 即不在[:alnum:]又不在[:cntrl:]中的任意字符

   [:space:]                       包括空格在内的任意空白字符(同[\\f\\n\\r\\t\\v])

   [:xdigit:] 任意十六进制数字(同[a-fA-F0-9])

  -----------------------------------------------------------------------------------------

 

   重复元字符

  +---------------------------------------------------------------------------------------+

  |    元字符 说明

   -----------------------------------------------------------------------------------------

        * 0个或多个匹配

+ 1个或多个匹配(等于{1,})

? 0个或1个匹配(等于{0,1})

{n} 指定数目的匹配

{n,} 大于等于指定数目的匹配

  {n,m} 匹配数目的范围(m不超过255)

  --------------------------------------------------------------------------------------------

 

  SELECT prod_name

  FROM products

  where prod_name REGEXP '\\([0-9] sticks?\\)';

  +-------------------+

  |   prod_name    |

  +-------------------+

  |  TNT (1 stick)    |

  |  TNT (5 sticks)  |

  +-------------------+

  \\(匹配(,[0-9]匹配任意数字(这个例子为1和5),sticks?匹配stick和sticks(s后的?使s可选),\\)匹配)

 

  SELECT prod_name

  FROM products

  where prod_name REGEXP '[[:digit:]]{4}';

  +-------------------+

  |   prod_name    |

  +-------------------+

  |  JetPack 1000  |

  |  JetPack 2000  |

  +-------------------+

  [:digit:]匹配任意数字,{4}确切地要求它前面的字符出现4次,所以[[:digit:]]{4}匹配连在一起的任意4位数字

 

   定位元字符

  +-----------------------------------------------------------------------------------------+

  |    元字符  说明

  ---------------------------------------------------------------------------------------------

 ^ 文本的开始

         $ 文本的结尾

         [[:<:]] 词的开始

         [[:>:]] 词的结尾

  ----------------------------------------------------------------------------------------------

  例如^[0-9\\.] 只在.或任意数字为串中第一个字符时才匹配它们

 

  简单的正则表达式测试,可以在不使用数据库表的情况下用SELECT来测试正则表达式。REGEXP检查总是返回0(没有匹   配)或1(匹配)。可以用带文字串的REGEXP来测试表达式,并试验它们。相应的语法如下:

  SELECT 'hello' REGEXP '[0-9]';

 

 10.创建计算字段

  多数DBMS使用+或||来实现拼接,MySQL则使用Concat()函数来实现

  SELECT Concat(vend_name, ' (', vend_country, ')')

  FROM vendors;

 

  LTrim()函数去掉值左边的空格,RTrim()函数去掉值右边的空格,Trim()函数去掉值两边的空格

 

  使用AS关键字赋予别名 

  SELECT Concat(vend_name, ' (', vend_country, ')') AS vend_title

  FROM vendors;

 

  SELECT提供了测试和试验函数与计算的一个很好的办法,省略FROM子句以便简单地访问和处理表达式,例如,

  SELECT 3*2;将返回6, SELECT Trim('   abc   ');将返回abc, SELECT Now()返回当前日期和时间。


  11.函数

   文本处理函数

   +-----------------------------------------------------------------------------+

    | 函 数 说 明          |

    -------------------------------------------------------------------------------

    Left() 返回串左边的字符

Right() 返回串右边的字符

   Length() 返回串的长度

  Locate() 找出串的一个子串

Lower() 将串转换为小写

Uppter() 将串转换为大写

LTrim() 去掉串左边的空格

RTrim() 去掉串右边的空格

Soundex() 返回串的SOUNDEX值

SubString() 返回子串的字符

   +-----------------------------------------------------------------------------+

Soundex匹配发音类似

    SELECT cust_name,cust_contact

    FROM customers

    where cust_contact = 'Y.Lie';

    返回空,改为where Soundex(cust_contact) = Soundex('Y.Lie'); 返回

    +------------------+-------------------+

     |  cust_name    |  cust_contact  |

    +------------------+-------------------+

     |  Coyote Inc.   |   Y Lee        |

    +------------------+-------------------+

 

        日期和时间处理函数

   +--------------------------------------------------------------------------------------+

    | 函 数 说  明                 |

    ----------------------------------------------------------------------------------------

    AddDate() 增加一个日期(天、周等)

AddTime() 增加一个时间(时、分等)

   CurDate() 返回当前日期

  CurTime() 返回当前时间

Date() 返回日期时间的日期部分

DateDiff() 计算两个日期之差

Date_Add() 高度灵活的日期运算函数

Date_Format() 返回一个格式化的日期或时间串

Day() 返回一个日期的天数部分

DayOfWeek() 对于一个日期,返回对应的星期几

Hour() 返回一个时间的小时部分

Minute() 返回一个时间的分钟部分

Month() 返回一个日期的月份部分

Now() 返回当前日期和时间

Second() 返回一个时间的秒部分

Time() 返回一个日期时间的时间部分

Year() 返回一个日期的年份部分

   +--------------------------------------------------------------------------------------+

     SELECT cust_id,order_num

     FROM orders

     WHERE Date(order_date) = '2005-09-01';

     当order_date值为2005-09-01 11:30:05,也匹配,Date()指示MySQL仅将给出的日期与列中的日期部分进行比较,而不是给出的日期与整个列值进行比较。Year(), Month()函数同理,如WHERE Year(order_date) = 2005 AND

Month(order_date) = 9;匹配2005年9月。这样就不需要记住每个月有多少天,也不用操作闰年。

 

常用的数值处理函数

  +-------------------------------------------------------------------------+

  |    函  数 说  明 |

  ----------------------------------------------------------------------------

Abs() 返回一个数的绝对值

Sin() 返回一个角度的正弦

Cos() 返回一个角度的余弦

Tan() 返回一个角度的正切

Exp() 返回一个数的指数值

Mod() 返回一个数的余数

Pi() 返回圆周率

Rand() 返回一个随机数

Sqrt() 返回一个数的平方根

   +-------------------------------------------------------------------------+

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值