关闭

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

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

温馨提示:本系列博文已经同步到 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 教程 <- 目录 —— ☆☆☆ ————

5
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

史上最简单的 MySQL 教程(二十三)「数据的高级操作 之 查询(上)」

数据的高级操作查询数据(上) 基本语法: select + 字段列表/* + from + 表名 + [where 条件]; 完整语法: select + [select 选项] + 字段列表/* ...
  • qq_35246620
  • qq_35246620
  • 2017-06-25 19:09
  • 2200

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

连接查询连接查询:将多张表(大于等于 2 张表)按照某个指定的条件进行数据的拼接,其最终结果记录数可能有变化,但字段数一定会增加。连接查询的意义:在用户查询数据的时候,需要显示的数据来自多张表。连接查...
  • qq_35246620
  • qq_35246620
  • 2017-07-14 23:43
  • 1734

史上最简单的 MySQL 教程(二十四)「数据的高级操作 之 查询(中)」

数据的高级操作查询数据(上) 基本语法: select + 字段列表/* + from + 表名 + [where 条件]; 完整语法: select + [select 选项] + 字段列表[字段别...
  • qq_35246620
  • qq_35246620
  • 2017-06-27 19:56
  • 1992

史上最简单的 MySQL 教程(四十)「数据库变量」

变量在 MySQL 数据库中,变量有两种,分别为:系统变量和自定义变量。根据变量的作用范围,又分为:会话级别变量和全局级别变量。系统变量系统变量,顾名思义,是系统设置好的变量(皆为全局级别变量),也是...
  • qq_35246620
  • qq_35246620
  • 2017-12-03 19:43
  • 1733

史上最简单的 MySQL 教程(十九)「范式」

范式范式:Normal Farmat,是为了解决数据的存储和优化问题。在数据存储之后,凡是能够通过关系寻找出来的数据,坚决不再重复存储,范式的终极目标是减少数据冗余。范式是一种分层结构的规范,共 6 ...
  • qq_35246620
  • qq_35246620
  • 2017-05-24 16:29
  • 1640

史上最简单的 MySQL 教程(二)「关系型数据库」

关系型数据库1 定义关系型数据库,是一种建立在关系模型(数学模型)上的数据库。至于关系模型,则是一种所谓建立在关系上的模型,其包含三个方面,分别为: 数据结构:数据存储的形式,二维表(行和列); 操作...
  • qq_35246620
  • qq_35246620
  • 2017-04-26 21:28
  • 4575

史上最简单的 MySQL 教程(九)「列类型 之 数值型」

列类型(数据类型)所谓的列类型,其实就是指数据类型,即对数据进行统一的分类,从系统的角度出发是为了能够使用统一的方式进行管理,更好的利用有限的空间。在 SQL 中,将数据类型分成了三大类,分别为:数值...
  • qq_35246620
  • qq_35246620
  • 2017-05-05 20:12
  • 2014

史上最简单的 MySQL 教程(十五)「列属性 之 自动增长」

自动增长自动增长:auto_increment,当对应的字段,不给值,或者是默认值,或者是null的时候,就会自动的被系统触发,系统会从当前字段中取已有的最大值再进行+1操作,得到新的字段值。自增长通...
  • qq_35246620
  • qq_35246620
  • 2017-05-23 22:55
  • 1709

史上最简单的 MySQL 教程(三十九)「事务(下)」

温馨提示:在「事务(上)」中,我们已经了解了如何在 MySQL 中开启事务,以及事务的一些基本操作。在本文中,我们将进一步学习事务的知识,包括事务原理、自动事务、回滚点和特性等。 事务原理事务原理:在...
  • qq_35246620
  • qq_35246620
  • 2017-11-18 11:21
  • 1698

史上最简单的 MySQL 教程(四十)「数据库变量」

变量 在 MySQL 数据库中,变量有两种,分别为:系统变量和自定义变量。 根据变量的作用范围,又分为: 会话级别变量:仅对当前客户端当次连接有效;全局级别变量:对所有客户端的任一次...
  • zxy18210943475
  • zxy18210943475
  • 2017-12-20 19:05
  • 35
    个人资料
    • 访问:819022次
    • 积分:11905
    • 等级:
    • 排名:第1460名
    • 原创:258篇
    • 转载:85篇
    • 译文:11篇
    • 评论:894条
    博主的 GitHub 账号
    GitHub : Charies Gavin

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


      青春不老 奋斗不止


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