若一个查询同时涉及到两个或者两个以上的表,则称之为连接查询。常见的包括:等值连接查询,自然连接查询,非等值连接查询,自身连接查询,外连接查询(左右连接)。

1.等值与非等值连接查询(内连接)。

(等值连接的图)

参考表数据库表:

(表1与表2做了外键关联)

等值连接概念:当连接运算符为=时为等值连接,相当于两表执行笛卡尔后,取两表连结列值相等的记录。

查询语句:

SELECT A.*, B.*
FROM student A INNER JOIN sc B
ON A.`sno`=B.`sno`;

另外一种写法:

SELECT student.* ,sc.*
FROM student , sc
WHERE student.`sno` = sc.`sno`;

两种写法除了语法上的差别,没有明显差距,主要方便了解。看了大多数博客上写的都是第一次,可能有一定优劣,有兴趣的可以自己去百度下。

查询结果都是一样:

非等值连接概念:连接规则由等号以外的运算符组成。>,=,<,,>=,<=,<>,!=,between等。

这里只使用大于号">"比较两个表的连接列的值,相当于两表执行笛卡尔后,取一个表大于另一个表的连结列值的记录。(这两个表查询的结果并没有太大的意义,只是为了方便理解概念)

查询语句:

SELECT A.*, B.*
FROM student A INNER JOIN sc B
ON A.`sno`>B.`sno`;

另外一种写法:

SELECT student.* ,sc.*
FROM student , sc 
WHERE student.`sno` >sc.`sno`;

查询的结果仍然一样:

自然连接:在等值连接中把重复的属性列去掉则为自然连接。(自然连接并不是自连接,两者要有一定区分度)

查询语句(仍然是两种写法,不过我懒的copy了 -_-):

SELECT student.* ,sc.`cno`,sc.`grade`
FROM student , sc
WHERE student.`sno` = sc.`sno`;

查询结果:

2.外连接(左右连接)

左连接概念:指将左表的所有记录与右表符合条件的记录,返回的结果除内连接的结果,还有左表不符合条件的记录,并在右表相应列中填NULL。

查询语句:

SELECT student.*,sc.`cno`,sc.`grade`
FROM student LEFT JOIN sc
ON student.`sno`=sc.`sno`;

右外连接:指将右表的所有记录与左表符合条件的记录,返回的结果除内连接的结果,还有右表不符合条件的记录,并在左表相应列中填NULL。(画图功底太low,就不多此一举了 -_-)

查询语句:

SELECT student.*,sc.`cno`,sc.`grade`
FROM student RIGHT JOIN sc
ON student.`sno`=sc.`sno`;

这里要提示一下:

on和where条件的区别如下:

1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

2、where条件是在临时表生成好后,再对临时表进行过滤的条件。

而inner jion(内连接)没这个特殊性,则条件放在on中和where中,返回的结果集是相同的。

3.自身连接(自连接)

自身连接概述:连接操作不仅可以在两个表之间进行,也可以是一个表与其自己进行连接,成为表的自身连接,也就是所谓的自连接。

自连接查询其实等同于连接查询,需要两张表,只不过它的左表(父表)和右表(子表)都是自己。做自连接查询的时候,是自己和自己连接,分别给父表和子表取两个不同的别名,然后附上连接条件。

这里以一个课程的数据库表来做实例。

查询语句:

SELECT a.*,b.name
FROM SUBJECT a , SUBJECT b
WHERE a.`pno`=b.`cno`;

查询结果:

有些课程没有先行课,因此我们可以用左关联结合自连接来查询,便于观察。

查询语句:

SELECT a.*,b.name
FROM SUBJECT a LEFT JOIN SUBJECT b
ON a.`pno`=b.`cno`;

查询结果:

转载于:https://www.cnblogs.com/ITSeed/p/11167226.html

