用两个表(a_table、b_table),关联字段a_table.a_id和b_table.b_id来演示一下MySQL的内连接、外连接( 左(外)连接、右(外)连接、全(外)连接)。

MySQL版本:Server version: 5.6.31 MySQL Community Server (GPL)

数据库表:a_table、b_table

主题:内连接、左连接(左外连接)、右连接(右外连接)、全连接(全外连接)

表为:

  

内连接:

1. 交叉连接查询(基本不会使用-得到的是两个表的乘积) (这种查询时候会产生笛卡尔积)
语法: select * from A,B;
2. 内连接查询(使用的关键字 inner join -- inner可以省略)
隐式内连接: select * from A,B where 条件;
显示内连接: select * from A inner join B on 条件;

执行语句为:select * from a_table a inner join b_table bon a.a_id = b.b_id;

总结:当且仅当两个表中的数据都符合on后面的条件的时候,才会被select出来.

左连接:

外连接查询(使用的关键字 outer join -- outer可以省略)
左外连接:left outer join

语句:select * from a_table a left join b_table bon a.a_id = b.b_id;
执行结果:

总结:在查询的时候,以left join 这个关键字左边的表为主表,会将这个表中的数据全部查询出来,如果右表中没有这条数据,则用NULL字段表示.

右外连接:

右外连接:right outer join
select * from A right outer join B on 条件;

语句:select * from a_table a right outer join b_table b on a.a_id = b.b_id;
执行结果:

总结:在查询的时候,会以right join 这个关键字右边的表为主,然后将符合条件的查询出来,左表中没有的字段,使用NULL进行补充

全连接(全外连接)

MySQL目前不支持此种方式,可以用其他方式替代解决。

子查询:

子查询:一条select语句结果作为另一条select语法一部分(查询条件,查询结果,表等)。

语法: select ....查询字段 ... from ... 表.. where ... 查询条件

#3 子查询, 查询“化妆品”分类上架商品详情
#隐式内连接
SELECT p.*
FROM products p , category c
WHERE p.category_id=c.cid AND c.cname = '化妆品';
#子查询
##作为查询条件
SELECT *
FROM products p
WHERE p.category_id =
(
SELECT c.cid FROM category c
WHERE c.cname='化妆品'
);
##作为另一张表
SELECT *
FROM products p ,
(SELECT * FROM category WHERE cname='化妆品') c
WHERE p.category_id = c.cid;

查询结果:

总结:可以将一条查询语句作为另外一个查询语句的条件和表,再次进行查询.

mysql数据库中的多表查询(内连接,外连接,子查询)的更多相关文章

  1. mysql 数据库中的每张表加同一个字段(避免重复加)

    DROP PROCEDURE IF EXISTS testEndHandle; DELIMITER $$ CREATE PROCEDURE testEndHandle() BEGIN DECLARE ...

  2. 利用mysql数据库中的TMD表修复“is marked as crashed and last (automatic?) repair failed”的错误 Database query error

    ===========================测试成功============================================= 1.页面出现错误:Database query ...

  3. MySql数据库中,判断表、表字段是否存在,不存在就新增

    本文是针对MySql数据库创建的SQL脚本,别搞错咯. 判断表是否存在,不存在就可新增 CREATE TABLE IF NOT EXISTS `mem_cardtype_resource` ( ... ...

  4. 在mysql数据库中,文章表设计有啥好的思路

    Q: 用mysql设计一张文章表,不知道有啥好的思路! 我是这样的,应为考虑附件和图片,所以我的文章表除了有varchar(1000)的文章内容,还设置了个Bolb接收附件和图片. 我用的是mysql ...

  5. Java—JDBC向mysql数据库中给某个表添加数据时,会遇到的问题,如下

    解析(jar包该放在那里,以及其它的操作): 把jar包(驱动)添加到自己的项目中,最好新建一个文件夹,再把jar包(驱动包)添加到这个所新建的文件中 1.先建好自己的项目,再新建一个文件夹,如下: ...

  6. 关于数据库的左,右,内,外连接,Union和Union all---------笔记

    1.左连接 select a.filed1,a.filed2,b.filed1 from a (左表) left join b(右表) on a.commonfiled = b.commonfiled ...

  7. 通过JSP网页连接MySQL数据库,从MySQL数据库中读出一张表并显示在JSP网页中

    1.安装所需软件 ①安装java和tomcat,建立JSP网页最基础的软件②安装MySQL数据库(下载地址:https://www.mysql.com/)③安装Navicat Premium来查看数据 ...

  8. 从Mysql数据库中导入导出表结构

    1.从Mysql数据库中导入sql表 很简单,只需要一个命令即可搞定:[root@localhost ~]# mysql -uroot -piweb_xxx_mysql iweb < modif ...

  9. #mysql查询特定数据库中的所有表名

    #mysql查询特定数据库中的所有表名select table_namefrom information_schema.tableswhere table_schema='smbms' and tab ...

随机推荐

  1. vue-cli3 element 分页组件el-pagination的基本使用

    <!--分页组件--> <el-pagination :total="total" :current-page="currentPage" : ...

  2. java内置的四大函数式接口

    一.Consumer:消费型接口(void accept(T t)) 举一个例子 public class LambdaTest { @Test public void test() { happyT ...

  3. 20190715《Python网络数据采集》第 1 章

    <Python网络数据采集>7月8号-7月10号,这三天将该书精读一遍,脑海中有了一个爬虫大体框架后,对于后续学习将更加有全局感. 此前,曾试验看视频学习,但是一个视频基本2小时,全部拿下 ...

  4. werkzeug.routing.BuildError: Could not build url for endpoint 'index'. Did you mean 'user.index' instead?

    werkzeug.routing.BuildError: Could not build url for endpoint 'index'. Did you mean 'user.index' ins ...

  5. 面试题:在一个文件中有 10G 个整数,乱序排列,要求找出中位数(内存限制为2G)

    假设整数为32bit,4个字节存储 这种题目,首先想到的是分而治之.将文件中数字分组.然后遍历文件中的数字,按分组进行计数.最后找到中位数所在的分组区间 1.如果10G个整数都为同一个,那么10G整数 ...

  6. JAVA day2 语言基础

    一.注释 描述代码的文字 1.//    单行注释 2./*  */ 多行注释 (多行注释中不能再嵌套多行注释) 3./**  */  多行注释 配合JavaDoc工具使用(只可以看到注释,看不到代码 ...

  7. Codeforces 1239B. The World Is Just a Programming Task (Hard Version)

    传送门 这一题好妙啊 首先把括号序列转化成平面直角坐标系 $xOy$ 上的折线,初始时折线从坐标系原点 $(0,0)$ 出发 如果第 $i$ 个位置是 '(' 那么折线就往上走一步($y+1$),否则 ...

  8. JavaNetty心跳监控

    import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Map; import java ...

  9. C盘清理、C盘瘦身、省出30G

    三招C盘瘦身30G,清理win10系统中虚占C盘空间的三大祸害 1.对C盘进行“磁盘清理” C盘右键->属性->磁盘清理->清理系统文件->勾选“windows更新清理”-&g ...

  10. docker 容器和镜像常用命令整理