如果有其它觀點可以提出來奧什麼是連線查詢
多張表連起來查詢。
如果把全部資料儲存在一張表內的話,會導致資料重複,導致資料的冗餘。(在乙個資料集合中重複的資料叫做資料冗餘)
連線查詢分類
根據語法劃分:
sql92
sql99
sql99語法結構更清晰一些,表的連線條件和後來的where條件分離了。根據表結構劃分sql92如果使用where的話麻煩一些
內連線
等值連線外連線非等值連線
自連線
左外連線(左連線)全連線(說是挺少用的)右外連線(右連線)
內連線
之等值連線
最大特點:條件是等量關係(相等)
案例:查詢每個員工部門名稱,要求顯示員工和部門名
select
e.ename,d.dname
from
emp e
inner join // inner可以省略,帶著的話**可讀性好點
dept d
one.deptno = d.deptno;
效果±-------±-----------+
| ename | dname |
±-------±-----------+
| clark | accounting |
| king | accounting |
| miller | accounting |
| smith | research |
| jones | research |
| scott | research |
| adams | research |
| ford | research |
| allen | sales |
| ward | sales |
| martin | sales |
| blake | sales |
| turner | sales |
| james | sales |
±-------±-----------+
總結內連線內連線之等值連線
兩張表連線,條件是乙個等量關係的(相等)就叫做等值連線
之非等值連線
非等值連線這個最大特點是:連線條件中的關係是非等量關係。
直接總結把,這麼簡單不用案例了把。
總結內連線內連線之非等值連線
兩張表連線,條件不是乙個等量關係(不相等)就叫做非等值連線
之自連線
最大特點是:一張表看成兩張表來使用。就是自己連線自己。
案例select
e.ename as 『員工表』,b.ename as 『領導表』
from
emp e
inner join
emp b
one.mgr = b.empno;
效果±-------±-------+
| 員工表 | 領導表 |
±-------±-------+
| smith | ford |
| allen | blake |
| ward | blake |
| jones | king |
| martin | blake |
| blake | king |
| clark | king |
| scott | jones |
| turner | blake |
| adams | scott |
| james | blake |
| ford | jones |
| miller | clark |
±-------±-------+
內連線
之自連線總結
就是把一張表看成兩張來使用,然後尋找兩張表有共同點的地方外連線就把它們利用起來
什麼是外連線和內連線有什麼區別呢?
內連線ab表,匹配查詢,如果能匹配上就展示出來,匹配不上直接乾掉,你看都看不見。不分主和副表,兩張表平等。
外連線左連線和右連線都有自己的語法ab倆張表,分主表和副表。主表是查詢的只不過在查詢的時候帶上了副表,之後匹配它不像內連線那樣(匹配不上直接乾掉,你看都看不見)就算匹配不上它也會顯示出來,只不過是以null的形式。
左連線是
left join
右連線是
right join
案例查詢出哪些部門沒有員工
select
d.*from
emp e
right join
dept d
one.deptno = d.deptno
where
e.empno is null;
效果±-------±-----------±-------+
| deptno | dname | loc |
±-------±-----------±-------+
| 40 | operations | boston |
±-------±-----------±-------+
外連線主要特點
主表資料元素無條件全部查詢出來
笛卡爾積現象
在表連線查詢這個方面有一種現象被稱為笛卡爾積現象。
笛卡爾積現象:
當兩張表進行連線查詢的時候,沒有任何條件進行限制最終查詢結果是兩張表記錄條數的乘積。那麼我們應該怎麼避免笛卡爾積現象呢?
上面說了沒有條件,我們當然是加條件啦。
但是避免了笛卡爾積現象不會減少匹配次數哦(就是兩張表記錄條數的乘積)只不過顯示的是有效值,就是適合條件的值。
關於表的別名好處
第一:執行效率高使用和定義第二:可讀性好
『如果字段**現同名的字段用定義別名就很舒服了,隨便說一下如果欄位名重名mysql是識別不了的。
select
e.ename,d.dname
from
emp e,dept d
標識重點黃色基本都要記住除了英文這個也要(滑稽)
MySQL學習第三天
create table if not exists user id tinyint,engine innoob charset utf8 之後使用desc name 你會驚奇的發現tinyint後面多出了乙個4 那是因為tinyint可以表示128,符號也代表一位,它是資料寬度 即便你設定資料寬度...
學習mysql的第三天
今天是週六,複習了前兩天天學習mysql的東西,每天學習的東西都很少,這兩天加起來只學習了這幾個資料型別 int char varchar enum int中可以修飾的詞有 unsigned zerofill auto increment,not null.一 初步了解如何在sqlyog中建立表的操...
學習第三天
額,又是美好的一天!祝賀比利時奪得季軍!下面,還是先看資訊學 今天繼續看倍增。這道題是和倍增沾邊的題,額,其實就是兩邊floyd。但是思路還是可以借鑑的。這道的思路是,使用兩個陣列,乙個是f k u v 這個陣列表示節點u到節點v之間是否距離為2 k,如果是,則為1,否則為0.代表u和v之間是否1s...