多表聯合查詢

關聯數據庫字典表的多表聯合查詢

inner join…on 自動連接

需要用到表的所有信息時,可以用以下兩種方法

1)??? left join…on… 左連接 (以左為準,右邊沒有NULL代替)

2)??? right join…on… 右連接(以右為準,左邊沒有NULL代替)

3)??? full join …on… 完全外連接?

insert into employee (id,position,xueli,emplyee_name) values(1,1,4,'楊忠宇');?

就是說這個員工? 是高中學歷? 職位是項目經理

?怎樣才能把他的個人信息查找出來的?

?select?? a.emplyee_name,b.item_value,c.item_value

from?? employee?? a?
join?? my_dictionary?? b?? on?? b.item_type = '職位'?? and?? a.position = b.id?
join?? my_dictionary?? c?? on?? c.item_type = '學歷'?? and?? a.xueli=c.id?
where a.id=1;

?

?

如果有的員工沒有學歷 那么就用 left

?

select?? a.emplyee_name,b.item_value,c.item_value
from?? employee?? a?
left outer join?? my_dictionary?? b?? on?? b.item_type = '職位'? and a.position=b.id
left outer join?? my_dictionary?? c?? on?? c.item_type = '學歷'?? and?? a.xueli=c.id

?

?

?

但是目前對 設計數據庫字典表 好處還不是很了解。節省空間嗎?

?

=================================================================

?

只需掌握 ?隱式內連接 ?左外連接 ? 右外連接 ?即可?

?

學習數據庫查詢的時候對多表連接查詢的有些概念還比較模糊。而連接查詢是在數據庫查詢操作的時候肯定要用到的。對于此概念?

我用通俗一些的語言和例子來進行講解。這個例子是我講課的時候經常采用的例子。?

首先我們做兩張表:員工信息表和部門信息表,在此,表的建立只為講述連接的概念,所以字段非常的簡單?

?

EmployeeTB(員工信息表):?

?

employeeid employeename ? ? ? deptid?

0001 ? ? ? ? ?張三 ? ? ? ? ? ? ? 01?

0002 ? ? ? ? ?李四 ? ? ? ? ? ? ? 01?

0003 ? ? ? ? ?王五 ? ? ? ? ? ? ? 02?

0004 ? ? ? ? ?趙六 ? ? ? ? ? ? ? 02?

0005 ? ? ? ? ?鄭七 ? ? ? ? ? ? ?NULL?

?

DeptTB(部門信息表)?

deptid ?deptname?

01 ? ? ?技術部?

02 ? ? ?市場部?

03 ? ? ?工程部?

?

我們現在需要進行連接查詢,連接兩張表檢索數據。分別檢索員工信息表的員工編號、員工姓名和部門信息表中的部門名稱。?

顯然,兩個表的連接條件是 員工表的部門編號=部門表的部門編號?

?

注意:鄭七不屬于任何部門(新來的員工,還沒有分配到任何的部門),而工程部不存在任何的員工(比如是一個新成立的部門,

還沒有員工)?

?

1、內( 自)連接查詢?

我們可以有兩種方式,這兩種是等效的?

一種是:SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS e,DeptTB AS d WHERE e.deptid=d.deptid?

另外一個是:SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS e INNER JOIN DeptTB AS d ON e.deptid=d.deptid?

檢索的結果都是:?

?

employeeid employeename deptname?

0001 ?張三 ?技術部?

0002 ?李四 ?技術部?

0003 ?王五 ?市場部?

0004 ?趙六 ?市場部?

?

而“鄭七”和“工程部”的信息是不會檢索出來。因為采用內連接計算的時候必須要保證連接的條件e.deptid=d.deptid匹配,結果才會被檢索出來。當我們連接兩張檢索數據的時候,檢索的方式是首先逐行掃描“員工信息表”中的記錄,然后根據連接條件來決定此記錄是否被檢索。比如對于張三,這條記錄的deptid是01(部門編號),它在部門表中能找到和它匹配的編號01,而編號01的部門名稱(deptname)是“技術部”所以張三這條記錄會被檢索,最終的結果肯定是:?

?

0001 ?張三 ?技術部?

?

同樣,李四、王五、趙六也能。但是鄭七的部門編號是NULL,它在部門信息表中找不到匹配的項(因為部門信息表中不存在部門編號為NULL的部門),所以鄭七不會被檢索。?

同理,沒有任何人員的部門編號為03,所以工程部的記錄也不會被檢索?

?

2、左外聯結?

但是有些情況下,我們需要知道所有員工的信息,即使他不屬于任何部門。這樣我們就可以采用外連接,在這里為左外連接,也就是連接中的左表的表中的記錄,無論能不能在右表中找到匹配的項,都要檢索,如果沒有匹配的項目,那么右表中的字段值為NULL(空),在這里就代表,此員工不屬于任何部門。?

檢索語句為:?

SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS e LEFT OUTER JOIN DeptTB AS d ON e.deptid=d.deptid?

檢索的結果都是:?

?

employeeid employeename deptname?

0001 ?張三 ?技術部?

0002 ?李四 ?技術部?

0003 ?王五 ?市場部?

0004 ?趙六 ?市場部?

0005 ?鄭七 ?NULL?

?

但是在這里,工程部同樣不會被檢索,因為,deptname是在連接的右邊的表中,“工程部”在左表中不存在任何的記錄,所以不會被檢索。這里關注的是“連接中的左邊的表”?

?

?

3、右外連接?

有時,我們需要知道,全部部門的信息,即使它沒有任何的員工。在我們的查詢中部門表在連接的右邊,如果我們想知道右邊表中的所有記錄信息,那么就可以采用右外連接,如果此記錄在左邊的表中找不到匹配項,則相應字段(employeeid,employeename)為NULL?

檢索語句為:?

SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS e RIGHT OUTER JOIN DeptTB AS d ON e.deptid=d.deptid?

檢索的結果都是:?

?

employeeid employeename deptname?

0001 ?張三 ?技術部?

0002 ?李四 ?技術部?

0003 ?王五 ?市場部?

0004 ?趙六 ?市場部?

NULL ?NULL ?工程部?

?

但在這里,鄭七是不會被檢索了,因為它在右表中找不到匹配項,這里關注的是“連接中的右邊的表”?

?

4、完全外連接?

如果我們想知道所有的記錄呢?無論員工有沒有部門,部門有沒有員工,我們都需要檢索。這里就可以使用完全外連接。關注連接中的兩部分。如果沒有部門,部門為空,沒有員工,員工信息為空。?

檢索語句為:?

SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS e FULL OUTER JOIN DeptTB AS d ON e.deptid=d.deptid?

檢索的結果都是:?

?

employeeid employeename deptname?

0001 ?張三 ?技術部?

0002 ?李四 ?技術部?

0003 ?王五 ?市場部?

0004 ?趙六 ?市場部?

0005 ?鄭七 ?NULL?

NULL ?NULL ?工程部

轉載于:https://www.cnblogs.com/OICOmay/p/9166533.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/397703.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/397703.shtml
英文地址,請注明出處:http://en.pswp.cn/news/397703.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python elasticsearch update_使用python的elasticsearch部分更新

