SQL必知必會 基礎篇(一)

2021-08-20 12:50:02 字數 4314 閱讀 2365

最近又把《sql 必知必會》仔細翻了一遍,因此將基礎知識整理回顧,加深印象。

本篇包含知識點如圖:

假設有兩張表:student(sno,name,***,age,class,addr) ,sno為主鍵

grade(id,sno,math,chinses,english),id為主鍵

以下sql語句,基於mysql資料庫編寫

一、檢索資料(select)

select sno from student;           # 檢索單個列

select sno,***,age from student; # 檢索多列

select * from student; # 檢索所有列 優點:能檢索出名字未知的列 缺點:降低檢索效能

檢索唯一不同/不重複 值 :  distinct

select distinct name from student;
注意:distinct 關鍵字,作用於所有列,而不僅僅是跟在其後的那一列。

下面的語句,因為指定的兩列不完全相同,所以會返回student所有的行。

select distinct name,addr from student;
限制檢索結果:limit 

select name from student    # 檢索student表中從第 3 行起的 4 行資料

limit 4 offset 2; # 第乙個被檢索的是第0行,所以 2 實際是檢索第 3 行

limit 指定返回的行數,offset 指定從**開始。

二、排序(order by)

公升序(預設的):asc    降序:desc     (order by 必須是select 的最後一條子句)

單個列排序

select name,age feom student

order by age; # 按年齡公升序排列

多個列排序

select name,age,class from student

order by age,class; # 先按年齡排,年齡相同再按班級排

指定方向排序

select name,age,class from student

order by age desc,class desc; #若在多個列上降序,必須對每一列指定desc關鍵字

三、過濾資料(where / and / or / not / is null / between / in )

where +條件

select name,age,class feom student    

where age > 15; # 檢索年齡大於15歲的

select name,age,class feom student

where age <= 18; # 檢索年齡小於等於18的

select name,age,class feom student

where age = 14; # 檢索年齡等於14的

select name,age,class feom student

where age != 12; # 檢索年齡不等於12的

邏輯運算:and / or / not         優先順序:( ) > not> and >or

select name,age,class feom student

where age = 10 and class = 14; # 同時滿足兩個條件的值 年齡=10 且 班級=14

select name,age,class feom student

where age = 15 or class = 16; # 滿足其中任一條件的值 年齡=15 或者 班級=16

select name,age,class feom student

where not age = 15; # 不包含該條件的值 年齡!=15

特殊條件:is null / between / in

(1)null:無值,它與字段包含0,空字串或僅僅包含空格不同;無法比較null和0,因為他們是不等價的。

判斷是null值:is null            判斷不是null值:is  not null

select name,addr from student

where addr is null; # 位址是null值

select name,addr from student

where addr is not null; # 位址不是null值

(2)範圍值檢索  between and / or

select name,age from student

where age between 12 and 16; # 年齡在12~16之間

select name,age from student

where age in(10,12,14,16,18); # 年齡是括號中的值的

ps: in 與 or 能完成相似的功能,但 in 更好。

因為:in操作符的語法更清楚、直觀;求值順序更易於管理;執行速度相對or要快一些;可以包含其他select語句。

(3)like 模糊檢索(% ,_ , [ ])

%:任何字元出現任意次數,匹配0個、1個或多個(不匹配null)

select name from student

where name like '%mark%'; # 匹配 name 包含 mark 的

select name from student

where name like '%mark'; # 匹配 name 以 mark 結尾的

select name from student

where name like 'mark%'; # 匹配 name 以 mark 開頭的

_ : 匹配單個字元(總是剛好匹配乙個字元,不能多也不能少)

select name from student

where name like '_ark'; # 匹配長度為4,且後三個字元為ark的,例如 mark/lark/hark

select name from student

where name like 'mar_'; # 匹配長度為4,且前三個字元為mar的,例如 mard/marl/maef

select name from student

where name like '_ma_'; # 匹配長度為4,且中間兩個字元為ma的,例如 mmaa/smad/kmaf

[ ] :匹配括號中任意乙個字元,只能匹配單個字元;可以用字首字元^來否定

select name from student

where name like '[mk]%'; # 匹配以 m 或 k 開頭的,例如 mark/kind/mind/kol

select name from student

where name like '%[mn]'; # 匹配以 m 或 n 結尾的,例如 moon/han

select name from student

where name like '[^abc]%'; # 匹配不以 a 或 b 或 c 開頭的,例如 doop/lamb

ps:使用萬用字元的技巧

使用萬用字元檢索,要比其他的檢索花費更長的處理時間;能不用就不用,非要用就盡量不要放在搜尋的開始處。把萬用字元放在開始處,搜尋起來是最慢的。

SQL必知必會 SQL基礎篇

是否使用外來鍵確實會有一些爭議。關於外來鍵的使用 首先,外來鍵本身是為了實現強一致性,所以如果需要正確性 效能的話,還是建議使用外來鍵,它可以讓我們在資料庫的層面保證資料的完整性和一致性。當然不用外來鍵,你也可以在業務層進行實現。不過,這樣做也同樣存在一定的風險,因為這樣,就會讓業務邏輯會與資料具備...

SQL必知必會

資料庫 儲存有組織的資料的容器。資料庫管理系統 dbms 資料庫軟體,資料庫是通過dbms建立和操縱的容器。表 某種特定資料型別的結構化清單。資料庫中的每個表都有自己的名字,且唯一。不同的資料庫可以使用相同的表名。表的特性 模式 資料在表中如何儲存,儲存什麼樣的資料,資料如何分解。模式可以用來描述資...

SQL必知必會筆記一

外來鍵 select語句 檢索單個列select prod name from products 從products表中檢索乙個名為prod name的列檢索多個列 檢索所有列select from products 檢索不同值 限制結果 排序資料select prod name from prod...