外键、多表查询,Navicat可视化软件

本文详细介绍了数据库中的外键概念,如何识别不同类型的表间关系(一对一、一对多、多对多),以及多表查询的两种方法——子查询和连表查询(内连接、左连接、右连接)。还提供了创建表结构实例来展示关联方式。
摘要由CSDN通过智能技术生成

一、外键

关键字:foreign key

1. 表与表之间的关系

如何找出两表之间的关系:

分析步骤:

        1、先站在左表的角度去找

                判断左表的一条记录是够能够对应右表中的多条记录,如果能,左表的一个字段 foreign key 右表的一个字段

        2、 再站在右表的角度去找

                判断右表中的一条记录是否能够对应左表中的多条记录,如果能,右表的一个字段foreign key 左表的一个字段

 

总结:

        一对多:如果只有步骤一成立,步骤二不成立或步骤二成立,步骤一不成立,那就是一对多关系


        多对多:如果步骤1和步骤2同时成立,则证明这两张表是多对多关系


        一对一:如果步骤1和步骤2都不成立,而左表中的一条数据对应右表中的一条数据,那两表就是一对一的关系

2. 建立表与表之间关系的注意事项

1. 创建表示先创建被关联的的表(没有外键的表),然后在创建关联的表

2. 插入新数据时,应该确定被关联表中有数据

3. 在插入新数据的时候,外键字段只能填写被关联表中已经存在的数据

4. 在修改和删除被关联表中的数据时,无法直接操作,要想数据之间自动修改和删除需要添加额外的设置

3. 建立表与表之间的关系

 第一种:

一对多:关联方式:foreign key

create table dep(id int primary key auto_increment,name varchar(32));

create table emp(id int primary key auto_increment,name varchar(32),age int,dep_id int,foreign key(dep_id) references dep(id) on update cascade on delete cascade);

insert into dep(name) values('技术部'),('人事部');
insert into emp(name,age,dep_id) values('张三',18,1),('李四',19,2);

 第二种:

  多对多:关联方式:foreign key + 一张表

第三种:

一对一:关联方式:foreign key + unique

create table user(id int primary key,name varchar(32));

create yable userinfo(id int primary key auto_increment,qq int,email int,user_id int unique,foreign key(user_id) references user(id) on update cascade on delete cascade);

insert into user(name) values('张三'),('李四');

insert into userinfo(qq,email,user_id) values(1211111,1111111,2),(11218476,19894765,4);

二、多表查询

 方法1:子查询(分布操作)

        子查询:一条SQL语句的执行结果作为另一条SQL语句的执行条件

例:select*from dep where id = (select dep_id from emp where name = 'kevin');


方法2:连表查询(重点)

连表查询:把多张有关系的表链接成一张巨大的虚拟表,链接出来的虚拟表不是真实存在的,它在内存中存着,然后按照单表查询

 

专业的连表语法:

        inner join :内连接,查询的是两张表中都有的数据

        left join :左连接,以左表为基准,查询左表中的所有数据,右表没有的数据,用NULL连接

        right join :右连接,以右表为基准,查询右表中的所有数据,左表没有的数据,用NULL连接

        union :连接两个SQL语句的结果

 

    例句:select*from dep left join emp on emp.id = dep.id;

                union

              select*from dep right join left on emp.id=dep.id;

 

 连表查询可以查看多张表,不止两张表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值