先创建2个表:学生表和教师表

 

1.内连接:

在每个表中找出符合条件的共有记录。[x inner join y on...] 

第一种写法:只用where
SELECT t.TEACHER_NAME,s.STUDENT_NAME FROM teacher t,student s WHERE t.ID=s.TEACHER_ID
第二种写法:使用 join..on..
SELECT t.TEACHER_NAME,s.STUDENT_NAME FROM teacher t JOIN student s ON t.ID=s.TEACHER_ID
第三种写法:使用inner join .. on..
SELECT t.TEACHER_NAME,s.STUDENT_NAME FROM teacher t INNER JOIN student s ON t.ID=s.TEACHER_ID

2.外连接:外连接有三种方式:左连接,右连接和全连接

(1)左连接:根据左表的记录,在被连接的右表中找出符合条件的记录与之匹配,如果找不到与左表匹配的,用null表示 [x left [outer] join y on...]

第一种写法:left join .. on ..
SELECT t.TEACHER_NAME,s.STUDENT_NAME FROM teacher t LEFT JOIN student s ON t.ID=s.TEACHER_ID
第二种写法:left outer join .. on ..
SELECT t.TEACHER_NAME,s.STUDENT_NAME FROM teacher t LEFT OUTER JOIN student s ON t.ID=s.TEACHER_ID

(2)右连接:根据右表的记录,在被连接的左表中找出符合条件的记录与之匹配,如果找不到匹配的,用null填充 [x right [outer] join y on...]

第一种写法:right join .. on ..
SELECT t.TEACHER_NAME,s.STUDENT_NAME FROM teacher t RIGHT JOIN student s ON t.ID=s.TEACHER_ID
第二种写法:right outer join .. on ..
SELECT t.TEACHER_NAME,s.STUDENT_NAME FROM teacher t RIGHT OUTER JOIN student s ON t.ID=s.TEACHER_ID

(3)全连接:返回符合条件的所有表的记录,没有与之匹配的,用null表示(结果是左连接和右连接的并集)

第一种写法:(full join .. on ..)
select t.teacher_name, s.student_name from teacher t full join student s on t.id = s.teacher_id;
第二种写法:(full outer join .. on)
select t.teacher_name, s.student_name from teacher t full outer join student s on t.id = s.teacher_id;

注意:Oracle数据库支持full join,mysql是不支持full join的


如果直接查询2张表,将得到一个笛卡尔积,两个表的乘积 select * from teacher,student;

关于笛卡尔积的说明,请参考博客:https://blog.csdn.net/csdn_hklm/article/details/78394412

SQL查询--内连接、外连接、自连接查询的更多相关文章

  1. mysql数据库中的多表查询(内连接,外连接,子查询)

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

  2. 知识点:Oracle+表连接方式(内连接-外连接-自连接)+详解 来自百度文库

    Oracle 表之间的连接分为三种: 1. 内连接(自然连接) 2. 外连接 (1)左外连接 (左边的表不加限制)        (2)右外连接(右边的表不加限制)        (3)全外连接(左右 ...

  3. sql内连接外连接自然连接

    为什么我们要使用内连接和外连接呢?可以从两张或者多张表中找出,我们需要的属性. 这个比较好:http://www.cnblogs.com/youzhangjin/archive/2009/05/22/ ...

  4. oracle 内连接 外连接 查询 笔记

    elect ename,job,sal from emp where deptno>10 order by sal desc; 联合查询,PK dept.deptno FK emp.deptno ...

  5. 【SQL】多表查询中的 外连接 ,on,where

    先简单粗暴给个结论,多表连结查询中,on比where更早起作用,系统首先根据各个表之间的联接条件,把多个表合成一个临时表后,再由where进行匹配过滤,where后语句为真,则能查询出来,而通过外连接 ...

  6. 【cl】多表查询(内、外连接)

    交叉连接(cross join):该连接产生的结果集笛卡尔积 a有7行,b有8行    a的第一行与b的每一行进行连接,就有8条a得第一行 7*8=56条 select a.real_name,s.u ...

  7. SQL内连接-外连接join,left join,right join,full join

    1.创建测试表test1及test2 SQL)); 表已创建. SQL)); 表已创建. ,'name1'); ,'name2'); ,'name3'); ,'name4'); ,'name5'); ...

  8. SQL中的内连接外连接和交叉连接是什么意思?

    内连接又分为等值连接.自然连接和不等连接三种. 外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN).右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接( ...

  9. 清晰讲解SQL语句中的外连接,通用于Mysql和Oracle,全是干货哦

    直入主题: 我们做一个操作,将员工SCOTT的部门去掉,再次通过内连接查看数据,看看会产生什么现象? 使用内连接,查询数据 问题:找不到SCOTT员工了,只有13条数据,这显然不合理:这就是内连接的缺 ...

  10. mysql 内连接 左连接 右连接 外连接

    mysql> desc student;+-------+-------------+------+-----+---------+-------+| Field | Type | Null | ...

随机推荐

  1. Delphi CreateProcess 创建一个新的进程和它的主线程

    Delphi CreateProcess WIN32API函数CreateProcess用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件 CreateProcess百科名片 WIN32 ...

  2. MySQL 排错-解决MySQL非聚合列未包含在GROUP BY子句报错问题

    排错-解决MySQL非聚合列未包含在GROUP BY子句报错问题 By:授客 QQ:1033553122   测试环境 win10 MySQL 5.7 问题描述: 执行类似以下mysql查询, SEL ...

  3. swift为什么不是do while?

    swift为什么不是do while do while已经深入人心之后,对repeat while的语义逻辑该如何接受呢? do while的语义逻辑是:这个whilte循环先执行一次.逻辑目标针对w ...

  4. linux下安装make工具

    安装make工具 make工具依赖gcc ,automake,autoconf,libtool,make 这些安装包 可以一起安装 center os系统 运行如下命令yum install gcc ...

  5. 自生成图片验证码Servlet

    package com.woniuxy.busniess.servlet; import java.awt.*; import java.awt.geom.*; import java.awt.ima ...

  6. [PHP] socket客户端时的超时问题

    连接socket分为连接超时和读取超时 $sock=stream_socket_client("www.google.com:80", $errno,$errstr,2);    ...

  7. libnl概述

    以下三个库都基于其核心库libnl: libnl-route:用于和Kernel中的Routing子系统交互. libnl-nf:用于和Kernel中的Netfilter子系统交互. libnl-ge ...

  8. Educational Codeforces Round 77 (Rated for Div. 2)

    A: 尽可能平均然后剩下的平摊 #include <bits/stdc++.h> using namespace std; typedef long long ll; const int ...

  9. java之等待唤醒机制(线程之间的通信)

    线程间通信 概念:多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相同.比如:线程A用来生成包子的,线程B用来吃包子的,包子可以理解为同一资源,线程A与线程B处理的动作,一个是生产,一个是消 ...

  10. TestNG如何用命令行运行

    TestNG如何用命令行运行 调用TestNG最简单的方法事下面的: java org.testng.TestNG testng1.xml 以上是我在网上搜索到的最多的答案,但对于第一次接触testn ...