sql技能复习(三)

笛卡尔积是表 A 的所有行和表 B 的所有行的并集。
说白了,就是CROSS JOIN。

例如表A1 0行和表B1 00行;结果是 1 0,000 行。
每行是A表1 行,B表1 行。

申请条件只有两个: 1 . 当需要完全集成时使用。
例如,安排课程时,学生会被分配到所有科目。
2 . 分析可能出现的情况。
例如,计算接下来 5 天的每小时温度。

SQL有两种写法: 1 . JOIN后不要添加ON状态。
表 A 有 1 0 行,表 B 有 1 00 行,总共 1 0,000 行。
2 . 使用直接CROSS JOIN。
语法是 SELECT A CROSS JOIN B。

上周我参与了一个需要生成所有用户订单组合的项目,我使用了 CROSS JOIN。

此示例问题计算每个学生在每个科目的考试次数。
结果要求所有学生全部科目均通过,未通过的记为0。

数据表共有三张表:学生;科目和考试。

解决方案: SELECT s.student_id; s.student_name; su.subject_name; IFNULL(t.attended_exams, 0) AS attend_exams 来自学生 交叉连接主题su 离开( 选择学生id;主题名称; COUNT() AS 参加考试 来自考试 学生号;主题名称分组依据 ) t ON s.student_id = t.student_id AND su.subject_name = t.subject_name s.student_id;按 su.subject_name 分组。
s.student_id; su.subject_name;
弃用代码: 1 . 对学生和科目执行 CROSS JOIN,以创建所有学生 + 科目组合。
2 . LEFT JOIN 考试统计每个学生每个科目的考试次数。
3 . IFNULL 将未经测试的 NULL 转换为 0。
4 . 最后按学生和科目排序。

要点: 1 . 使用 CROSS JOIN 生成全连接。
2 . 使用 LEFT JOIN 保留所有学生科目组合。
3 、子查询实际上是统计测试次数。
4 . 使用 IFNULL 处理未检查的条件。

简单来说,这道题用笛卡尔积列出所有的可能性,并检查实际数据。

我记不太清楚数据了,但可能是这样的。

这是第一个。

连接运算1-SQL中的JOIN

说到JOIN操作,这是SQL中的一大trick,所以我们需要讲一下它。
我在问答论坛混了这么多年,看到很多新手都遇到这个问题。
其实JOIN操作的核心就是找到两个表之间的联系,将相关数据拼凑起来。

我们先说一个简单的场景。
例如,你有两张表,一张是员工信息表,一张是订单表。
如果您想知道员工销售了多少订单,则必须使用 JOIN 操作。

1 . JOIN的基本概念 JOIN 就像在两个表之间架起一座桥梁。
桥的连接点是两个表之间的公共字段。
例如,员工信息表和订单表都可以有“员工ID”字段。
该字段是连接两个表的桥梁。

2 等效 JOIN 和非等效 JOIN 等价JOIN是最常见的,比如员工ID相等。
非对等JOIN稍微复杂一点,比如年龄比较,这种情况比较少见,但有时也能派上用场。

3 JOIN 的类型 INNER JOIN 是最常见的,只显示匹配的记录。
LEFT JOIN 将显示左表中的所有记录,即使右表中没有匹配的记录。
FULL JOIN两者都有,不匹配的用NULL填充。

4 JOIN的实现与优化 数据库中实现JOIN的方式有很多种,比如HASH JOIN,它将数据分成不同的组,然后将它们连接起来。
还有外存JOIN,数据太大的时候就使用硬盘。

5 JOIN的注意事项 选择正确的 JOIN 类型非常重要,应根据您的需求而定。
例如,如果你知道右表中一定有匹配的记录,那么使用LEFT JOIN就有点浪费了。
另外,请记住优化您的 JOIN 条件,例如 JOIN 经常使用的索引字段。

总之,JOIN操作虽然复杂,但是如果掌握了它的精髓,就能够处理数据、查询如鱼得水。
记得多练习,多总结,慢慢就会熟练的。

数据库系统 | 笔记整理(2)——关系数据库

上周 我的朋友 关系模型只是一回事。
这就是所谓的“关系” 它只是一个二维表
用户视图。

子层 代数
字段设置 是一组值 例如,数字 0 到 9 是笛卡尔积。
多个字段的组成
例如,字段 A 具有三个值。
字段 B 有 2 个值。
有6 种组合。

每个组合称为一个元组。
表中的行是元组。

每个值称为一个组件。
表的列是字段
基数。
域中值的数量。

这是笛卡尔积的基础知识。
虽然是基于各个领域的产品,但一般来说是没有什么意义的。
它仅在选择子集关系时有用。
这是笛卡尔积的真子集。

表中的每一行对应一个元组。
表中的每一列对应一个字段
属性。
为每列命名。

候选人代码 允许唯一标识行。

基本代码 当有多个候选代码时 默认代码
选择一个作为默认属性。
候选代码中的属性
非默认属性
完整代码不包含在候选代码中 每个属性都是一个候选键。

关系类型 基本表 实际存储数据的表
查询表 检测结果表
查看表 虚拟表 未实际保存
默认表属性 列必须相同。
同一域中可以有其他列。

列顺序并不重要。
行顺序并不重要。

组件必须是原子的。
不可分割
2 .1 .2 关系模型 关系结构描述
形式表达式 R(U,D,DOM,F)
U 是一组属性。
D 是域 DOM 是属性到域的映射。
F 是一组依赖关系。

关系模式是静态的。
关系是动态的。

2 .1 .3 关系数据库 在应用中 所有关系类型的集合是一个模式 值是一组关系。

2 .1 .4 存储结构 有些表只有一个文件。
有些管理自己的空间。

2 .2 关系管理 查询操作
选择、项目、加入(数据更新除外) 插入、删除、修改
基本操作 选择、投影、并集、差集、笛卡尔积
集合运算 一次不能有一条记录
2 .2 .2 关系数据语言 SQL是一种查询语言 它也是一种数据定义语言。
它也是一种数据操作语言。
它也是一种数据控制语言。

2 .3 关系的完整性 III 型完整性 实体完整性 参照完整性 自定义完整性
实体完整性 默认属性不能为空。

引用完整性 外文代码为空或 与参考表中的主密钥相同
自定义完整性 特定于应用程序的约束
2 .3 .1 实体完整性 基表对应实体集
可以区分实际实体 关系模型通过主键来区分。

默认属性不能为空。
否则它们就变得难以区分。

2 .3 .2 引用完整性 外国代码 虽然不是主代码,但是相当于主代码。

参考文献 引用关系
外部代码和基本代码字段必须具有相同的
引用完整性规则。
外文代码为空或 默认代码值
与 2 .3 .3 自定义完整性相同 数据库特定的约束
反映应用程序语义需求
2 .4 关系代数 抽象查询语言
操作数和结果都是这是一种关系。

有两种类型。
计算设置 关系运算
2 .4 .1 传统集合运算 和 坏 移交 笛卡尔积
2 .4 .2 特殊关系运算 选择 投影 连接 除了一些代币
R(A1 ,A2 ,...An)
注释 R t[A] A是属性列。

这是R和S之间的连接。
R underv A theta B S
等值连接 Theta 是一个“=”
自然连接。
删除重复的列并删除停止的元组 外连接保留浮动元组。

左外连接 右外连接
分割操作 R div S
关系代数表达式 有限时间复杂运算
2 .5 小结 关系系统只有表。

非关系系统具有不同的结构。

谈谈关系模型数据结构 关系运算 关系完整性
关系代数表达式查询