首页 > 文章列表 > MySQL中union和unionall区别

MySQL中union和unionall区别

mysql
246 2023-05-18

union:对多个结果集进行并集操作,不包括重复行,同时进行排序。

union all:对多个结果集进行并集操作,包括重复行,不进行排序。

查询部门小于30号的员工信息,和部门大于20小于40号的员工信息。

①.先查询部门小于30号的员工信息。

   SELECT 

               employees_id

               ,last_name

               ,salary

               ,department_id

     FROM      employees

    WHERE      department_id < 30; ```

查询部门大于20小于40的员工信息。

   SELECT 

           employees_id

           ,last_name

           ,salary

           ,department_id

     FROM  

           employees

    WHERE 

           department_id BETWEEN 20 and 40;```

③.用union连接两张表

    SELECT 

            employees_id

            ,last_name

            ,salary

            ,department_id

      FROM  

            employees

     WHERE  

            department_id < 30

     UNION

    SELECT 

            employees_id

            ,last_name

            ,salary

            ,department_id

      FROM  

            employees

     WHERE  

            department_id BETWEEN 20 and 40; ```

其结果默认排序并去重,两张表都有30号部门信息,结果只出现一次。

④.下面用union all连接两张表

     SELECT 

              employees_id                 

              ,last_name                 

              ,salary                  

              ,department_id     

       FROM  

              employees  

      WHERE  

              department_id < 30    

 UNION  ALL

     SELECT                   

              employees_id                  

              ,last_name                  

              ,salary                  

              ,department_id    

       FROM  

              employees   

      WHERE  

              department_id BETWEEN 20 and 40; ```

其结果没有去重,也没有排序,排序结果对比下边结果,先去查询20到40的员工信息,在查小于30的员工信息。

⑤.对比查询结果

     SELECT 

             employees_id

             ,last_name

             ,salary

             ,department_id

       FROM  

             employees

      WHERE  

             department_id BETWEEN 20 and 40

  UNION ALL

     SELECT 

             employees_id

             ,last_name

             ,salary

             ,department_id

       FROM  employees

      WHERE  department_id < 30;```

默认是没有进行排序的。