iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >SQL中Join的使用示例
  • 803
分享到

SQL中Join的使用示例

2024-04-02 19:04:59 803人浏览 薄情痞子
摘要

这篇文章主要介绍了sql中Join的使用示例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一.基本概念关于sql语句中的连接(join)关键

这篇文章主要介绍了sql中Join的使用示例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

一.基本概念

关于sql语句中的连接(join)关键字,是较为常用而又不太容易理解的关键字,下面这个例子给出了一个简单的解释 –建表user1,user2:

table1 : create table user2(id int, user_name varchar(10), over varchar(10));
insert into user1 values(1, ‘tangseng', ‘dtgdf');
insert into user1 values(2, ‘sunwukong', ‘dzsf');
insert into user1 values(1, ‘zhubajie', ‘jtsz');
insert into user1 values(1, ‘shaseng', ‘jslh');
table2 : create table user2(id int, user_name varchar(10), over varchar(10));
insert into user2 values(1, ‘sunwukong', ‘chengfo');
insert into user2 values(2, ‘niumowang', ‘chengyao');
insert into user2 values(3, ‘jiaomowang', ‘chengyao');
insert into user2 values(4, ‘pengmowang', ‘chengyao');

SQL标准中Join的类型

SQL中Join的使用示例

1. 内连接(inner join或join)

(1).概念:内联接是基于连接谓词将两张表的列结合在一起,产生新的结果表

(2).内连接维恩图:

SQL中Join的使用示例

(3).sql语句

select a.id, a.user_name, b.over from user1 a inner join user2 b on a.user_name=b.user_name;

结果:

SQL中Join的使用示例

2. 外连接

外连接包括左向外联接、右向外联接或完整外部联接

a.左外连接:left join 或 left outer join
(1)概念:左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值(null)。

(2)左外连接维恩图:

SQL中Join的使用示例

(3)sql语句:

select a.id, a.user_name, b.over from user1 a left join user2 b on a.user_name=b.user_name;

结果:

SQL中Join的使用示例

b.右外连接:right join 或 right outer join
(1)右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
(2)右外连接维恩图:

SQL中Join的使用示例

(3)sql语句

select b.user_name, b.over, a.over from user1 a right join user2 b on a.user_name=b.user_name;

结果:

SQL中Join的使用示例

c.全外连接:full join 或 full outer join

(1)完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
(2)右外连接维恩图:

SQL中Join的使用示例

(3)sql语句

select a.id, a.user_name, b.over from user1 a full join user2 b on a.user_name=b.user_name

Mysql中查询全连接会报1064的错误,mysql不支持全连接查询,代替语句:

select a.user_name,a.over,b.over from user1 a left join user2 b on a.user_name = b.user_name uNIOn all select b.user_name,b.over ,a.over from user1 a right join user2 b on a.user_name = b.user_name;

结果:

SQL中Join的使用示例

3. 笛卡尔连接(交叉连接)

1.概念:没有 WHERE 子句的交叉联接将产生联接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。(user1和user2交叉连接产生4*4=16条记录)
2.交叉连接:cross join (不带条件on)
3.sql语句:
select a.user_name,b.user_name, a.over, b.over from user1 a cross join user2 b;

二.使用技巧

1. 使用join更新表
我们使用下面语句将user1表中同时存在user1表和user2表中记录的over字段更新为 ‘Qtda'。

update user1 set over='qtds'where user1.user_name in (select b.user_name from user1 a inner join user2 b on a.user_name = b.user_name);

这条语句在SQL Server, oracle中都可以正确执行,在mysql却报错,mysql不支持更新子查询的表,那么我们使用下面语句可以在做到。

update user1 a join (select b.user_name from user1 a join user2 b on a.user_name = b.user_name) b on a.user_name = b.user_name set a.over = ‘qtds'

2. 使用join优化子查询

子查询效率比较低效,使用下面语句进行查询
select a.user_name, a.over,(select over from user2 b where a.user_name=b.user_name) as over2 from user1 a;
使用join优化子查询,可以实现同样的效果
select a.user_name, a.over, b.over as over2 from user1 a left join user2
b on a.user_name = b.user_name;

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

