MySQL資料高階查詢之連線查詢 聯合查詢 子查詢

2021-08-14 00:18:21 字數 3302 閱讀 9462

連線查詢: 將多張表(>=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語句).

子查詢分類

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

from子查詢: 子查詢跟在from之後

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

exists子查詢: 子查詢出現在exists裡面

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

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

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

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

標量子查詢

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

列子查詢

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

行子查詢

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

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

方案一:

方案二:

錶子查詢

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

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

exists子查詢

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

需求:如果存在的話身高大於2公尺的人,列出表中所有資料

mysql裡連線查詢語句 MySQL 連線查詢

1 如何使用 mysql 的 join 在兩個或多個表中查詢資料 可以在select,update 和 delete 語句中使用 mysql 的 join 來聯合多表查詢。join 按照功能大致分為如下三類 1 inner join 內連線,或等值連線 獲取兩個表中字段匹配關係的記錄。2 left ...

MySQL高階查詢 連線查詢例項

使用sql查詢很簡單,很基礎的sqlect語句查詢。如果想從多個表查詢比較複雜的資訊,就會使用高階查詢實現。常見的高階查詢包括多連線查詢,外連線查詢與組合查詢等,今天我先學習最常用的連線查詢。我先以一張person表 id,name,phone,age 與乙個student表 id,name,qq,...

mysql資料查詢之連線查詢

連線查詢概念 1 交叉連線 最後得到的結果是拼在一起的,所謂的笛卡爾積的形式,這個沒什麼用 select from student cross join class 2 內連線 從左表中取出每條資料,和右表中的所有資料進行匹配,當左表和右表的值相同時,結果才保留 select from studen...