1.关于distinct的使用
查询名字不重复的语句:
select distinct name from table
但是我们要把id字段信息也取到
select distinct name,id from table
这样查询的结果是把id和name值同时重复的去掉,和只查询名字不重复的意愿违背,怎么解决呢?解决方法如下:
select *, count(distinct name) from table group by name
2.关于join的使用
3.mysqlDate函数
http://www.w3school.com.cn/sql/sql_dates.asp
4.mysql IFNULL()和COALESCE()函数
把值为NUll的设置为:0
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
5.mysql GROUP_CONCAT()函数
group_concat()函数可以用来拼接字符串
group_concat(str)默认以逗号拼接
group_concat(str SEPARATOR'_')下划线拼接
SELECT GROUP_CONCAT(IFNULL(city,'城市未定义') SEPARATOR'_') as citys FROM persons
6.CONCAT()和CONCAT_WS()函数
concat()函数 直接拼接 有一个是NULL结果就为NULL
concat_ws() 以特定符合隔开 ,而且第一是特定符号,有NULL值不影响拼接结果
SELECT CONCAT('My', 'QL',NULL);
SELECT CONCAT_WS(',','乐自游',NULL,'杭州旅游')
7.having的使用
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。
SELECT city, sum(age) FROM persons WHERE city='杭州' or city='苏州' GROUP BY city HAVING SUM(age)<40
8.mid的使用
MID 函数用于从文本字段中提取字符。
我们拥有下面这个 "Persons" 表:
Id | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Adams | John | Oxford Street | London |
2 | Bush | George | Fifth Avenue | New York |
3 | Carter | Thomas | Changan Street | Beijing |
现在,我们希望从 "City" 列中提取前 3 个字符。
我们使用如下 SQL 语句:
SELECT MID(City,1,3) as SmallCity FROM Persons
结果集类似这样:
SmallCity |
---|
Lon |
New |
Bei |
9.DATE_FORMAT()函数的使用
DATE_FORMA T(date, format) 根据格式串format 格式化日期或日期和时间值date,返回结果串。
可用DATE_FORMAT( ) 来格式化DATE 或DATETIME 值,以便得到所希望的格式。根据format字符串格式化date值:
%S, %s 两位数字形式的秒( 00,01, . . ., 59)
%i 两位数字形式的分( 00,01, . . ., 59)
%H 两位数字形式的小时,24 小时(00,01, . . ., 23)
%h, %I 两位数字形式的小时,12 小时(01,02, . . ., 12)
%k 数字形式的小时,24 小时(0,1, . . ., 23)
%l 数字形式的小时,12 小时(1, 2, . . ., 12)
%T 24 小时的时间形式(h h : m m : s s)
%r 12 小时的时间形式(hh:mm:ss AM 或hh:mm:ss PM)
%p AM 或P M
%W 一周中每一天的名称( S u n d a y, Monday, . . ., Saturday)
%a 一周中每一天名称的缩写( Sun, Mon, . . ., Sat)
%d 两位数字表示月中的天数( 00, 01, . . ., 31)
%e 数字形式表示月中的天数( 1, 2, . . ., 31)
%D 英文后缀表示月中的天数( 1st, 2nd, 3rd, . . .)
%w 以数字形式表示周中的天数( 0 = S u n d a y, 1=Monday, . . ., 6=Saturday)
%j 以三位数字表示年中的天数( 001, 002, . . ., 366)
% U 周(0, 1, 52),其中Sunday 为周中的第一天 %u 周(0, 1, 52),其中Monday 为周中的第一天
%M 月名(J a n u a r y, February, . . ., December)
%b 缩写的月名( J a n u a r y, February, . . ., December)
%m 两位数字表示的月份( 01, 02, . . ., 12)
%c 数字表示的月份( 1, 2, . . ., 12)
%Y 四位数字表示的年份
%y 两位数字表示的年份
%% 直接值“%”
如:
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %r') as PerDate FROM persons
结果如下:
PerDate
2012-04-13 11:44:08 AM