引入一张新表:user_kills
create table user_kills(user_id int, timestr varchar(20), kills int(10));
insert into user_kills values(2, ‘2015-5-12', 20);
insert into user_kills values(2, ‘2015-5-15', 18);
insert into user_kills values(3, ‘2015-5-11', 16);
insert into user_kills values(3, ‘2015-5-14', 13);
insert into user_kills values(3, ‘2015-5-16', 17);
insert into user_kills values(4, ‘2015-5-12', 16);
insert into user_kills values(4, ‘2015-5-10', 13);

查询user1中每人对应user_kills表中kills最大的日期,使用聚合子查询语句:

select a.user_name,b.timestr, b.kills from user1 a join user_kills b on a
.id = b.user_id where b.kills = (select MAX(c.kills) from user_kills c where c.user_id = b.user_id);

使用join优化聚合子查询(避免子查询)

select a.user_name, b.timestr, b.kills from user1 a join user_kills b on
a.id = b.user_id join user_kills c on c.user_id = b.user_id group by a.user_name, b.timestr, b.kills having b.kills = max(c.kills);

结果:

SQL中Join的使用示例

4. 实现分组选择数据

要求查询出user1中每个人kills对多的前两天。
首先,我们可以通过下面语句查询出某个人kills最多的两天;

select a.user_name, b.timestr, b.kills from user1 a join user_kills b on
a.id = b.user_id where a.user_name ='sunwukong' order by b.kills desc limit 2;

那么如何通过一个语句查询出所有人kills最多的两天的呢?看下面的语句:

WITH tmp AS (select a.user_name, b.timestr, b.kills, ROW_NUMBER() over(partition by a.user_name order by b.kills) cnt from user1 a join user_kills b on a.id = b.user_id) select * from tmp where cnt <= 2;

上面的语句在sql server和oracle都是支持的,但是mysql不支持分组排序函数ROW_NUMBER(),下面提供一种替代方法:

select d.user_name,c.timestr, kills from (select user_id, timestr, kills, (select count(*) from user_kills b where b.user_id = a.user_id and a.kills <= b.kills) as cnt from user_kills a group by user_id, timestr, kills) c join user1 d on c.user_id = d.id where cnt <= 2;

结果:

SQL中Join的使用示例

感谢你能够认真阅读完这篇文章,希望小编分享的“SQL中Join的使用示例”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网数据库频道,更多相关知识等着你来学习!

您可能感兴趣的文档:

--结束END--

本文标题: SQL中Join的使用示例

本文链接: https://www.lsjlt.com/news/55426.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SQL中Join的使用示例
    这篇文章主要介绍了SQL中Join的使用示例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一.基本概念关于sql语句中的连接(join)关键...
    99+
    2024-04-02
  • sql中left join的示例分析
    这篇文章主要为大家展示了“sql中left join的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“sql中left join的示例分析”这篇文章吧。网...
    99+
    2024-04-02
  • SQL中各种连接Join的示例分析
    这篇文章给大家分享的是有关SQL中各种连接Join的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。最常见的 JOIN 类型:SQL INNER JOIN(简单的 JOIN...
    99+
    2024-04-02
  • SQL之各种join的示例分析
    这篇文章将为大家详细讲解有关SQL之各种join的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。SQL Left Join, Right Join, Inner Join, and Natural...
    99+
    2023-06-20
  • Python中 join() 函数的使用示例讲解
    目录Python中 join() 函数的使用函数说明1、join()函数2、os.path.join()函数补充:python中的join函数Python中 join() 函数的使用...
    99+
    2023-05-14
    Python join() 函数 Python join() 函数用法 Python join用法
  • SQL中Join如何使用
    这篇文章给大家介绍SQL中Join如何使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、INNER JOIN(内连接)SELECT FROM Table...
    99+
    2024-04-02
  • 亲自教你使用 ChatGPT 编写 SQL JOIN 查询示例
    目录一、ChatGPT 如何帮助 SQL 开发人员二、先决条件三、下载并安装 AdventureWorks2019 数据库四、SQL JOIN 查询示例六、ChatGPT 会取代数据...
    99+
    2023-02-23
    ChatGPT 编写 SQL JOIN 查询 ChatGPT 写 SQL ChatGPT  SQL JOIN 查询
  • SQL语句优化之JOIN和LEFT JOIN 和 RIGHT JOIN语句的示例分析
    小编给大家分享一下SQL语句优化之JOIN和LEFT JOIN 和 RIGHT JOIN语句的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!在数据库的应用中,我们经常需要对数据库进...
    99+
    2024-04-02
  • MySql中JOIN的用法示例详解
    目录笛卡尔积:CROSS JOIN内连接:INNER JOIN左连接:LEFT JOIN右连接:RIGHT JOIN外连接:OUTER JOINUSING子句自然连接:NATURE ...
    99+
    2024-04-02
  • sql语句中的join怎么使用
    在SQL中,JOIN用于将两个或多个表中的行连接在一起。JOIN操作的基本语法如下:```sqlSELECT 列名FROM ...
    99+
    2023-10-10
    sql join
  • sql语句中join怎么使用
    在SQL语句中,JOIN用于将两个或多个表中的行连接在一起,以便可以通过共享的列值从这些表中检索数据。JOIN的语法如下:```SE...
    99+
    2023-10-07
    sql join
  • join在sql中的用法
    join 操作符用于合并来自不同表的相关数据,通过指定连接条件来关联表中的行。常见的 join 类型包括 inner join(返回匹配行)、left join(返回所有左侧表行)、ri...
    99+
    2024-04-29
  • sql中join on的用法
    join on 用于在多个表之间按指定列匹配行,返回连接结果。步骤包括:指定目标表、连接类型(inner、left、right、full)和连接条件(on 子句中两个表的匹配列)。 S...
    99+
    2024-05-02
  • sql中select语句的使用示例
    这篇文章主要介绍了sql中select语句的使用示例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。SQL SELECT 语句SEL...
    99+
    2024-04-02
  • SQL中关键字的使用示例
    这篇文章主要介绍了SQL中关键字的使用示例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。起别名在实际的项目中,有时候我们的表名、字段名过于复...
    99+
    2024-04-02
  • SQL中join的使用方法是什么
    在SQL中,使用JOIN操作可以将两个或多个表中的行连接起来,以便进行数据查询和分析。JOIN操作的基本语法如下: SELEC...
    99+
    2023-10-26
    SQL join
  • sql join on的使用方法
    这篇文章主要介绍“sql join on的使用方法”,在日常操作中,相信很多人在sql join on的使用方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”sql join...
    99+
    2024-04-02
  • Mysql中join操作的示例分析
    小编给大家分享一下Mysql中join操作的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!join的类型1.  ...
    99+
    2024-04-02
  • sql中join on和join in的区别
    join on 和 join in 的区别在于:1. join on 使用相等比较条件,而 join in 可以使用任何比较运算符;2. join in 支持子查询,而 join on ...
    99+
    2024-05-08
  • Hive中Map端JOIN的示例分析
    小编给大家分享一下Hive中Map端JOIN的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Map端JOINmap端join适用于当一张表很小(可以存在内...
    99+
    2023-06-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作