MySql的连接查询相关推荐

  1. MySql中左连接查询突然变得很慢

    MySql中左连接查询突然变得很慢 表结构: A表 userId,name B表 wId,userId,address A表左连接B表查询时,平时查询都非常的块,这几天突然变得很慢. 一个查询花了0. ...

  2. MySQL表连接查询

    MySQL表连接查询 1 基本格式 select fieldName from tbName1 连接符 tbName2 on 条件 2 笛卡尔乘积[避免] -- 笛卡尔乘积,没有约束条件,数据库匹配发 ...

  3. MySQL 数据库————连接查询

    目录 一.多表连接查询 1.内连接--inner join 2.左连接--left join 3.右连接--right join 二.存储过程 1.简介 2.优点 3.语法 ②.参数分类 ③.带参数的 ...

  4. MySQL学习--连接查询

    MySQL学习–连接查询 文章目录 MySQL学习--连接查询 1+N模式 全连接查询 左连接 左连接.右连接.内连接的区别 1+N模式 不使用连接查询: 要求查询出商品名称.商品栏目.商品库存.商品 ...

  5. mysql sql 连接查询语句_Mysql——sql数据库中的连接查询

    1.1.1   交叉连接(CROSS JOIN) 交叉连接(CROSS JOIN):有两种,显式的和隐式的,不带ON子句,返回的是两表的乘积,也叫笛卡尔积. 例如:下面的语句1和语句2的结果是相同的. ...

  6. mysql内连接查询原理_MySQL全面瓦解12:连接查询的原理和应用

    概述 MySQL最强大的功能之一就是能在数据检索的执行中连接(join)表.大部分的单表数据查询并不能满足我们的需求,这时候我们就需要连接一个或者多个表,并通过一些条件过滤筛选出我们需要的数据. 了解 ...

  7. MySQL 基础 ———— 连接查询

    引言 本篇文章承接<数据库与SQL语句>专栏,进入DQL的重要环节,可以说,这一部分的内容应该占据SQL语言的大部分使用场景. 本篇的连接查询知识,和后面的一些重要的查询知识总结,共同构成 ...

  8. MySQL 内连接查询

    MySQL FROM 子句中使用关键字 INNER JOIN 连接两张表,并使用 ON 子句来设置连接条件.如果没有任何条件,INNER JOIN 和 CROSS JOIN 在语法上是等同的,两者可以 ...

  9. MySQL学习-连接查询

    连接查询 操作的表 1.连接查询概述 2.连接查询的分类 3.连接查询原理以及笛卡尔积现象 4.怎么避免笛卡尔积现象? 5.内连接之等值连接 6.内连接之非等值连接 7.内连接之自连接 8.外连接 9 ...

  10. 【MySQL】连接查询

    连接查询 内连接 #内连接:inner join SELECT a.属性名1,a.属性名2,...,b,属性名1,b.属性名2... FROM table_name1 a inner join tab ...

最新文章

  1. 前端面试问题(持续更新)
  2. 第六章 ORacle权限设置、schema、通过profile 限制用户恶意登录、通过profile限制使用期限
  3. 四级计算机基础知识,全国计算机等级考试四级通关攻略
  4. Spring 学习二-----AOP的原理与简单实践
  5. atomiclong 初始化_Java并发编程【1.2时代】
  6. Spring 学习 3- AOP
  7. VS2013编译提示无法运行“rc.exe”错误
  8. Android Binder Debug
  9. 用脆弱性评估流程击败黑客
  10. 利用python处理dna序列_科学网-简单的Python脚本提取对应位置基因序列(fasta文件)-王彬忠的博文...
  11. Mac 抓包工具Charles4.0.2破解版,安装使用
  12. Phase seperation 的无序结构域(IDRs)怎么预测?
  13. 替换字符串中的通配符
  14. Windows 使用命令行查看 wifi 密码
  15. Android沉浸式
  16. 养成良好的编程习惯-一个库一个文件夹
  17. 人生总有太多的无奈和遗憾,
  18. 想破解游戏协议?你知道客户端和服务器是怎么通信的?我来告诉你怎么定义的
  19. 计算机毕业设计JAVA家庭饮用水监测系统mybatis+源码+调试部署+系统+数据库+lw
  20. vim滚动屏幕快捷键汇总

热门文章

  1. 西澳大学商科专业排名_澳洲西澳大学优势专业排名多少
  2. 安装ubuntu20.04(安装vim、gcc、VMtools、中文输入法、汉化、修改IP地址)
  3. python时间计算_python计算两日期之间工作日时长
  4. gdb pwndbg插件安装
  5. 2 什么是计算机网络设置密码,计算机网络技术及应用(第2版)第6章网络操作系统基本配置.ppt...
  6. mysql使用 BETWEEN AND 查询
  7. netty为什么性能高
  8. 不自定义异步方法的线程池默认使用SimpleAsyncTaskExecutor
  9. 分布式事务Seata中的三个角色
  10. docker运行随机分配端口