本文用到的表

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. 如何构建日均千万PV Web站点 (一)

    其实大多数互联网网站起初的网站架构都是(Linux+Apache+MySQL+PHP). 不过随着时代的发展,科技的进步.互联网进入寻常百姓家的生活.所谓的用户的需求,铸就了一个个互联网大牛: htt ...

  2. Android系统启动流程

    当系统引导程序启动Linux内核,内核会记载各种数据结构,和驱动程序,加载完毕之后,Android系统开始启动并加载第一个用户级别的进程:init(system/core/init/Init.c) 查 ...

  3. Couldn’t load locSDK3

    在项目的libs目录下新建一个文件夹,命名为armeabi-v7a,然后将liblocSDK3.so复制一份到该文件夹 ok

  4. JS-过滤敏感词【RegExp】

    来自腾讯课堂笔记:https://ke.qq.com/webcourse/index.html#course_id=152997&term_id=100174752&taid=8010 ...

  5. liunx trac 安装记录

    1,下载地址 http://trac.edgewall.org/   2.安装 apache,python, mysql  3,安装trac (我的是0.12)  tar -zxvf  你下载的安装包 ...

  6. Github for Windows 登录时报代理问题?

    Github for Windows 登录时报如下错误: 不要被它的提示信息误导了. 登录失败,跟代理半毛钱关系都没有. 是 .net framework 组件 的问题. 更新下 .net frame ...

  7. 正则表达式取querystring

    var s = decodeURIComponent((new RegExp('[?|&]userid=([^&;]+?)(&|#|;|$)').exec(location.h ...

  8. spring整合websocket通信

    1. maven依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...

  9. 使用私钥.pem和SecureCRT登陆linux系统

    将密钥上传到一台自己的linux主机,下面举例文件名为 key.pemchmod 600 key.pem改写密钥格式为 OpenSSH,如果询问passphrase可以留空(直接回车)ssh-keyg ...

  10. Windows平台编译memcached 1.2.6

    两个项目libevent.memcached,Platform Toolset使用Visual Studio 2013 - Windows XP (v120_xp).在编译memcached时会提示& ...