列屬性:主鍵,自增加,惟一鍵。php
關係:一對一,一對多,多對多spa
三層範式:設計
1NF:字段設計必須符合原子性排序
2NF:不存在部分依賴(沒有複合主鍵)it
3NF:不存在傳遞依賴(實體單獨成表)class
逆規範化:效率磁盤空間博弈;效率
高級數據操做:select
新增操做:主鍵衝突(更新與替換),蠕蟲複製循環
更新操做:限制更新數量:limit分頁
刪除操做:限制刪除數量:limit。清空表結構:truncate
查詢操做:select選項;
字段別名: 數據源(單表,多表,子查詢[別名])
Where子句(條件判斷:從磁盤)
Group by子句(判斷結構,針對分組統計結果)
Order by子句(排序,多字段排序)
Having 子句 (判斷結果,針對分組進行統計結果)
Limit子句 (限制記錄數,分頁)
鏈接查詢:將多張表(能夠大於2張)進行記錄的鏈接(按照某個指定條件進行數據拼接)
最終結果:記錄數有可能變化,字段數必定會增長(至少兩張表合併)
鏈接查詢的意義:用戶查看數據的時候,須要現實的數據來自多張表。
Sql將鏈接查詢分爲四類:外連接,天然鏈接,內鏈接,交叉鏈接
鏈接查詢:join,使用方式 左表join 右表;
左表;在join關鍵字左邊的表;
右表:在join 關鍵字右邊的表;
Cross join從一張表中循環取出每一條記錄,每張記錄都去另外一張表進行匹配。
匹配必定保留(沒有條件匹配),而鏈接自己字段就全增長(保留),最終會造成的結果叫作笛卡爾積
左表 cross join 右表;==from 左表,右表;
笛卡爾積沒有意義:應該儘可能避免(交叉查詢沒用)交叉鏈接的價值:保證鏈接結構的完整性。
例:select * from my_stu cross join my_class;
內鏈接:[inner] join;
從左表中取出沒一條記錄去右表中全部記錄進行匹配,匹配必須是某個條件,在左表中與右表中相同的最終會保留,不然不保留。
左表 [inner] 右表 on 左表.字段=右邊.字段;
On 表示鏈接條件;
條件字段就是表明相同的業務含義
如:內鏈接
Select *from my_stu a join my_class b
On a.c_id=b.id;
在php中會覆蓋:
字段別名以及表別名對的使用:在查詢數據的時候,不一樣表有同名字段,這個時候須要加上表名才能區分,而表名太長,一般使用別名。
內鏈接可使用where 代替on關鍵字(where沒有on效率高)
外連接:outer join ,以某張表爲主,取出裏面全部的記錄,而後每條與另外一表進行鏈接,無論能不能匹配上條件,最終都會保留。
能匹配,正確保留,不能匹配其餘字段制空null;
外鏈接分爲兩種:以某張表爲主
以左表爲主: left join :左外鏈接
以右表爲主 right join :右外鏈接
左表 left/right join 右表 on 左表.字段=右表.字段;
例: select * from My_stu a left/right join My_class b
On a.c_id=b.id;
雖然左鏈接和右鏈接有主表差別,可是顯示的結果永遠是左表數據在左邊,右表數據在右邊,左鏈接和右鏈接能夠相互轉
Natural join :自動匹配鏈接條件,系統以字段名爲匹配模式(同名字段做爲條件,多個同名字段做爲條件)
天然鏈接分爲天然內鏈接。天然外鏈接
天然內鏈接 :select * from My_stu
Natural join my_class;
天然外鏈接 :左表 natural left/right join 右表
例:select * from my_stu natural left/right join my_class;
其實 內鏈接與外鏈接均可以模擬天然鏈接!!!!!!!!!