数据库两表连接四种方法

一般我们连接两张表时,都是select xxx,xx from x1,x2 where x1.a=x2.a。其实数据库还有4中join操作。

例如:表1:

student
s_id name sex
1  张三  男
2  李四  女
4  王五  男

表2:

class
c_id  id  name
1 1 11111
2 2 22222
3 3 33333
4 2 44444

1.连接查询

select s.name s_name,s.sex s_sex,c.name c_name
from student s,class c
where s.s_id=c.s_id

  结果:

s_name
s_sex
c_name
张三  男 11111
李四  女 22222
李四  男 44444

2.inner join

select s.name s_name,s.sex s_sex,c.name c_name
from student s inner join class c on s.s_id=c.s_id

  结果:

s_name s_sex c_name
 张三  男 11111
 李四  女 22222
 李四  女 44444

可以看出inner join 和我们直接连接查询没什么差别!

3.left join

select s.name s_name,s.sex s_sex,c.name c_name
from student s left join class c on s.s_id=c.s_id

  结果:

s_name s_sex c_name
 张三  男 11111
 李四  女 22222
 李四  女 44444
 王五  男  

4.right join

select s.name s_name,s.sex s_sex,c.name c_name
from student s right join class c on s.s_id=c.s_id

  结果:

s_name
s_sex

c_name
张三 11111
李四 22222
    33333
李四 44444

5.full join

select s.name s_name,s.sex s_sex,c.name c_name
from student s full join class c on s.s_id=c.s_id

  结果:

s_name s_sex c_name
张三 11111
李四 22222
    33333
王五  
李四 44444

综上可以看出:

普通连接和 inner join连接没什么差别!

left join:左表所有行都输出,如果找不到右表对应字段,即该字段为null

left join:右表所有行都输出,如果找不到左表对应字段,即该字段为null

left join:左右表行全部对应输出,如果找不到对应字段,即为null

原文地址:https://www.cnblogs.com/Somuns/p/9160355.html

时间: 2024-11-08 23:04:23

数据库两表连接四种方法的相关文章

delphi TreeView 从数据库添加节点的四种方法

方法一:delphi中递归算法构建treeView 过程:通过读取数据库中table1的数据,来构建一颗树.table1有两个字段:ID,preID,即当前结点标志和父结点标志.所以整个树的表示为父母表示法.本递归算法不难写,但是要注意:程序内部的变量都应使用局部变量!比如当Query是外部变量(函数外定义或者直接通过控件拖拽得来)时就会得到错误的结果.代码如下: unit Unit1; interface uses  Windows, Messages, SysUtils, Variants,

MySQL数据库分表的3种方法【转】

一,先说一下为什么要分表 当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了.分表的目的就在于此,减小数据库的负担,缩短查询时间. 根据个人经验,mysql执行一个sql的过程如下:1,接收到sql;2,把sql放到排队队列中 ;3,执行sql;4,返回执行结果.在这个执行过程中最花时间在什么地方呢?第一,是排队等待的时间,第二,sql的执行时间.其实这二个是一回事,等待的同时,肯定有sql在执行.所以我们要缩短sql的执行时间. mysql中有一种

打印素数表的四种方法

题目:给出一个正整数n,打印出所有从1~n的素数(即质数); 1.傻瓜解法 1 int i,n; 2 while(scanf("%d",&n)!=EOF) 3 { 4 for(i=2;i<n;i++) 5 if(n%i==0) break; 6 if(i==n) printf("YES\n"); 7 else printf("NO\n"); 8 } 9 这是理所当然的想法,按照素数的定义,除了1和它本身没有其他的因数,就是素数. 这

C#连接Oracle数据库的四种方法

C#连接数据库的四种方法 在进行以下连接数据库之前,请先在本地安装好Oracle Client,同时本次测试System.Data的版本为:2.0.0.0. 在安装Oracle Client上请注意,如果OS是3-BIT请安装32-BIT的Oracle Client,但OS是64-BIT,需要根据实际情况安装,如果你的APP是按32-BIT运行的,则需要安装32-BIT客户端,如果是按64位运行的,则安装64位客户端,而不是OS是64-BIT的,就要安装64-BIT的ORACLE客户端.   本

mysql insert插入时实现如果数据表中主键重复则更新,没有重复则插入的四种方法

[CSDN下载] Powerdesigner 设计主键code不能重复等问题 [CSDN博客] Oracle中用一个序列给两个表创建主键自增功能的后果 [CSDN博客] MySQL自增主键删除后重复问题 [CSDN博客] mysql 主从复制 双主从复制原理 防止主键重复问题(必看) [CSDN博客] replace into导致mysql自增列导致主键重复问题分析 [CSDN博客] 一个循环更新某库所有表所有非主键列的值方法(sql 2005 & mysql) [CSDN博客] mysql i

两个变量交换的四种方法

对于两种变量的交换,我发现四种方法,下面我用Java来演示一下. 1.利用第三个变量交换数值,简单的方法. class TestEV //创建一个类 { public static void main(String[]args) { int x =5,y=10; //定义两个变量 int temp = x; //定义第三临时变量temp并提取x值 x = y; //把y的值赋给x y = temp; //然后把临时变量temp值赋给y System.out.println("x="+x

Android提交数据到服务器的两种方式四种方法

Android应用开发中,会经常要提交数据到服务器和从服务器得到数据,本文主要是给出了利用http协议采用HttpClient方式向服务器提交数据的方法. /** * @author Dylan * 本类封装了Android中向web服务器提交数据的两种方式四种方法 */ public class SubmitDataByHttpClientAndOrdinaryWay { /** * 使用get请求以普通方式提交数据 * @param map 传递进来的数据,以map的形式进行了封装 * @p

两个变量交换的四种方法(Java)

对于两种变量的交换,我发现四种方法,下面我用Java来演示一下. 1.利用第三个变量交换数值,简单的方法. (代码演示一下) class TestEV//创建一个类{ public static void main(String[]args) { int x =5,y=10; //定义两个变量 int temp = x; //定义第三临时变量temp并提取x值 x = y; //把y的值赋给x y = temp; //然后把临时变量temp值赋给y System.out.println("x=&

oracle增加表空间的四种方法,查询表空间使用情况

增加表空间大小的四种方法Meathod1:给表空间增加数据文件ALTER TABLESPACE app_data ADD DATAFILE'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP03.DBF' SIZE 50M; Meathod2:新增数据文件,并且允许数据文件自动增长ALTER TABLESPACE app_data ADD DATAFILE'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP04.DBF'