数据库---多表查询、关联查询、不同情况下数据库表设计

本篇博客知识点
1.三种简单的关联方式:左关联、右关联、内联
2.实例演示多表查询和关联查询
3.1对1数据库表设计、1对多数据库表设计、多对多数据库表设计

三种关联方式:左关联、右关联、内联

左关联(left join):以左表为主(左表保持完整,将右表中和左表有依赖关系的记录添加进来形成新的表)
右关联(right join):以右表为主(右表保持完整,将左表中和右表有依赖关系的记录添加进来形成新的表)
内联(inner join):将两个表中有联系的记录分别抽取出来形成新的表
示意图
左关联:
数据库---多表查询、关联查询、不同情况下数据库表设计_第1张图片
右关联:
数据库---多表查询、关联查询、不同情况下数据库表设计_第2张图片
内联
数据库---多表查询、关联查询、不同情况下数据库表设计_第3张图片
以实际表 不同的车主有多辆车 为例
数据库---多表查询、关联查询、不同情况下数据库表设计_第4张图片
左关联生成的虚拟表如下
数据库---多表查询、关联查询、不同情况下数据库表设计_第5张图片
右关联生成的虚拟表如下
数据库---多表查询、关联查询、不同情况下数据库表设计_第6张图片
内联生成的虚拟表如下
数据库---多表查询、关联查询、不同情况下数据库表设计_第7张图片

实例演示多表查询和关联查询

现在有两个表。 车主信息表和车辆信息表,car里的pid是外键
person表
数据库---多表查询、关联查询、不同情况下数据库表设计_第8张图片
car表
数据库---多表查询、关联查询、不同情况下数据库表设计_第9张图片
需求1:查询 车辆数目大于等于二的车主编号

SELECT pid FROM car GROUP BY pid HAVING COUNT(pid)>=2;

查询哪些人有两辆及以上车的车主信息
方式一普通查询

SELECT person.pname,car.cname,car.cid,car.price FROM person,car WHERE person.pid IN( SELECT pid FROM car GROUP BY pid HAVING COUNT(pid)>=2) AND person.pid=car.pid;

方式二-关联查询

SELECT person.pname,car.cname,car.cid,car.price FROM person INNER JOIN car ON person.pid IN( SELECT pid FROM car GROUP BY pid HAVING COUNT(pid)>=2) AND person.pid=car.pid;
SELECT person.pname,car.cname, car.cid,car.price FROM person INNER JOIN car ON person.pid= car.pid WHERE person.pid IN( SELECT pid FROM car GROUP BY pid HAVING COUNT(pid)>=2);

你可能感兴趣的:(sql)