對多張表進行查詢操做
查詢方式1:
笛卡爾積查詢
select * from 表1,表2;
結果:讓表1中的每一條記錄和表2中每一條記錄一次組合
表1 n條記錄
表2 m條記錄
最終查詢結果:n * m 條
注意:
1.觀察笛卡爾積查詢的最終結果,不少數據沒有實際做用
2.查詢結果太多,對內存壓力大
笛卡爾積查詢優化(內鏈接)
加上條件
隱式內鏈接
select * from 表1,表2 where 表1.字段 = 表2.字段;
顯示內鏈接語法
select * from 表1 inner join 表2 on 條件;
注意:內鏈接語法條件過濾時,使用的是 on 關鍵字
例1:select * from kecheng,teacher where kecheng.teacherid = teacher.tid;
例2:select * from kecheng inner join teacher on kecheng.teacherid = teacher.tid;mysql
外連接(outer join)(誰在前面就先顯示哪一個表的數據)
左外鏈接 ---- left outer join
結果:
以左表爲準,左表中的全部數據都有 + 右表中符合條件的數據(鏈接條件on和判斷條件where)
右外鏈接 ---- right outer join
結果:
以右表爲準,右表中的全部數據都有 + 左表中符合條件的數據
外鏈接和內鏈接的區別:
1.內鏈接獲取的是嚴格符合條件的數據
2.外鏈接獲取的是嚴格符合條件的數據 + 左表(left)/右表(right)中不符合條件的數據
子查詢:一個查詢的結果做爲另一個查詢的條件(一個查詢中包含另外一個查詢)
必須保證查詢的結果爲一個具體的值!!!(做爲條件時)
難點:char與varchar的比較:
相同點:兩者都是存儲文本(字符串)的
不一樣點:
1.數據聲明的長度範圍不一樣
char --- 0 --- 255
varchar --- 0 --- 65535
拓展:varchar(10)
長度:在mysql 4.0 以前表明的字節數
在mysql 5.0 開始,表明字符數
2.底層存儲格式不一樣
char(10) ---- 'AB' ---- 'AB ' (已經定義了長度了,就像數組同樣,你不用也有)
varchar(10) ---- 'AB' ---- '2AB' (有算法封裝了長度,你定義的長度是最大長度)
A、varchar 空間分配更靈活
B、雖然char可能浪費空間,可是效率高
char 比 varchar 效率高
3.何時使用 char? 何時使用 varchar?
具體狀況具體分析
用於固定格式的數據 char
不肯定格式 varchar
語句查詢中的順序:
select D_*
from 表名
where A_條件
group by B_字段
having C_條件
order by E_字段;
0、先執行from
一、執行where後的A_條件
二、執行group by的 B_字段,拆分紅子表
三、執行having的C_條件,對子表進行篩選
四、執行select的D_*,將子表合成一張表
五、執行order by的E_字段,對4中的表進行排序(若是是用基礎屬性,就是按照符合條件的第一條的語句的基礎屬性在排序)
show create table 表名;
顯示全部的建表信息(可用於查詢約束名等而後對約束進行操做)算法
limitsql
select * from 表名 limit n, m; 用於顯示數據庫中從第(n+1)條數據開始的共m條語句數據庫