mysql join连接查询

肝胆相照
• 阅读 1083

1 mysql连接查询

在介绍join查询之前,先定义两招表,并插入数据.

  • user表:

    mysql join连接查询

  • account表:

    mysql join连接查询

1.1 join内连接

join查询就是集合运算中的笛卡尔积 集合a和b的笛卡尔积 a = (i,j,k) b = (l, m ,n) 所以a和b的笛卡尔积就是 = (il,im,in,jl,jm,jn,kl,km,kn). 对于a集合大小为m,b 集合大小为n,那么最终的笛卡尔积的结果数为 m * n;

  • join写法

    对于user表,account表执行join查询:

    SELECT a.id, a.account, u.id as uid, u.username from account a join user u;

    查询的结果如下:
    mysql join连接查询

    共3 * 4 = 12条记录.

    另外我们可以集合on语句,筛选出满足特定条件的记录.

    SELECT a.id, a.account, u.id, u.username from account a join user u on a.id = u.id;

    此时查询结果:

    mysql join连接查询

    共2条记录满足account的id等于user表的id.

  • inner join写法

    // cross实现内连接
    SELECT a.id, a.account, u.id as uid, u.username from user u CROSS join account a;
    // cross结合on刷选指定条件的记录
    SELECT a.id, a.account, u.id as uid, u.username from user u CROSS join account a ON u.id = a.id;
  • cross join写法

    // inner join写法
    SELECT a.id, a.account, u.id as uid, u.username from account a inner join user u ;
    // inner join 结合 on 筛选指定条件的记录
    SELECT a.id, a.account, u.id as uid, u.username from user u inner join account a on u.id = a.id;
注: 以上三种写法是等价的.都是属于内连接的

1.2 外连接

1.2.1 左连接

左外连接,语法是left outer join或者left join,两种写法相同, 可以结合on条件筛选特定条件的记录.其中左连接也叫作左外连接.

比如a left (outer) join b,此含义就是以a表为标准,查询的结果中包含所有的a的记录以及和a中的记录匹配的b的记录,即使在b中没有找到和a表中某些记录相匹配的记录,那么a这些记录也要输出,且未匹配的a表中的记录对应的b表中的记录的列显示为空NULL

在左连接中,left左边的表称作左表,left右边的表称作由表, 此时输出的结果按照左表中的所有的数据记录作为标准. 其对应的b中未匹配的记录的列显示为NULL.

// a左外连接b
SELECT a.id, a.account, u.id as uid, u.username from account a left OUTER join user u on a.id = u.id;

显示的结果:

mysql join连接查询

1.2.2 右连接

右外连接,语法是 right outer join 或者right join,两种写法相同, 可以结合on语句筛选指定条件的记录,其中右连接又叫做右外连接.

右外连接的意思就是,a right join b。那么输出的结果中会包含了b表的所有的记录以及a表中满足on之后的条件的记录,即使在a表中没有找到满足on之后的条件的记录,那么会输出的a表中的记录的列都为NULL.

right 左边的表a称作左表,right右边的表b称作右表.那么在右连接操作中,输出的结果中按照right关键字右的表b为基准输出结果集.无论a表中是否有满足条件的记录,b表都会全部输出.

// a右连接u,输出的结果以u结果作为输出的结果集标准
SELECT a.id, a.account, u.id, u.username from account a right join user u on a.id = u.id

输出结果:
mysql join连接查询

on语句下的多条件匹配:

// on语句的多条件查询
SELECT a.id, a.account, u.id as uid, u.username from account a right join user u on a.id = u.id or a.account = u.username;

输出结果如下:
mysql join连接查询

1.3 左连接和右连接查询的注意事项

  • left join和righ join必须on结合一块使用,如果没有on语句,那么mysql报语法错误,这点和内连接不同.
  • on指定条件可以指定多个筛选条件,不仅仅只能指定一个筛选条件.
点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java的数据库相关操作
通过JDBC方式连接数据库1.准备工作在系统上安装mysql以及java开发环境,IDE等。检查:1.eclipse可以编译运行程序2.MySQL用户名密码正确3.查询表存在,查询语句可以执行2.下载
Wesley13 Wesley13
3年前
SQL JOIN 简单介绍
前言本文还是秉持之前一贯的写作风格,以简单易懂的示例帮助大家了解各种join的区别。为什么需要join为什么需要join?join中文意思为连接,连接意味着关联即将一个表和多个表之间关联起来。在处理数据库表的时候,我们经常会发现,需要从多个表中获取信息,将多个表的多个字段数据组装起来再返回给调用者。所以join的前提是这
Stella981 Stella981
3年前
Python进阶_mysql_查询、事物(4)
在进行查询之前,我们要先建好关系表,并往数据表中插入些数据。为查询操作做好准备。五张关系表的创建:创建并进入数据库:mysqlCREATEDATABASEinfo;QueryOK,1rowaffected(0.00sec)mysqlUSEinfo;Data
Wesley13 Wesley13
3年前
MySQL数据库查询
MySQL数据库查询12、说明:使用外连接A、left(outer)join:左外连接(左连接):包含leftjoin左表所有行,如果左表中某行在右表没有匹配,则结果中对应行右表的部分全部为空(NULL).。SQL:select\fromstudent(表1)leftjoincourse(表2)onstude
Wesley13 Wesley13
3年前
mysql学习之join从句
一、join从句共有5种类型内连接(innerjoin)全外连接(fullouterjoin)左外连接(leftouterjoin)右外连接(rightouterjoin)交叉连接(crossjoin)二、演示案例新建两张表user1表和user2表CRE
Wesley13 Wesley13
3年前
560字带你彻底搞懂:MySQL的索引优化分析
正文一、SQL分析性能下降、SQL慢、执行时间长、等待时间长查询语句写得差索引失效关联查询太多join(设计缺陷)单值索引:在user表中给name属性创建索引,createindexidx\_nameonu
Wesley13 Wesley13
3年前
oracle查询表数据并重新插入到本表
oracle查询表数据并重新插入到本表CreateTime2018年5月17日10:30:10Author:Marydon1.情景描述查询表中数据SELECTFROMat_aut
Wesley13 Wesley13
3年前
mysql数据库查询操作
\mysql数据库\知识要点:1\.单表查询2\.子查询3\.联表查询4\.事务在进行查询之前,我们要先建好关系表,并往数据表中插入些数据。为查询操作做好准备。\五张关系表的创建:\\\mysql创建并进入数据库:mysqlCREATEDATABASE\
Wesley13 Wesley13
3年前
thinkphp 基本配置
12returnarray(34//定义数据库连接信息5'DB\_TYPE''mysql',//指定数据库是mysql67'DB\_HOST''localhost',89'DB\_NAME''uchome',//数据库名1011'DB\_USER''root
Wesley13 Wesley13
3年前
Mysql索引最佳实践笔记0524
mysql5.7innodb默认存储引擎一、关于索引二、最佳实践三、避坑实践一、关于索引1.索引的作用提高查询效率数据分组、排序避免回表查询优化聚集查询用于多表join关联查询利用唯一性约束、保证数据唯一性innodb行锁实现索引的“
Wesley13 Wesley13
3年前
mysql减少join的几种通用方法
1关于join只要参与过后台开发,必然都对join有一定的了解.我们使用join查询,主要为满足两方面的需求:No.需求说明典型相似操作效果对比1查询关联表内容,如主从表之间内容子查询不考虑索引的情况下,join查询效率一般优于前者;即使考虑索引,多数情况子查询的索引并不好设计2多表关系限制in