文章转载自 微信公众号 数据管道
摘要
经常看到一份数据分析岗位的招聘要求:“熟练使用SQL”。那你真的熟练吗?
最基本的几个问题,SQL是什么?数据库是什么?RDBMS又是什么?什么叫表?
数据库(Database):按照数据结构来组织、存储和管理数据的仓库。
RDBMS:(Relational Database Management System)
关系数据库管理系统,存储和操作关系数据库表中排列的数据的软件。
SQL:Structured Query Lanuage(结构化查询语言),更详细地说,SQL 是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统,同时也是数据库脚本文件的扩展名。
表:按列和行排列的一组数据。列表示存储数据的特征,行表示实际的数据条目。
目录:
1、数据库查询语言
1.1、如何选择多列
#语法
SELECT <Column List>
FROM <Table Name>
WHERE <Search Condition>
# 例子
SELECT FirstName, LastName, OrderDate
FROM Orders WHERE OrderDate > '10/10/2010'
1.2、如何选择某一列并去重(重点)
#语法
SELECT DISTINCT <Column_name>
FROM <Table Name>
#例子
SELECT DISTINCT FirstName
FROM Orders
1.3、如何从第一行开始选择一共五行数据?
#语法
SELECT <col_name >
FROM table_name
limt 5 offset 1;
#例子
SELECT FirstName
FROM Orders
limt 5 offset 1;
1.4、如何按照指定方向(升、降)排序选择数据?
#语法
SELECT co_name1,col_name2
FROM table_name
ORDER BY col_name1 DESC,col_name2 ASC
#例子
SELECT OrderDate,FirstName
FROM Orders
ORDER BY OrderDate DESC
1.5、常见的一些过滤选择有哪些。(重点)
#范围内检查
SELECT col_name
FROM table_name
WHERE col_name BETEWEEN 5 AND 10;
# >= and <=
#空值检查
SELECT col_name
FROM table_name
WHERE col_name IS null;
# in操作符
SELECT col_name
FROM table_name
WHERE col_name IN (....);
# NOT操作符
SELECT col_name
FROM table_name
WHERE NOT (条件);
#AND 和 OR 注意优先级 and 优先级高于or
SELECT col_name
FROM table_name
WHERE (condi_1 OR condi_2) AND condi_3;
#第五部分使用通配符进行过滤
SELECT col_name
FROM table_name
WHERE col_name like '..%..';
SELECT col_name
FROM table_name
WHERE col_name like '.._..';
SELECT col_name
FROM table_name
WHERE col_name like '[]%';
1.5、如何分组并按条件选择数据?(重点)
#语法
SELECT <Column List>, <Aggregate Function>(<Column Name>)
FROM <Table Name>
WHERE <Search Condition>
GROUP BY <Column List>2
#例子
SELECT LastName, SUM(OrderValue)
FROM Orders
WHERE OrderDate > '10/10/2010'
GROUP BY LastName3
/*注意点: GROUP BY 后面也可以接条件。
WHERE 语句和HAVING配合的使用。
WHERE在HAVING之前。
WHERE 过滤针对的是行,HAVING过滤针对的是组。
*/
1.6、分组和排序的顺序是什么?(重点)
/*SELECT FROM WHERE GROUP BY HAVING ORDER BY*/
SELECT col_name
FROM table_name
WHERE <condition_1>
GROUP BY <col_name>
HAVING <condition_2>
ORDER BY <col_name>
1.7、如何使用子查询?(重点)
SELECT col_name
FROM table_name
WHERE col_name = (
SELECT col_name
FROM table_name
WHERE .... );
1.8、表的联结查询怎么做(非常重点!!!!一定要会!)
#语法
SELECT <Column List>
FROM <Table1> JOIN <Table2>
ON <Table1>.<Column1> = <Table2>.<Column1>、
#例子
SELECT Orders.LastName, Countries.CountryName
FROM Orders INNER JOIN Countries ON
Orders.CountryID = Countries.ID
#除此之外还有左联结 LEFT JOIN右联结 RIGHT JOIN全联结 FULL JOIN
1.9、如何使用联合查询
#语法
SELECT <Column List>
FROM <Table1>
UNION
SELECT <Column List>
FROM <Table2>
#例子
SELECT <Column List>
FROM <Table1>
UNION
SELECT <Column List>
FROM <Table2>
**
**
2数据库操作语言
2.1 INSERT(插入)
#语法
INSERT INTO <Table Name>(<Column List>)
VALUES (<Values>)
#例子
INSERT INTO Orders(FirstName, LastName, OrderDate)
VALUES('John', 'Smith', '10/10/2010')
2.2 UPDATE(更新)
#语法
UPDATE <Table Name>
SET <Column1> = <Value1>, <Column2> = <Value2>, …WHERE <Search Condition>
#例子
UPDATE Orders
SET FirstName = 'John', LastName = 'Who'
WHERE LastName='Wo'
2.3 DELETE(删除)
#语法
DELETE FROM <Table Name>
WHERE <Search Condition>
#例子
DELETE FROM Orders
WHERE OrderDate <'10/10/2010'
3、数据库定义语言
**
**
3.1、CREATE (创建表)
# 语法
CREATE TABLE <Table Name>(
Column1 DataType, Column2 DataType, Column3 DataType
)
# 例子
CREATE TABLE Orders(
FirstName CHAR(100), LastName CHAR(100), OrderDate DATE
)
3.2、ALTER(更改表)
#语法
ALTER TABLE <Table Name>
ADD col_name Datatype;
ALTER TABLE <Table Name>
DROP COLUMN <col_name>
# 例子
ALTER TABLE Vendors
ADD vend_phone CHAR(20);
ALTER TABLE Vendors
DROP COLUMN vend_phone;
3.3 DROP (删除表)
#语法
DROP TABLE table_name;
#例子
DROP TABLE CustCopy;
4、数据库控制语言
4.1 GRANT
4.2 REVOKE
本部分展开太细,不做介绍,做为数据分析师需要重点掌握查询语句!