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());
select time('2009-09-09 12:32:32');
 
<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行!!!★)
 
统计用户总数:s elect 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);
}
 
 
 

你可能感兴趣的:(mysql总结4→单表查询2)