赞
踩
在项目开发中,根据业务需求及业务模块得不同,在众多数据库表中,会存在各种联系。基本分为:
笛卡尔积,数学中表示两个集合中第一个对象是X,第二个对象是Y,展示二者之间所有可能的组合情况,也就是并集关系。在多表查询中容易出现数据重复的情况,也就是无效数据。在多表查询中,需要做到清除无效的笛卡尔积。要用到特定的查询方式达到效果。
- 隐式内连接:SELECT 字段列表 FROM 表1,表2 WHERE 条件...;
- 显式内连接:SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 连接条件...;
- -- 查询每一个学生的姓名,及关联的班级
- -- 表结构:class(班级表),stu(学生表)
- -- 连接方式:stu.class_id = class.id(学生表的班级id = 班级的主键id)
-
- -- 隐式内连接演示
- SELECT stu.name,class.name FROM stu,class WHERE stu.class_id = class.id;
-
- -- 显式内连接演示
- SELECT stu.name,class.name FROM stu INNER JOIN class ON stu.class_id = class.id;
- 左外连接语法:SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件...;
- 右外连接语法:SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件...;
- -- 还是以班级和学生为例,查询学生的所有数据,和对应的班级信息
-
- -- 左外连接演示
- SELECT stu.*, class.name FROM stu LEFT JOIN class ON stu.class_id = stu.id;
- --可简写为
- SELECT * FROM stu s LEFT class c ON s.class_id = c.id;
-
- -- 右外连接演示
- SELECT stu.*, class.name FROM stu RIGHT JOIN class ON stu.class_id = stu.id;
- --可简写为
- SELECT * FROM stu s RIGHT class c ON s.class_id = c.id;
- 自连接语法:SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件...;
- -- 查询教师职工 及其 所属直接领导的名字
- -- 表结构:emp(职工表)
-
- -- 自连接演示(结果为交集)
- SELECT e.name,m.name FROM emp e, emp m WHERE e.id = m.manger_id;
-
- -- 如果存在员工暂时没有领导, 同时也需要查询出时(可采用左右连接,不存在领导的领导为null)
- SELECT e.name,m.name FROM emp e LEFT JOIN emp m ON e.id = m.manger_id;
- 子查询语法:SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。