mysql IF()特殊用法

来源:互联网 发布:声音类型测试软件 编辑:程序博客网 时间:2024/04/29 14:32

 IF()在sql语句中的特殊用法    

      SQL语句:

      SELECT   IF ( MIN(createDate) = MAX(createDate), NOW(), MAX(createDate))  startTime     from   department

      分析:

      其中  IF ( MIN(createDate) = MAX(createDate), NOW(), MAX(createDate))   就用到了 if(判断条件,true,false) 的形式。当MIN(createDate) = MAX(createDate) 为true 时,结果就为now(),结果为false的时候就为MAX(createDate)


IF(expr1,expr2,expr3) 
如果 expr1 为真(expr1 <> 0 以及 expr1 <> NULL),那么 IF() 返回 expr2,否则返回 expr3。IF() 返回一个数字或字符串,这取决于它被使用的语境: 
ysql> SELECT IF(0.1,1,0);
  -> 0
mysql> SELECT IF(0.1<>0,1,0);
  -> 1
在上面第一种情况下,IF(0.1) 返回 0,是因为 0.1 被转换为一个整数值,返回 IF(0) 的测试结果。这可能不是你所期望的。在第二种情况下,比较测试原浮点数是否为一个非零值。比较的结果被作为整数使用。 缺省的 IF() 返回值类型 (当结果存储在临时表中时,这是非常重要的) 在 MySQL 3.23 中按下列方式确定: 表达式 返回值  


limit,offset

SELECT  keyword  FROM  `keyword_rank`  WHERE  advertiserid='59'
ORDER BY   keyword  LIMIT 2  OFFSET 1;
比如这个SQL ,limit后面跟的是2条数据,offset后面是从第1条开始读取


SELECT  keyword  FROM  `keyword_rank`  WHERE  advertiserid='59'
ORDER BY  keyword   LIMIT 2 ,1;
而这个SQL,limit后面是从第2条开始读,读取1条信息。


分页:SQL_CALC_FOUND_ROWS

SELECT COUNT(*) from `table` WHERE ......;  查出符合条件的记录总数
SELECT * FROM `table` WHERE ...limit M,N; 查询当页要显示的数据
这样的语句可以改成:
SELECT SQL_CALC_FOUND_ROWS * FROM `table` WHERE .... limit M, N;
SELECT FOUND_ROWS();
这样只要执行一次较耗时的复杂查询可以同时得到与不带limit同样的记录条数

    

0 0