本文用到的表

CREATE TABLE `cls` (
`cls_id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(30) NOT NULL,
PRIMARY KEY (`cls_id`)
)

cls表--班级表

CREATE TABLE `stu` (
`stu_id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(30) NOT NULL,
`age` smallint(6) DEFAULT NULL,
`cls_id` int(11) DEFAULT NULL,
`score` tinyint(4) DEFAULT NULL,
PRIMARY KEY (`stu_id`),
KEY `fk_stu_cls` (`cls_id`),
CONSTRAINT `fk_stu_cls` FOREIGN KEY (`cls_id`) REFERENCES `cls` (`cls_id`)
)

stu表--学生表

CREATE TABLE `score` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`grade` varchar(10) DEFAULT NULL,
`min_sc` tinyint(4) DEFAULT NULL,
`max_sc` tinyint(4) DEFAULT NULL,
PRIMARY KEY (`id`)
)

score表--成绩等级表

1、连接查询简介

1)连接查询分为

    • 内连接查询 inner  join
    • 外连接查询
    • 左连接查询  left  outer  join
    • 右连接查询  right  outer  join

其中iner/outer 可以省略,因为区分内外连接查询的不在于inner/outer,而是判断有无left/right,有就是外连接查询,没有则为内链接查询。

2)内连接查询与外连接查询的区别:假设A/B两张表做连接查询

①  A/B能够全部匹配的记录查询,内连接查询

②  除了将A/B全部匹配的查询出来之外,还将其中一张表的记录全部显示出来,对方表没有记录则用null值表示

③  外连接查询结果数  >=  内连接查询结果数

④  任何一个左连接都可以写成右连接,任何一个右连接也都可以写成左连接

1、内连接查询

select
xxx
from
A表
inner join
B表
on
连接条件
where
查询条件;

1)查询每个学生的姓名与班级,要求显示:学生姓名  班级名 两列

mysql> select s.name, c.name from stu as s inner join cls as c on s.cls_id=c.cls_id;
+-----------+-----------+
| name | name |
+-----------+-----------+
| zhangsan | 火箭班 |
| lisi | 提高班 |
| wangwu | 速成班 |
| zhaoliu | 提高班 |
| guojing | 速成班 |
| huangrong | 提高班 |
| xiaolongn | 火箭班 |
+-----------+-----------+
7 rows in set (0.00 sec)

2、外连接查询

select
xxx
from
A表
left join
B表
on
连接条件
where
查询条件;

1)left join,左连接查询,除了匹配结果外,还将左边表未能匹配上的值显示,这里全都匹配,看不到效果

mysql> select s.name, c.name from stu as s left join cls as c on s.cls_id=c.cls_id;
+-----------+-----------+
| name | name |
+-----------+-----------+
| zhangsan | 火箭班 |
| xiaolongn | 火箭班 |
| wangwu | 速成班 |
| guojing | 速成班 |
| lisi | 提高班 |
| zhaoliu | 提高班 |
| huangrong | 提高班 |
+-----------+-----------+

2)right join,右连接查询,除了匹配结果外,还将右边表未能匹配上的值显示,如最后一行

mysql> select s.name, c.name from stu as s right join cls as c on s.cls_id=c.cls_id;
+-----------+-----------+
| name | name |
+-----------+-----------+
| zhangsan | 火箭班 |
| lisi | 提高班 |
| wangwu | 速成班 |
| zhaoliu | 提高班 |
| guojing | 速成班 |
| huangrong | 提高班 |
| xiaolongn | 火箭班 |
| NULL | 补习班 |
+-----------+-----------+

3)right join <-->  left join 之间的相互转换,将left/right互换,A/B表位置互换即可。

mysql> select s.name, c.name from cls as c left join stu as s on s.cls_id=c.cls_id;
+-----------+-----------+
| name | name |
+-----------+-----------+
| zhangsan | 火箭班 |
| lisi | 提高班 |
| wangwu | 速成班 |
| zhaoliu | 提高班 |
| guojing | 速成班 |
| huangrong | 提高班 |
| xiaolongn | 火箭班 |
| NULL | 补习班 |
+-----------+-----------+

3、三张表以上的连接查询

select
xxx
from
A表
inner join
B表
on
连接条件
inner join
C表
on
连接条件
where
查询条件;

这里A-B表先连接查询,然后A-C表再连接查询

1)查询显示结果。“学生姓名,班级名,成绩等级”,学生姓名,班级名,成绩等级在不同的表中

select
s.name, c.name, sc.grade
from
stu as s
inner join
cls as c
on
s.cls_id=c.cls_id
inner join
score as sc
on
s.score between sc.min_sc and max_sc;
+-----------+-----------+--------+
| name | name | grade |
+-----------+-----------+--------+
| zhangsan | 火箭班 | 及格 |
| lisi | 提高班 | 中 |
| wangwu | 速成班 | 中 |
| zhaoliu | 提高班 | 优 |
| guojing | 速成班 | 及格 |
| huangrong | 提高班 | 良 |
| xiaolongn | 火箭班 | 差 |
+-----------+-----------+--------+

