Part I. 简单关键字
1.只查询前100条数据
select * from order LIMIT 100
2.只查询从前100到900的数据
select * from order LIMIT 100,800
3.查询特点列去重后的数据
select DISTINCT user_id from order
4.查询特点列去重后的样本数
select COUNT(DISTINCT user_id) from order
5. 查询特定条件值在某个值域范围内的数据
select * from order where status in ('Removed', 'No_Pending_Action','Pending_Order_Confirm')
6. 查询以‘103’开头且包含‘04’的数据
select * from order where user_id LIKE '103%' and order_id LIKE '%04%'
7. 金额在10~100之间的所有数据按订单ID倒序排列
select * from order when 10<total_amount<100 ORDER BY order_id DESC
8. 查询指定列中不包含空值的所有数据
select * from order where order_id IS NOT NULL
备注:NULL 不代表空值、空字符串或空格,而是真正意义上的没有数据。一般数据库会在创建时设定默认值,来避免空值出现。
Part II. 聚合函数
9. 使用聚合函数求算术平均值、计数、最大/小值、做分类统计等
select AVG(column_name) from table_name
select COUNT(column_name) from table_name
备注:NULL值不计入
select COUNT(*) from table_name
select MAX(price) as Max_Price from table_name
select MIN(price) as Min_Price from table_name
有Order表和Shipper表,Order表中有shipper_id列外连接到Shipper表中的id列,统计每个Shipper所接到的订单数
select Shippers.name, COUNT(Orders_id) as ord_sum from Orders
LEFT JOIN Shippers
ON Order.shipper_id = Shippers.id
Part III. 数学函数
10.使用MySQL数学函数求绝对值、对数、平方根等
ABS(X) 返回绝对值 ROUND(X) 四舍五入取整
FLOOR(X) 向下取整 CEILING(X) 向上取整
select 5 DIV 2 -->2 整除
LOG(X),LOG(B,X) 返回对数 POW(X,Y) 返回X的Y次方 SQRT(X) 返回X开Y次方
Part IV. 字符串函数
select CONCAT('11','22','33')
>112233
select CONCAT('11','22',NULL)
>NULL
select CONCAT_WS(',','11','22','33')
>11,22,33
select CONCAT_WS(',','11','22',NULL)
>11,22
select name from table_name where name REGEXP '^[aeiou]|ok$'
>查找以元音字母开头或者以'OK'结尾的所有记录
select SUBSTR(path,1,LOCATE('.',path)) from table_name
>path列左边第1位置起,到小数点前的字符串
select SUBSTRING(content,5,200) as abstract from table_name
>content列左边第5位置起,取200长度的字符串作为摘要
SUBSTR(string,pos,len)
和SUBSTRING(string,pos,len)
在MySQL中都可以,如下所示:
Part V. 日期函数
1. 日期±时间间隔
DATE_ADD(date, INTERVAL 45 DAYS)
>date往后推45天
DATE_SUB(date, INTERVAL 45 DAYS)
>date往前推45天
2. 计算时间间隔
DATEDIFF('2008-11-30','2008-11-29')
>第一个日期减去第二个日期得到的天数,可正可负
3. 格式化日期
DATE_FORMAT(NOW(),'%m-%d-%Y')
>10-30-2018
NOW(),CURDATE(),CURTIME(),DATE(NOW())
对应形式如下表:
4. 截取日期的年月日季时分秒
EXTRACT(YEAR_MONTH FROM ORDERDATE)
>取年月,可以用来做分组统计
5. 日期处理函数to_days()和from_days()
select to_days('1997-10-07'), from_days(729669)
>取天数,可以用来by day做分组统计,还可以根据当前时刻筛选获取到前1天,前2天,...,前X天的数据
网友评论