用python做网站的多吗,增加网站点击量,网站平台免费,图片转二维码在线制作生成器数据库表的关联、集合操作
join、MySQL、Oracle什么left right的老是忘#xff0c;归根到底还是不熟练#xff0c;记录下来#xff0c;以后就不用再搜了。 设表A、表B分别包含员工信息和部门信息。
表A包含员工的ID、姓名和部门ID#xff0c; 表B包含部门ID和部门名称。 …数据库表的关联、集合操作
join、MySQL、Oracle什么left right的老是忘归根到底还是不熟练记录下来以后就不用再搜了。 设表A、表B分别包含员工信息和部门信息。
表A包含员工的ID、姓名和部门ID 表B包含部门ID和部门名称。
(Inner) Join 内连接
返回两个表中满足连接条件的记录。如果两个表中没有匹配的记录则不会返回任何结果。 inner join 和 join 等价。
SELECT A.ID, A.Name, B.DepartmentName
FROM TableA AINNER JOIN TableB B ON A.DepartmentID B.DepartmentID;在两个字段同名的情况下这个sql可以使用using进一步简化
SELECT A.ID, A.Name, B.DepartmentName
FROM TableA AINNER JOIN TableB B USING (DepartmentID);若两表只有一对同名字段则可以进一步简化(使用自然连接)
SELECT A.ID, A.Name, B.DepartmentName
FROM TableA ANATURAL JOIN TableB B;返回表A中员工的ID和姓名以及他们所在的部门名称只返回满足连接条件的记录。
Left Join 左连接
等效 left outer join ,outer可省略
返回左表中所有的记录以及与右表中满足连接条件的记录。如果右表中没有匹配的记录则返回NULL值。
SELECT A.ID, A.Name, B.DepartmentName
FROM TableA ALEFT JOIN TableB B ON A.DepartmentID B.DepartmentID;返回表A中员工的ID和姓名以及他们所在的部门名称如果有员工所在的部门在表B中没有对应的部门记录那么部门名称将显示为NULL值。
Right Join 右连接
等效 right outer join ,outer可省略
返回右表中所有的记录以及与左表中满足连接条件的记录。如果左表中没有匹配的记录则返回NULL值。
SELECT A.ID, A.Name, B.DepartmentName
FROM TableA ARIGHT JOIN TableB B ON A.DepartmentID B.DepartmentID;返回表B中的部门ID和部门名称以及该部门下的员工信息如果有部门在表A中没有员工记录那么员工ID和姓名将显示为NULL值。
全外连接
在 Oracle 中可以使用Full Outer Join等效full join,outer可省略
SELECT A.ID, A.Name, B.DepartmentName
FROM TableA AFULL OUTER JOIN TableB B ON A.DepartmentID B.DepartmentID;返回所有员工和所有部门信息员工无部门其部门显示NULL部门无员工其员工显示NULL
解决MySQL中不支持全外连接的办法
将左外连接和右外连接中间利用union取并集去重执行效率低
SELECT A.ID, A.Name, B.DepartmentName
FROM TableA ALEFT JOIN TableB B ON A.DepartmentID B.DepartmentID
UNION
SELECT A.ID, A.Name, B.DepartmentName
FROM TableA ARIGHT JOIN TableB B ON A.DepartmentID B.DepartmentID;或可利用union all取并集不去重执行效率高
SELECT A.ID, A.Name, B.DepartmentName
FROM TableA ALEFT JOIN TableB B ON A.DepartmentID B.DepartmentID
UNION ALL
SELECT A.ID, A.Name, B.DepartmentName
FROM TableA ARIGHT JOIN TableB B ON A.DepartmentID B.DepartmentID;集合操作
MySQL只支持并集交、差不支持
Oracle支持并、交、差。
三表查询
自连接查询
以上是99语法
92语法
交叉连接
两表中间使用逗号分隔表示两表笛卡尔积然后利用where条件筛选。
92语法更简单但使用繁琐无特性关键词个人感觉可以理解为一种语法糖92语法的 表的连接条件 和 筛选条件 没有分开99语法提供了更多查询连接类型使用和表达上更为简洁但语法体系更为冗杂
声明本文使用八爪鱼rpa工具从gitee自动搬运本人原创或摘录会备注出处博客如版式错乱请评论私信如情况紧急或久未回复请致邮 xkm.0jiejie0qq.com 并备注原委引用本人笔记的链接正常情况下均可访问如打不开请查看该链接末尾的笔记标题右击链接文本点击 复制链接地址在文本编辑工具粘贴查看也可在搜索框粘贴后直接编辑然后搜索在本人博客手动搜索该标题即可如遇任何问题或有更佳方案欢迎与我沟通