数据库-表毗连的几种方式

打印 上一主题 下一主题

主题 839|帖子 839|积分 2517

1. 数据库表毗连方式简介

在关系型数据库中,表与表之间的毗连黑白常紧张的操纵。毗连可以将两个或多个表中的数据进行归并,实现数据的查询和分析。常见的毗连方式有内毗连、左毗连、右毗连、全毗连、交织毗连和团结查询。下面将分别对这几种毗连方式进行详细介绍。
2. 内毗连(INNER JOIN)

用比较运算符比较要毗连的列的值的毗连,不匹配的行不会被体现。sql关键字JOIN 大概INNER JOIN,通常写成JOIN。
内毗连只返回两个表中共有的行,即两个表中毗连字段的值相称的行。内毗连的语法为:
  1. SELECT column_name(s)
  2. FROM table1
  3. INNER JOIN table2
  4. ON table1.column_name = table2.column_name;
复制代码
3. 左外毗连(LEFT JOIN)

① 外毗连又分为:左外毗连、右外毗连、全外毗连。
② 对应的sql关键字:LEFT/RIGHT/FULL OUTER JOIN,通常省略OUTER关键字,写成LEFT/RIGHT/FULL JOIN。
③ 在左、右外毗连中都会以一种表为基表,基表的所有行、列都会体现,外表假如和条件不匹配则所有的外表列值都为NULL。
全外毗连则所有表的行、列都会体现,条件不匹配的值皆为NULL。
左毗连返回左表中的所有行,以及右表中毗连字段的值和左表相称的行。假如右表中没有符合条件的行,则返回 NULL 值。左毗连的语法为:
  1. SELECT column_name(s)
  2. FROM table1
  3. LEFT JOIN table2
  4. ON table1.column_name = table2.column_name;
复制代码
4. 右外毗连(RIGHT JOIN)

右毗连和左毗连相反,返回右表中的所有行,以及左表中毗连字段的值和右表相称的行。假如左表中没有符合条件的行,则返回 NULL 值。右毗连的语法为:
  1. SELECT column_name(s)
  2. FROM table1
  3. RIGHT JOIN table2
  4. ON table1.column_name = table2.column_name;
复制代码
5. 全毗连(FULL OUTER JOIN)

没有where条件的交织毗连将产生毗连表所涉及的笛卡尔积,即TableA的行数*TableB的行数的结果集。假如带where,返回或体现的是匹配的行数。(cross join后只能用where不能是on)
全毗连返回左右两个表中的所有行,并将左表和右表中毗连字段的值相称的行归并成一行。假如左表或右表中没有符合条件的行,则返回 NULL 值。全毗连的语法为:
  1. SELECT column_name(s)
  2. FROM table1
  3. FULL OUTER JOIN table2
  4. ON table1.column_name = table2.column_name;
复制代码
6. 交织毗连(CROSS JOIN)

交织毗连返回两个表中的所有可能的组合,也称为笛卡尔积。交织毗连的语法为:
  1. SELECT column_name(s)
  2. FROM table1
  3. CROSS JOIN table2;
复制代码
7. 团结查询(UNION)

团结查询将两个或多个表中的数据归并成一个结果集,不包罗重复的行。要求每个表中的列数和数据范例必须完全同等。团结查询的语法为:
  1. SELECT column_name(s)
  2. FROM table1
  3. UNION
  4. SELECT column_name(s)
  5. FROM table2;
复制代码
8. 案例分析

假设有两个表,分别为表 A 和表 B,它们的数据分别如下:
表 A:
idname1Alice2Bob3Cathy4David5Edward 表 B:
idage225330435640 现在需要通过毗连查询得到一个包罗两个表中所有行的结果集,它们的毗连字段为 id。则不同的毗连方式返回的结果如下:


  • 内毗连:
idnameage2Bob253Cathy304David35

  • 左毗连:
idnameage1AliceNULL2Bob253Cathy304David355EdwardNULL

  • 右毗连:
idnameage2Bob253Cathy304David356NULL40

  • 全毗连:
idnameage1AliceNULL2Bob253Cathy304David355EdwardNULL6NULL40

  • 交织毗连:
idnameage1Alice251Alice301Alice351Alice402Bob252Bob302Bob352Bob403Cathy253Cathy303Cathy353Cathy404David254David304David354David405Edward255Edward305Edward355Edward40

  • 团结查询:
idname1Alice2Bob3Cathy4David5Edward2NULL3NULL4NULL6NULL 9. 代码示例

下面是针对上述案例的 SQL 代码示例:
  1. -- 创建表 A 并插入数据
  2. CREATE TABLE A (
  3.   id INT PRIMARY KEY,
  4.   name VARCHAR(50)
  5. );
  6. INSERT INTO A VALUES (1, 'Alice');
  7. INSERT INTO A VALUES (2, 'Bob');
  8. INSERT INTO A VALUES (3, 'Cathy');
  9. INSERT INTO A VALUES (4, 'David');
  10. INSERT INTO A VALUES (5, 'Edward');
  11. -- 创建表 B 并插入数据
  12. CREATE TABLE B (
  13.   id INT PRIMARY KEY,
  14.   age INT
  15. );
  16. INSERT INTO B VALUES (2, 25);
  17. INSERT INTO B VALUES (3, 30);
  18. INSERT INTO B VALUES (4, 35);
  19. INSERT INTO B VALUES (6, 40);
  20. -- 内连接查询
  21. SELECT A.id, A.name, B.age
  22. FROM A
  23. INNER JOIN B
  24. ON A.id = B.id;
  25. -- 左连接查询
  26. SELECT A.id, A.name, B.age
  27. FROM A
  28. LEFT JOIN B
  29. ON A.id = B.id;
  30. -- 右连接查询
  31. SELECT A.id, A.name, B.age
  32. FROM A
  33. RIGHT JOIN B
  34. ON A.id = B.id;
  35. -- 全连接查询
  36. SELECT A.id, A.name, B.age
  37. FROM A
  38. FULL OUTER JOIN B
  39. ON A.id = B.id;
  40. -- 交叉连接查询
  41. SELECT A.id, A.name, B.age
  42. FROM A
  43. CROSS JOIN B;
  44. -- 联合查询
  45. SELECT id, name
  46. FROM A
  47. UNION
  48. SELECT id, NULL AS name
  49. FROM B;
复制代码
各个毗连的区别

毗连方式含义结果左表右表到场条件是否生存未匹配数据内毗连(INNER JOIN)只返回两个表中存在匹配的行匹配的行表A表BON条件否左外毗连(LEFT JOIN)返回左表中所有行和右表中与左表匹配的行匹配的行+左表未匹配行null值表A表BON条件右外毗连(RIGHT JOIN)返回右表中所有行和左表中与右表匹配的行匹配的行+右表未匹配行null值表A表BON条件全毗连(FULL OUTER JOIN)返回左表和右表中所有的行,假如匹配,则返回匹配的行匹配的行+左表未匹配行+右表未匹配行null值表A表BON条件交织毗连(CROSS JOIN)返回两个表中所有匹配的行笛卡尔积表A表B无(不需要条件)否团结查询(UNION)把两个表中的结果集归并在一起并去重归并且去重后的行表A表B无(两个表结构和列数必须同等)否


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

盛世宏图

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表