首页 > 数据库 >数据库多表查询之 where & INNER JOIN

数据库多表查询之 where & INNER JOIN

时间:2023-03-05 17:03:15浏览次数:38  
标签:JOIN 记录 数据库 ID INNER 多表 连接


在多表查询中,一些SQL开发人员更喜欢使用WHERE来做join,比如:

SELECT a.ID, b.Name, b.Date FROM Customers a, Sales b WHERE a.ID = b.ID;

缺点:在上面语句中,实际上是创建了两张表的笛卡尔积,所有可能的组合都会被创建出来。在笛卡尔连接中,在上面的例子中,如果有1000顾客和1000条销售记录,这个查询会先产生1000000个结果,然后通过正确的 ID过滤出1000条记录。 这是一种低效利用数据库资源,数据库多做100倍的工作。 在大型数据库中,笛卡尔连接是一个大问题,对两个大表的笛卡尔积会创建数10亿或万亿的记录。

为了避免创建笛卡尔积,应该使用INNER JOIN :

SELECT a.ID, b.Name, b.Date FROM Customers a INNER JOIN Sales b ON a.ID = b.ID;

优点:如上面语句,使用inner join 这样数据库就只产生等于ID 的1000条目标结果。增加了查询效率。

有些数据库系统会识别出 WHERE连接并自动转换为 INNER JOIN。在这些数据库系统中,WHERE 连接与INNER JOIN 就没有性能差异。但是, INNER JOIN 是所有数据库都能识别的,因此DBA会建议在你的环境中使用它。

INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

注意:

1、INNER JOIN 等同于 JOIN;

2、示意图:

数据库多表查询之  where  &  INNER JOIN_数据库系统

数据库多表查询之  where  &  INNER JOIN_联表查询_02

数据库多表查询之  where  &  INNER JOIN_数据库系统_03

数据库多表查询之  where  &  INNER JOIN_多表查询_04


标签:JOIN,记录,数据库,ID,INNER,多表,连接
From: https://blog.51cto.com/sdwml/6101539

相关文章

  • AtCoder Beginner Contest 292
    《E-Transitivity》   这道题首先要看一下自己有没有理解错题意:      问:点2和点3之间要连边吗? 答案是不需......
  • SQL99语法实现多表查询
    3.SQL99语法实现多表查询3.1内连接(INNERJOIN)的实现语法SELECT字段列表FROMA表INNERJOINB表ON关联条件WHERE等其他子句;例SELECTe.employee_id,e.last......
  • AtCoder Beginner Contest 292
    A-CAPSLOCK(abc292a)题目大意给定一个小写字母串,将其转换成大写字母。解题思路调库,或者按照ascii码转换即可。神奇的代码#include<bits/stdc++.h>usingname......
  • AtCoder Beginner Contest 252
    AtCoderBeginnerContest252D题意在数组中形如\(1\leqi<j<k\leqn\)使得\(a_i,a_j,a_k\)互不相同,求共有多少组满足条件思路它的数据范围\(1\leqa_i\leq2*10^5\)......
  • SQL语法:join的用法总结
    一、LEFTJOIN(左连接)作用:左连接,表table_a左连接表table_b,表示以表table_a为主,关联上表table_b的数据,查出来的结果显示左边的所有数据,然后右边显示的是和左边有交......
  • Join线程插队
    packagecom.Java;//Join线程插队必须执行完再执行其他线程publicclassTestJoinimplementsRunnable{@Overridepublicvoidrun(){for(inti=0;......
  • AtCoder Beginner Contest 251
    AtCoderBeginnerContest251D给定一个1e6范围内的数n,要你构造出一个数组,对于1~n中的任何一个数都能用数组中最多三个数的和加起来。这题真的是很好的一道思维题,想了我......
  • Linux操作命令(八)1.sort命令 2.uniq命令 3.join命令
    1、sort,排序常用参数参数描述-n基于字符串的长度来排序,使用此选项允许根据数字值排序,而不是字母值-k指定排序关键字-b默认情况下,对整行进行排序,从每行的......
  • MySQL学习笔记-多表查询(下)
    多表查询(下)一.联合查询联合查询:将多次查询结果合并,形成新的查询结果集select{字段列表}from{表A}...union[all]select{字段列表}from{表B}...;unio......
  • mysql学习之join从句
    一、join从句共有5种类型内连接(innerjoin)全外连接(fullouterjoin)左外连接(leftouterjoin)右外连接(rightouterjoin)交叉连接(crossjoin)二、演示案例新建两张表user1表和us......