溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

SQL語句小總結(jié)

發(fā)布時(shí)間:2020-07-12 13:48:45 來源:網(wǎng)絡(luò) 閱讀:426 作者:Wmlllll 欄目:數(shù)據(jù)庫

   無論是面試過程中,還是未來工作中,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日。


向AI問一下細(xì)節(jié)

免責(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)容。

sql
AI