資料庫相關問答

2021-08-30 20:54:25 字數 4087 閱讀 4501

資料庫索引的作用和注意點

資料庫索引的分類

關於函式索引的特點

聚集索引和非聚集索引的區別和用法

左右關聯

--*** left join/right join/inner join操作演示

表a記錄如下:

aid        anum

1           a20050111

2           a20050112

3           a20050113

4           a20050114

5           a20050115

表b記錄如下:

bid        bname

1            2006032401

2           2006032402

3           2006032403

4           2006032404

8           2006032408

實驗如下:

1.    left join

sql語句如下:

select * from a

left join b

on a.aid = b.bid

結果如下:

aid        anum                   bid           bname

1            a20050111         1               2006032401

2            a20050112         2              2006032402

3            a20050113         3              2006032403

4            a20050114         4              2006032404

5            a20050115         null       null

(所影響的行數為 5 行)

結果說明:

left join是以a表的記錄為基礎的,a可以看成左表,b可以看成右表,left join是以左表為準的.

換句話說,左表(a)的記錄將會全部表示出來,而右表(b)只會顯示符合搜尋條件的記錄(例子中為: a.aid = b.bid).

b表記錄不足的地方均為null.

2.    right join

sql語句如下:

select * from a

right join b

on a.aid = b.bid

結果如下:

aid        anum                   bid           bname

1            a20050111         1               2006032401

2            a20050112         2              2006032402

3            a20050113         3              2006032403

4            a20050114         4              2006032404

null    null                8              2006032408

(所影響的行數為 5 行)

結果說明:

仔細觀察一下,就會發現,和left join的結果剛好相反,這次是以右表(b)為基礎的,a表不足的地方用null填充.

3.inner join

sql語句如下:

select * from a

innerjoin b

on a.aid = b.bid

結果如下:

aid        anum                   bid           bname

1            a20050111         1               2006032401

2            a20050112         2              2006032402

3            a20050113         3              2006032403

4            a20050114         4              2006032404

結果說明:

很明顯,這裡只顯示出了 a.aid = b.bid的記錄.這說明inner join並不以誰為基礎,它只顯示符合條件的記錄.

-----------------[以下為網上的一點資料]------------------

left join操作用於在任何的 from 子句中,組合**表的記錄。使用 left join 運算來建立乙個左邊外部聯接。左邊外部聯接將包含了從第乙個(左邊)開始的兩個表中的全部記錄,即使在第二個(右邊)表中並沒有相符值的記錄。

語法:from table1 left join table2 on table1.field1 compopr table2.field2

說明:① table1, table2引數用於指定要將記錄組合的表的名稱。

② field1, field2引數指定被聯接的字段的名稱。且這些字段必須有相同的資料型別及包含相同型別的資料,但它們不需要有相同的名稱。

③ compopr引數指定關係比較運算子:"=", "<", ">", "<=", ">=" 或 "<>"。

④ 如果在inner join操作中要聯接包含memo 資料型別或 ole object 資料型別資料的字段,將會發生錯誤

再來乙個比較強悍的貼(一下喚醒了我本科的資料庫課...)原文:

from語句之結合條件

分為inner join,left join,right join。結合條件一般分為內部結合和外部結合,inner join是內部結合,後兩者為外部結合。left就是表示全部保留左邊表,right join全部保留左邊表。

條件式用on來指定,如果多個條件,則用and來連線

--例子:表foo和表bar以foo.a = bar.a 來實現內部結合

select * from foo inner join bar on foo.a = bar.a

三個以上的結合

三個以上表的結合是先結合兩個表,然後將結果當作乙個表再與另乙個表結合。

--例子:將foo , bar , more 三表結合

select * from ( foo inner join bar on foo.a = bar.a )

inner join more on foo.a = more.a

left join和 right join

使用left join 和 right join時,一定要注意位置。「foo left join bar 」就是將左邊的foo表的所有行保留,匹配不上的顯示null。反之,「foo right join bar」就是將右側的bar表全部保留,匹配不上的顯示null。

--例子:將foo , bar 兩表左結合

圖1 full outer join

完整外部連線,取包含所有左側內容和右側內容的資料。

需要注意的是mysql,access不能使用此功能

--例子:取上圖foo,bar兩表之full outer join

select * from foo full outer join bar on foo.a = bar.a

結果是:

圖2 cross join

交叉結合,取結合之表的全行資料,就好象是在連線兩個**時忘記加入乙個where子句一樣。交叉結合時,沒有結合條件。

注意,db2,access不能使用此語句

--例子:取圖1中foo,bar兩表交叉結合。

select * from foo cross join bar

結果是:

圖3

mysql資料庫問答

一 問 如果有一張表,裡面有個字段為id的自增主鍵,當已經向表裡面插入了10條資料之後,刪除了id為8,9,10的資料,再把mysql重啟,之後再插入一條資料,那麼這條資料的id值應該是多少,是8,還是11?答 如果表的型別為myisam,那麼是11。如果表的型別為innodb,則id為8。這是因為...

資料庫相關

1.操作類 godb public goosundb open throws sqlexception public void close public cursor search int mark mark mark,null,null,null,col date desc if cursor n...

資料庫相關

資料庫的設計 分庫分表,記憶體資料庫,主從讀寫分離,資料庫中介軟體mycat 整合了主從讀寫分離,分庫分表等功能 資料庫優化 sql語句優化,資料庫配置優化,索引優化,資料庫設計優化 資料庫的鎖 1.樂觀鎖,表中增加版本字段,每次更改加1,查的時候先把版本字段查出來,更新的時候加上條件版本欄位沒變,...