从今天起,正式开始学习数据分析相关的知识,希望在未来可以找到一份优秀的Offer,也希望我可以努力成为那个优秀的他。话不多说,首先开始我们的SQL语言学习。
我们主要是通过学习《SQL必知必会》书籍来掌握SQL基础语句(主要以书中MySQL数据库为主,其他数据库语句不做总结),然后刷牛客网“数据库SQL实战”编程习题,最后填充相关的知识细节。
第一课 了解SQL
数据库是以某种有组织的方式存储的数据集合。最简单的办法是将数据库想象为一个文件柜。文件柜只是一个存放数据的物理位置,它不管数据是什么,也不管数据是如何组织的。
数据库软件应称为数据库管理系统(DBMS)。数据库通过DBMS创建和操纵的容器。
数据库表
- 是一种结构化的文件,可用来存储某种特定类型的数据;
- 存储在数据库表中的数据是同一种类型的数据或清单;
- 数据库中的每个表都有一个名字来标识自己。这个名字是唯一的,即数据库中没有其他表具有相同的名字;
- 表具有一些特性,这些特性定义了数据在表中如何存储,包括存储什么样的数据,数据如何分解,各部分信息如何命名等。描述表的这组信息就是所谓的模式,模式可以用来描述数据库中特定的表,也可以用来描述整个数据库。
列是表中的一个字段,所有表都是由一个或多个列组成。数据库中每个列都有相应的数据类型,数据类型定义了列可以存储哪些数据种类和可以完成的操作。
表中的数据是按行存储的,所保存的每个记录存储在自己的行内。
主键:一列或者几列,其值能够唯一标识表中每一行。表中的任意列都可以作为主键,只要它满足以下条件:
- 任意两行都不具有相同的主键值;
- 每一行都必须具有一个主键值(不允许为NULL);
- 主键列中的值不允许修改或更新;
- 主键值不能重用。
第二课 检索数据
每个SQL语句都是由一个或多个关键字构成的。最经常使用的SQL语句就是SELECT语句了。它的用途是从一个或者多个表中检索信息。
Sams Teach Yourself SQL in 10 Minutes (Fifth Edition)forta.com后面用到的语句都可以从上面网站找到相应的数据库表结构。创建完成后如下图所示。
检索单个列
SELECT `prod_name` FROM `products`; -- FROM关键字指出从哪个表中检索数据
多条SQL语句必须以分好(;)分隔。
【注】SQL语句不区分大小写。
检索多个列
在SELECT关键字后给出多个列名,列名之间必须以逗号分隔。
SELECT `prod_id`, `prod_name`, `prod_price` FROM `products`;
检索所有列
在实际列名的位置使用星号(*)通配符可以做到。
SELECT * FROM `products`;
检索不同的值
使用DISTINCT关键字,指示数据库只返回不同的值。DISTINCT关键字作用于所有的列,不仅仅是跟在其后的那一列。
SELECT DISTINCT `vend_id` FROM `products`;
限制结果
LIMIT n OFFSET m,指定返回n行,从第m行开始。第一个被检索的行是第0行,而不是第1行。(也可以简写为LIMIT n,m)
SELECT `prod_name`
FROM `products`
LIMIT 5 OFFSET 5;
使用注释
注释使用 “--”。
挑战题目
- 编写 SQL 语句,从 Customers 表中检索所有的 ID(cust_id)
SELECT `cust_id`
FROM `customers`;
- OrderItems 表包含了所有已订购的产品(有些已被订购多次)。编写 SQL 语句,检索并列出已订购产品(prod_id)的清单(不用列每个订单,只列出不同产品的清单)。提示:最终应该显示 7 行。
SELECT DISTINCT `prod_id`
FROM `orderitems`;
- 编写 SQL语句,检索 Customers 表中所有的列,再编写另外的 SELECT 语句,仅检索顾客的 ID。使用注释,注释掉一条 SELECT 语句,以便 运行另一条 SELECT 语句。(当然,要测试这两个语句。)
SELECT * FROM `customers`;
-- SELECT `cust_id` FROM `customers`;