select now();
return 当前时间 格式为YYYY-MM-DD hh:ii:ss
NOW() 函数本身并无多大用处,但可将其用于表达式中。如比较当前日期和其他日期的差异。
注:如果在查询中调用一个函数,在函数名和后跟的圆括号中间不允许有空格
insert into table_name values(value1,value2,value3,...),(value11,value21,value31,...);
自3.22.5 以来的MySQL版本允许通过指定多个值的列表,利用单个的INSERT语句将几行插入一个表中
这比多个INSERT 语句的键入工作要少,而且服务器执行的效率也更高。
insert into tabl_name (col1,col2) vlalues (value1,value2);
insert into tabl_name (col1,col2) vlalues (value1,value2),(value3,value4);
insert into tabl_name set col1=value1,col2=value2....
以上这几种情况都是允许的
数据库和表名有可能区分大小写的;这有取决服务器主机上使用的文件系统。在UNIX上运行的服务器对数据库名和表名是区分大小写的,因为UNIX 的文件名是区分大小写的。Windows 的文件名不区分大小写,因此运行在Windows 上的服务器对数据库名和表名不区分
查找日期的时候可以用来比较 2005-01-02这种得数据。
select * from tabl_name where info_date
WHERE 子句中的表达式可使用表1-1中的算术运算符、表1-2 的比较运算符和表1-3 的逻辑运算符。还可以使用圆括号将一个表达式分成几个部分。可使用常量、表列和函数来完成运算。
NULL 值
NULL 值是特殊的;因为它代表“无值”。不可能以评估两个已知值的相同方式来将它与已知值进行评估。为了进行NULL 值的搜索,必须采用特殊的语法。不能用= 或!= 来测试等于NULL 或不等于NULL,取而代之的是使用IS NULL 或IS NOT NULL 来测试。
MySQL3.23 及以后的版本具有一个特殊的MySQL专有的比较运算符“ ”,即使是NULL 与NULL 的比较,它相当于IS。如:
select * from tabl_name where not (sqleNULL);和
select * from tabl_name where sqle is not NULL;是一样的
limit
LIMIT 也可以从查询结果中取出中间部分。为了做到这一点,必须指定两个值。第一个值为结果中希望看到的第一个记录(第一个结果记录的编号为0 而不是1)。第二个值为希望看到的记录个数。
如select * from tabl_name limit 10,5;
可按照一个公式来排序查询结果。例如,利用ORDER BYRAND( ) 与LIMIT 结合,从表中随机抽取一个记录
如:select * from tabl_name order by rand() limit 1
concat()
select concat(province," ",city) as address,concat(info_date,",",check_id) as info;
此查询把省份和城市连接起来,中间间隔一个空格,将地址名形成一个单一字符串,而且将出生时间和check_id连接在一起,中间隔一个逗号,形成出信息字段。
在利用表达式来计算列值时,此表达式被用作列标题。如果表达式很长(如前面的一些查询样例中那样),那么可能会出现一个很宽的列。为了处理这种情况,此列可利用AS name结构来重新命名标题。这样的名称为列别名。用这种方法可使上面的输出更有意义
日期运算
在MySQL中使用日期时要记住的是,在表示日期时首先给出年份。1999 年7 月27 日表示为“1999 - 07 - 27”,而不是像通常那样表示为“ 07 - 27 - 1999”或“27 - 07 - 1999”。
mysql中可以对格式为1999 - 07 - 27的日期进行大小比较
如:select * from hy_users where 1 and '1998-01-02'
01-02'
为了测试或检索日期的成分,可使用诸如YEAR( )、MONTH( ) 或DAYOFMONTH( ) 这样的函数。例如,可通过查找月份值为3 的日期,找出与笔者出生在相同月份(三月)的总统。
如:select * from hy_com where 1 and MONTH(regist_time)=3
此例查找注册时间为3月份的纪录
此查询也可按月的名称写出:
如:select * from hy_com where 1 and MONTH(regist_time)='march'
为了更详细,详细到天,可组合测试MONTH( ) 和DAYOFMONTH( )
如:select * from hy_com where 1 and MONTH(regist_time)=3 and DAYOFMONTH(regist_time)=5;
这是一种可用来生成类似报纸上娱乐部分所刊登的那种“这些人今天过生日”清单的查询。但是,不必按前面的查询那样插入一个特殊的日期。为了查找每年的今天注册的人,只要将他们的注册日期与CURRENT _ DATE 进行比较即可:
如:select * from hy_com where 1 and MONTH(regist_time)=MONTH(CURRENT_DATE) and DAYOFMONTH(regist_time)=DAYOFMONTH(CURRENT_DATE);
可从一个日期减去另一个日期。这样可以知道日期间的间隔,这对于确定时间段是非常有用的。例如,为了确定哪位顾客注册时间最长,可将其最后登陆时间减去注册时间。为此,可利用函数TO_DAYS( ) 将最后登陆时间和注册时间转换为天数,求出差,然后除以365 得出注册年限:
select FLOOR((TO_DAYS(last_time)-TO_DAYS(regist_time))/365) from hy_com as use_time limit 1;
此查询中所用的FLOOR( ) 函数截掉了年龄的小数部分,得到一个整数。得出日期之差,还可以确定相对于某个特定日期有多长时间。
如:select FLOOR((TO_DAYS(CURRENT_DATE)-TO_DAYS(regist_time))/365) from hy_com as use_time limit 1;
模式匹配:
MySQL允许查找与某个模式相配的值。这样,可以选择记录而不用提供精确的值。为了进行模式匹配运算,可使用特殊的运算符( LIKE 和NOT LIKE),并且指定一个包含通配符的串。字符“_”匹配任意单个字符,而“%”匹配任意字符序列(包括空序列)。使用L I K E或NOT LIKE 的模式匹配都是不区分大小写的。下列模式匹配以“W”或“w”开始的姓:
select * form hy_usres where first_name like "w%";
而
select * form hy_usres where first_name = "w%"; 这种做法是严重错误的。此查询给出了一个常见的错误,它对一个算术比较运算符使用了模式。这种比较成功的惟一可能是相应的列确实包含串“ W %”或“w %”。
下列模式匹配只有4个字符的姓:
select * form hy_usres where first_name like "____";
生成汇总:
MySQL所能做的最有用的事情是浓缩大量的原始数据行并对其进行汇总。汇总的一种简单的形式是确定在一组值中哪些值是唯一值。利用DISTINCT 关键字来删除结果中的重复行。例如,不重复的列出会员的注册地:
select DISTINCT state from companys;
其他的汇总形式涉及计数,可利用COUNT( ) 函数。如果使用COUNT (*),它将给出查询所选择的行数。COUNT(*) 对选中的行进行计数。而COUNT(col_name) 只对非NULL 值进行计数
select count(DISTINCT state) from companys;
针对用于group by中的having句子,要纠正的是它没有提高查询效率的作用。但它是在查询结果已经选出后才应用的,用来缩减服务器实际送到客户机的结果。除了COUNT( ) 外还有许多汇总函数。MIN( )、MAX( )、SUM( ) 和AVG( ) 函数在确定列的最大、最小、总数和平均值时都非常有用,甚至可以同时使用它们。如:
select event_id MIN(score) as minmum,MAX(score) as maximum,MAX(score)-MIN(score)+1 as range,SUM(score) as total,AVG(score) as average from score Group by event_id
return 当前时间 格式为YYYY-MM-DD hh:ii:ss
NOW() 函数本身并无多大用处,但可将其用于表达式中。如比较当前日期和其他日期的差异。
注:如果在查询中调用一个函数,在函数名和后跟的圆括号中间不允许有空格
insert into table_name values(value1,value2,value3,...),(value11,value21,value31,...);
自3.22.5 以来的MySQL版本允许通过指定多个值的列表,利用单个的INSERT语句将几行插入一个表中
这比多个INSERT 语句的键入工作要少,而且服务器执行的效率也更高。
insert into tabl_name (col1,col2) vlalues (value1,value2);
insert into tabl_name (col1,col2) vlalues (value1,value2),(value3,value4);
insert into tabl_name set col1=value1,col2=value2....
以上这几种情况都是允许的
数据库和表名有可能区分大小写的;这有取决服务器主机上使用的文件系统。在UNIX上运行的服务器对数据库名和表名是区分大小写的,因为UNIX 的文件名是区分大小写的。Windows 的文件名不区分大小写,因此运行在Windows 上的服务器对数据库名和表名不区分
查找日期的时候可以用来比较 2005-01-02这种得数据。
select * from tabl_name where info_date
WHERE 子句中的表达式可使用表1-1中的算术运算符、表1-2 的比较运算符和表1-3 的逻辑运算符。还可以使用圆括号将一个表达式分成几个部分。可使用常量、表列和函数来完成运算。
NULL 值
NULL 值是特殊的;因为它代表“无值”。不可能以评估两个已知值的相同方式来将它与已知值进行评估。为了进行NULL 值的搜索,必须采用特殊的语法。不能用= 或!= 来测试等于NULL 或不等于NULL,取而代之的是使用IS NULL 或IS NOT NULL 来测试。
MySQL3.23 及以后的版本具有一个特殊的MySQL专有的比较运算符“ ”,即使是NULL 与NULL 的比较,它相当于IS。如:
select * from tabl_name where not (sqleNULL);和
select * from tabl_name where sqle is not NULL;是一样的
limit
LIMIT 也可以从查询结果中取出中间部分。为了做到这一点,必须指定两个值。第一个值为结果中希望看到的第一个记录(第一个结果记录的编号为0 而不是1)。第二个值为希望看到的记录个数。
如select * from tabl_name limit 10,5;
可按照一个公式来排序查询结果。例如,利用ORDER BYRAND( ) 与LIMIT 结合,从表中随机抽取一个记录
如:select * from tabl_name order by rand() limit 1
concat()
select concat(province," ",city) as address,concat(info_date,",",check_id) as info;
此查询把省份和城市连接起来,中间间隔一个空格,将地址名形成一个单一字符串,而且将出生时间和check_id连接在一起,中间隔一个逗号,形成出信息字段。
在利用表达式来计算列值时,此表达式被用作列标题。如果表达式很长(如前面的一些查询样例中那样),那么可能会出现一个很宽的列。为了处理这种情况,此列可利用AS name结构来重新命名标题。这样的名称为列别名。用这种方法可使上面的输出更有意义
日期运算
在MySQL中使用日期时要记住的是,在表示日期时首先给出年份。1999 年7 月27 日表示为“1999 - 07 - 27”,而不是像通常那样表示为“ 07 - 27 - 1999”或“27 - 07 - 1999”。
mysql中可以对格式为1999 - 07 - 27的日期进行大小比较
如:select * from hy_users where 1 and '1998-01-02'
01-02'
为了测试或检索日期的成分,可使用诸如YEAR( )、MONTH( ) 或DAYOFMONTH( ) 这样的函数。例如,可通过查找月份值为3 的日期,找出与笔者出生在相同月份(三月)的总统。
如:select * from hy_com where 1 and MONTH(regist_time)=3
此例查找注册时间为3月份的纪录
此查询也可按月的名称写出:
如:select * from hy_com where 1 and MONTH(regist_time)='march'
为了更详细,详细到天,可组合测试MONTH( ) 和DAYOFMONTH( )
如:select * from hy_com where 1 and MONTH(regist_time)=3 and DAYOFMONTH(regist_time)=5;
这是一种可用来生成类似报纸上娱乐部分所刊登的那种“这些人今天过生日”清单的查询。但是,不必按前面的查询那样插入一个特殊的日期。为了查找每年的今天注册的人,只要将他们的注册日期与CURRENT _ DATE 进行比较即可:
如:select * from hy_com where 1 and MONTH(regist_time)=MONTH(CURRENT_DATE) and DAYOFMONTH(regist_time)=DAYOFMONTH(CURRENT_DATE);
可从一个日期减去另一个日期。这样可以知道日期间的间隔,这对于确定时间段是非常有用的。例如,为了确定哪位顾客注册时间最长,可将其最后登陆时间减去注册时间。为此,可利用函数TO_DAYS( ) 将最后登陆时间和注册时间转换为天数,求出差,然后除以365 得出注册年限:
select FLOOR((TO_DAYS(last_time)-TO_DAYS(regist_time))/365) from hy_com as use_time limit 1;
此查询中所用的FLOOR( ) 函数截掉了年龄的小数部分,得到一个整数。得出日期之差,还可以确定相对于某个特定日期有多长时间。
如:select FLOOR((TO_DAYS(CURRENT_DATE)-TO_DAYS(regist_time))/365) from hy_com as use_time limit 1;
模式匹配:
MySQL允许查找与某个模式相配的值。这样,可以选择记录而不用提供精确的值。为了进行模式匹配运算,可使用特殊的运算符( LIKE 和NOT LIKE),并且指定一个包含通配符的串。字符“_”匹配任意单个字符,而“%”匹配任意字符序列(包括空序列)。使用L I K E或NOT LIKE 的模式匹配都是不区分大小写的。下列模式匹配以“W”或“w”开始的姓:
select * form hy_usres where first_name like "w%";
而
select * form hy_usres where first_name = "w%"; 这种做法是严重错误的。此查询给出了一个常见的错误,它对一个算术比较运算符使用了模式。这种比较成功的惟一可能是相应的列确实包含串“ W %”或“w %”。
下列模式匹配只有4个字符的姓:
select * form hy_usres where first_name like "____";
生成汇总:
MySQL所能做的最有用的事情是浓缩大量的原始数据行并对其进行汇总。汇总的一种简单的形式是确定在一组值中哪些值是唯一值。利用DISTINCT 关键字来删除结果中的重复行。例如,不重复的列出会员的注册地:
select DISTINCT state from companys;
其他的汇总形式涉及计数,可利用COUNT( ) 函数。如果使用COUNT (*),它将给出查询所选择的行数。COUNT(*) 对选中的行进行计数。而COUNT(col_name) 只对非NULL 值进行计数
select count(DISTINCT state) from companys;
针对用于group by中的having句子,要纠正的是它没有提高查询效率的作用。但它是在查询结果已经选出后才应用的,用来缩减服务器实际送到客户机的结果。除了COUNT( ) 外还有许多汇总函数。MIN( )、MAX( )、SUM( ) 和AVG( ) 函数在确定列的最大、最小、总数和平均值时都非常有用,甚至可以同时使用它们。如:
select event_id MIN(score) as minmum,MAX(score) as maximum,MAX(score)-MIN(score)+1 as range,SUM(score) as total,AVG(score) as average from score Group by event_id