Mysql入门实战中
前面一章主要解說了mysql的入門學習。包括數(shù)據(jù)庫,表的管理,以及對數(shù)據(jù)的增刪改,本章主要介紹mysql最重要的語句select的使用方法。將select的大部分使用方法進行分別解說。
全部代碼下載(csdn):鏈接
Github鏈接:鏈接
1.select語句簡介:
select語句從語義上就能夠知道主要是用來進行查詢的
比方說顯示我們建立的表student全部的數(shù)據(jù):
select * from student;
顯演示樣例如以下:
2.簡單查詢:
2.1查詢指定字段
第一部分介紹的 select * from student;中的*號是通配符,意思查詢的全部列,平時我們常常要查詢的可能僅僅是名字或者分數(shù),這是就能夠指定字段進行查找
SELECT 字段名 FROM 表名;
如:
-- 查詢指定的列 并指定別名as--select sname,sid as id from student;顯演示樣例如以下:
2.2限制查詢行數(shù):也叫分頁查詢;
當我們數(shù)據(jù)庫非常大時為了顯示或處理方便能夠使用分頁查詢:
- 1.語法格式:
index數(shù)為開始位置的前一行,count數(shù)為要檢索的行數(shù)。
- 2. 演演示樣例如以下:選出student的從第二行開始的3行
- 3. 還能夠選擇倒敘或者升序:desc降序。asc升序
- 4. 注意:
在給出order by子句時,應該保證他位于 from子句之后。
假設使用limit,他必須位于order by子句之后,使用子句的次序不正確將產(chǎn)生錯誤消息
3.復雜查詢:
3.1查詢之過濾:
數(shù)據(jù)庫表一般包括大量的數(shù)據(jù),非常少須要檢索表中全部行。一般會依據(jù)特定操作或報告的須要提取表數(shù)據(jù)的子集。
- 1.語法格式:
select * from student where 條件;
如:查詢sid=2的學生:
-- 檢查單個值--select * from student where sid=002;select * from student where sid<>002;- 2.支持的子句操作符:
- 3.范圍過濾:
為了檢查某個范圍的值,可使用between操作符:
語法:select from***where***between***and***
如:sid在002到004之間
演示:select * from student where sid between 002 and 004;
- 4.空值檢查:
在創(chuàng)建表時,表設計人員能夠指定當中的列能否夠不包括值。在一個列不包括值時,被稱作包括空值null:
語法: select ***from***where***is***null
如:
演示:select * from student where sgender is null;
- 5.條件邏輯過濾:
為了進行更強的過濾控制,MySQL同意給出多個where子句。這些子句能夠兩種方式使用:以and子句的方式或or子句的方式使用:
語法:select * from student where 條件1 and(or) 條件2;
如:選擇sid==001和002并且mark大于1
演示:select * from student where (sid=001 or sid=002) and mark>1;
注意:and和or的組合帶來了一個問題——計算次序:and操作符的優(yōu)先級高于or.所以上面演示的時候?qū)r語句用括號包圍了
- 6.In操作符:
in操作符用來指定范圍,范圍中的每一個條件都能夠進行匹配。in取合法值的由逗號分隔的清單,全部括在圓括號里
語法:select ***from***where in (清單)
如:選擇出sid在(001,002,003)中
演示:select * from student where sid in (001,002,003);
為什么要使用IN操作符?其長處例如以下
在使用長的合法選項清單時,In操作符的語法更加清楚并且更直觀 ? 在使用IN時計算的次序更easy管理 ,IN操作符一般比OR操作符清單運行更快
IN的最大長處是能夠包括其它select語句,似的能夠更動態(tài)的建立where子句
- 7.not操作符:
WHERE子句中的NOT操作符有且僅僅有一個功能,那就是否定它之后的不論什么條件。
如否定剛剛的in條件:
select * from student where sid not in (001,002,003);
- 8.使用通配符:
用來匹配值的一部分的特殊字符,
為在搜索句子中使用通配符,必須使用like操作符。like指示mysQL后跟的搜索模式利用通配符匹配而不是直接相等匹配進行比較。
在搜索串中,%表示不論什么字符出現(xiàn)隨意次數(shù)
下劃線的用途與%一樣。但下劃線僅僅匹配單個字符而不是多個字符
演演示樣例如以下:
-- 用通配符進行過濾 like % _-- -- 選出名字中含有eac的詞-- select * from student where sname like '%eac%';-- 選出第一個字符隨意,后面字符為eace的詞-- select * from student where sname like '_eace';- 9.用正則表達式:
正則表達式的作用是匹配文本。將一個模式(正則表達式)與一個文本串進行比較。
關鍵字為regexp;正則表達式搜索與like比較類似;此去僅僅做簡單演示;
-- 正則表達式,不同于like,使用的操作符是regexp。匹配的也是含有-- -- 基本字符匹配-- select sname from student where sname regexp 'ong';-- 此去假設用like不會返回結(jié)果。由于不加通配符時,like時全然匹配; -- 正則書寫部分基本與其它正則語言一致--select sname from student where sname regexp '[peac,ron]';select * from student where sid regexp '[[:digit:]]';3.2查詢之計算字段:
查詢能夠?qū)σ恍┳侄芜M行算術運算,包括加減乘除;
3.3使用函數(shù):
對獲得的數(shù)據(jù)進行處理比方對獲得的字符串處理,對日期處理,對數(shù)值處理;
- 1.支持的函數(shù):
- 2.簡單演示:
3.4匯總數(shù)據(jù)(合計函數(shù)):
- 1.avg max, min, sum合計函數(shù)
Sum函數(shù)返回滿足where條件的行的和
AVG函數(shù)返回滿足where條件的一列的平均值
Max/min函數(shù)返回滿足where條件的一列的最大/最小值
演示:
select avg(sid) as avg,min(sid) as min,max(sid) as max,sum(sid) as sumfrom student;-- 聚集不同的值 --distinct不相等的值select avg(distinct mark) from student;- 2.count函數(shù):
Count(列名)返回某一列。行的總數(shù)
演示:
select count(*) from student;select count(sage) from student;3.5數(shù)據(jù)分組:
在SQL的語法里。GROUP BY和HAVING子句用來對數(shù)據(jù)進行匯總。
GROUP BY子句指明了依照哪幾個字段來分組,而將記錄分組后。用HAVING子句過濾這些記錄。
- 1.語法:
注意:Having和where均可實現(xiàn)過濾,但在having能夠使用合計函數(shù),having通常跟在group by后,它作用于組。
- 2. 簡單演示:
3.6子句順序:
– select子句順序–
– select–from–where–group by–having–order by–limit–
4.多表查詢:
多表查詢規(guī)則:1)確定查詢哪些表 2)確定哪些哪些字段 3)表與表之間連接條件 (規(guī)律:連接條件數(shù)量是表數(shù)量-1)
4.1子查詢:
子查詢能夠理解為 套查詢.子查詢是一個Select語句.
1.分為三種方式:
- 表達式的值與子查詢返回的單一值做比較
表達式 comparision ANY|ALL|SOME - 檢查表達式的值是否匹配子查詢返回的一組值的某個值
[NOT]IN(子查詢) - 做為計算字段使用子查詢
2.演演示樣例如以下:
4.2內(nèi)連接查詢:
通過連接運算符能夠?qū)崿F(xiàn)多個表查詢。連接是關系數(shù)據(jù)庫模型的主要特點,連接操作給用戶帶來非常大的靈活性,他們能夠在不論什么時候添加新的數(shù)據(jù)類型。為不同實體創(chuàng)建新的表,爾后通過連接進行查詢。
- 1.定義:
內(nèi)連接(inner join或者join。也能夠使用逗號)僅僅返回兩個表中連接字段相等的行;
##內(nèi)連接連接二表的樣例:select * from 表1 inner join 表2 on 表1.字段號=表2.字段號或:select * from 表1 。表2 where 表1.字段號=表2.字段號##內(nèi)連接連接三表的樣例: select * from (表1 inner join 表2 on 表1.字段號=表2.字段號) inner join 表3 on 表1.字段號=表3.字段號 ##內(nèi)連接四表的樣例: select * from ((表1 inner join 表2 on 表1.字段號=表2.字段號)inner join 表3 on表1.字段號=表3.字段號)inner join 表4 on 表1.字段號=表4.字段號- 2.演演示樣例如以下:
4.3外接查詢:
MySQL中的外連接。分為左外連接和右連接,即除了返回符合連接條件的結(jié)果之外。還要返回左表(左連接)或者右表(右連接)中不符合連接條件的結(jié)果,相相應的使用NULL相應。
- 1.左右連接:
左連接(left join)返回左表中全部記錄和右表中連接字段相等的記錄
右連接(right join)返回右表中全部記錄和左表中連接字段相等的記錄
假設兩個表中字段并不全然一一相應。想要那些沒有相應的字段也顯示出來就能夠使用左連接和右連接查詢,一個是包括左邊全部,一個是包括右邊。
##左連接兩表的樣例: select * from 表1 left join 表2 on 表.字段號=表2.字段號; ##左連接三表查詢的樣例: select * from (表1 left join 表2 on 表1.字段號=表2.字段號) left join 表3 on 表2.字段號=表3.字段號##右連接兩表的樣例: select * from 表1 right join 表2 on 表.字段號=表2.字段號;##右連接三表查詢的樣例:select * from (表1 right join 表2 on 表1.字段號=表2.字段號)right join 表3 on表2.字段號=表3.字段號- 2.演演示樣例如以下:
4.4組合(聯(lián)合)查詢:
- 1.定義:
把兩次或多次的查詢結(jié)果合并起來,要求查詢的列數(shù)一致,推薦查詢的相應的列類型一致,能夠查詢多張表。多次查詢語句時假設列名不一樣,則取第一次的列名!
假設不同的語句中取出的行的每一個列的值都一樣,那么結(jié)果將自己主動會去反復,假設不想去反復則要加all來聲明,即union all。
簡單理解:union 跟where的多個or條件一樣;
語法:
##同一張表:select 字段1,字段2 from table1 where 條件 union select 字段1,字段2 from table1 where 條件##不同的表:要求字段1,2和字段3,4類型一致select 字段1。字段2 from table1 where 條件 union select 字段3,字段4 from table2 where 條件- 2.演演示樣例如以下:
4.5 笛卡爾積(交叉連接)查詢:
- 1.定義:
笛卡爾積返回的結(jié)果為被連接的兩個數(shù)據(jù)表的乘積:
假設如今有兩張表A和B:例如以下
A表:
B表:
則查詢的笛卡爾積例如以下:select * from A,B;
- 2.語法:
- 3.演示如上:
好的本章介紹到這里
來自一條小鯊魚wpeace(rlovep.com)
總結(jié)
以上是生活随笔為你收集整理的Mysql入门实战中的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 产业结盟 跨界共赢 | 新华三成为“中国
- 下一篇: flask中jinjia2模板引擎使用详