主键约束

约束类型—primary key: 主键约束
表示id不可以重复,通过id来确定唯一的一条记录(唯一标识数据表中的行/记录)

mysql怎么内关联 mysql怎么关联别的id_右连接


非空: 表示这个列的值不能为空

自增: 表示插入记录的时候不需要手动插入,会自动增长

多表之间的建立

注意:

1:n的关系: 就把1放入多的一方。例如:班级和学生是1:n的关系,就在学生表中加入team_id;
n:n的关系: 需要通过一个中间表用来维护两个之间的关系。例如:老师和班级是n:n的关系,创建一个team_teacher表,表中包含team_id和teacher_id

例题:查找501班的老师名字和教的科目名字

思路:
1、先通过班级表找到班级的id
2、通过中间表找到对应班级id的老师id
3、再通过老师表找到对应老师id的老师信息

select id from team where name ='501';-- 先找到班级的id 501班的id是1
select teacher_id from team_teacher where team_id='1';-- 通过中间表找到班级id是1的老师的id
select * from teacher where id='1' or id='2';-- 再通过老师的id找到老师的信息

步骤一:

mysql怎么内关联 mysql怎么关联别的id_主键_02


步骤二:

mysql怎么内关联 mysql怎么关联别的id_主键_03


步骤三:

mysql怎么内关联 mysql怎么关联别的id_mysql怎么内关联_04

整合:
in():-- in表示 id只要 等于小括号()里面的值都可以
逗号,相当于 or

-- 两种方式相同
select name,subject from teacher where id='1' or id='2';
select name,subject from teacher where id in (1,2);

多表之间的连接

方法一 :使用子查询

子查询:把一个sql查询的结果,作为另外一个查询的条件使用
通过 in()方法
select id from team where name =‘501’;
select teacher_id from team_teacher where team_id=‘1’;

select t.name,t.subject from teacher t where 
t.id in 
(select teacher_id from team_teacher where team_id='1');

嵌套两次子查询:
select id from team where name =‘501’;
select teacher_id from team_teacher where team_id=‘1’;
select * from teacher where id=‘1’ or id=‘2’;

select t.name,t.subject from teacher t where t.id in
 (select teacher_id from team_teacher where team_id in(select id from team where name ='501'));
方法二 :使用连接

SQL 连接(JOIN) 子句用于将数据库中两个或者两个以上表中的记录组合起来。连接通过共有值将不同表中的字段组合在一起。

select t.name,t.subject from teacher t left join team_teacher tt 
on (t.id=tt.teacher_id)
left join team te on (te.id=tt.team_id) where te.name='501';

左连接(LEFT JOIN): 返回左表中的所有行,即使右表中没有匹配的行。
右连接(RIGHT JOIN): 返回右表中的所有行,即使左表中没有匹配的行。
on(匹配条件)

三、左连接与右连接的结果理解
左连接结果数量:

在查询结果中,左边的记录会全部包含
– on后面的匹配条件,如果匹配到0或者1,对结果的总数没有影响
– 如果匹配,大于1条,那么对于结果,结果就增加 (匹配数量-1) 的个数

select *from team t left join  team_teacher tt on (t.id=tt.team_id);-- 班级表连接中间表

左表 team表(结果记录id 中至少有3条):

mysql怎么内关联 mysql怎么关联别的id_主键_05


右表 team_teacher表 匹配的 team_id 行:(结果记录中+1+1)

mysql怎么内关联 mysql怎么关联别的id_右连接_06


结果:5条

mysql怎么内关联 mysql怎么关联别的id_主键_07

右连接的结果数量:

在查询结果中,右边的记录会全部包含

select *from team t right join  team_teacher tt on (t.id=tt.team_id);

右表 team_teacher 表(结果记录team_id 中至少有4条):

mysql怎么内关联 mysql怎么关联别的id_主键_08


左边 team表 匹配的 id 行:(结果记录总数没有影响 —都只有1条)

mysql怎么内关联 mysql怎么关联别的id_子查询_09


结果:4条

mysql怎么内关联 mysql怎么关联别的id_右连接_10