12、日期计算

YEAR( )、MONTH( )和DAYOFMONTH( )、CURDATE()、RIGHT()

1>mysql> SELECT name, birth, CURDATE(),
    -> (YEAR(CURDATE())-YEAR(birth))
    -> - (RIGHT(CURDATE(),5)<RIGHT(birth,5))
    -> AS age
    -> FROM pet;注释:  YEAR()提取日期的年份,RIGHT()提取日期的MM-DD部分的最右边5个字符。  比较MM-DD值的表达式部分的值一般为1或0,如果CURDATE()的年比birth的年早,则年份应减去1。  整个表达式有些难懂,使用alias (age)来使输出的列标记更有意义

  2>尽管查询可行,如果以某个顺序排列行,则能更容易地浏览结果。添加ORDER BY name子句按照名字对输出进行排序则能够实现。如下:

mysql> SELECT name, birth, CURDATE(),
    -> (YEAR(CURDATE())-YEAR(birth))
    -> - (RIGHT(CURDATE(),5)<RIGHT(birth,5))
    -> AS age
    -> FROM pet ORDER BY name;3>可以使用一个类似的查询来确定已经死亡动物的死亡年龄。你通过检查death值是否是NULL来确定是哪些动物,然后,对于那些非NULL值的动物,需要计算出death和birth值之间的差:
mysql> SELECT name, birth, death,
    -> (YEAR(death)-YEAR(birth)) - (RIGHT(death,5)<RIGHT(birth,5))
    -> AS age
    -> FROM pet WHERE death IS NOT NULL ORDER BY age;4>如果你想要知道哪个动物下个月过生日,怎么办?对于这类计算,年和天是无关的,你只需要提取birth列的月份部分。MySQL提供几个日期部分的提取函数,例如YEAR( )、MONTH( )和DAYOFMONTH( )。在这里MONTH()是适合的函数。为了看它怎样工作,运行一个简单的查询,显示birth和MONTH(birth)的值.如下:mysql> SELECT name, birth, MONTH(birth) FROM pet;5>找出下个月生日的动物也是容易的。假定当前月是4月,那么月值是4,你可以找在5月出生的动物 (5月),方法是:
mysql> SELECT name, birth FROM pet WHERE MONTH(birth) = 5;6>如果当前月份是12月,就有点复杂了。你不能只把1加到月份数(12)上并寻找在13月出生的动物,因为没有这样的月份。相反,你应寻找在1月出生的动物(1月) 。

你甚至可以编写查询,不管当前月份是什么它都能工作。采用这种方法不必在查询中使用一个特定的月份,DATE_ADD( )允许在一个给定的日期上加上时间间隔。如果在NOW( )值上加上一个月,然后用MONTH()提取月份,结果产生生日所在月份:

mysql> SELECT name, birth FROM pet
-> WHERE MONTH(birth) = MONTH(DATE_ADD(CURDATE(),INTERVAL 1 MONTH));

完成该任务的另一个方法是加1以得出当前月份的下一个月(在使用取模函数(MOD)后,如果月份当前值是12,则“回滚”到值0):

mysql> SELECT name, birth FROM pet
    -> WHERE MONTH(birth) = MOD(MONTH(CURDATE()), 12) + 1;
注意,MONTH返回在1和12之间的一个数字,且MOD(something,12)返回在0和11之间的一个数字,因此必须在MOD( )以后加1,否则我们将从11月( 11 )跳到1月(1)。

13、NULL值操作使用:IS NULL和IS NOT NULL操作符:而不能使用算术比较 操作符
mysql> SELECT 1 IS NULL, 1 IS NOT NULL;
+-----------+---------------+
| 1 IS NULL | 1 IS NOT NULL |
+-----------+---------------+
|         0 |             1 |
+-----------+---------------+

0或者NULL:假other:真  。布尔运算的默认真值是1。因此完全可以在定义为NOT NULL的列内插入0或空字符串,实际是NOT NULL

14、模式匹配MySQL提供标准的SQL模式匹配,以及一种基于象Unix实用程序如vi、grep和sed的扩展正则表达式模式匹配的格式。在 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>要想找出正好包含5个字符的名字,使用“_”模式字符:
  mysql> SELECT * FROM pet WHERE name LIKE '_____';  拓展:匹配N个字符,就写N个"_"

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

  

扩展正则表达式的一些字符是:

·         ‘.’匹配任何单个的字符。

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

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

  • 如果REGEXP模式与被测试值的任何地方匹配,模式就匹配(这不同于LIKE模式匹配,只有与整个值匹配,模式才匹配)。
  • 为了定位一个模式以便它必须匹配被测试值的开始或结尾,在模式开始处使用“^”或在模式的结尾用“$”。

为了说明扩展正则表达式如何工作,下面使用REGEXP重写上面所示的LIKE查询:

为了找出以“b”开头的名字,使用“^”匹配名字的开始:

  1>mysql> SELECT * FROM pet WHERE name REGEXP '^b';

如果你想强制使REGEXP比较区分大小写,使用BINARY关键字使其中一个字符串变为二进制字符串。该查询只匹配名称首字母的小写‘b’。如下:

  mysql> SELECT * FROM pet WHERE name REGEXP BINARY '^b';

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

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

  3、为了找出包含一个“w”的名字,使用以下查询:、

  mysql>SELECT * FROM pet WHERE name REGEXP 'w';

  既然如果一个正则表达式出现在值的任何地方,其模式匹配了,就不必在先前的查询中在模式的两侧放置一个通配符以使得它匹配整个值,就像你使用了一个SQL模式那样。

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

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

  你也可以使用“{n}”“重复n次”操作符重写前面的查询。如下:  mysql> SELECT * FROM pet WHERE name REGEXP '^.{5}$';注:附录G:MySQL正则表达式 提供了关于正则表达式的句法的详细信息。

15、计数行COUNT(*)   GROUP BY1》计算宠物的数目mysql> SELECT COUNT(*) FROM pet;2》在前面,你检索了拥有宠物的人的名字。如果你想要知道每个主人有多少宠物,你可以使用COUNT( )函数:(使用GROUP BY对每个owner的所有记录分组)mysql> SELECT owner, COUNT(*) FROM pet GROUP BY owner;3》COUNT( )和GROUP BY以各种方式分类你的数据。下列例子显示出进行动物普查操作的不同方式。每种动物的数量:
mysql> SELECT species, COUNT(*) FROM pet GROUP BY species;4》每种性别的动物数量:mysql> SELECT sex, COUNT(*) FROM pet GROUP BY sex;#(在这个输出中,NULL表示“未知性别”。)5》按种类和性别组合的动物数量: mysql> SELECT species, sex, COUNT(*) FROM pet GROUP BY species, sex;6》若使用COUNT( ),你不必检索整个表。例如, 前面的查询,当只对狗和猫进行时,应为:
mysql> SELECT species, sex, COUNT(*) FROM pet
    -> WHERE species = 'dog' OR species = 'cat'(检索整个表的情况是 此外为空 。因为是只对 dog和cat查询,此行可以省略大多性能 )
    -> GROUP BY species, sex;

或,如果你仅需要知道已知性别的按性别的动物数目:

mysql> SELECT species, sex, COUNT(*) FROM pet
    -> WHERE sex IS NOT NULL
    -> GROUP BY species, sex;
16、使用1个以上的表17、获取数据库和表的信息  show databases;# 如果未选中,则返回NULL  show tables ;#如果不存在,则返回empty  desc tablename;#查询数据表的结构18、在批处理模式下使用mysql19、常用的查询19.1列的最大值
SELECT MAX(article) AS article FROM shop;#article为字段19.2、拥有某个列的最大值的行(任务:找出最贵物品的编号、销售商和价格。这很容易用一个子查询做到:)
SELECT article, dealer, price FROM   shop WHERE  price=(SELECT MAX(price) FROM shop);
19.3、另一个解决方案是按价格降序排序所有行并用MySQL特定LIMIT子句只得到第一行:
SELECT article, dealer, price FROM shop ORDER BY price DESC LIMIT 1;

注:如果有多项最贵的物品( 例如每个的价格为19.95),LIMIT解决方案仅仅显示其中一个!

19.4、列的最大值:按组任务:每项物品的的最高价格是多少?
SELECT article, MAX(price) AS price
FROM   shop
GROUP BY article
19.5


mysql基本知识---20151127-2的更多相关文章

  1. Mysql数据库知识-Mysql索引总结 mysql mysql数据库 mysql函数

    mysql数据库知识-Mysql索引总结: 索引(Index)是帮助MySQL高效获取数据的数据结构. 下边是自己整理的资料与自己的学习总结,,做一个汇总. 一.真的有必要使用索引吗? 不是每一个性能 ...

  2. Mysql存储过程知识,案例--mysql存储过程基本函数

    Mysql存储过程知识,案例: create procedure delete_setting(in p_settingid integer) begin delete from setting wh ...

  3. MySQL高级知识(十六)——小表驱动大表

    前言:本来小表驱动大表的知识应该在前面就讲解的,但是由于之前并没有学习数据批量插入,因此将其放在这里.在查询的优化中永远小表驱动大表. 1.为什么要小表驱动大表呢 类似循环嵌套 for(int i=5 ...

  4. MySQL高级知识(十五)——主从复制

    前言:本章主要讲解MySQL主从复制的操作步骤.由于环境限制,主机使用Windows环境,从机使用用Linux环境.另外MySQL的版本最好一致,笔者采用的MySQL5.7.22版本,具体安装过程请查 ...

  5. MySQL高级知识(十四)——行锁

    前言:前面学习了表锁的相关知识,本篇主要介绍行锁的相关知识.行锁偏向InnoDB存储引擎,开销大,加锁慢,会出现死锁,锁定粒度小,发生锁冲突的概率低,但并发度高. 0.准备 #1.创建相关测试表tb_ ...

  6. MySQL高级知识(十三)——表锁

    前言:锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算机资源(如CPU.RAM.I/O等)的争用外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是 ...

  7. MySQL高级知识系列目录

    MySQL高级知识(一)——基础 MySQL高级知识(二)——Join查询 MySQL高级知识(三)——索引 MySQL高级知识(四)——Explain MySQL高级知识(五)——索引分析 MySQ ...

  8. MySQL高级知识(十二)——全局查询日志

    前言:全局查询日志用于保存所有的sql执行记录,该功能主要用于测试环境,在生产环境中永远不要开启该功能. 1.如何开启 #1.通过my.cnf配置开启该功能. 注:对my.cnf文件配置后,需重启my ...

  9. MySQL高级知识(十一)——Show Profile

    前言:Show Profile是mysql提供的可以用来分析当前会话中sql语句执行的资源消耗情况的工具,可用于sql调优的测量.默认情况下处于关闭状态,并保存最近15次的运行结果. 1.分析步骤 # ...

  10. MySQL高级知识(十)——批量插入数据脚本

    前言:使用脚本进行大数据量的批量插入,对特定情况下测试数据集的建立非常有用. 0.准备 #1.创建tb_dept_bigdata(部门表). create table tb_dept_bigdata( ...

随机推荐

  1. 转载:Cocos2D-x 游戏接入 Windows 设备所需做的六件事

    原文地址:http://msopentech.com/zh-hans/blog/2014/05/09/cocos2d-x-%E6%B8%B8%E6%88%8F%E6%8E%A5%E5%85%A5-wi ...

  2. MFC创建非模态对话框并修改CStatic文字

    //由IDD_STATUS_DIALOG创建一个对话框CDialog* pCheckNetStatusDlg = new CDialog(); pCheckNetStatusDlg->Creat ...

  3. linux多线程

    #include <pthread.h> pthread_t pid; pthread_create(&pid, 0, pFunc, pArgs); //创建线程(linux下线程 ...

  4. HDU1272

    http://acm.split.hdu.edu.cn/showproblem.php?pid=1272 对于这道题,只要找出形成的图是不是连通无环的图即可.即是判断输入的两个点是否来自同一个父亲结点 ...

  5. 慕课网-安卓工程师初养成-4-6 Java条件语句之 switch

    来源:http://www.imooc.com/code/1358 当需要对选项进行等值判断时,使用 switch 语句更加简洁明了.例如:根据考试的名次,给予前 4 名不同的奖品.第一名,奖励笔记本 ...

  6. 【测试】通过RMAN联机全库备份,包括控制文件,归档日志文件,备份成功后,删除已备份的归档日志。

    RMAN是一个很方便很好用的备份,恢复,还原的一个工具,做这个小测试其实只有一个RMAN语句就完全解决了这么大的需求: RMAN> backup as backupset full databa ...

  7. Windows 7的100M隐藏分区

    1.Windows 7的100MB的隐藏分区是Windows 7的活动分区,类似于Linux的/boot. 这其实有点类似Linux的做法,Linux在安装过程中可以专门分出一个100MB左右的分区作 ...

  8. [mysq]ERROR 2006 (HY000) at line xx: MySQL server has gone away 解决方法

    vi /etc/my.cnf wait_timeout=2880000interactive_timeout = 2880000max_allowed_packet = 100M 完整配置文件 [my ...

  9. SSH Secure Shell Client的傻瓜式使用方法

    说明:本记录仅是使用此软件的一种简单的操作方式,如果想深入研究,请做如下三件事: 1)到其官网了解她的前世今生 2)下载她.安装她.操作她(这一步需要不断的尝试.不断的深入.不断的探索,当然最好理论结 ...

  10. 学习练习 使用Servlet实现用户注册功能

    package com.hanqi.www; import java.io.IOException; import javax.servlet.ServletException; import jav ...