前幾天我們介紹django的資料操作,寫完那篇文章之後我就開始想到我之前學的mysql操作了,感覺熟悉又陌生。是時候找個機會把它複習鞏固一下了,不然就會忘了之前的所學內容了。但由於mysql的內容有些多,今天就複習一下資料庫的連線、子查詢、索引吧。
我這裡有兩個表,乙個是學生表,乙個是班級表,要想使這兩個表聯合起來,就需要進行連線查詢。
表結構如下:
class表;
student表;
內連線inner join on
要想把兩個表合併倒一塊,就需要進行如下操作。
select * from student inner join class on student.id =student_id;
結果輸出:
左連線:leftjoin on
連線的兩張表中以左側的表為準,右側的表匹配左側的表,如果有左側資料沒有對應右表,則顯示
null.
在這裡的意思是,如果有學生還沒加入班,那右側班級資料顯示
null.
右連線:
和左連線意思相近,我這裡就不作贅述了。
全連線:
我在這裡只舉了左連線的例子,大家可以根據我的表去實踐一下。或者自己建立表實際一下,我在這裡就不作贅述了。
in 將乙個查詢語句巢狀到另乙個查詢語句中
在子查詢中需要注意的是,巢狀的語句一般根據外來鍵查詢符合某種條件的id,外語句通過id查詢需要的結果。要查詢的字段一般都寫在外語句。
這裡我們查詢:班主任是楊麗萍的學生的名字
1.先查詢楊麗萍學生的id
select student_id from class where boss='楊麗萍'
2.再根據學生id去查詢相應的名字。
select `name` from student where id
3.將兩個條件用in 進行結合
select `name` from student where id in (select student_id from class where boss='楊麗萍')
結果輸出:
概念
索引在mysql中是一種「鍵」,是儲存引擎用於快速找到記錄的一種資料結構。索引對於良好的檢索效能,非常關鍵,尤其是當表中的資料量越大,索引對於效能的提公升越顯得重要。
索引優化是對查詢效能優化最有效的手段。索引能夠輕易將查詢效能提高好幾個數量級。索引相當於書的目錄,要查某一部分的內容,如果不使用目錄,則需要從幾百頁中逐頁去查,這個開銷是巨大的。
2.索引方法
mysql的索引方法有兩種,一種是btree,一種是hash. b樹索引是主流使用,一般都選擇這個。hash索引有很多的約束,比如hash 索引僅僅能滿足」=」,」in」和」<=>」查詢,不能使用範圍查詢,還有hash 索引不能利用部分索引鍵查詢。
3.索引型別
normal 普通索引:這個是最基本的索引,大多數情況可以用這個。
建立方式:
create index
索引名on
`表名`(`字段`);
unique 唯一索引: 唯一索引,與普通索引類似,但是不同的是唯一索引要求所有的類的值是唯一的,這一點和主鍵索引一樣.但是他允許有空值。例如身份證號、學號等
建立方式:create unique index
索引名on
`表名`(`字段`);
full text 全文索引:表示全文收索,在檢索長文字的時候,效果最好,短文本建議使用index,例如用於搜尋很長一篇文章
建立方式:create full text index
索引名on
`表名`(`字段`);
4.使用索引
一開始我也在找索引的使用方法,然後找不到。到最後才發現,索引對使用者是透明的,它的使用方式就和咱們平常的方式一樣。具體的執行過程由資料庫內部的資料引擎來做。
例子:create
index
id_index
on`student`(`id`);
select * from student where id= 1;
這裡就用了索引,只是我們感覺不到。
第二種建立、使用索引的方式:
(這是原始表)
(這是建立索引)
5. 索引優點
建立索引可以大大提高檢索的資料,以及減少表的檢索行數
查詢中使用索引 可以提高效能
在表連線的連線條件 可以加速表與表直接的相連
6.索引缺點
索引檔案會占用物理空間,除了資料表需要占用物理空間之外,每乙個索引還會占用一定的物理空間
當資料進行增刪改操作時,還需要對索引進行維護,這樣就會降低了資料的維護速度。
7.索引注意事項
在經常需要搜尋的列上,可以加快索引的速度
主鍵列上可以確保列的唯一性
不要在列上進行運算,這樣會使得mysql索引失效,也會進行全表掃瞄
定義為text和image和bit資料型別的列不應該增加索引,
連線子查詢
資料庫 adventureworks 功能需求 查詢所有同時訂購了商品名為 hl mountain front wheel 和 hl mountain rear wheel 的客戶資訊 實現邏輯 利用連線子查詢和連線查詢 join 的語法來實現 select distinct sc.accountn...
oracle 資料庫內連線外連線,子查詢
多表查詢中的一些概念 笛卡爾積 select from emp e,dept d 等值連線 select from emp e,dept d where e.deptno d.deptno 內連線 select from emp e inner join dept d on e.deptno d.d...
oracle基本使用 5 表的連線 子查詢
在熟悉了表的增刪改查,表中資料的增刪改查,本文將著重闡述如何進行表連線以及子查詢。所謂表連線,就是多張表在一起做笛卡爾乘積,它有多種形式 所謂子查詢就是把乙個sql查詢的結果作為另外乙個sql執行之前的輸入。在windows命令列下連線scott sqlplus scott tiger 通常意義上的...