mysql中的查询连接

查询连接分为4类:内连接、外连接、交叉连接、自然连接

一、交叉连接 cross join

  select * from 表A cross join 表B;  -- 结果是笛卡尔积, 等价于select * from 表A, 表B; 避免使用

二、内连接 inner join

  select * from 表A [inner] join 表B [on 表A.字段 = 表B.字段];  -- on后的条件若省略, 等同于交叉连接。 同时on可用where代替,但效率会降低。

  select A.*, B.name as N from mytab as A [inner] join myclass as B [on A.字段 = B.字段];  -- 使用字段/表别名,用于两表出现同名字段或表名太长时

三、外连接 outer join

  1. left join 以左表为主表, right join 以右表为主表, 不管匹配是否成功都会保留,

    主表每条记录都与副表B进行匹配,匹配成功则连接B表正确数据, 失败则把连接到A表的B表数据置为空

    不管怎么连接,结果都是左表在左面,右表在右边

  2. 左外连接(左连接):

    select * from 表A left join 表B on 表A.字段 = 表B.字段;  -- on 不可以省略, 以表A作为主表

    右外连接(右连接):

    select * from 表A right join 表B on 表A.字段 = 表B.字段;  -- 以表B作为主表

四、自然连接  

  1. 以两表中相同的字段名进行匹配, 如果有多个相同字段名, 那么所有名字都相同才匹配成功。并且会合并同名字段。

  2. 自然内连接:select * from 表A natural join 表B; 

  3. 自然左/右连接:select * from 表A natural left/right join 表B; 

五、内、外连接模拟自然连接

  select * from 表A inner/left/right join 表B using(同名字段); -- 以同名字段做为条件进行连接

时间: 2024-10-25 05:30:58

mysql中的查询连接的相关文章

mysql中条件查询加排序和索引的关系

跟一个朋友,不错公司的主管交流时,对于mysql中条件查询和排序时 与索引的关系 mysql> explain select * from article where title='希望光伏企业挺过2个月' o rder by id desc\\\\\\\\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: article type: index pos

mysql中模糊查询的四种用法介绍

下面介绍mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] WHERE u_name LIKE '%三%' 将会把u_name为“张三”,“张猫三”.“三脚猫”,“唐三藏”等等有“三”的记录全找出来. 另外,如果需要找出u_name中既有“三”又有“猫”的记录,请使用and条件 SELECT * FROM [user] WHERE u_name LIKE

MySQL中的查询事务问题

之前帮同学做个app的后台,使用了MySQL+MyBatis,遇到了一个查询提交的问题,卡了很久,现在有时间了来复盘下 环境情况 假设有学生表: USE test; CREATE TABLE `student` ( Id int NOT NULL PRIMARY KEY AUTO_INCREMENT, Name varchar(20) NOT NULL, Grade int NOT NULL ) mybatis项目目录的大致结构为: +---src | +---main | | +---java

mysql中给查询结果添加序号列

生成一个字段(非表中字段)用以记录排序   [类比为oracle数据库中的rownum] MySQL中一个表(表名:stuscore) 字段有:id(主键).stuid(学号).sname(学生姓名).subject(课程名称).score(分数) 列出数学成绩排名 (要求显示字段:排名,姓名 , 课程名称, 分数 , 学号) 用于排名的字段,查询时此处将其用 pm表示  select (@i:[email protected]+1)pm,s.* from stuscore s,(select

一条SQL在MySql中如何查询

1.1 MySQL 基本架构概览 连接器: 身份认证和权限相关(登录 MySQL 的时候). 查询缓存: 执行查询语句的时候,会先查询缓存(MySQL 8.0 版本后移除,因为这个功能不太实用). 分析器: 没有命中缓存的话,SQL 语句就会经过分析器,分析器说白了就是要先看你的 SQL 语句要干嘛,再检查你的 SQL 语句语法是否正确. 优化器: 按照 MySQL 认为最优的方案去执行. 执行器: 执行语句,然后从存储引擎返回数据. 简单来说 MySQL 主要分为 Server 层和存储引擎层

mysql中的左连接,右连接,内连接,union

1,左连接时,第一个表中的所需的数据全要,第二个表中如果没有相应匹配的数据则补null. 2,右连接时,第二个表中的所需数据全要,第一个表中如果没有相应匹配的数据则补null. 3,内连接时,只有第一个表和第二个表中有相应数据匹配时才要,如果其中一个表没有相应的数据匹配则不要. 4,union可以连接2个select的查询结果,前提是所查询的列数相同,且查询的字段以第一个表的字段为字段名,查询结果去除相同行的数据,如果使用union all则可以达到外连接,即获取所有行的数据(包括相同的行)的结

关于日常使用Azure MySQL中遇到的连接问题以及排查方法分享

由于防火墙问题,TCP keep alive 问题,以及 MySQL 自身的参数问题这三个在使用中比较常见,所以今天就分享下自己找到的排查方法. 今天先聊一聊防火墙问题 大多数人在第一次创建 MySQL database on Azure 实例之后便开始尝试连接.但是往往遇到的结果不是连接成功而是如下图所示的错误信息: 该错误信息表明您的 IP 地址并不在 MySQL on Azure 防火墙的准入范围之内,这种设定可以在某种程度上避免设置了简单密码的生产用户遭到恶意的字典攻击,当然 Azure

mysql中general_log(查询日志)关闭

今天,遇到一个问题,zabbix提示数据盘/opt不足20%,需要清理.经查看,/opt/mysql的一个日志文件达到16G,而数据盘总共20G,该日志文件为 master.log,查询后得知,它为mysql的通用查询日志,记录增删改查操作的. 经上网查资料,得知,通用查询日志--可以关闭 首先,进入mysql,输入 mysql> show global variables like '%general%'; +------------------+-----------------------

下面介绍mysql中模糊查询的四种用法:

1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] WHERE u_name LIKE '%三%' 将会把u_name为"张三","张猫三"."三脚猫","唐三藏"等等有"三"的记录全找出来. 另外,如果需要找出u_name中既有"三"又有"猫"的记录,请使用a