生活不可能像你想象得那么好,但也不会像你想象得那么糟。我觉得人的脆弱和坚强都超乎自己的想象。有时,我可能脆弱得一句话就泪流满面,有时,也发现自己咬着牙走了很长的路。——莫泊桑
前段时间看到这句话,有种莫名的感动。你仔细看这每一句话,都充满着哲学的味道。生活本身就是没那么好,也没那么糟,生活好也罢,糟也罢,都是和我们的想象有关,或者说和我们对待它的认知角度有关。面对生活这个对象是这样,面对自己也是这样,人可以很脆弱,也可以非常坚强,这和我们对待自己的看法有关,跳出自我本身去看待自己的话,发现真的就是这么回事。
今年最大的感受就是:生活就是重复。无论是处于好的状态,还是处于差的状态,生活就是不断的重复,时间就是不停的往前走,它和你高兴不高兴,舒服不舒服,一点关系都没有。所以有时需要和生活产生一点距离感,这样会更加洒脱和从容一些,有时又需要离生活近一点,这样会更有一种融入感和存在感。我既知道当下对于未来无比的重要,也知道眼前其实对未来不会产生实质性的影响。水滴石穿,非一日之功嘛。但是少滴那么一两次也没有什么关系。
如果有智慧去区分何时该进取,何时该放松节奏,真是一件了不起的事情。因为我们既不需要苦哈哈的去努力,也不需要在放松娱乐的时候有愧疚感。但是太多人,包括以前的自己,没办法去区分这两者的区别,该努力的时候想着玩,好像是被生活所迫,该放松休息的时候想着努力,好像自己做错了什么大事。这样拧巴的思考和生活,其实是最没劲的。好在,这一年自己已经可以很好的把控自己的状态和节奏了。未来一年,继续加油。
今天分享《SQL必知必会》第六至十章。
第六章 用通配符进行过滤
这一章主要讲的操作符有:like, 用于模糊查询;%,表示任何字符出现的任意次数; (__) 下划线:只匹配单个字符; ([ ])方括号 通配符, 用来指定一个字符集,必须匹配指定位置的一个字符。
上代码:
SELECT prod_id,prod_name FROM products WHERE prod_name LIKE ‘Fish%’;
SELECT prod_id,prod_name FROM products WHERE prod_name LIKE ‘__Fish’;
SELECT cust_contact FROM Customers WHERE NOT cust_contact LIKE ‘[JM]’ ORDER BY cust_contact;
第七章 创建计算字段
在实际开发过程中,有时经常需要将两个列的结果拼接到一起,或者以其它方式组合到一起,这时用来创建计算的字段就派上了用场,接下来一一说明。
拼接字段:+ 或者 || , 这个两者有什么区别呢,其实就是不同数据库支持类型不同。像Access 和SQL Server 使用 +号, DB2 , Oracle , PostgreSQL, SQLite 使用 || 。
TRIM函数:用来去除字符串左右两边的空格。LTRIM函数去除字符串左边的空格,RTRIM去除字符串右边的空格。
AS 别名,这个使用非常多,往往可以放在表名后面,或者查询字段或结果的后面,用来简化SQL。
执行算术计算:对检索出的数据进行算术计算。比如看下面的第三条SQL语句。
上代码:
SELECT vend_name + ‘(’ +vend_country+’)’ from vendors ORDER BY vend_name;
SELECT RTRIM(vend_name)+ ‘(’+RTRIM(vend_country)+’)’ AS vend_title FROM Vendors;
SELECT prod_id, quantity item_price, quantity * item_price AS expanded_price FROM OrderItems WHERE order_num=20008;
第八章 使用数据处理函数
文本处理函数:UPPER 变大写。
日期和时间处理函数:DATEPART() 用于SQL Server,只返回年份。DATE_PART() 用于PostgreSQL;
数值处理函数:这个用的其实并不多,常见的有 ABS() 返回一个数的绝对值;PI() 返回圆周率;SQRT()返回一个数的平方根。
上代码:
SELECT vend_name, UPPER (vend_name ) AS vend_name_upcase FROM Vendors ;
SELECT order_num FROM Orders WHERE order_date BETWEEN to_date(‘01-01-2012’) AND to_date ( ‘12-31-2012’);
第九章 汇总数据
这一章主要讲的是SQL中的聚集函数,它们既可以单独使用,也可以组合使用。
AVG( ) 返回某列的平均值
COUNT( )返回某列的行数
MAX( ) 返回某列的最大值
MIN( ) 返回某列的最小值
SUM( )返回某列值之和
上代码:
SELECT AVG (prod_price) AS avg_price FROM products;
SELECT COUNT() AS num_cust FROM Customers;
SELECT COUNT(cust_email) AS num_cust FROM Customers;
SELECT COUNT() AS num_items, MIN(prod_price) AS price_min, MAX(prod_price) AS price_max FROM Products;
第十章 分组数据
这一章主要讲的是 GROUP BY 子句和HAVING 子句, 一般创建分组用GROUP BY, 过滤分组用HAVING 子句,这样一来一个SELECT语句中就会出现多个子句,它们之间的顺序一定要排列好。
SELECT子句及其顺序:
SELECT – 要返回的列或表达式 , 必须使用
FROM – 从中检索数据的表 , 仅在从表中选择数据时使用
WHERE–行级过滤
GROUP BY – 分组说明,仅在按组计算聚集时使用
HAVING – 组级过滤
ORDER BY–输出排序顺序,不是必须使用
上代码:
SELECT order_num,COUNT() AS items
FROM OrderItems
GROUP BY order_num,
HAVING COUNT()>=3,
ORDER BY items, order_num;
今天的内容到此结束,后会有期!