1、多表关系
多表关系
1、一对多/多对一: 在多的一方加入另一方的外键
2、多对多: 使用中间表,分别引用两方的ID
如下图:学生s1有两个老师,而老师t1,有两个学生t1,t2对应关系如下
3、一对一:
- 主键同步 两个表中有关系的记录id一致
- 在一方加入 另一方的外键
在另一方加入外键
2、外键和外键完事性约束
外键能够使多表关联,起到联合查询使用。外键的完事性关系到查询数据的完整性。外键的修改和删除可能对别的表产生影响,因此要对外键进行约束。比如当我们删除第二个表中计算机的时候,第一个表中有对它的引用,造成表的不完整。
下面两张表
1、增加一个外键约束
ALTER TABLE 表名
ADD CONSTRAINT 外键标识
FOREIGN KEY (表中字段
) REFERENCES 表名
(表中字段
);
ALTER TABLE `t_student` ADD CONSTRAINT `fk_sclass` FOREIGN KEY (`sclass`) REFERENCES `t_teacher`(`sclass`);
2、删除一个外键约束
ALTER TABLE 库名
.表名
DROP FOREIGN KEY 外键名
;
ALTER TABLE `student`.`t_student` DROP FOREIGN KEY `fk_sclass`;
3、多表查询
1、笛卡尔积:把两表的列合并,很多无效数据。
SELECT * FROM t_student,t_teacher;
查询结果
2、内连接
select * from t_student,t_teacher where t_student.sclass = t_teacher.sclass;
3、外连接
左外链接:左外连接就是在左边信息显示全的情况下与右边的表链接。能连接上就显示右边的信息,连接不上显示左这表的信息。
INSERT INTO t_student(sid,sname,sage,sclass) VALUES('0011','s11',20,NULL) ;
假如在t_student表中有一个学生专业的空。那么如果有内链接,这个同学信息应该查询不到。因此有了,左外连接和右外连接
查询结果
右外连接与左外连接相似
4、子查询
当一个查询是另一个查询的条件时,称之为子查询。
comparison 一个表达式及一个比较运算符,将表达式与子查询的结果作比较。
expression 用以搜寻子查询结果集的表达式。
sqlstatement SELECT 语句,遵从与其他 SELECT 语句相同的格式及规则。它必须括在括号之中。
示例1 :全部单价比任何以 25% 或更高的折扣卖出的产品高的产品:
SELECT * FROM Products
WHERE UnitPrice > ANY
(SELECT UnitPrice FROM OrderDetails
WHERE Discount >= .25);
示例2、查出年龄大于s2的学生
SELECT * FROM t_student WHERE sage>= (SELECT sage FROM t_student WHERE sname='s2');
查询结果: