`
kylinsoong
  • 浏览: 239642 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SQL Studying Note I - Join

阅读更多

 SQL Join

      SQL Join are used very frequently to query data from 2 or more tables, base on the relationship between certain columns in these tables.

      Tables in a certain database are offen related to each other with keys.

      A primary key is a column(or a combination of columns) with a unique value for each row, each primary key value must be unique within the table. The purpose is to bind data together, across tables, without repeating all of the data  in every table.

      Here are 2 demo tables: HEADER and ORDERHEADER

 

HID STATUS STATUSCHANGED ORDERHEADER_HID
1 Submitted 02-7  -11 09.28.42.812000 1
2 Cancel 02-7  -11 09.28.42.812000 2
3 Complete 02-7  -11 09.28.42.812000 3

      Note that the "HID" column is primary key in the "HEADER" table. This means that NO two rows can have the same HID, THE HID dintinguishes two HEADER even if they have the same STATUS or STATUSCHANGED. ORDERHEADER_HID which is the column refer to ORDERHEADER table

      Next, we have the ORDERHEADER table:

HID CUSTOMERREF ORDERREF
1 Customer1 order0
2 Customer2 order1
3 Customer3 order2

      Note that the HID column is the primary key in the "ORDERHEADER" table either. and CUSTOMERREF and  ORDERREF is ORDERHEADER's attributes.

      Notice That: the relation between 2 tables above is the column "ORDERHEADER_HID"

 

Different SQL Joins

      Before we starting our sql examples, we will list the types of Join you can use, and the fifference between them.

      INNER JOIN: Return rows when there is at least one matchs in both tables.

      LEFT JOIN:   Return all rows from the left table, even if there are no matches in the right table.

      RIGHT JOIN: Return all rows from the right table, even if there are no matches in the left table.

      FULL JOIN:   Return  rows when there is a match in one of the tables.

 

SQL INNER JOIN

      The SQL INNER JOIN keyword return rows when there is at least on matchs in both tables.

      The SQL INNER JOIN Syntax:

SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name

      The SQL INNER JOIN examples(base on above HEADER and ORDERHEADER tables):

SELECT ORDERHEADER.CUSTOMERREF, ORDERHEADER.ORDERREF, HEADER.STATUS HEADER_STATUS, HEADER.HID HEADER_HID FROM ORDERHEADER 
INNER JOIN HEADER ON ORDERHEADER.HID = HEADER.ORDERHEADER_HID;

     The Results:

 

CUSTOMERREF ORDERREF HEADER_STATUS HEADER_HID
Customer1 order1 Submitted 1
Customer2 order2 Cancel 2
Customer3 order3 Complete 3

The SQL INNER JOIN keyword return rows when there is at least on matchs in both tables, if there are rows in ORDERHEADER table that do not have natchs in 'HEADER', those rows do not listed.

 

SQL LEFT JOIN

      The SQL LEFT JOIN keyword return all rows from left table(table_name1), even if there are no matches in the right table(table_name2).

      The SQL LEFT JOIN Syntax:

SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name

      The SQL LEFT JOIN Examples:

SELECT ORDERHEADER.CUSTOMERREF, ORDERHEADER.ORDERREF, HEADER.STATUS HEADER_STATUS, HEADER.HID HEADER_HID 
FROM ORDERHEADER LEFT JOIN HEADER ON ORDERHEADER.HID = HEADER.ORDERHEADER_HID 
ORDER BY HEADER_HID DESC;

      The Results:

 

CUSTOMERREF ORDERREF HEADER_STATUS HEADER_HID
Customer3 order3 Complete 3
Customer2 order2 Cancel 2
Customer1 order3 Submitted 1

      The SQL LEFT JOIN keyword return all rows from left table(ORDERHEADER), even if there are no matches in the right table(HEADER). 

 

SQL RIGHT JOIN

      The SQL RIGHT JOIN keyword return rows from the right table(table_name2), even if there are no matches in the left table(table_name1).

      SQL RIGHT JOIN Syntax:

SELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name

      The SQL RIGHT JOIN example;

SELECT ORDERHEADER.CUSTOMERREF, ORDERHEADER.ORDERREF, HEADER.STATUS HEADER_STATUS, HEADER.HID HEADER_HID 
FROM ORDERHEADER RIGHT JOIN HEADER ON ORDERHEADER.HID = HEADER.ORDERHEADER_HID 
ORDER BY HEADER_HID DESC;

 The Results:

 

CUSTOMERREF ORDERREF HEADER_STATUS HEADER_HID
Customer3 order3 Complete 3
Customer2 order2 Cancel 2
Customer1 order3 Submitted 1

      The SQL RIGHT JOIN keyword return rows from the right table(HEADER), even if there are no matches in the left table(ORDERHEADER).

 

SQL FULL JOIN

      The SQL FULL JOIN Keyword return all rows when there is a match in one of the tables

      The SQL FULL JOIN  Syntax:

SELECT column_name(s)
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name

       The SQL FULL JOIN Example:

SELECT ORDERHEADER.CUSTOMERREF, ORDERHEADER.ORDERREF, HEADER.STATUS HEADER_STATUS, HEADER.HID HEADER_HID 
FROM ORDERHEADER FULL JOIN HEADER ON ORDERHEADER.HID = HEADER.ORDERHEADER_HID 
ORDER BY HEADER_HID DESC;

 The Results:

CUSTOMERREF ORDERREF HEADER_STATUS HEADER_HID
Customer3 order3 Complete 3
Customer2 order2 Cancel 2
Customer1 order3 Submitted 1

       The FULL JOIN keyword returns all the rows from the left table (ORDERHEADER), and all the rows from the right table (HEADER). If there are rows in "ORDERHEADER" that do not have matches in "HEADER", or if there are rows in "HEADER" that do not have matches in "ORDERHEADER", those rows will be listed as well.

 

END: A More Complex SQL Query Example:

      Base on the above HEADER and ORDERHEADER tables, Search the all ORDERHEADER's Orderrefs Which  ORDERHEADER Orderref's value start with order0, or ORDERHEADER Orderref's value equal order1 or order2, and HEADER's STATUS's value is one of Submitted,Cancel,Complete, and  HEADER's STATUSCHANGED before '2011-12-14 07:31:00'?

      The Answer:

SELECT ORDERHEADER.ORDERREF FROM ORDERHEADER INNER JOIN HEADER ON ORDERHEADER.HID = HEADER.ORDERHEADER_HID 
WHERE (ORDERHEADER.ORDERREF = 'order1' OR ORDERHEADER.ORDERREF LIKE 'order0%' OR ORDERHEADER.ORDERREF = 'order2') 
AND (HEADER.STATUS = 'Cancel' OR HEADER.STATUS = 'Submitted' OR HEADER.STATUS = 'Complete') 
AND (HEADER.STATUSCHANGED < to_date('2011-12-14 07:31:00', 'yyyy-mm-dd hh24:mi:ss'));

 

 

0
2
分享到:
评论

相关推荐

    嵌入式系统开发的入门教材Studying-Embedded-Linux-Using-MiniGUI.rar

    本书的配套文件《Studying-Embedded-Linux-Using-MiniGUI.pdf》很可能是详细的教程或指南,涵盖了理论知识和实践案例。而《www.pudn.com.txt》可能是一个链接或者参考资源,提供了更多的学习材料或下载地址。 在...

    Studying-Haskell-for-a-great-good

    在"Studying-Haskell-for-a-great-good"的学习资源中,你将深入理解这种高级编程语言的核心概念,开启一段提升编程思维的旅程。 1. **纯函数式编程**:Haskell 的核心特性是它的纯函数式编程模型。这意味着函数不...

    studying-html-css:HTML | CSS | 研究新的使用方式

    在这个“studying-html-css”项目中,我们将深入研究如何有效地使用这两种语言。 首先,HTML是用于创建网页结构的语言,它定义了网页上的各个元素,如标题、段落、链接、图像等。基本HTML的构成通常包括以下部分: ...

    App-for-Studying-Organizational-Behavior-on-Social-Media:实现在“处理大数据”一文中描述的技术。

    这个名为“App-for-Studying-Organizational-Behavior-on-Social-Media”的项目,正是为了利用大数据的力量来探索和理解组织在社交媒体上的行为模式。这个应用的创建者在《社会学方法与研究》的文章“对大数据进行...

    Studying-Covid-19.-大数据挖掘:使用Google合作开发有关Covid-19的大数据挖掘。 我用python,pandas和spark来做这个项目

    在这个名为“Studying-Covid-19.-大数据挖掘”的项目中,研究者采用了一种综合的方法,利用大数据工具来分析和理解Covid-19(新冠病毒)的传播模式、影响以及相关趋势。项目的核心是使用Google合作平台,这可能指的...

    playing-studying-websocket-scale

    项目重点: 该项目旨在学习如何扩展Websocket应用程序。...运行项目的说明: 克隆项目基于.env.example文件创建文件.env 。 执行命令: docker-compose build && docker-compose up -d 执行完上面的命令后,应用程序将...

    studying-map-filter-reduce-JS:学习地图过滤器减少JS

    在JavaScript编程语言中,"地图"(Map)、"过滤器"(Filter)和"减少"(Reduce)是三种非常重要的数组方法。它们是函数式编程的核心概念,用于处理和转换数组数据,使得代码更加简洁、易读且可维护。...

    studying-rails-blog:使用https学习Rails

    自述文件该自述文件通常会记录启动和运行应用程序所需的所有步骤。 您可能要讲的内容: Ruby版本系统依赖配置数据库创建数据库初始化如何运行测试套件服务(作业队列,缓存服务器,搜索引擎等) 部署说明...

    matlab代码中向量的点乘-ml-coursera-python-assignment-my-studying:ml-coursera-py

    matlab代码中向量的点乘 该存储库用于存储我在Andrew NG的本机器学习课程中对python编程作业的答案。 原始配饰可以在这里找到: Python编程作业-指导(来自原始存储库) 该存储库包含Andrew Ng教授教的编程作业的...

    matlab流量代码程序-Tools-for-studying-four-histories:不可商用,仅作学术交流

    matlab流量代码程序 答四史题目脚本 made by wql v1.2.5 免责声明:代码内容不得用于商业用途,仅做学习交流。 同时,本代码为自动刷分的脚本,请不要滥用该技术。由此产生的任何形式的个人损失,本人不负任何责任。...

    Japanese JLPT Studying Flash Card-crx插件

    语言:English 日本JLPT学习卡 日语JLPT学习记忆卡/英文版此扩展程序将在网页右下方显示一个小闪存卡,并在您的学习中显示日语(JLPT N5-N1),发音和英语含义。 希望您喜欢学习日语。 ***捐赠***我已计划升级此扩展...

    Adomian Decomposition Algorithm for Studying Incommensurate Fractional-Order Memristor-Based Chua’s System

    ### Adomian Decomposition Algorithm在非齐次分数阶忆阻器基Chua系统的应用 #### 概述 本文探讨了Adomian分解算法在非齐次分数阶忆阻器基Chua系统中的应用。该研究关注于利用Adomian分解算法求解这类系统的数值...

    java-studying-material.rar_site:www.pudn.com

    总之,这份"java-studying-material.rar"压缩包是一个全面的Java学习资源库,涵盖了从基础到高级的众多主题,对于渴望在Java编程道路上不断进步的人来说,是一份宝贵的资料。通过系统地学习和实践,可以有效地提升...

    uvm-studying-wy.docx

    UVM(Universal Verification Methodology,通用验证方法论)是一种基于SystemVerilog的验证框架,用于设计和验证硬件系统。在本笔记中,我们将探讨UVM的基础知识,包括如何构建一个简单的UVM平台以及其核心组件的...

    yqbgq#Studying-Java#备忘录模式1

    介绍意图在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。主要解决所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在

    studying-cpp:回购我的C ++学习

    在深入探讨C++编程语言的知识点之前,先要理解标题"studying-cpp:回购我的C++学习"的含义。这可能表示一个个人的学习过程,其中"回购"可能指的是回顾和巩固已经学习过的C++知识。描述中提到的"进步"和"我已经学到的...

    yqbgq#Studying-Java#Java五种基本的Annotation,提高程序的可读性1

    5个基本的Annotation如下:@Override用来指定子类必须覆盖父类的方法class Apple extends Fruit{编译上面的程序,可能丝毫

Global site tag (gtag.js) - Google Analytics