当前位置:Gxlcms > 数据库问题 > 数据库 SQL 外键约束 多表查询

数据库 SQL 外键约束 多表查询

时间:2021-07-01 10:21:17 帮助过:2人阅读

1.外键约束
       表是用来保存现实生活中的数据的,而现实生活中数据和数据之间往往具有一定的关系,我们在使用表来存储数据时,可以明确的声明表和表之前的依赖关系,命令数据库来帮我们维护这种关系,像这种约束就叫做外键约束。         定义外键约束  foreign key(本表的列名 ordersid) references orders(id)(引用的表明及列名)    create table dept(        id int primary key auto_increment,        name varchar(20)    );    create table emp(        id int primary key auto_increment,        name varchar(20),        dept_id int,        foreign key(dept_id) references dept(id)    );
2.多表设计    一对多:在多的一方保存一的一方的主键做为外键    一对一:在任意一方保存另一方的主键作为外键    多对多:创建第三方关系表保存两张表的主键作为外键,保存他们对应关系技术分享3.多表查询
    3.1笛卡尔积查询:将两张表的记录进行一个相乘的操作查询出来的结果就是笛卡尔积查询,如果左表有n条记录,右表有m条记录,笛卡尔积查询出有n*m条记录,其中往往包含了很多错误的数据,所以这种查询方式并不常用        select * from dept,emp;    3.2内连接查询:查询的是左边表和右边表都能找到对应记录的记录        select * from dept,emp where dept.id = emp.dept_id;        select * from dept inner join emp on dept.id=emp.dept_id;    3.3外连接查询        a.左外连接查询:在内连接的基础上增加左边表有而右边表没有的记录            select * from dept left join emp on dept.id=emp.dept_id;        b.右外连接查询:在内连接的基础上增加右边表有而左边表没有的记录            select * from dept right join emp on dept.id=emp.dept_id;        c.全外连接查询:在内连接的基础上增加左边表有而右边表没有的记录右边表有而左表表没有的记录            select * from dept full join emp on dept.id=emp.dept_id;        d.但是mysql不支持全外连接,不过我们可以使用union关键字模拟全外连接            select * from dept left join emp on dept.id = emp.dept_id            union            select * from dept right join emp on dept.id = emp.dept_id;

多表查询实例
create table a(id int primary key,job varchar(20));insert into a values(1,‘AA‘), (2,‘BB‘), (3,‘CC‘);select * from a; 技术分享
create table b(id int ,name varchar(20) ,foreign key(id) references a(id));
一对多:在多的一方(b)保存一的一方(a)的主键做为外键;多对多:创建第三方关系表保存两张表的主键作为外键,保存他们对应关系注意:被参照的a(id)必须定义为unique才可以被参照,否则报错(逻辑错误)。insert into b values(1,‘bqt‘), (2,‘bqt2‘), (2,‘bqt3‘);注意:插入数据的id必须在被参照的表中已经存在,否则报错(逻辑错误)。select * from b; 技术分享
select * from a,b;
 技术分享将两张表的记录进行一个相乘的操作查询出来的结果就是笛卡尔积查询,如果左表有n条记录,右表有m条记录,笛卡尔积查询出有n*m条记录,其中往往包含了很多错误的数据,所以这种查询方式并不常用.
select * from a,b where a.id = b.id;
或select * from a inner join b on a.id=b.id; 技术分享内连接查询:查询的是左边表和右边表都能找到对应记录的记录。
select * from a left join b on a.id=b.id;
 技术分享左外连接查询:在内连接的基础上增加左边表有而右边表没有的记录
select * from a right join b on a.id=b.id;
 技术分享右外连接查询:在内连接的基础上增加右边表有而左边表没有的记录备注:由于右边表参照左边表,所以不存在右边表有而左边表没有的记录。
select * from a left  join b on a.id = b.id
unionselect * from a right join b on a.id = b.id; 技术分享全外连接查询:在内连接的基础上增加左边表有而右边表没有,和右边表有而左表表没有的记录select * from a full join b on a.id=b.id; -- 某些数据库支持,但mysql不支持!



来自为知笔记(Wiz)

数据库 SQL 外键约束 多表查询

标签:

人气教程排行