您好,登錄后才能下訂單哦!
無論是面試過程中,還是未來工作中,SQL都是一定會(huì)考到和用到的。所以,在此對(duì)之前看過的一些SQL知識(shí)點(diǎn)進(jìn)行一下總結(jié)和記錄,算是起到一個(gè)筆記本的作用。沒有深入學(xué)習(xí)過SQL的和對(duì)SQL印象不太深的朋友可以看一下,起到一個(gè)快速使用SQL語句的作用(針對(duì)有一點(diǎn)SQL知識(shí)的人的)。
首先,SQL最基礎(chǔ)的就是語句的使用,SQL根據(jù)功能分為查詢語句、插入語句、修改語句和刪除語句,這里用到最多的便是查詢語句,首先便總結(jié)一下查詢語句的用法:
1.簡單查詢
(1).select name from table;
意思是在table這張表里查詢一個(gè)名為name的列,它會(huì)將表中name下的所有數(shù)據(jù)查詢出來。
(2).select id,name from table;
表示在table中查詢出id和name列下的所有數(shù)據(jù),兩個(gè)被查詢的列名之間用逗號(hào)分隔。
(3).select * from table;
*號(hào)表示所有,意思是查詢出table表中的所有內(nèi)容;
注:這樣查詢出的語句沒有過濾也沒有排序,是最簡單的查詢結(jié)果;SQL中不區(qū)分大小寫;且SQL語句可以分成多行寫,很多人認(rèn)為這樣更方便閱讀和調(diào)試,結(jié)尾要用“;”號(hào)。
2.不同值查詢
一個(gè)表中存儲(chǔ)的數(shù)據(jù)肯定不會(huì)全都不同,查詢出來的很多也都是相同的值,如果你不想顯示重復(fù)值的話,可以在查詢時(shí)使用“DISTINCT”關(guān)鍵字,作用是去重;
例:select distinct name from table;
意思查詢table表中的name一列,并把不出現(xiàn)重復(fù)后的結(jié)果顯示出來,比如一開始的查詢結(jié)果是 x,x,x,y,y,z,z,z,z,去重之后的結(jié)果就是x,y,z。
3.限制結(jié)果查詢
一般來說限制結(jié)果查詢會(huì)在分頁當(dāng)中用到,因?yàn)橄拗平Y(jié)果查詢的用處就是,讓查詢結(jié)果按你想要的行數(shù)顯示出來,只簡單介紹Oracle和MySQL的語句:
(1).select name from table where rownum<=5;
Oracle中使用rownum關(guān)鍵字表示結(jié)果限制;
(2).select name from table limit 5;
MySQL中使用limit關(guān)鍵字限制結(jié)果;
兩者都表示查詢table表中name列下的數(shù)據(jù),但只顯示前五行數(shù)據(jù)。
4.排序查詢
筆試中都會(huì)出到的升序降序問題,SQL可以根據(jù)不同的條件,按想要的方式對(duì)查詢結(jié)果進(jìn)行排列,默認(rèn)是升序排列,這里用到關(guān)鍵字“Order by”,且只是顯示結(jié)果改變,并未改變數(shù)據(jù)存放結(jié)構(gòu)。
select id,name from table order by name;
意思就是查找table表中id和name兩列的數(shù)據(jù)并按name的A-Z升序排列顯示。
select id,name from table order by name desc;
結(jié)果就是降序排列顯示,需要在order by的屬性后面加上關(guān)鍵字“desc”。
5.過濾數(shù)據(jù)查詢
數(shù)據(jù)庫表一般包含大量的數(shù)據(jù),很少需要檢索表中的所有行。通常只會(huì)根據(jù)特定操作或報(bào)告的需要提取表數(shù)據(jù)的子集。想要使用不同的條件,就需要使用到“where”關(guān)鍵字,在“where”后面加各式的條件以達(dá)到目的。
(1).select * from table where id=1;
意思是查詢出table中id列為1的這一行的所有數(shù)據(jù)。另外還有大于(>)、小于(<)、不等于(!=)這一系列操作符。
(2).select * from table where price between 5 and 10;
意思是查詢table中 價(jià)格在5到10之間的所有數(shù)據(jù),用“between”關(guān)鍵字和“and” 一起使用,多條件查詢也可以用“and”、“or”連接查詢條件,表示“并且”和“或者”。
(3).select name, price from table where (id = '1' or id = '01') and price>=10;
意思是查詢出table表中id為1或者01 且價(jià)格大于等于10的數(shù)據(jù)的name和price;這里涉及到優(yōu)先級(jí),and的優(yōu)先級(jí)要高于or,所以要加括號(hào),括號(hào)的優(yōu)先級(jí)更高,不然結(jié)果就只會(huì)顯示價(jià)格高于10的情況。
(4).select id,name from table where name like "f%";
意思是查詢table表中name以“f”開頭的所有行的id和name數(shù)據(jù)。 這里用到了“l(fā)ike”關(guān)鍵字和通配符“%”,通配符可以表示其后的所有字符,若是“%f%”則代表name中包含“f”的意思。"f%y"代表“f”開頭“y”結(jié)尾的意思。
(5).select id as idd from table order by id;
意思是查詢table表中的id并升序排列且查詢出的結(jié)果賦予一個(gè)新的列名為“idd”,可以用“as”關(guān)鍵字實(shí)現(xiàn),表示另命名。
6.聚集函數(shù)查詢
聚集函數(shù)分為Avg()、Max()、Min()、Sum()、Count()分別表示返回某列的平均值、返回某列的最大值、返回某列的最小值、返回某列的值之和、返回某列的行數(shù)。
(1).select avg(price) as new_price from table;
意思是返回table表中 價(jià)格屬性的平均值并另命名為new_price。
(2).select count(*) as new from table;
意思是對(duì)table表中的行數(shù)進(jìn)行統(tǒng)計(jì),不管表中包含空值還是非空,而count(name),表示統(tǒng)計(jì)name列的行數(shù),但是忽略了null值。其余三個(gè)函數(shù)用法相同,這里就不一一寫明。
7.分組數(shù)據(jù)查詢
使用分組可以將數(shù)據(jù)分為多個(gè)組,對(duì)每個(gè)組進(jìn)行運(yùn)算更方便。
(1).select name, count(*) as num from table GROUP BY name;
意思是對(duì)table中的name進(jìn)行分組和計(jì)算,例如
name num
A 3
B 2
C 4
可以看到他對(duì)name為ABC的數(shù)據(jù)行進(jìn)行了統(tǒng)計(jì)并分組。
(2).select id, COUNT(*) AS orders FROM table GROUP BY id HAVING COUNT(*) >= 2;
意思是對(duì)table中的id進(jìn)行分組,并統(tǒng)計(jì)每組數(shù),這里也用到了過濾數(shù)據(jù),要求統(tǒng)計(jì)數(shù)目大于等于2,這里的關(guān)鍵字HAVING可以代替“where”的作用,但是平常應(yīng)使用“where”,HAVING是結(jié)合Group By使用的。
8.子查詢
可以把select的查詢結(jié)果用于另一條select的where子句中,以實(shí)現(xiàn)一條語句直接完成多條件查詢的功能。
SELECT cust_id FROM table WHERE order_num IN (SELECT order_num FROM Order WHERE prod_id = '01’);
可以拆分來看,先看括號(hào)里是查詢order表中的order_num,條件是id為01;而括號(hào)外的意思是查詢table中的id,條件是num為什么,這里num為括號(hào)里查詢到的結(jié)果。用關(guān)鍵字“IN”來連接子句,執(zhí)行了兩個(gè)查詢操作,同樣可以在括號(hào)里再嵌套一個(gè)IN(),里面同樣可以再添加查詢語句。
9.表連接
SQL 最強(qiáng)大的功能之一就是能在數(shù)據(jù)查詢的執(zhí)行中聯(lián)結(jié)(join)表。聯(lián)結(jié)是利用 SQL 的 SELECT 能執(zhí)行的最重要的操作,很好地理解聯(lián)結(jié)及其語法是學(xué)習(xí) SQL 的極為重要的部分。
SELECT vend_name, prod_name FROM Vendors, Products WHERE Vendors.vend_id = Products.vend_id;
意思是查詢Vendor和Product表中的兩個(gè)name列,且兩表的id相等。
目前為止使用的聯(lián)結(jié)稱為等值聯(lián)結(jié)(equijoin),它基于兩個(gè)表之間的相等測試。這種聯(lián)結(jié)也稱為內(nèi)聯(lián)結(jié)(inner join)。其實(shí),可以對(duì)這種聯(lián)結(jié)使用稍微不同的語法,明確指定聯(lián)結(jié)的類型。另外還有左外連接等。
當(dāng)下,是我對(duì)于SQL查詢語句的一個(gè)總結(jié),并不是相當(dāng)細(xì)致和深入,但也算是對(duì)查詢語句的一個(gè)小的學(xué)習(xí)筆記,都是我一點(diǎn)一點(diǎn)打出來的,也算是原創(chuàng)吧,希望可以幫助到我自己和其他看到的人。另外插入語句和刪除、更新語句之后有時(shí)間會(huì)再寫一篇,2016年12月3日。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。