本文用到的表

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. [Ubuntu] 解决 pip 安装 lxml 出现 x86_64-linux-gnu-gcc 异常

    安装 pip : $ wget https://bootstrap.pypa.io/get-pip.py ... $ sudo python get-pip.py install 使用 pip 安装/ ...

  2. Vim 的 Python 编辑器详细配置过程 (Based on Ubuntu 12.04 LTS)

    为什么要用vim编辑py文件? 因为在Linux命令行中,缺少图形界面的IDE,vim是最佳的文本编辑器,而为了更好的编辑py文本,所以配置vim. 1. 安装完整版vim vi和vim的区别? 在L ...

  3. radio的取值

    <dd id="pingjia${evaluation.orderItemId }" class="ms-wf clearfix" idx="$ ...

  4. iOS - 选取相册中iCloud云上图片和视频的处理

    关于iOS选取相册中iCloud云上图片和视频  推荐看:TZImagePickerController的源码,这个是一个非常靠谱的相册选择图片视频的库 .当然也可以自己写 如下遇到的问题 工作原因, ...

  5. 百度编辑器(UEditor)自定义工具栏

    百度编辑器(UEditor)自定义工具栏的自定义 百度编辑器默认功能比较齐全,但是不一定是我们所需要的,有的功能可以去掉,用自己想要的就可以了,可以参考百度官方文档! 百度编辑器默认配置展示界面 如何 ...

  6. Big Spatio temporal Data(R-tree Index and NN & RNN & Skyline)

    一.简单介绍大数据技术产物 “大数据”一词首先出现在2008年9月<Nature>杂志发表的一篇名为“Big Data: Wikiomics”的文章上(Mitch,2008).“大数据科学 ...

  7. [原]rpm安装rpm-package报错:Header signature NOKEY 和 error: Failed dependencies:

    以前经常遇到这个问题,一直未有记录,今天记录下来: 在安装rpm包的时候报错误如下: Question 1: warning: *.rpm: Header V3 DSA signature: NOKE ...

  8. 使用DnsCat反弹shell

    DnsCat技术特点 Dns隧道反弹shell DnsCat服务器的安装 #git clone https://github.com/iagox86/dnscat2.git #cd dnscat2 # ...

  9. .NET 高性能WEB架构-比较容易改造方式 - .NET架构

    下面列出的一些,是我们常见而且比较容易去优化的方式,当然细节方面非常多,仅供参考: 1.数据库依然选择SQL Server数据库(最新的sqlserver功能是很强大的)和使用订阅发布进行单写多读的读 ...

  10. 【C#】基础知识

    C#常用函数表1.DateTime 数字型 System.DateTime currentTime=new System.DateTime(); 1.1 取当前年月日时分秒 currentTime=S ...