我有以下格式的elasticsearch文檔。我需要部分更新“x”字段并在其中添加python dict。{"_index": "gdata34","_type": "gdat","_id": "328091-72341-118","_version": 1,"_score": 1,"…

32位與64位注冊表

如果32位系統OFP的注冊表路徑是 HKEY_LOCAL_MACHINE\SOFTWARE\Bohemia Interactive\ 那么在64系統里就應該是 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Bohemia Interactive\ 多了一級Wow6432Node轉載于:https://www.cnblogs.com/zhang-pengcheng/p/4712135.html

http 請求頭和響應頭

客戶端發送請求過程帶著的數據: 1.請求地址 2.請求方式 3.請求頭 request headers 4.請求參數 https://www.juhe.cn/ 130.... 1a2b....pei 服務端響應給客戶端的信息: 1.響應內容 2.響應報文/響應頭部 response headers a 響應頭 b 響應體 3.http狀…

[算法]-排序算法之希爾排序

希爾排序算法思想 希爾排序的實質就是分組插入排序,該方法又稱縮小增量排序.基本思想是:先將整個待排元素序列分割成若干個子序列(由相隔某個“增量”的元素組成的)分別進行直接插入排序,然后依次縮減增量再進行排序&a…

python tkinter button顏色變不了_tkinter多按鈕顏色變化

我使用tkinter創建一個8x8按鈕矩陣,當按下單個按鈕時,它會添加到最終列表中(例如finalList((0,0),(5,7),(6,6),…),允許我快速創建8x8(x,y)坐標圖像。我已經創建了一個帶有按鈕的窗口&#xff0…

應用spss可靠性分析軟件

問卷調查的可靠性分析 一、概念: 信度是指依據測驗工具所得到的結果的一致性或穩定性,反映被測特征真實程度的指標。一般而言,兩次或兩個測驗的結果愈是一致。則誤差愈小,所得的信度愈高,它具有下面特性:1、…

springmvc中的單例問題

1,springmvc實際上是基于一個叫做DispatcherServlet的servlet的。servlet按照以往的學習經驗,他是單事例多線程的。 Servlet生命周期 1.裝載Servlet。這項操作一般是動態執行的。然而,Server通常會提供一個管理的選項,用于在Serve…

設計模式 -- 亨元模式(FlyWeight Pattern)

用來盡可能減少內存使用量,適用于存在大量重復對象的場景,達到對象共享,避免創建過多對象的效果,提升性能,避免內存溢出。 定義: 使用共享對象有效支持大量細粒度對象。 適用場景: 系統中存在大…

python3.6使用mysql_Python之——Python3.6連接MySQL

只安裝了Python是不能連接數據庫的,還要安裝Python連接MySQL的相關類庫,Python2.7連接MySQL的類庫很多,MySQL官方最新支持的Python為Python3.4.,如下圖所示:那么,在Python3.6上如何實現連接MySQL的功能呢&a…

android解析json

android2.3提供的json解析類 android的json解析部分都在包org.json下,主要有以下幾個類: JSONObject:可以看作是一個json對象 JSONStringer:json文本構建類 JSONArray:可以看作是json的數組 JSONTokener:js…

MVVM模式于MVP模式

MVC、MVP、MVVM這些模式是為了解決開發過程中的實際問題而提出來的,目前作為主流的幾種架構模式而被廣泛使用。 一.MVP模式(Model-View-Presenter):傳統的開發是MVP模式(例如jquery) MVP是把MVC中的Controller換成了Presenter(呈現)&#xff…

HUNAN 11560 Yangyang loves AC(二分+貪心)

http://acm.hunnu.edu.cn/online/?actionproblem&typeshow&id11560&courseid0 題意:總共有n天,每天yangyang都需要一個快樂值,有m個隊友,每個隊友都會給陽陽一個快樂值(為2的冪),并且只能給一次,如果某一天隊友給的快樂值達到yangyang需要的快樂值那么…

BrowserSync開發利器

2019獨角獸企業重金招聘Python工程師標準>>> 大大節省開發時間。安裝使用簡單。使用步驟: 1、nodejs環境 安裝 2、在項目中使用npm安裝到本項目 3、對要監聽的文件執行響應命令 官網更詳細:http://www.browsersync.cn/#install 原理&#xf…

python字符串解析_Python-字符串解析-正則-re

正則表達式特殊字符序列,匹配檢索和替換文本普通字符 特殊字符 數量,普通字符用來定邊界更改字符思路字符串函數 > 正則 > for循環元字符  匹配一個字符# 元字符大寫,一般都是取小寫的反1. 0~9 整數          \d    …

algorithm -- 選擇排序

選擇排序是《導論》第一章課后習題,仿照插入排序,再次運用循環不變式來證明下算法的正確性,C 源碼: // 交換函數 void swap( int& a, int& b ) {a a^b;b a^b;a a^b; } void selectSort( int *arr, int count ) {if( a…

OD 完美走位

題目描述: 在第一人稱射擊游戲中,玩家通過鍵盤的A、S、D、W四個按鍵控制游戲人物分別向左、向后、向右、向前進行移動,從而完成走位。假設玩家每按動一次鍵盤,游戲人物會向某個方向移動一步,如果玩家在操作一定次數的鍵…

layui upload 后臺獲取不到值

后臺獲取不到值方法一&#xff1a; <script>layui.use(upload, function () {var upload layui.upload;//執行實例var uploadInst upload.render({elem: #test1 //綁定元素, url: /Home/UploadFiles //上傳接口, field: "fileNames" //添加這個屬性與后臺…

ueeditor無法上傳圖片_百度ue文本編輯器開發中無法上傳圖片

第一次發文&#xff0c;好緊張呀&#xff0c;不知道會不會沒人看。之前用ue遇到了一些坑&#xff0c;沒人看就當自己記錄了筆記。第一次用&#xff0c;總是會遇到問題&#xff0c;可以先查看下百度ue的演示http://ueditor.baidu.com/website/onlinedemo.html和API http://fex.b…

SQL 語句優化--IN語句優化案例

為什么80%的碼農都做不了架構師&#xff1f;>>> 今天客戶系統升級&#xff0c;通過DMVs性能分析查了一下&#xff0c;升級后發現一個語句執行時間比較長&#xff0c;執行語句要好幾秒鐘&#xff0c;調出語句如下&#xff1a; select distinct field003 from ufi2j0…

Activity跳轉

本例中MainActivity為&#xff1a;FirstActivity.java FirstActivity如下&#xff1a; package com.wyl.intentmultiactivitytest;import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.Vie…