今天是劉小愛自學(xué)Java的第62天。 感謝你的觀看,謝謝你。 話不多說,繼續(xù)數(shù)據(jù)庫的學(xué)習(xí):
比在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中有三種表示方式:
③查詢成績(jī)?cè)?0和90之間的數(shù)據(jù) 也就是80<=score<=90,在SQL中有兩種方式:
and,即并且的意思。 ④查詢成績(jī)?yōu)?8,95,100的同學(xué) 在SQL中有兩種方式:
or,即或者的意思。上述均為條件查詢,也就是用where來說明判斷條件,只不過條件中設(shè)計(jì)到了運(yùn)算。 二、模糊查詢、濾重和別名除了上述的基本查詢之外,還有模糊查詢: ①模糊查詢 like,像的意思,可以用來模糊查詢:
其中第一個(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
②根據(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ù)量。
②統(tǒng)計(jì)班上的總分 sum,求和的意思。
③統(tǒng)計(jì)班上的平均分 avg,求平均數(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ù):
用法和上述一樣,就不再贅述了。 再次強(qiáng)調(diào):
四、分組查詢及查詢語句執(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ū)別
查詢時(shí),如非必要,用where的效率更高。 為什么? where先執(zhí)行,先將數(shù)據(jù)篩選之后會(huì)減少計(jì)算量。 后續(xù)再進(jìn)行其他條件判斷,可以提高查詢效率。 最后對(duì)這幾天知識(shí)點(diǎn)做一個(gè)總結(jié): 謝謝你的觀看。 如果可以的話,麻煩幫忙點(diǎn)個(gè)贊,謝謝你。 |
|