日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

【JavaWeb】62:?jiǎn)伪聿樵儯约皵?shù)據(jù)庫總結(jié)

 劉小愛v 2020-06-15

今天是劉小愛自學(xué)Java的第62天。

感謝你的觀看,謝謝你。

話不多說,繼續(xù)數(shù)據(jù)庫的學(xué)習(xí):

使用了數(shù)據(jù)庫可視化工具Navicat,感覺真香。

比在DOS窗口中操作方便多了,那個(gè)黑乎乎的窗口真心不習(xí)慣,并且也沒有提示。

今天詳細(xì)地學(xué)習(xí)下數(shù)據(jù)記錄的查詢,同時(shí)最后對(duì)這幾天的知識(shí)點(diǎn)做一個(gè)總結(jié)。

一、基本查詢

select,選擇選取的意思,在數(shù)據(jù)庫之中可以理解成查詢。

①查詢所有數(shù)據(jù)

select  * from student;

*即代表了所有數(shù)據(jù)的意思,格式為:

select * from+表名

②查詢指定列的信息

select name,gender from student;

查詢表中name,gender這兩列的所有數(shù)據(jù),格式為:select+列名,列名,列名+from+表名

列名之間用逗號(hào)隔開。

③條件查詢

select * from student where name="比企谷八幡";

查詢表中name為“比企谷八幡”的所有數(shù)據(jù),其中也可以選擇部分列的數(shù)據(jù),格式不再贅述。

總之where后面填寫判斷條件。

其中還有運(yùn)算符相關(guān)的查詢操作:

①查詢成績(jī)不及格的同學(xué)

select * from student where score<60;

即score<60的所有數(shù)據(jù)。

②查詢成績(jī)不等于90的同學(xué)

不等于在SQL中有三種表示方式:

  • not score=90;

  • score!=90;

  • score<>90;

③查詢成績(jī)?cè)?0和90之間的數(shù)據(jù)

也就是80<=score<=90,在SQL中有兩種方式:

  • between 80 and 90;

  • score>=80 and score<=90;

and,即并且的意思。

④查詢成績(jī)?yōu)?8,95,100的同學(xué)

在SQL中有兩種方式:

  • score in(88,95,100);

  • score=88 or score=95 or score=100;

or,即或者的意思。上述均為條件查詢,也就是用where來說明判斷條件,只不過條件中設(shè)計(jì)到了運(yùn)算。

二、模糊查詢、濾重和別名

除了上述的基本查詢之外,還有模糊查詢:

①模糊查詢

like,像的意思,可以用來模糊查詢:

  • name like ‘劉%’;其中%表示1個(gè)或多個(gè);

  • name like '劉_';其中_表示1個(gè)。

其中第一個(gè)只要以劉開頭即可以,第二個(gè)以劉開頭的兩個(gè)字。

②查詢成績(jī)不為null的學(xué)生

score is not null;

這很好理解,從字面意思就能看出來。

③查詢成績(jī)?yōu)閚ull的學(xué)生

score is null;

①過濾掉重復(fù)的數(shù)據(jù)

distinct,清楚的、不同的意思,在這里可以理解成過濾,格式如下:

select distinct+列名+from+表名

其中列名可以有多個(gè)。

②給列名起別名

可以給列名起一個(gè)別名,格式如下:

select 列名 as 別名+from+表名

就算取別名了,數(shù)據(jù)庫里的列名是沒有改變的。

它就是一個(gè)渲染效果,所以as后面接什么都可以,字符串也不用加引號(hào)。

其中as也可以省略,但最好不省略。

③列運(yùn)算

這個(gè)也好理解,直接在查詢列名上+10即可。

其中有一行數(shù)據(jù)score=null,在SQL中:null與任何數(shù)相加都為null。(有點(diǎn)類似于Java中的字符串)

④關(guān)于null的處理

ifnull(列名,默認(rèn)值) ,如果列名為空,給它一個(gè)默認(rèn)值,圖中默認(rèn)值為0,這樣就能參與運(yùn)算了。

三、排序查詢及聚合函數(shù)

1排序查詢

order,訂單、排序的意思,在數(shù)據(jù)庫中order就是排序的意思,和前面我們學(xué)的sort是一樣的。

①根據(jù)score排序查詢

select * from+表名+order by+列名+desc

  • desc,在這里是降序的意思。

  • asc,即為升序。

②根據(jù)指定條件排序

現(xiàn)在只對(duì)男生排序,故加一個(gè)where條件判斷。

注意:where是緊接著from+表名后面的。

其中排序默認(rèn)是升序,所以可以省略不寫。

②根據(jù)年齡、分?jǐn)?shù)組合排序

