1. 程式人生 > >IT修煉手冊之SQL基礎查詢

IT修煉手冊之SQL基礎查詢

Where 條件查詢
這裡寫圖片描述

group 與統計函式

group by

作用:把行 按 欄位 分組;常見於統計場合,通過統計函式來綜合應用:
max : 求最大
sum : 求總和
avg : 求平均
count:求總行數

Order by 排序功能

order by col desc/asc,col2 desc/asc,col3 desc/asc

1、按照 col 來排序

desc 是降序

asc 是升序

2、排序的欄位選擇是有順序的。

2.1先按照 col 欄位來排序

2.2如果 col 欄位相同 按照 col2 來排序

2.3如果 col2 相同 按照 col3 來排序

Limit 限制條數

limit [offset, N],限制結果取 N 條。

從 第 n+1 行開始擷取,擷取 m 個給我返回,如果不寫 n 的話 預設為 0

分頁應用中最為典型

順序問題

先是 where 然後 分組 然後 在 order by 然後是 limit where group by order by limit n,m

子查詢
基本概念:子查詢就是在原有的查詢語句中,嵌入新的查詢,來得到我們想要的結果集。
具體分類:
(1)where 型子查詢
1、類比:
A= SELECT max(age) from t_stu select * from t_stu where age = A
2、select * from table where colName =(select colName from tableName where cloName2=。。。。)
3、把內層 sql 語句查詢的結果作為外層 sql 查詢的條件候選集
4、 例子:
select * from t_stu where age =(SELECT max(age) from t_stu)

(2)from 型子查詢
1、類比:
tmp =SELECT name,class from t_stu where class=1 select * from tmp where;
2、SELECT * from (SELECT col1 ,col2,col3 from table_A where …) as tmp where …..
*代表 col1,col2,col3
3、把內層 SQL 的查詢結果 作為臨時表 供外層 SQL 使用。(外層 SQL 使用的表 是 內層 SQL 查詢結果 虛擬的臨時表)
4、例子:
select * from (SELECT name,class from t_stu where class=1) as tmp ;
5、子查詢的弊端:
因為會建立臨時表所以對容量耗費比較大(資料量比較大的情況)

主鍵

1、指定某個欄位作為主鍵

2、這個欄位在表裡面是不允許重複的

3、通過主鍵來代表這條資料在表裡面的唯一性

外來鍵
Mysql 來維護外來鍵關係危害:(t_stu 的 class_id 是外來鍵,指定 t_class 的 id)

1、如果我們對 t_stu 表去 insert update,它會先去對 t_class 這個表做一個查詢和檢查, 你插入或者更改的資料裡面 class_id 欄位是否在 t_class 這個表裡面存在。
2、如果我們對 t_stu 表在 insert 和 update 的時候 正好 t_class 也在做更新 或者 刪除或者 新增操作,那麼此時 t_stu 表就會被阻塞(等待)還有可能會出現死鎖
嚴禁讓 Mysql 來維護外來鍵關係,一定要用程式碼邏輯來維護。

關聯查詢

關聯兩個表來查詢
SELECT a.colName1,a.cloName2,b.colName,b.colName2 from table1 as a ,table 2 as b
where
a.colName=”..” and b.cloName2=”..”

連線查詢

(1)左連線

A left join B; 以 A 表為依據,拿出 A 表裡面的 class_id 去 t_class 表裡面挨個去查,將結果彙總返回。連結依據是 on 後面的條件
如果條件不滿足,A 表的資料將全部返回,B 表查到什麼就是什麼,不滿足置為空。

(2)右連線

A rigth join B 以 B 表為依據,拿出 B 表裡面的 id 去 t_stu 裡面挨個去查,將結果彙總返回,連線依據是 on 後面的條件
如果條件不滿足,B 表的資料將全部返回,A 表查到什麼就是什麼

(3)內連線

A 表和 B 表必須都滿足 on 後面的條件才可以。