大数据3V Volume(海量) velocity(速度快) variety(多样化)
表是二维表
Table/Relation (表)
•列(Column):一个属性,有明确的数据类型
例如:数值类型(e.g., int, double),字符串类型(varchar),
类别类型(有些像程序语言中的enum)
必须是原子类型,不能够再进一步分割,没有内部结构
•行(Row):一个记录(tuple, record)
表是一个记录的集合
记录之间是无序的
•通常是一个很瘦长的表
几列到几十列
成千上万行,很大的表可以有亿/兆行
Key (键)
•特殊的列
•有什么用?
取值是唯一的
唯一确定一个记录
• Primary key (主键)
唯一确定本表中的一个记录
• Foreign key (外键)
是另一个表的Primary key
唯一确定另一个表的一个记录
SQL Create Table
1Student8
ID | Name | Birthday | Gender | Major | Year | GPA |
… | … | … | … | … | … | … |
创建表
create table Student ( //Student表名
ID integer,
Name varchar(20), //20限制长度
Birthday date,
Gender enum(M, F), //枚举型 从两个里面选一个
Major varchar(20),
Year year,
);
有些像程序语言中
的函数定义
字符串用单引号
先选择再投影
Join (连接)
• Equi-join(等值连接)
最简单、最广泛使用的连接操作
理解和实现其它种类join的基础和精华部分
我们这里只介绍equi-join
• 概念
已知两个表R和S,R表的a列和S表的b列
以R.a = S.b为条件的连接
找到两个表中互相匹配的记录
33
R⋈
R.a = S.bS
R.a与S.b被称为join key
SQL Select
select 列名,…,列名
from 表,…, 表
where 条件
38
选择,连接
选择,连接
投影
group by 列名,…,列名
having 条件
order by 列名,…,列名
思考:如何计算平均成绩?
• 已知 Student.GPA 为截止上学期的平均成绩
• 需要重新计算每位学生的GPA
• 写一个SQL语句输出
44
ID | Name | Birthday | Gender | Major | Year | GPA |
… | … | … | … | … | … | … |
Student
TakeCourse
Couse ID | Student ID | Year | Semester | Grade |
… | … | … | … | … |
Student.Name | NewGPA |
select Student.Name, avg(Grade) as NewGPA
from TakeCourse, Student
where TakeCourse.StudentID = Student.ID
group by Student.ID, Student.Name;