多重排序,先根據(jù)前面的條件排序,再根據(jù)后面的條件排序。

2聚合函數(shù)

SQL語言中定義了部分的函數(shù),可以對(duì)查詢結(jié)果進(jìn)行操作,也就是聚合函數(shù)。

①統(tǒng)計(jì)數(shù)量

count,數(shù)數(shù)的意思,即統(tǒng)計(jì)表示數(shù)據(jù)數(shù)量。

  • count(*):*代表所有,即查詢所有數(shù)據(jù),結(jié)果為5。

  • count(score):score這一列因?yàn)橛幸恍袛?shù)據(jù)為null,所以不計(jì)算在內(nèi),

②統(tǒng)計(jì)班上的總分

sum,求和的意思。

  • sum(score):分?jǐn)?shù)這一列所有的數(shù)據(jù)求和。

  • sum(score+age):(分?jǐn)?shù)+年齡這兩列)所有的數(shù)據(jù)求和。

③統(tǒng)計(jì)班上的平均分

avg,求平均數(shù)的意思,很好理解。

  • avg(score):分?jǐn)?shù)這一列求平均值。

  • avg(score+age):分?jǐn)?shù)+年齡這兩列求平均值。

  • sum(score)/count(*):總分除以總?cè)藬?shù)求平均值。

這兩種的區(qū)別在于第一種如果數(shù)據(jù)為null,不加入運(yùn)算,第二種將nul的數(shù)據(jù)也加入運(yùn)算了。

④保留小數(shù)點(diǎn)數(shù)

round(avg(score),2);2,即表示保留小數(shù)點(diǎn)數(shù)為2位,可自行設(shè)點(diǎn)想要保留的小數(shù)點(diǎn)數(shù)。

此外,還有兩個(gè)聚合函數(shù):

  • max(score):求分?jǐn)?shù)這列的最大值。

  • min(score):求分?jǐn)?shù)這列的最小值。

用法和上述一樣,就不再贅述了。

再次強(qiáng)調(diào)

  • null是不參與運(yùn)算的。

  • 可以使用ifnull(列名,默認(rèn)值)給null設(shè)定一個(gè)默認(rèn)值。

四、分組查詢及查詢語句執(zhí)行順序

1分組查詢

group,分組的意思,關(guān)鍵單詞為group by。

①分男女組查詢平均分

根據(jù)性別gender分組查詢。

格式為:select+列名+from+表名+group by+列名

②根據(jù)特定條件分組查詢平均分

前面的學(xué)習(xí)也知道了,where后面專門是接查詢條件的,但是在分組查詢中一般用having代替,其放在group by后面。

2查詢語句執(zhí)行順序

用一個(gè)例子來說明執(zhí)行順序,如下圖:


①from+表名

這是第1步,表中的所有數(shù)據(jù)。

②where+指定條件

這是第2步,查詢出指定條件的數(shù)據(jù)。

其中起別名:as+別名

這是第2.5步,介于第1步和第2步之間。

所以where后不能接別名,因?yàn)閯e名都沒執(zhí)行。

③group by+列名

這是第3步,按照指定列名分組。

其中聚合函數(shù):avg(列名)

這是第3.5步,介于第3步和第4步之間。

所以分組不能接聚合函數(shù)。

④having+條件

這是第4步,所以having后的查詢條件,既可以有別名,也可以有聚合函數(shù)。

而where就不行,因?yàn)閣here執(zhí)行的太早了。

⑤select+查詢語句

這是第5步,查詢出對(duì)應(yīng)的數(shù)據(jù),也就是結(jié)果集。

⑥order by+列名+desc|asc

查詢語句是最后執(zhí)行的,所以也可以接別名。

面試題:where 和 having 的區(qū)別

  • having通常與group by結(jié)合使用。

  • where是在分組之前進(jìn)行過濾的,having 是在分組之后進(jìn)行過濾的。

  • having可以接聚合函數(shù)和別名,where都不可以,也就是說having查詢條件比where廣。

查詢時(shí),如非必要,用where的效率更高。

為什么?

where先執(zhí)行,先將數(shù)據(jù)篩選之后會(huì)減少計(jì)算量。

后續(xù)再進(jìn)行其他條件判斷,可以提高查詢效率。

最后

對(duì)這幾天知識(shí)點(diǎn)做一個(gè)總結(jié):

數(shù)據(jù)庫合集 【JavaWeb】61:數(shù)據(jù)記錄基本操作 【JavaWeb】60:數(shù)據(jù)表基本操作 【Javaweb】59:數(shù)據(jù)庫基本操作

謝謝你的觀看。

如果可以的話,麻煩幫忙點(diǎn)個(gè)贊,謝謝你。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多