Home Database Mysql Tutorial mysql left( right ) join使用on 与where 筛选的差异

mysql left( right ) join使用on 与where 筛选的差异

Jun 07, 2016 pm 03:24 PM
join left mysql right where use

有这样的一个问题mysql查询使用mysql中left(right)join筛选条件在on与where查询出的数据是否有差异。 可能只看着两个关键字看不出任何的问题。那我们使用实际的例子来说到底有没有差异。 例如存在两张表结构 表结构1 Sql代码 drop table ifEXISTSA; CREATE T

有这样的一个问题mysql查询使用mysql中left(right)join筛选条件在on与where查询出的数据是否有差异。

   可能只看着两个关键字看不出任何的问题。那我们使用实际的例子来说到底有没有差异。

 

   例如存在两张表结构

   表结构1

 

Sql代码  mysql left( right ) join使用on 与where 筛选的差异

  1. drop table if EXISTS A;  
  2. CREATE TABLE A (  
  3.   ID int(1) NOT NULL,  
  4.   PRIMARY KEY  (ID)  
  5. ) ENGINE=MyISAM DEFAULT CHARSET=latin1;  

   表结构2

 

Sql代码  mysql left( right ) join使用on 与where 筛选的差异

  1. drop table if EXISTS B;  
  2. CREATE TABLE B (  
  3.   ID int(1) NOT NULL,  
  4.   PRIMARY KEY  (ID)  
  5. ) ENGINE=MyISAM DEFAULT CHARSET=latin1;  

   表一插入数据

 

Sql代码  mysql left( right ) join使用on 与where 筛选的差异

  1. insert into A values ( 1 );  
  2. insert into A values ( 2 );  
  3. insert into A values ( 3 );  
  4. insert into A values ( 4 );  
  5. insert into A values ( 5 );  
  6. insert into A values ( 6 );  

 表二插入数据

 

Sql代码  mysql left( right ) join使用on 与where 筛选的差异

  1. insert into B values ( 1 );  
  2. insert into B values ( 2 );  
  3. insert into B values ( 3 );  

 完成后A,B表数据如下:

mysql left( right ) join使用on 与where 筛选的差异

 语句一

Sql代码  mysql left( right ) join使用on 与where 筛选的差异

  1. select  A.ID as AID, B.ID as BID   from A left join B on A.ID = B.ID where B.ID

 语句二

Java代码  mysql left( right ) join使用on 与where 筛选的差异

  1. select  A.ID as AID, B.ID as BID  from A left join B on A.ID = B.ID and  B.ID3  

   以上两个语句的查询结果是否一致。

   反正一切我是没有注意到这两个查询存在任何差异的【以前也没这么写过sql】。

   我们看看实际结果

   语句一的查询结果

 

mysql left( right ) join使用on 与where 筛选的差异

 

语句二的查询结果为:

 

mysql left( right ) join使用on 与where 筛选的差异

 

发现两个查询存在差异。

为什么会存在差异,这和on与where查询顺序有关。

我们知道标准查询关键字执行顺序为 from->where->group by->having->order by[ 记得不是很清楚呢]

left join 是在from范围类所以 先on条件筛选表,然后两表再做left join。

而对于where来说在left join结果再次筛选。

 第一sql语句查询过程如下等价于:

    1:先是left join

Sql代码  mysql left( right ) join使用on 与where 筛选的差异

  1. select  A.ID as AID, B.ID as BID   from A left join B on A.ID = B.ID  

   查询结果如下

  mysql left( right ) join使用on 与where 筛选的差异

  2:再查询结果中将B.ID即BID

       也就是我们上面看到的结果。

第二sql语句查询过程如下等价于:

  1:先按照on条件刷选表等价于先筛选B表:

   mysql left( right ) join使用on 与where 筛选的差异

   2:再已上查询结果与A表做left join,这也是为什么我们看到第二个查询的sql会保留A表的原因。

 

ON与where的使用一定要注意场所:

    (1):ON后面的筛选条件主要是针对的是关联表【而对于主表刷选条件不适用】。

    例如

Sql代码  mysql left( right ) join使用on 与where 筛选的差异

  1. select  A.ID as AID, B.ID as BID from A left join B on A.ID = B.ID and A.ID = 3  

    这个的查询结果为

mysql left( right ) join使用on 与where 筛选的差异

挺诧异的吧和我们期望的结果不一样,并为筛选出AID=3的数据。

