史上最简单的 MySQL 教程(二十六)「连接查询(上)」

标签: 数据库 连接查询 MySQL 内连接 交叉连接
2450人阅读 评论(4) 收藏 举报
分类:

温馨提示:本系列博文已经同步到 GitHub,地址为「mysql-tutorial」,欢迎感兴趣的童鞋StarFork,纠错。

连接查询

连接查询:将多张表(大于等于 2 张表)按照某个指定的条件进行数据的拼接,其最终结果记录数可能有变化,但字段数一定会增加。

连接查询的意义:在用户查询数据的时候,需要显示的数据来自多张表。

连接查询为join,使用方式为:左表join右表

  • 左表:join左边的表;
  • 右表:join右边的表。

连接查询分类:在 SQL 中将连接查询分为四类,分别为内连接、外链接、自然连接和交叉连接。

交叉连接

交叉连接cross join,从一张表中循环取出每一条记录,每条记录都去另外一张表进行匹配,匹配的结果都保留(没有条件匹配),而连接本身的字段会增加,最终形成的结果为笛卡尔积形式。

  • 基本语法左表 cross join 右边;

其结果与多表查询相同。

执行如下 SQL 语句,进行测试:

-- 将表 student 与 class 进行交叉连接
select * from student cross join class;
-- 将表 student 与 class 进行多表查询
select * from student,class;

01

实际上,笛卡尔积形式(交叉连接和多表查询)的结果并没有什么实际意义,应该尽量避免,其存在的价值就是保证连接这种结构的完整性。

内连接

内连接inner join,从左表中取出每一条记录,和右表中的所有记录进行匹配,并且仅当某个条件在左表和右表中的值相同时,结果才会保留,否则不保留。

  • 基本语法左表 + [inner] + join + 右表 + on + 左表.字段 = 右表.字段;

其中,关键字on表示连接条件,两表中的条件字段有着相同的业务含义。

执行如下 SQL 语句,进行测试:

-- 将表 student 与 class 进行内连接
select * from student inner join class on student.grade = class.grade;
select * from student join class on student.grade = class.grade;

innerjoin

在这里,值得注意的是:如果两表中有某个表的条件字段名唯一,那么在书写连接条件的时候,可以省略表名,直接书写字段名,MySQL 会自动识别唯一字段名,但不建议这么做。此外,咱们会发现,在上面的结果中有同名字段,这会给咱们理解数据的意义造成一定的困扰,这时就需要使用字段别名和表别名做区别啦!

执行如下 SQL 语句,进行测试:

-- 将表 student 与 class 进行内连接,起别名
select s.*,c.id as c_id,c.grade as c_grade,room from student as s inner join class as c on s.grade = c.grade;

alias

最后,内连接可以没有连接条件,即可以没有on及之后的内容,这时内连接的结果全部保留,与交叉连接的结果完全相同。而且在内连接的时候可以使用where关键字代替on,但不建议这么做,因为where没有on的效率高。

执行如下 SQL 语句,进行测试:

-- 将表 student 与 class 进行内连接,不加连接条件
select s.*,c.id as c_id,c.grade as c_grade,room from student as s inner join class as c;

-- 将表 student 与 class 进行交叉连接 
select s.*,c.id as c_id,c.grade as c_grade,room from student as s cross join class as c;

-- 使用 on 关键字进行内连接
select s.*,c.id as c_id,c.grade as c_grade,room from student as s inner join class as c on s.grade = c.grade;

-- 使用 where 关键字进行内连接
select s.*,c.id as c_id,c.grade as c_grade,room from student as s inner join class as c where s.grade = c.grade;

onon
whereon


温馨提示:符号[]括起来的内容,表示可选项;符号+,则表示连接的意思。


———— ☆☆☆ —— 返回 -> 史上最简单的 MySQL 教程 <- 目录 —— ☆☆☆ ————

查看评论

Mysql精简教程

注重实践,剔除繁琐的理论,通过案例讲解我们常用的知识点,各个知识点之间相对独立,不用担心某一个知识点学不会而耽搁学其他的知识点。轻轻松松入门Mysql。
  • 2015年09月20日 22:36

linux下MySQL操作历史记录 ~/.mysql_history

mysql会给出我们最近执行的SQL命令和脚本;同linux command保存在~/.bash_history一样,你用mysql连接MySQL server的所有操作也会被记录到~/.mysql_...
  • aya19880214
  • aya19880214
  • 2015-11-25 18:27:32
  • 19086

史上最简单的 MySQL 教程

温馨提示:本系列博文已经同步到 GitHub,如有需要的话,欢迎大家到「mysql-tutorial」进行Star和Fork操作! 1 前言   数据库(Database)是按照数据结...
  • qq_35246620
  • qq_35246620
  • 2017-04-26 20:12:59
  • 10474

史上最简单的 MySQL 教程(十八)「关系」

关系在数据库中,将实体与实体的关系,反应到最终数据库表的设计上来,可以细分为 3 种,分别为:一对一(1:1),一对多(1:N)或多对一(N:1)和多对多(N:N)。在此,所有的关系都是指表与表之间的...
  • qq_35246620
  • qq_35246620
  • 2017-05-24 12:53:21
  • 2070

史上最简单的 MySQL 教程(一)「数据库」

1 定义数据库,可以简单的解释为:高效的存储和处理数据的介质(主要分为磁盘和内存两种)。2 分类根据数据库存储介质的不同,可以将其分为两类,即:关系型数据库(SQL)和非关系型数据库(NoSQL,No...
  • qq_35246620
  • qq_35246620
  • 2017-04-26 20:48:59
  • 7097

史上最简单的 MySQL 教程(三十七)

数据备份与还原 基础概念: 备份,将当前已有的数据或记录另存一份; 还原,将数据恢复到备份时的状态。 为什么要进行数据的备份与还原? 防止数据丢失;保护数...
  • mmp591
  • mmp591
  • 2017-11-07 18:37:27
  • 190

不用第归算法快速显示树,对于Oracle数据库(1)

在显示不确定树节点多少时,我们绝大多数使用第归算法,要多次和数据库进行连接操作取数据,下面我讲的算法,仅仅只和数据操作一次,然后用动态数组在树型控件中显示,快速方便。我以实例给大家演示,熟悉制造行业的...
  • wangj2001
  • wangj2001
  • 2004-03-03 11:37:00
  • 852

史上最简单的MySQL教程

安装:http://blog.csdn.net/qq_35246620/article/details/71105110 参考:http://blog.csdn.net/qq_3524662...
  • CSDN_LSD
  • CSDN_LSD
  • 2017-11-13 20:17:49
  • 152

史上最简单的 MySQL 教程

前  言 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而...
  • zhusongziye
  • zhusongziye
  • 2018-01-16 20:59:30
  • 66

<em>MySQL</em>-5.6:有史以来最佳版本全面解析-中文

<em>MySQL</em>-5.6:有史以来最佳版本全面解析-中文 立即下载 上传者: machen_smiling ...spring mvc+mybatis+<em>mysql</em>+maven+bootstrap 整合实现增删查改<em>简单</em>实例.zip 资源...
  • 2018年04月18日 00:00
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 140万+
    积分: 1万+
    排名: 973
    博主的 GitHub 账号
    GitHub : Charies Gavin

        鉴于 CSDN 糟糕的用户体验,博主会将一些优质的文章迁移到 Charies Gavin's Blog  欢迎大家在 GitHub 上 Follow 博主,以及 Fork、Star、Watch 博主的项目。


      青春不老 奋斗不止


      好学若饥虚心若愚
    博客专栏