天天看点

mysql总结4→单表查询2

 1.字段的连接:(concat)

select concat(username,'的年龄',age) from t_user;

2.别名的使用

select concat(username,'的年龄',age,'-地址为:',address) as 'message' from t_user;

3.算数运算:(比如:)

select quantity as '数量',item_price as '单价',quantity*item_price as '总价' from orderitems;

select quantity as '数量',item_price as '单价',quantity*item_price as '总价' from orderitems order by '总价' desc limit 0,3; 

4.文本处理函数

<1>.left():返回左边指定长度的字符 (left()括号里分别是列名和指定字符的长度)

select username,left(username,2) from t_user;

<2>.length()返回字符串的长度

select username,length(username) from t_user;

<3>.lower()将字符串转为小写

select username,lower(username) from t_user;

<4>.ltrim()去掉字符串左边的空格

select username,ltrim(username) from t_user;

<5>.right()返回字符串右边指定长度的字符(right()括号里分别是列名和指定字符的长度);

select username,right(username,2) from t_user;

<6>.rtrim()去掉字符串右边的空格

select username,rtrim(username) from t_user;

<7>upper()将字符串转换为大写

select username,upper(username) from t_user;

<8>函数是可以嵌套的!!

select username,length(ltrim(rtrim(username)));

5.日期处理函数

<1>.curDate()返回当前日期

select curdate();

<2>.curTime()返回当前的时间;

select curtime();

<3>.now()返回当前的时间和日期;

select now();

<4>.date()返回当前日期时间的日期部分;

select date(now());

<5>.time()返回当前日期时间的时间部分;

select time(now());

select time('2009-09-09 12:32:32');

<6>.day()返回日期的天数部分(即返回某月的日期是某月的第几天)

select day(now());

<7>.dayofweek()返回一个日期对应的星期数(即返回今天是星期几,国外周日是一个星期的第一天!)

select dayofweek(now())-1;

select dayofweek('2009-09-09 12:32:32') - 1;

<8>.hour()返回时间部分的小时部分

select hour(now());

<9>.minute()返回时间部分的分钟部分

select minute(now());

<10>.month()返回日期部分的月份部分

select month(now());

<11>.second()返回时间的秒部分

select second(now());

<12>.year()返回日期部分的年份

select year(now());

<13>.datediff()计算两个日期之差

select datediff('1988-12-26',now());

<14>.adddate()添加一个天数的日期:如计算我来到这个世界上一万天的日期

select adddate('1988-12-26',10000);

<15>.举几个例子:

(1.如获得2005-09-01的订单)

select * from orders wher date(order_date)='2005-09-01';

(2.获取9月的订单)

select * from orders where year(order_date)=2005 and month(order_date)=9; (建议用这种方法)

select * form orders where order_date between '2005-09-01' and '2005-09-01';

6.聚合函数(建议:聚合函数后不建议在跟其他的列!!)

<1>.max: 获取某列的最大值;(可忽略null行)

select max(age) from t_user;

<2>.min:获取某列的最小值;(可忽略null行)

select min(age) from t_user;

<3>.avg:获得某列的平均值;(可忽略null行)

select avg(age) from t_user;

<4>.count():获取某列的行数;

(1.)count(*) : 对表中的数目进行统计,无论列中的值是否为null(即它不会忽略null行!!!)

统计用户总数:select count(*) from t_user;

(2.)count(column) : 对表中特定列的行进行统计,忽略null行;

统计address中不为null的行数: select count(address) from t_user;

<5>.sum():获取某列的和;sum函数忽略值为null的行;

select sum(age) from t_user;

7.分组查询

<1>.如获取不同地方的用户数量

select count(*),address from t_user group by address;

<2>.分组后再过滤,用having;where是用于分组前的过滤!! 

如:获得用户数量大于20的地方

select count(*),address from t_user group by address having count(*)>20;

还可以继续加条件:

select count(*),address from t_user group by address having count(*)>20 order by count(*) desc limit 0,1;

8.查询语句的顺序

<1>.select 

<2>.from

<3>.where 

<4>.group by

<5>.having

<6>.order by

<7>.limit

eg.

select count(*),address from t_user 

where age>20

group by address 

having count(*)>20 

order by count(*) desc 

limit 0,1;

9(补充知识).模糊查询

public List<User> findByName(String name) {

String name1 = "%"+name+"%";

String sql = "select * from t_user wher name like ?";

return db.queryForList(sql,new ProductRowMapper(),name);

}

     本文转自韩立伟 51CTO博客,原文链接:http://blog.51cto.com/hanchaohan/924192,如需转载请自行联系原作者

下一篇: Hadoop Hive