天天看點

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