MySQL數據高級查詢之連接查詢、聯合查詢、子查詢

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

一、連接查詢

連接查詢: 將多張表(>=2)進行記錄的連接(按照某個指定的條件進行數據拼接)。

連接查詢的意義: 在用戶查看數據的時候,需要顯示的數據來自多張表.

連接查詢: join, 使用方式: 左表 join 右表;左表: 在join關鍵字左邊的表;右表: 在join關鍵字右邊的表

連接查詢分類:SQL中將連接查詢分成四類:?內連接,外連接,自然連接和交叉連接

交叉連接:交叉連接: cross join, 從一張表中循環取出每一條記錄, 每條記錄都去另外一張表進行匹配: 匹配一定保留(沒有條件匹配), 而連接本身字段就會增加(保留),最終形成的結果叫做: 笛卡爾積。但是基本不會用到(反正我是從沒有用過)

基本語法: 左表 cross join 右表 或 from 左表,右表;

MySQL數據高級查詢之連接查詢、聯合查詢、子查詢

MySQL數據高級查詢之連接查詢、聯合查詢、子查詢

內連接: [inner] join, 從左表中取出每一條記錄,去右表中與所有的記錄進行匹配: 匹配必須是某個條件在左表中與右表中相同最終才會保留結果,否則不保留.

基本語法:左表 [inner] join 右表 on 左表.字段 = 右表.字段; on表示連接條件: 條件字段就是代表相同的業務含義(如my_student.c_id和my_class.id)

字段別名以及表別名的使用: 在查詢數據的時候,不同表有同名字段,這個時候需要加上表名才能區分, 而表名太長, 通常可以使用別名.

內連接可以沒有連接條件: 沒有on之后的內容,這個時候系統會保留所有結果(笛卡爾積)

內連接還可以使用where代替on關鍵字,但效率差很多。

MySQL數據高級查詢之連接查詢、聯合查詢、子查詢

MySQL數據高級查詢之連接查詢、聯合查詢、子查詢

外連接: 以某張表為主,取出里面的所有記錄, 然后每條與另外一張表進行連接: 不管能不能匹配上條件,最終都會保留: 能匹配,正確保留; 不能匹配,其他表的字段都置空NULL.

外連接分為兩種: 是以某張表為主: 有主表

left join: 左外連接(左連接), 以左表為主表

right join: 右外連接(右連接), 以右表為主表

基本語法: 左表 left/right join 右表 on 左表.字段 = 右表.字段;

MySQL數據高級查詢之連接查詢、聯合查詢、子查詢

MySQL數據高級查詢之連接查詢、聯合查詢、子查詢

自然連接:略(基本不用自然連接)

二、聯合查詢

聯合查詢:將多次查詢(多條select語句), 在記錄上進行拼接(字段不會增加)

基本語法:多條select語句構成: 每一條select語句獲取的字段數必須嚴格一致(但是字段類型無關)

Select 語句1

Union [union選項]

Select語句2...

Union選項: 與select選項一樣有兩個

All: 保留所有(不管重復)

Distinct: 去重(整個重復): 默認的

MySQL數據高級查詢之連接查詢、聯合查詢、子查詢

MySQL數據高級查詢之連接查詢、聯合查詢、子查詢

聯合查詢只要求字段一樣, 跟數據類型無關

MySQL數據高級查詢之連接查詢、聯合查詢、子查詢

聯合查詢的意義:

1. 查詢同一張表,但是需求不同: 如查詢學生信息, 男生身高升序, 女生身高降序.

2. 多表查詢: 多張表的結構是完全一樣的,保存的數據(結構)也是一樣的.

Order by使用

在聯合查詢中: order by不能直接使用,需要對查詢語句使用括號才行;另外,要orderby生效: 必須搭配limit: limit使用限定的最大數即可.

MySQL數據高級查詢之連接查詢、聯合查詢、子查詢

三、子查詢

子查詢: 查詢是在某個查詢結果之上進行的.(一條select語句內部包含了另外一條select語句).

子查詢分類

子查詢有兩種分類方式: 按位置分類;和按結果分類

  • 按位置分類: 子查詢(select語句)在外部查詢(select語句)中出現的位置

  1. From子查詢: 子查詢跟在from之后

  2. Where子查詢: 子查詢出現where條件中

  3. Exists子查詢: 子查詢出現在exists里面

  • 按結果分類: 根據子查詢得到的數據進行分類(理論上講任何一個查詢得到的結果都可以理解為二維表)

  1. 標量子查詢: 子查詢得到的結果是一行一列

  2. 列子查詢: 子查詢得到的結果是一列多行

  3. 行子查詢: 子查詢得到的結果是多列一行(多行多列) (1,2,3出現的位置都是在where之后)

  4. 表子查詢: 子查詢得到的結果是多行多列(出現的位置是在from之后)

標量子查詢

需求: 找到分類為科技的所有文章標題

MySQL數據高級查詢之連接查詢、聯合查詢、子查詢

MySQL數據高級查詢之連接查詢、聯合查詢、子查詢

MySQL數據高級查詢之連接查詢、聯合查詢、子查詢

列子查詢

這個時候我就想起以前面試的情形,當時有一道題,給我一個表,讓我找出語文和數學都及格人的名字。表是這樣的:

MySQL數據高級查詢之連接查詢、聯合查詢、子查詢

MySQL數據高級查詢之連接查詢、聯合查詢、子查詢

行子查詢

行子查詢: 返回的結果可以是多行多列(一行多列)

需求:找出年齡最大且身高最高的人

MySQL數據高級查詢之連接查詢、聯合查詢、子查詢

方案一:

MySQL數據高級查詢之連接查詢、聯合查詢、子查詢

方案二:

MySQL數據高級查詢之連接查詢、聯合查詢、子查詢

表子查詢

表子查詢: 子查詢返回的結果是多行多列的二維表: 子查詢返回的結果是當做二維表來使用

需求:找出每個人最好的成績

MySQL數據高級查詢之連接查詢、聯合查詢、子查詢

MySQL數據高級查詢之連接查詢、聯合查詢、子查詢

Exists子查詢

Exists: 是否存在的意思, exists子查詢就是用來判斷某些條件是否滿足(跨表), exists是接在where之后: exists返回的結果只有0和1.

需求:如果存在的話身高大于2米的人,列出表中所有數據

MySQL數據高級查詢之連接查詢、聯合查詢、子查詢

MySQL數據高級查詢之連接查詢、聯合查詢、子查詢

?

轉載于:https://my.oschina.net/u/2391658/blog/831563

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

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

相關文章

Oracle11g解鎖報錯SP2-0306-選項無效

普通用戶登錄isqlplus: (一)在瀏覽器中輸入URL (http://localhost:5560/isqlplus)。顯示登錄界面 這里只能用普通用戶進行登錄,因為要用sys登錄,必須用sys的DBA身份登錄。所以用普通用戶SCOTT,但是還未解鎖 問題:SP2-0…

java web登錄action_JavaWeb中登陸功能

首先我們要JavaWeb登陸的基本流程:JSP頁面發送請求——>Servlet——>Servlet通過調用方法從數據庫中得到數據并將結果返回頁面我們先建立三個jsp頁面,包括login.jsp(登陸頁面)、index.jsp(顯示登陸成功后的信息)、error.jsp(登錄失敗的頁面)&#…

Android Download Manager用法大全

http://www.trinea.cn/android/android-downloadmanager/ http://www.trinea.cn/android/android-downloadmanager-pro/轉載于:https://www.cnblogs.com/soaringEveryday/articles/4135204.html

Chrome瀏覽器無法觀看視頻,一直提示“adobe flash player 已過期” ?

很多新用戶在安裝了Chrome瀏覽器或者更新過的的時候,經常提示“ adobe flash player 已過期”的問題,反復提示,導致無法觀看視頻。于是從網上也找了很多辦法都沒有解決。這里給大家提供一個最完美的解決方案。經親自測試,完美解決…

關于JVM的垃圾回收GC的一些記錄

目錄 一、JVM內存區域劃分 二、從一個基本問題開始引入垃圾回收 三、GC作用的區域 三、如何確定一個對象是否可以被當成垃圾進行回收 (1)引用計數法 (2)可達性分析算法 (3)引用的類型 (3…

同步與互斥

有數據交互的進程之間的關系主要有兩種,同步與互斥.所謂互斥,是指在不同進程之間的若干程序片斷,當某個進程運行其中一個程序片段時,其它進程就不能運行它們之中的任一程序片段,只能等到該進程運行完這個程序片段后才可以運行.所謂同步,是指在不同進程之間的若干程序片斷,它們的…

java 分號 轉義_java – 正則表達式和轉義和未轉義的分隔符

你可以使用正則表達式(?:\\.|[^;\\])*匹配未轉義分號之間的所有文本:List matchList new ArrayList();try {Pattern regex Pattern.compile("(?:\\\\.|[^;\\\\])*");Matcher regexMatcher regex.matcher(subjectString);while (regexMatcher.find())…

OpenCV cv::Mat類

using namespace cv; 1、Mat的聲明: Mat mMat(rows, cols, type); Mat mMat(Size(width,height), type); type指矩陣中元素的類型,可以使CV_8U(無符號單字節像素),CV_8S(有符號單字節像素)&…

ubuntu-E:Encountered a section with no Package: header的解決辦法

ubuntu 11.04 出現了如下錯誤: E:Encountered a section with no Package: header 終端中輸入以下兩條命令: sudo rm /var/lib/apt/lists/* -vfsudo apt-get update 執行完了命令之后,軟件更新器應該會自動要求更新的,更新便是。 …

java new collection_使用Java 8新增的Predicate操作Collection集合

Java 8 起為 Collection 集合新增了一個 removeIf(Predicate filter) 方法,該方法將會批量刪除符合 filter 條件的所有元素。該方法需要一個 Predicate 對象作為參數,Predicate 也是函數式接口,因此可使用 Lambda 表達式作為參數。如下程序示…

codevs1219 騎士遍歷(棋盤DP)

題目描述 Description設有一個n*m的棋盤(2≤n≤50,2≤m≤50),如下圖,在棋盤上有一個中國象棋馬。 規定: 1)馬只能走日字 2)馬只能向右跳 問給定起點x1,y1和終點x2,y2,求出馬從x1,y1出發到x2,y2的…

php顯示錯誤

error_reporting(E_ALL);ini_set(display_errors, 1);//將出錯信息輸出到一個文本文件ini_set(error_log, dirname(__FILE__) . /error_log.txt);

java ssh免密登錄_SSH公鑰、私鑰配置(SSH免密碼登錄方式)

1.首先使用想要發起ssh免密訪問的用戶A登錄Linux(簡稱客戶端Linux)2.進入該用戶的家目錄(cd ~),看是否有.ssh文件夾(linux中以.開頭文件夾是隱藏的,使用ll -a進行查看),如果沒有則創建(mkdir ~/.ssh),并修改訪問權限(chmod 700 ~…

最近學到的一點東西

1 rpc 2 socket,工作很多年了,才明白這貨的重要性,不過什么樣的通信方式,最底層的連接得用它 3 sip協議 4調試,一定要確認異常出錯位置,不能亂猜 5 某些詭異的問題,可以依靠在加一層解決&#x…

win8, VS2013 .NET 4.5在哪找svcutil.exe?

我這個糾結呀,公司用win8, .NET 4.5。想做一個很簡單的項目,就是wcf宿主iis,項目根目錄下有aspx文件和svc文件。于是參考了一個博客http://www.cnblogs.com/yjmyzz/archive/2008/08/19/1270961.html,[原創]WCF入門級使…

java tbase_使用Java從firebase獲取數據

我在下面的代碼中遇到了一個問題,該代碼幾乎逐字地從Firebase SDK Java文檔中復制到了工作中.我是一個真正的語言的新手,比如來自PHP和JavaScript的webdev背景的Java.基本上,addListenerForSingleValueEvent沒有觸發以返回數據.我注意到了這一點,因為系統打印輸出沒有觸發,因此…

錯誤內存【讀書筆記】C程序中常見的內存操作有關的典型編程錯誤

題記:寫這篇博客要主是加深自己對錯誤內存的認識和總結實現算法時的一些驗經和訓教,如果有錯誤請指出,萬分感謝。 對C/C程序員來講,內存管理是個不小的挑戰,絕對值得慎之又慎,否則讓由上萬行代碼構成的模塊…

Spring_HelloWord

環境:IntelliJ 14 ; jdk1.8 Spring操作步驟 1.新建項目---Spring Batch2.IntelliJ會自動加載jar包3.現在就可以在src目錄下寫Java類文件了4.將相應的類部署在XML配置文件spring-config.xml中 (Eclipse需要手動創建,貌似名為bean.x…

java 按鈕組_java中創建一個按鈕組,有10個按鈕,分別寫著0,1,2,,3。。。。9

展開全部用Java創建按鈕組32313133353236313431303231363533e59b9ee7ad9431333332643966的程序如下:import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;public class…

Starling 2D框架簡介

本系列是對Introducing Starling pdf的翻譯,下文是對adobe開發人員中心的一片日志的轉載,地址為http://www.adobe.com/cn/devnet/flashplayer/articles/introducing_Starling.html Starling 是在 Stage3D APIs 基礎上開發的一種 ActionScript 3 2D 框架&…