mysql 连接查询 join
本文用到的表
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的更多相关文章
- mysql连接查询经典小例题
mysql连接查询: Mysql连接查询支持多表连接 对同一张表可以重复连接多次(别名在多次连接同一张表时很重要) 例题1: 下面有2张表 teams表 比赛结果表:result 问题: 得出一张表: ...
- MySQL连接查询、联合查询、子查询
参考地址:http://blog.csdn.net/u011277123/article/details/54863371 1.MySQL连接查询 连接查询:将多张表(>=2)进行记录的连接(按 ...
- 掌握MySQL连接查询到底什么是驱动表
准备我们需要的表结构和数据 两张表 studnet(学生)表和score(成绩)表, 创建表的SQL语句如下 CREATE TABLE `student` ( `id` int(11) NOT NUL ...
- MySQL连接查询驱动表被驱动表以及性能优化
准备我们需要的表结构和数据 两张表 studnet(学生)表和score(成绩)表, 创建表的SQL语句如下 CREATE TABLE `student` ( `id` int(11) NOT NUL ...
- 细说MySQL连接查询:内连、左连和右连
转: 细说MySQL连接查询:内连.左连和右连 简介: MySQL 的连接查询,通常都是将来自两个或多个表的行结合起来,基于这些表之间的共同字段,进行数据的拼接.首先,要确定一个主表作为结果集,然后将 ...
- MySQL连接查询(inner join,left join和right join的区别)
关系数据库由多个相关表组成,这些表使用已知为外键列的常用列链接在一起. 因此,从业务角度来看,每个表中的数据是不完整的. 例如,在示例数据库(yiibaidb)中,使用orderNumber列链接的o ...
- mysql连接查询,封装mysql函数
连接查询 交叉连接语法: select * | 字段列表 from 表1 cross join 表2 内连接: select *|字段列表 from 左表 inner join 右表 on 左表. ...
- Mysql 连接查询 Mysql支持的连接查询有哪些
CREATE TABLE `chx` ( `id` VARCHAR(20) NOT NULL, `name` VARCHAR(50) DEFAULT NULL, `name2` CHAR( ...
- Mysql连接查询、子查询、联合查询 整理
连接查询 连接语法的基本形式 from 表1 [连接方式] join 表2 [on 连接条件]: 交叉连接 语法: from 表1 [cross] join 表2 ; //可 ...
随机推荐
- [Ubuntu] 解决 pip 安装 lxml 出现 x86_64-linux-gnu-gcc 异常
安装 pip : $ wget https://bootstrap.pypa.io/get-pip.py ... $ sudo python get-pip.py install 使用 pip 安装/ ...
- Vim 的 Python 编辑器详细配置过程 (Based on Ubuntu 12.04 LTS)
为什么要用vim编辑py文件? 因为在Linux命令行中,缺少图形界面的IDE,vim是最佳的文本编辑器,而为了更好的编辑py文本,所以配置vim. 1. 安装完整版vim vi和vim的区别? 在L ...
- radio的取值
<dd id="pingjia${evaluation.orderItemId }" class="ms-wf clearfix" idx="$ ...
- iOS - 选取相册中iCloud云上图片和视频的处理
关于iOS选取相册中iCloud云上图片和视频 推荐看:TZImagePickerController的源码,这个是一个非常靠谱的相册选择图片视频的库 .当然也可以自己写 如下遇到的问题 工作原因, ...
- 百度编辑器(UEditor)自定义工具栏
百度编辑器(UEditor)自定义工具栏的自定义 百度编辑器默认功能比较齐全,但是不一定是我们所需要的,有的功能可以去掉,用自己想要的就可以了,可以参考百度官方文档! 百度编辑器默认配置展示界面 如何 ...
- Big Spatio temporal Data(R-tree Index and NN & RNN & Skyline)
一.简单介绍大数据技术产物 “大数据”一词首先出现在2008年9月<Nature>杂志发表的一篇名为“Big Data: Wikiomics”的文章上(Mitch,2008).“大数据科学 ...
- [原]rpm安装rpm-package报错:Header signature NOKEY 和 error: Failed dependencies:
以前经常遇到这个问题,一直未有记录,今天记录下来: 在安装rpm包的时候报错误如下: Question 1: warning: *.rpm: Header V3 DSA signature: NOKE ...
- 使用DnsCat反弹shell
DnsCat技术特点 Dns隧道反弹shell DnsCat服务器的安装 #git clone https://github.com/iagox86/dnscat2.git #cd dnscat2 # ...
- .NET 高性能WEB架构-比较容易改造方式 - .NET架构
下面列出的一些,是我们常见而且比较容易去优化的方式,当然细节方面非常多,仅供参考: 1.数据库依然选择SQL Server数据库(最新的sqlserver功能是很强大的)和使用订阅发布进行单写多读的读 ...
- 【C#】基础知识
C#常用函数表1.DateTime 数字型 System.DateTime currentTime=new System.DateTime(); 1.1 取当前年月日时分秒 currentTime=S ...