`
Eros_李
  • 浏览: 7164 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

Join语句

阅读更多

      

       一、Join语句几种方式

 

       1.内连接(INNER)

 

SELECT a.username,a.over,b.over
FROM user1 a
INNER JOIN user2 b
ON a.username = b.username;

 

 

          查询结果:a、b两表的公共数据

         

        2.左外连接(LEFT OUTER)

 

SELECT a.username,a.over,b.over
FROM user1 a
LEFT JOIN user2 b
ON a.username = b.username
WHERE b.username IS NOT NULL;

 

 

             查询结果:a表的所有数据 

 

         3.右外连接(RIGHT OUTER )

 

SELECT b.username,b.over,a.over
FROM user1 a
RIGHT JOIN user2 b
ON a.username = b.username
WHERE a.username IS NULL;

 

 

 

              查询结果:b表的所有数据 - ab两个表的公共数据

 

         4.全外连接(FULL OUTER)

 

SELECT a.username,a.over,b.over
FROM user1 a
FULL JOIN user2 b
ON a.username = b.username
WHERE a.username IS NULL OR b.username IS NULL;

 

  

                MySQL中不支持FULL OUTER JOIN 连接,故上面查询会出现错误

    

                   

SELECT a.username,a.over,b.over
FROM user1 a
LEFT JOIN user2 b  ON a.username = b.username
UNION  ALL
SELECT b.username,b.over,a.over
FROM user1 a
RIGHT JOIN user2 b  ON a.username = b.username
WHERE a.username IS NULL OR b.username IS NULL;

  

               查询结果:a,b表的所有数据 - a,b表的公共数据

 

          5.交叉连接(CROSS)或笛卡尔连接(cartesian)或叉乘(Product)

                   

SELECT a.username,a.over,b.over
FROM user1 a
CROSS JOIN user2 b
ON a.username = b.username

                 

                    一般要避免使用此查询

 

 

               

            二、Join语句的使用

               

             1.使用join更新表

                    

UPDATE  user1
SET over = '齐天大圣'
WHERE user1.username IN(
   SELECT b.username
   FROM user1 a  
   JOIN user2 b 
   ON a.username = b.username
);

  

                  MySQL不支持UPDATE操作,故上面更新操作会出现错误

                

                      

UPDATE user1  a   JOIN (
   SELECT b.username    
   FROM user1 a  JOIN user2 b  
   ON a.username = b.username
   ) b    ON  a.username = b.username
SET  a.over='齐天大圣';

                    

                    更新结果:将over字段的数据更新为‘齐天大圣’

 

              2.使用join优化子查询

                      

SELECT a.username,a.over,
(
   SELECT over FROM user2 b
   WHERE  a.username = b.username
   ) AS  over2  
 FROM user1 a;

               

                       查询结果:对a表中的每一条数据都进行子查询,很慢

                    

                  优化后:

                          

SELECT a.username,a.over,b.over  AS over2
FROM user1 a
LEFT JOIN user2 b  ON 
a.username = b.username

                         

                         优化后和优化前结果相同则为有效优化

                         查询结果:对a表中的每一条数据都进行子查询,较快

            

                 3.使用join优化聚合子查询

                         

SELECT a.username,b.timestr,b.kills
FROM user1 a  JOIN userkills b
ON a.id = b.userid
WHERE b.kills = (
   SELECT MAX(c.kills)
   FROM userkills c   WHERE c.userid = b.userid
);

                        

                          查询结果:各个username打怪(kills)最多的日期

 

                     避免子查询:

                               

SELECT a.username,b.timestr,b.kills
FROM user1 a
JOIN userkills b ON a.id = b.userid
JOIN userkills c ON c.userid = b.userid
GROUP BY a.username,b.timestr,b.kills
HAVING b.kills = MAX(c.kills);      

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    画图解释 SQL join 语句1

    SQL Join 语句详解 SQL Join 语句是数据库管理系统中最基本也是最重要的语句之一。它允许用户从多个表中检索数据,并将其组合成一个结果集。今天,我们将使用图形来解释 SQL Join 语句的各种类型。 INNER JOIN ...

    35.join语句怎么优化?1

    在MySQL数据库中,JOIN语句是用于合并两个或更多表中的数据的关键操作。优化JOIN语句对于提高查询性能至关重要,特别是在处理大数据量时。本文主要探讨了一种名为Multi-Range Read (MRR)的优化技术,它能有效地改善...

    35join语句怎么优化?.pptx

    35join语句怎么优化?.pptx

    sql语句中join的用法和效率说明.doc

    SQL 语句中 Join 的用法和效率说明 在开发数据库的时候,数据库的性能和效率是一个非常重要的考虑因素。特别是在多表关联的情况下,合理使用 Join 语句可以极大地提高数据库的性能。下面将对 Join 语句的用法和效率...

    MySQL中join语句的基本使用教程及其字段对性能的影响

    MySQL中的JOIN语句是数据库操作中的重要组成部分,用于在多个表之间进行数据的组合和匹配。本教程将详细讲解JOIN的基本使用以及字段字符集编码如何影响性能。 首先,JOIN语句的基本语法涉及到FROM子句、JOIN类型和...

    在MySQL中使用JOIN语句进行连接操作的详细教程

    在MySQL中,JOIN语句是用于合并来自两个或更多个表的数据的关键工具,这对于处理复杂的数据库查询至关重要。在本文中,我们将深入探讨如何在MySQL中使用JOIN语句进行连接操作,这是一项基础但非常重要的技能,对于...

    SQL语句教程 写法大全

    同时,本教程还涵盖了 SQL 高级知识,如 Top 语句、Like 语句、通配符、In 语句、Between 语句、Aliases 语句、Join 语句、Inner Join 语句、Left Join 语句、Right Join 语句、Full Join 语句、Union 语句、Select ...

    50个常用sql语句实例(学生表课程表成绩表教师表)[归类].pdf

    这些实例涵盖了基本的 SELECT 语句、JOIN 语句、子查询、聚合函数等多种 SQL 技术。 1. 查询“ ”课程比“ ”课程成绩高的所有学生的学号 该实例使用了子查询来解决问题。首先,使用子查询将“ ”课程和“ ”课程...

    oracle 多表做update insert语句.docx

    今天,我们将讨论 Oracle 中的 Update 语句,包括 Update 语句的基本语法、Update 语句中使用 Select 语句、Update 语句中使用 Join 语句、Insert 语句的使用等。 一、Update 语句的基本语法 Update 语句的基本...

    mysql 语句大全

    FULL OUTER JOIN 语句用于连接两个表,并包括两个连接表中的所有记录。 五、分组 GROUP BY 语句用于对查询结果进行分组,并对组相关的信息进行统计。 在这个 MySQL 语句大全中,我们涵盖了基本语法和高级查询运算...

    SQL语句left join/right join/inner join 的用法比较

    在给出的示例中,LEFT JOIN SQL语句是: ```sql SELECT * FROM A LEFT JOIN B ON A.aID = B.bID ``` 输出结果展示了A表的所有记录,即使B表中没有对应的bID。对于B表中不存在的aID,bName列显示为NULL。 2. RIGHT ...

    SQL语句优化之JOIN和LEFT JOIN 和 RIGHT JOIN语句的优化

    SQL语句优化对于大型数据库系统至关重要,特别是在涉及多表查询时,JOIN、LEFT JOIN 和 RIGHT JOIN 的高效运用能显著提升查询速度。以下将详细探讨这些JOIN类型以及相关的优化策略。 JOIN原理: JOIN操作实际上是...

    mysql Join使用以及优化

    此外,使用straight_join代替普通的JOIN语句可以强制MySQL使用指定的表作为驱动表进行查询,这样可以更明确地控制查询计划,有助于分析和优化Join操作。这种控制有时候能够帮助DBA找到更高效的查询路径。 在实际...

    SQL语句基础教程

    * 连接表格:使用JOIN语句连接多个表格 * 数据聚合:使用GROUP BY和HAVING语句对数据进行聚合 SQL语法详解 ------------- ### SELECT指令 SELECT指令是SQL语言的基础,用于从数据库中的表格内选出资料。SELECT...

    SQL left join

    使用Left Join语句: ```sql SELECT * FROM A LEFT JOIN B ON A.aID = B.bID; ``` 结果如下: ``` aID aNum bID bName 1 a20050111 1 20060324012 2 a20050112 2 20060324023 3 a20050113 3 20060324034 4 a20050114...

    sql语句大全,包含各种语句,让你更容易懂

    JOIN语句用于合并两个或更多表的数据,如`INNER JOIN`返回两个表中匹配的记录,`LEFT JOIN`返回左表的所有记录和右表匹配的记录,`RIGHT JOIN`反之,`FULL JOIN`返回两个表的所有记录。 7. **子查询**: 子查询是...

    SQL语句练习系统

    3. **JOIN操作**:在处理多表数据时,JOIN语句至关重要。系统会涵盖INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL OUTER JOIN,让你理解不同类型的连接方式以及如何结合不同表格中的数据。 4. **子查询**:子查询是在一...

    SQL语句基础教程。SQL语句基础教程

    7. JOIN操作:SQL提供了JOIN语句来连接两个或多个表,根据它们之间的关联字段合并数据。常见的JOIN类型有INNER JOIN(只返回匹配的行)、LEFT JOIN(返回左表所有行及右表匹配行)、RIGHT JOIN(返回右表所有行及左...

Global site tag (gtag.js) - Google Analytics