1. 数据库设计
1.1 外键
- What:表中的某一列;但该列是引用到另一个表的主键列
- Why :用于确定一张表中的行与另一张表中的行相对应的值
- How :创建外键
|
|
1.2 联接表
- What:储存两个相关表的主键的表
- How : 用Select来创建
|
|
2. 联接
2.1 内联接
- What:通过查询的条件,移除某些结果数据行后的交叉联接;
2.1.1 交叉联接
CROSS JOIN
- What:返回两张表每一行相乘的所有结果
- 可用逗号(,)来表示
|
|
2.1.2 自然联接
NATURAL JOIN
- What:自然识别出表中相同名称的列,并返回符合记录的值;
2.1.3 相等联接
INNER JOIN…ON…
- What:利用条件判断中的比较运算符结合两张表,只有符合记录的值才会返回;
|
|
2.1.4 自联接
- What:同一张表引用两次
|
|
2.2 外联接
- What:返回某张表所有行 + 带有另一张表的条件相符的行
- 一定会提供数据行,若出现NULL则表示未发现匹配的行
- 顺序很重要
2.2.1 左外联接
- What:以左表为基准,右表与之匹配
|
|
2.2.2 右外联接
|
|
3. 联合
- What:将多个行合并都一张表中,并自动清除重复值
- Why :可以把从不同表中查询的内容,放到同一个表中
- How:注意内容
- 每个
select
语句中列的数量、列的类型、统计函数必须相同 - 只接受一个
ORDER BY
语句,且位于最后 - 若使用
UNION ALL
则返回未清除重复值的所有行
- 每个
|
|
4. 子查询
4.1 内查询
|
|
IN 可以替换为其他符号;=, !=, >, >=
4.2 外查询
- What:子查询在第一个
SELECT
语句中,表示某个欲选取的列;
|
|
5. 子查询 VS. 联接
- 联接比子查询更有效率,并且子查询只能返回当前表中的变量
|
|
【联接,并可返回不同表中的变量】 SELECT score.degree, teacher.tname FROM score ...
12345678910# 联接 SELECT score.DEGREE FROM course # 自然联接 NATURAL JOIN score NATURAL JOIN teacher WHERE teacher.TNAME = '张旭'; --SELECT score.DEGREE FROM score,course,teacher # 交叉联接 WHERE course.CNO = score.CNO AND course.TNO = teacher.TNO AND teacher.TNAME = '张旭';
- 当使用统计函数时,子查询更有效率
|
|
6.#