免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1213 | 回复: 0

mysql的几种超实用技巧 [复制链接]

论坛徽章:
0
发表于 2006-01-08 14:20 |显示全部楼层

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

从多个表中检索信息
在从多个表中选择信息时,需要执行一种称为连接(join)的操作。这是因为需要将一个表中的信息与其他表中的信息相连接来得出查询结果。即通过协调各表中的值来完成这项工作

原文地址:http://www.ddvip.net/database/mysql/index1/4.htm

某驼续貂:本篇文章是从上面那个连接地址里面总结归纳出来的.某驼对原文的实在作者佩服的五体投地,里面介绍的技巧都是非常实用和省力的,某驼看了大有相见恨晚之感觉.可惜原文太长了,边看边理解边关联,一天下来驼驼有点吐血了.归纳到这里,还差联合查询和group by这部分不完全了,某驼歇会儿先.换换感觉在回来接着总结.


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/8573/showart_66162.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP