練習:
1、外連接配接
說明:
查詢結果為主表中所有的記錄;如果從表中有比對項,則顯示比對項,如果從表中沒有比對項,則顯示null;
應用場景:
一般多用于查詢主表中有但從表中沒有的記錄。
特點:
1、外連接配接分主從表,兩個表的順序不能随意調換
2、左連接配接,左邊為主表
右連接配接,右邊為主表
文法
select 查詢清單
from 表1 别名(主表)
left / right / full outer join 表2 别名 (outer 可不寫) //左外 右外 全連接配接
on 連接配接條件(表一的某個列等于表二的某個列)
where 篩選條件
group by 分組
having 分組後篩選條件
order by 排序
其實 from後面緊跟的表 就是主表 left outer join 後邊跟的表就是從表
兩個表的位置不可以互換,互換位置之後 就變成了 右連接配接了。
常見連接配接(重要)
全連接配接(mysql不支援)
2、子查詢
說明:
當一個查詢語句裡又嵌套了另一個完整的select語句,則被嵌套的的select語句稱為子查詢或内查詢。
外面的select語句稱為外查詢,或者主查詢語句
分類:(按子查詢出現的位置分)
1、select後面,
要求:子查詢結果為單行單列(标量子查詢)
2、from 後面
要求:子查詢結果可以為多行多列
3、where或者having後面(重要)
要求:子查詢結果必須為單列 (分為單行子查詢 、多行子查詢)
4、exists 後面:
要求:子查詢結果必須為單列(相關子查詢)
特點:
1、子查詢放在條件中,一般放在條件的右側
2、子查詢一般放在小括号中
3、子查詢的執行優先于主查詢
4、單行子查詢對應了單行操作符< > <= >= <>
多行子查詢對應了多行操作符 any in some
非法使用标量子查詢的情況:
它裡面隻能是一個數字,不可是一列數字
标量子查詢的結果 隻能是一行一列。
多行子查詢
IN: x in(30,40,50),,判斷某個字段是否在其中一個清單内
any /some :判斷某字段的值是否滿足其中任意一個
x>any(10,30,50) 等價于 x>min()
x=any(10,30,50) 等價于 x in (10,30,50)
all:判斷某字段的值是否滿足所有的
x>all(10,30,50) 等價于 x >max()
放在其他位置的子查詢
1、放在select後面
2、放在from
3、放在 exists後面
分頁查詢
應用場景:當頁面上的資料,一頁顯示不全的時候,則需要分頁顯示
分頁查詢的sql指令請求資料庫伺服器-》 伺服器相應查詢到多條資料-》前台分頁
limit 關鍵字 放在所有執行子句之後
起始條目索引從0開始如果不寫,就是預設從零開始顯示。
聯合查詢
當查詢結果來自多張表,但是多張表之間沒有聯系,這個時候往往使用聯合查詢,也稱為UNION查詢
多表查詢列數一緻