表的关联关系:
一对一关联:一个人只有有个身份证,一个身份证代表一个人
1.两个表主键相同的数据为对应数据
2.添加唯一外键关联
一对多关联:班级-学生 一个班级包含多个学生
多对一关联:班级-学生 多个学生在一个班级
1.在多的一端添加外键,与一的一端主键进行关联
多对多关联:学生-课程 一个学生可以选择多个课程,一门课程也可以有多个学生选择
1.额外创建一张关系表来维护多对多关联,在关系表中定义2个外键,分别与两个数据表的主键进行关联
外键约束:
constraint FK_STUDENT_CLASSES foreign key(cid) references calss(id)
外键逻辑名称
将一个列添加为外键约束与另一张表的主键进行关联后,这个外键约束添加的数据必须要在关联的主键字段中存在
create table student (
num char(8) not null primary key,
name varchar(20) not null,
gender char(2) not null,
age int not null,
tel char(11) not null unique,
qq varchar(11),
cid int,
constraint FK_STUDENT_CLASSES foreign key(cid) references calss(id)
);
create table class (
classs varchar(20) not null,
id int not null primary key
);
插入数据:
insert into class(calss,id) values('一班',1);
insert into student(num,name,gender,age,tel,qq,cid) values('11','zhangsan','100','20','13333333333','888888','1');
先建表后添加外键约束:
alter table student add constraint FK_STUDENT_CLASSES foreign key(cid) references class(id);
删除外键约束:
alter table student drop foreign key FK_STUDENT_CLASSES;
级联修改:ON UPDATE CASCADE :修改 ON DELETE CASCADE:删除
班级id 被外键关联后,就不能修改和删除
1.(如果要修改先设置cid为空,再修改id,再把cid改为id的值)
2.级联操作(
alter table student drop foreign key FK_STUDENT_CLASSES;
alter table student add constraint FK_STUDENT_CLASSES foreign key(cid) references class(id) ON UPDATE CASCADE ON DELETE CASCADE;)
连接查询:
内连接:INNER JOIN 只能查出相匹配的数据
select 字段名 from tabname1 INNER JOIN tabname2 ON 条件tabname1.id1 = tabname2.id2;
左连接:LEFT JOIN 显示左表中的所有记录,如果右表有匹配数据,则显示,没有匹配数据则右表显示NULL
select 字段名 from leftTable LEFT JOIN rightTable ON 条件leftTable.id1 = rightTable.id2;
右连接:RIGHT JOIN 显示右表中的所有记录,如果左表有匹配数据,则显示,没有匹配数据左表则显示NULL
select 字段名 from leftTable RIGHT JOIN rightTable ON 条件leftTable.id1 = rightTable.id2;
数据表别名:如果再连接查询表中有相同的名字字段,可以使用 表名.字段名 进行区分,如果表名太长,不便于SQL语句编辑,可以使用表别名
SELECT s.name,c.course_name FROM tb_students_info s INNER JOIN tb_course c
套嵌查询/子查询:
WHERE <表达式> <操作符> (子查询)
单列多行:
select * from student where cid IN (select * from class where id='1'); 查询id=1得学生
select * from student where cid NOT IN (select * from class where id='1');查询id!=1得学生
多条查询结果整合到一起
select * from student where cid='1' UNION select * from student where cid='2';
多行多列
select * from (select * from student where num='1') t where t.cid = ‘1’;
存储过程,不是太懂??? 下次再记录
本文详细阐述了数据库中的表间关联,包括一对一、一对多、多对多的关系,以及外键约束的使用、级联操作和不同类型的连接查询(内连接、左连接、右连接)。讲解了如何通过SQL操作实现数据表之间的关联,并介绍了存储过程的基本概念。
174万+

被折叠的 条评论
为什么被折叠?



