日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL数据高级查询之连接查询、联合查询、子查询

發布時間:2023/12/10 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL数据高级查询之连接查询、联合查询、子查询 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

一、連接查詢

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

二、聯合查詢

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

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

Select 語句1

Union [union選項]

Select語句2...

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

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

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

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

聯合查詢的意義:

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

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

Order by使用

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

三、子查詢

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

子查詢分類

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

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

  • From子查詢: 子查詢跟在from之后

  • Where子查詢: 子查詢出現where條件中

  • Exists子查詢: 子查詢出現在exists里面

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

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

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

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

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

  • 標量子查詢

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

    列子查詢

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

    行子查詢

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

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

    方案一:

    方案二:

    表子查詢

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

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

    Exists子查詢

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

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

    ?

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

    總結

    以上是生活随笔為你收集整理的MySQL数据高级查询之连接查询、联合查询、子查询的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。