但是我们也发现 AID 与 中AID 1 于2对应的值为NULL,关联表只取了满足A表筛刷选条件的值。

即主表条件在on后面时附表只取满足主表帅选条件的值、而主表还是取整表。

 (2):对于主表的筛选条件应放在where后面,不应该放在ON后面

 (3):对于关联表我们要区分对待。如果是要条件查询后才连接应该把查询件

              放置于ON后。

              如果是想再连接完毕后才筛选就应把条件放置于where后面

 (4): 对于关联表我们其实可以先做子查询再做join

    所以第二个sql等价于

 

Sql代码  mysql left( right ) join使用on 与where 筛选的差异

  1. select  A.ID as AID, B1.ID as BID  
  2. from A left join  ( select B.ID from B  where B.ID on A.ID = B1.ID  

   以上全在mysql5.1上测试过

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: How To Unlock Everything In MyRise
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

MySQL: The Ease of Data Management for Beginners MySQL: The Ease of Data Management for Beginners Apr 09, 2025 am 12:07 AM

MySQL is suitable for beginners because it is simple to install, powerful and easy to manage data. 1. Simple installation and configuration, suitable for a variety of operating systems. 2. Support basic operations such as creating databases and tables, inserting, querying, updating and deleting data. 3. Provide advanced functions such as JOIN operations and subqueries. 4. Performance can be improved through indexing, query optimization and table partitioning. 5. Support backup, recovery and security measures to ensure data security and consistency.

Can I retrieve the database password in Navicat? Can I retrieve the database password in Navicat? Apr 08, 2025 pm 09:51 PM

Navicat itself does not store the database password, and can only retrieve the encrypted password. Solution: 1. Check the password manager; 2. Check Navicat's "Remember Password" function; 3. Reset the database password; 4. Contact the database administrator.

How to create navicat premium How to create navicat premium Apr 09, 2025 am 07:09 AM

Create a database using Navicat Premium: Connect to the database server and enter the connection parameters. Right-click on the server and select Create Database. Enter the name of the new database and the specified character set and collation. Connect to the new database and create the table in the Object Browser. Right-click on the table and select Insert Data to insert the data.

MySQL: Simple Concepts for Easy Learning MySQL: Simple Concepts for Easy Learning Apr 10, 2025 am 09:29 AM

MySQL is an open source relational database management system. 1) Create database and tables: Use the CREATEDATABASE and CREATETABLE commands. 2) Basic operations: INSERT, UPDATE, DELETE and SELECT. 3) Advanced operations: JOIN, subquery and transaction processing. 4) Debugging skills: Check syntax, data type and permissions. 5) Optimization suggestions: Use indexes, avoid SELECT* and use transactions.

How to view database password in Navicat for MariaDB? How to view database password in Navicat for MariaDB? Apr 08, 2025 pm 09:18 PM

Navicat for MariaDB cannot view the database password directly because the password is stored in encrypted form. To ensure the database security, there are three ways to reset your password: reset your password through Navicat and set a complex password. View the configuration file (not recommended, high risk). Use system command line tools (not recommended, you need to be proficient in command line tools).

How to execute sql in navicat How to execute sql in navicat Apr 08, 2025 pm 11:42 PM

Steps to perform SQL in Navicat: Connect to the database. Create a SQL Editor window. Write SQL queries or scripts. Click the Run button to execute a query or script. View the results (if the query is executed).

How to create a new connection to mysql in navicat How to create a new connection to mysql in navicat Apr 09, 2025 am 07:21 AM

You can create a new MySQL connection in Navicat by following the steps: Open the application and select New Connection (Ctrl N). Select "MySQL" as the connection type. Enter the hostname/IP address, port, username, and password. (Optional) Configure advanced options. Save the connection and enter the connection name.

MySQL and SQL: Essential Skills for Developers MySQL and SQL: Essential Skills for Developers Apr 10, 2025 am 09:30 AM

MySQL and SQL are essential skills for developers. 1.MySQL is an open source relational database management system, and SQL is the standard language used to manage and operate databases. 2.MySQL supports multiple storage engines through efficient data storage and retrieval functions, and SQL completes complex data operations through simple statements. 3. Examples of usage include basic queries and advanced queries, such as filtering and sorting by condition. 4. Common errors include syntax errors and performance issues, which can be optimized by checking SQL statements and using EXPLAIN commands. 5. Performance optimization techniques include using indexes, avoiding full table scanning, optimizing JOIN operations and improving code readability.

See all articles