mysql 连接查询 join的更多相关文章

  1. mysql连接查询经典小例题

    mysql连接查询: Mysql连接查询支持多表连接 对同一张表可以重复连接多次(别名在多次连接同一张表时很重要) 例题1: 下面有2张表 teams表 比赛结果表:result 问题: 得出一张表: ...

  2. MySQL连接查询、联合查询、子查询

    参考地址:http://blog.csdn.net/u011277123/article/details/54863371 1.MySQL连接查询 连接查询:将多张表(>=2)进行记录的连接(按 ...

  3. 掌握MySQL连接查询到底什么是驱动表

    准备我们需要的表结构和数据 两张表 studnet(学生)表和score(成绩)表, 创建表的SQL语句如下 CREATE TABLE `student` ( `id` int(11) NOT NUL ...

  4. MySQL连接查询驱动表被驱动表以及性能优化

    准备我们需要的表结构和数据 两张表 studnet(学生)表和score(成绩)表, 创建表的SQL语句如下 CREATE TABLE `student` ( `id` int(11) NOT NUL ...

  5. 细说MySQL连接查询:内连、左连和右连

    转: 细说MySQL连接查询:内连.左连和右连 简介: MySQL 的连接查询,通常都是将来自两个或多个表的行结合起来,基于这些表之间的共同字段,进行数据的拼接.首先,要确定一个主表作为结果集,然后将 ...

  6. MySQL连接查询(inner join,left join和right join的区别)

    关系数据库由多个相关表组成,这些表使用已知为外键列的常用列链接在一起. 因此,从业务角度来看,每个表中的数据是不完整的. 例如,在示例数据库(yiibaidb)中,使用orderNumber列链接的o ...

  7. mysql连接查询,封装mysql函数

    连接查询 交叉连接语法: select  * | 字段列表 from 表1  cross join 表2 内连接: select *|字段列表 from 左表 inner join 右表 on 左表. ...

  8. Mysql 连接查询 Mysql支持的连接查询有哪些

    CREATE TABLE `chx` (   `id` VARCHAR(20) NOT NULL,   `name` VARCHAR(50) DEFAULT NULL,   `name2` CHAR( ...

  9. Mysql连接查询、子查询、联合查询 整理

    连接查询 连接语法的基本形式 from 表1  [连接方式]  join 表2  [on 连接条件]: 交叉连接 语法: from  表1  [cross]  join  表2  ;      //可 ...

随机推荐

  1. [SublimeText] 之 Packages

    概述 Packages 是指供 Sublime Text 使用的资源文件集合,例如插件.语法高亮.菜单.片断等等.Sublime Text 自身安装了一些 Packages,还有很多用户创建的 Pac ...

  2. tablayout在中间显示

    <android.support.design.widget.TabLayout android:id="@+id/tabLayout" android:layout_wid ...

  3. React Native(九)——实现仿微信朋友圈发表动态功能

    好像很久都没写博客了,罪过罪过~ 许是因为刚接触App有点生疏不得窍门吧,这个月还没有更新过文章.小个把月下来,还是觉得应该边学边总结,这样才能像大神靠近(最近刚接触同业的大牛级人物,还是从中学到了很 ...

  4. 在apache虚拟目录配置

    在apache虚拟目录配置中 <VirtualHost *:80>xxx xxx xxx</VirtualHost> 不能写成 <VirtualHost *>xxx ...

  5. HR别掉坑里了,送你最精确的计薪算法!

      月工资的计算方式有多种多样.即便是资深的HR,也会犯常识性的错误,正算反算,哪一个方法更适合,有时还会容易出现数字偏差,回想一下,你们公司的工资是如何计算的? 第一 劳动工资计算标准按几天计算 根 ...

  6. Linux 安装GCC讲解(在线和无网离线)

    本文主要介绍如何在无网络的环境下怎么离线安装GCC,如果有网,只需要通过命令 yum install gcc 进行安装就可以了,yum会自动把所有关联的依赖包也一起安装了,一键安装. yum inst ...

  7. sencha touch 隐藏滚动条样式的几种方式

    如图,当滚动条显示时不是那么的好看   可以通过以下几种方式来隐藏滚动条,而又不影响滚动效果 1.通过css隐藏 /* 隐藏x方向滚动条 */ .x-scroll-bar-x.active { wid ...

  8. MySQL外键和高级查询(连接查询、联合查询、子查询、去重查询)

    MySQL的外键 什么是外键,很简单保持数据一致性的一个约束键.如果你有两张表,第一张是学生表,第二张表是一个成绩表,我们来看看保持数据一致性,其实在Django等框架的模型中中也能做关联获取对象. ...

  9. 新浪的动态策略灰度发布系统:ABTestingGateway

    原文链接:http://www.open-open.com/lib/view/open1439889185239.html ABTesingGateway 是一个可以动态设置分流策略的灰度发布系统,工 ...

  10. 【CF708D】Incorrect Flow 最小费用可行流

    [CF708D]Incorrect Flow 题意:给你一个点数为n,边数为m的流网络,每条边有一个容量c和流量f,这个网络可能是不合法的.你可以花费1的代价使c或f减少或增加1,可以修改无限次.你不 ...