多表关系
一对一
案例:用户与用户详情的关系
关系: 一对一关系,多用在单表拆分,将一个表的基础字段放在一张表中,其他
详情字段放在另一张表中,以提升操作效率。
实现:在任意一方加入外键,关联另一方主键,并且设置外键为唯一的(UNIQUE)。
一对多(多对一)
案例:部门与员工
关系:一个部门对应多个员工,一个员工对应一个部门。
实现:在多的一方建立外键,指向一的主键。
多对多
案例:学生与课程
关系:一个学生可以选多个课程,一个课程可以供多个学生选择。
实现:建立第三张中间表,中间表至少包含两个外键,关联两方的主键。
多表查询
内连接
外连接分为左连接、右连接和全连接
左连接:取左表A全部和A与B的交集
右连接:取右表B全部和A与B的交集 全连接:FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行.FULL OUTER JOIN 关键字结合了 LEFT JOIN 和 RIGHT JOIN 的结果。
自连接:可以是内连接,也可以是外连接。必须取别名
语法:SELECT 字段列表 FROM 表A 别名a join 表A 别名b ON 条件:
联合查询
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。 请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必 须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。
UNION 语法:SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
UNION ALL 语法:SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;
注释:UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。
子查询——嵌套查询
SELECT * FROM t1 WHERE column1=(SELECT column1 FROM t2),
子查询外部语句可以是INSERT/UPDATE/DELETE/SELECT中任何一个。 根据结果,子查询分为标量子查询(结果为单个值)、列子查询(结果为一列)、行子查询(结果为一行)、表子查询(结果为多行多列)。
|