【Java学习笔记(二十四)】之Mysql的多表查询要点介绍

本文章由公号【开发小鸽】发布!欢迎关注!!!


老规矩–妹妹镇楼:

一. 多表查询

(一)概述

       所谓的多表查询就是在多个表中同时查询,如下所示:

SELECT * FROM1,表2

       这样,会将两个表中的所有情况的组合显示出来,这种现象叫做笛卡尔积,这其中包含着许多无用的数据,需要通过条件过滤掉。

(二)多表查询的分类

1. 内连接

       (1)隐式内连接

       (2)显示内连接

2. 外连接

       (1)左外连接

       (2)右外连接

3. 子查询

二. 内连接查询

       用左边表的数据取匹配右边表的数据,如果符合条件则显示。内连接只能显示两个表有交集的部分数据。

(一) 隐式内连接

       使用WHERE条件语句消除无用的数据。

SELECT  字段名 FROM  左表,  右表 WHERE  条件;

       在具体的使用时,我们可以为每个表取简短的别名,如果不同表中的字段名有重复的,则使用表的别名作为前缀区分字段名。且SQL语句一般都不会写在一行之中。

如:

SELECT 
		t1.name,
		t1.gender,
		t2.name
FROM
		Emp t1,
		Dept t2
WHERE
		t1.’dept_id’ = t2.’id’;

(二) 显式内连接

       显式内连接和隐式内连接功能相同,只是写法不同。INNER可省略,如:

SELECT 字段列表 FROM 表名1INNERJOIN 表名2 ON 条件;
SELECT * FROM emp INNER JOIN dept ON emp.’dept_id’ = dept.’id’;

三. 外连接查询

(一) 左外连接

       外连接同样使用左边表的数据来匹配右边表的数据,如果符合条件则显示。但是外连接在内连接的基础上还可以保证左边表的数据全部显示,即显示左边表的全部数据和交集部分。

OUTER可省略

SELECT  字段名 FROM  左表 LEFT [OUTER] JOIN  右表 ON  条件;

(二) 右外连接

       用右边表的数据取匹配左边表的数据,如果符合条件的则显示;否则,显示 NULL。

       同理,在内连接的基础上保证右表的数据全部显示。即右表数据加交集。

SELECT  字段名 FROM  左表 RIGHT [OUTER] JOIN  右表 ON  条件;

四. 子查询

(一) 概述

       在查询中嵌套查询,称嵌套的查询为子查询。

SELECT * FROM emp WHERE emp.’salary’ = (SELECT MAX(salary) FROM emp);

(二) 子查询的结果是单行单列的

       单行单列的结果可以作为条件,进行判断。

SELECT * FROM emp WHERE emp.salary < (SELECT AVG(salary) FROM emp);

(三) 子查询的结果是多行单列的

       多行单列的结果为多个数据,可以使用in来判断。

SELECT * FROM emp WHERE dept_id IN (SELECT id FROM dept WHERE name=’a’ OR name = ‘b’ );

(四) 子查询的结果是多行多列的

       子查询可以作为一张虚拟表参与查询。

如:
       使用子查询:

SELECT * FROM dept t1, (SELECT * FROM emp WHERE emp.’join_data’ >2011-11-11) t2
WHERE t1.id = t2.dept_id;

       使用内连接达到同样效果:

SELECT * FROM emp t1, dept t2 WHERE t1.’dept_id’ = t2.’id’ AND t1.’join_data’ >2011-11-11;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值