要从事数据科学,我们需要从数据知识、计算机知识、专业知识这三个维度考虑
虽然数据分析是一个不断迭代的过程,而且不同的步骤会有些交叉,但是我们依然可以将过程简化为以下七个步骤:
在一个数据项目中,我们绝大部分的努力都将花在获取数据和清洗数据上(步骤2-3)以及展示分析结果和过程(6-7)上。
需要掌握的关键词(包含顺序):
SELECT FROM JOIN WHERE GROUP BY HAVING ORDER BY LIMIT
SELECT
指定需要先择的列,存在多个时用逗号分隔。如果想要查看全部列,则可以使用*号代替。如果需要对查询结果去重,可以添加DISTINCT关键词。另外可对选定的列使用AS关键词进行重命名。
示例代码:
SELECT name, age, occupation,season_contestant FROM bachelorette; SELECT * FROM bachelorette; SELECT DISTINCT season_contestant FROM bachelorette; SELECT name, age, occupation,season_contestant as sc FROM bachelorette;
WHERE
可以用来对查询的项进行过滤。语法格式为:列名+过滤操作符+具体要求。常用的过滤操作符有:
in
,采用括号将多个需要配匹配的放在一起BETWEEN AND
,匹配某一个范围,请注意,在不同的数据库中,BETWEEN 操作符会产生不同的结果!在使用前需要先确定包含规则,所以推荐使用比较操作符替换BETWEEN AND
LIKE
,阈值配合使用的时%代表任意个字符,_代表一个字符。IS NULL
。注意,对于字符串为空不能应用控制判断,而使用!=’’AND、OR、NOT
。优先级可用()
进行显式声明(括号内的优先)。示例代码:
SELECT * from Customers WHERE country = 'USA'; SELECT * from Customers WHERE country = 'USA' OR country = 'Brazil'; SELECT * from Products WHERE Price BETWEEN 10 AND 20; SELECT * from Customers WHERE CustomerName LIKE '%to%'; SELECT * FROM student WHERE dept_name IN ('Comp. Sci.', 'Physics', 'Elec. Eng.');
GROUP BY与聚集函数
GROUP BY允许你对指定的一个或多个列进行分组统计。而分组统计中常会用到聚集函数。常用的聚集函数如下:
count(1)
或count(*)
,两个表示的含义是一致的。示例代码:
SELECT Country, COUNT(CustomerID) FROM Customers GROUP BY Country;
HAVING
和WHERE一样也是一种数据过滤的方法,和WHERE条件不同的是它针对的是使用GROUP BY以后的聚合函数的值。
SELECT Country, COUNT(CustomerID) FROM Customers GROUP BY Country HAVING COUNT(CustomerID) > 3;
ORDER BY
指定要进行排序的以恶个或多个列,与ASC(正序)和DESC(倒序)一起使用。默认为ASC。
示例代码:
SELECT * from Customers WHERE country = 'USA' OR country = 'Brazil' ORDER BY CustomerName; SELECT * from Customers WHERE country = 'USA' OR country = 'Brazil' ORDER BY CustomerName DESC;
JOIN
可以将多在表组合成一张表后进行查询。其中JOIN的常用操作主要有以下几类:
JOIN的时候需要使用ON关键词指定两张表中关联的列。另外可以对表使用AS关键词进行重命名,避免出现两张表相同列名的问题。重命名后取对应列的方法为表名.列名。
示例代码:
SELECT Orders.OrderID, Customers.CustomerName FROM Orders INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID; SELECT Customers.CustomerName, Orders.OrderID FROM Customers LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID; SELECT Orders.OrderID, Employees.LastName, Employees.FirstName FROM Orders RIGHT JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID; SELECT Customers.CustomerName, Orders.OrderID FROM Customers FULL OUTER JOIN Orders ON Customers.CustomerID=Orders.CustomerID;
其他的一些JOIN:
另外还有一种JOIN是Cross Join
,代表的是取2张表的笛卡尔积
LIMIT
限制需要返回的数据条目。比如LIMIT 100
,则表示只返回100条数据。如果是LIMIT 10,100
则表示返回从第10个开始,返回100条记录。
嵌套SELECT语句也叫子查询,一个 SELECT 语句的查询结果能够作为另一个语句的输入值。子查询不但能够出现在WHERE子句中,也能够出现在FROM子句中,作为一个临时表使用,也能够出现在SELECT LIST中,作为一个字段值来返回。
示例代码:
SELECT ename,deptno,sal FROM emp WHERE deptno=(SELECT deptno FROM dept WHERE loc='NEW YORK'); SELECT ename,job,sal,rownum FROM (SELECT ename,job,sal FROM EMP ORDER BY sal);
CTE(Common Table Expressions)相当于生成一张临时表,与临时表不同的是生存周期的不同。不需要显式的创建或删除,也不需要创建表的权限。更准确的说,CTE更像是一个临时的VIEW。可同时定义多个CTE,但只能用一个with,多个CTE中间用逗号”,”分隔。
代码示例:
WITH t1 AS ( SELECT CountryRegionCode FROM person.CountryRegion WHERE Name LIKE 'C%' ) SELECT * FROM person.CountryRegion; WITH t1 AS ( SELECT * FROM table1 WHERE name LIKE 'abc%' ), t2 AS ( SELECT * FROM table2 WHERE id > 20 ), t3 AS ( SELECT * FROM table3 WHERE price < 100 ) SELECT a.* FROM t1 a LEFT JOIN t2 ON t1.id = t2.id INNER JOIN t3 ON t1.id = t3.id;
和临时表有个重要的区别,就是生存周期,
CTE也就是common table expressions是sql标准里的语法,CTE与derived table最大的不同之处是:
UNION和UNION ALL关键字都是将两个结果集合并为一个,主要区别:UNION在进行表链接后会筛选掉重复的记录,Union All不会去除重复记录。
代码示例:
SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2; SELECT column_name(s) FROM table_name1 UNION ALL SELECT column_name(s) FROM table_name2;
CASE WHEN是对列的数据进行判断,然后设定新的值,CASE WHEN通常使用在SELECT语句内,但有时也会用在WHERE语句内
示例代码:
SELECT STUDENT_NAME, (CASE WHEN score < 60 THEN '不及格' WHEN score >= 60 AND score < 80 THEN '及格' WHEN score >= 80 THEN '优秀' ELSE '异常' END) AS REMARK FROM TABLE
上面讲过聚集函数,这里主要介绍的是除聚集函数以外的其他函数。
常用数值处理函数
常用字符串处理函数
日期时间处理函数
DATE_FORMAT(date, format)函数
DATE_FORMAT(date, format)函数可根据format字符串格式化日期或日期和时间值date,返回结果串。 也可用DATE_FORMAT()来格式化DATE 或DATETIME 值,以便得到所希望的格式。根据format字符串格式化date值: