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,如需轉載請自行聯系原作者