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 ; //可 ...
随机推荐
- 【delphi】delphi的TAdoQuery读取Excel数据
1. 连接 需要设置TAdoQuery的连接串Connection,将其指向excel文件: 'Provider=Microsoft.ACE.OLEDB.12.0;Data Source=' + ex ...
- vue里面引入jq的方法
1:因为已经安装了vue脚手架,所以需要在webpack中全局引入jquery 打开package.json文件,在里面加入这行代码,jquery后面的是版本,根据你自己需求更改. dependenc ...
- 《Lua程序设计》9.2 管道(pipe)与过滤器(filter) 包含使用协同函数实现“生产者——消费者”问题的实例代码
一个关于协同程序的经典示例是“生产者-消费者”问题.这其中涉及到两个函数,一个函数不断地产生值(比如从一个文件中读取值),另一个则不断地消费这些值(比如将这些值写到另一个文件).通常,这两个函数大致是 ...
- HttpClient详细解释
Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客户端发送Http请求变得容易,而且 ...
- 【设计模式】MVC,MVP 和 MVVM 的区别
复杂的软件必须有清晰合理的架构,否则无法开发和维护. MVC(Model-View-Controller)是最常见的软件架构之一,业界有着广泛应用.它本身很容易理解,但是要讲清楚,它与衍生的 MVP ...
- 【Linux】使用 telnet 提示 Escape character is '^]'的意义
在linux/unix下使用telnet hostname port连接上主机后会提示Escape character is '^]' 这个提示的意思是按Ctrl + ] 会呼出telnet的命令行, ...
- 【Shell脚本编程系列】知识储备以及建立规范的脚本
前言 学习shell脚本编程需要的知识储备: vi/vim编辑器命令 vimrc设置要熟练 基础命令,100多个要熟练 基础和常用的网络服务命令要会:nfs . rsync. inotify . la ...
- 【WEB前端开发最佳实践系列】高可读的HTML
一.HTML语义化 HTML5中增加了很多标签都是基于此类原则设计的(article nav header footer).页面标签语义化的优点是使得搜索引擎以及第三方抓包工具等更容易读懂页面 ...
- 【CSS系列】网页头部进度条方式一
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- ORA-00600: internal error code, arguments: [kgl-no-mutex-held]
一.环境 windows oracle 11.2.0.4 RAC 二.问题现象 1.连接数据库后,无法查询 2.报错信息:ORA-00600: internal error code, argumen ...