? ? ? ?本記錄旨在記錄以及回憶常用的Sql語句乙埃,關(guān)鍵字(太基礎(chǔ)如select就算了)蝴猪,以數(shù)據(jù)分析為根本目的,服務(wù)于分析膊爪,因此需要常做更新,切勿死磕一點(diǎn)嚎莉,木有意義米酬,會(huì)用即可;還有一點(diǎn)趋箩,就是記性好像不怎么好赃额,所以需要這么一個(gè)隨筆來進(jìn)行記錄。一下內(nèi)容大部分都取自《sql必知必會(huì)》叫确,做一個(gè)總結(jié)跳芳。
? ? ? ? 關(guān)于環(huán)境的搭建問題,僅僅是練習(xí)熟悉sql的話竹勉,不需要使用可視化工具飞盆,搭建完整的環(huán)境(如安裝mysql,SQLyog等)次乓,直接使用PHPstudy這個(gè)工具的數(shù)據(jù)庫工具即可吓歇,快速綠色,敲命令行完成練習(xí)票腰,足夠城看。
? ? ? ? 關(guān)于SQL語句通用性的問題,不同的數(shù)據(jù)庫杏慰,在某些功能上會(huì)有不同的sql實(shí)現(xiàn)方法测柠,當(dāng)前練習(xí)的版本僅僅是以mysql為基準(zhǔn),所以以下語句都是在mysql 5.5 運(yùn)行練習(xí)缘滥。如果語句不通用轰胁,則會(huì)標(biāo)注出來
開始正題 Let`s do it !:
1、檢索不同的值DISTINCT
輸入:
SELECT DISTINCT vend_id
FROM Products;
輸出:
vend_id
----------
BRS01
DLL01
FNG01
由此可見它的作用就是檢索出選中列中的所有不同的行朝扼,很簡單软吐,但有一點(diǎn)需要注意:
注意:不能部分使用 DISTINCT
DISTINCT作用于select后的所有列,不僅僅是緊跟著 DISTINCT后的那一列吟税,例如:
SELECT DISTINCT vend_id, prod_price ?則得出的結(jié)果如下:
2凹耙、輸出限定數(shù)目的結(jié)果 LIMIT(只適用于mysql DB)
兩種語句方式:
SELECT prod_name ? ? ?或者 ? ? ? ? ? ? ?? SELECT prod_name?
FROM Products ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? FROM Products
LIMIT 4 OFFSET 3; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? LIMIT 3, 4;
以上兩種方法得到的結(jié)果都是:
LIMIT 4 OFFSET 3 是指輸出四行肠仪,從行號(hào)為3的行開始肖抱;
LIMIT 3, 4; 是指從行號(hào)為3的行開始,輸出四行异旧;(意義相同意述,這句為簡化版本)
PS:行號(hào)是從0開始的
3、對(duì)所選擇的列進(jìn)行排序 ORDER BY
1)ORDER BY一定是SELECT語句中的最后一個(gè)語句,此處解釋一下:SELECT語句就是指的 SELECT....FROM....語句荤崇,ORDER BY使用的時(shí)候必須緊跟在這條語句之后拌屏,之后在使用其他語句,比如LIMIT等术荤;但如果出現(xiàn)了WHERE語句倚喂,ORDER BY就要位于WHERE之后使用
如:
SELECT prod_id, prod_price, prod_name
FROM Products
LIMIT 3, 4
ORDER BY 2, 3;
就是錯(cuò)誤的瓣戚!
2)默認(rèn)的的排序順序是升序ASC(或ASCENDING)端圈,數(shù)字的序低于字母(先數(shù)字后字母)
3)降序是DESC(或DESCENDING)
4)多個(gè)列排序:
SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY prod_price DESC, prod_name;
以上是對(duì)prod_price進(jìn)行降序,之后再對(duì)prod_name升序(只有在prod_price中出現(xiàn)相同的值時(shí)子库,才會(huì)開始對(duì)prod_name升序排序舱权;不存在相同時(shí),就按著prod_price降序排序)仑嗅,如:
5)使用相對(duì)位置來進(jìn)行排序:
SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY 2?DESC,?3;
此條語句執(zhí)行結(jié)果和 4)結(jié)果相同宴倍,相對(duì)位置是指SELECT所選擇的列的相對(duì)書寫位置
6)關(guān)于大小寫的排序區(qū)別:
就如A和a該如何排序,這個(gè)就和數(shù)據(jù)庫的具體設(shè)置有關(guān)了仓技,找管理員啊楚,在此就不深究,遇到問題再解決
4浑彰、關(guān)于WHERE語句的一些總結(jié):
1)其實(shí)以上列出的有些操作符是冗余的恭理,如"<>",就可以使用" != "來代替郭变, " !< "相當(dāng)于" >= "颜价,并非所有的DB都支持這些操作符!
2)對(duì)于值是字符串的列诉濒,需要使用單引號(hào)來限定周伦。
SELECT vend_id, prod_name
FROM Products
WHERE vend_id != 'DLL01';
3)取范圍值BETWEEN
SELECT prod_name, prod_price
FROM Products
WHERE prod_price BETWEEN 5 AND 10;
此處需要注意,是包含5和10的未荒,也就是包含開始和結(jié)束值专挪!
4)匹配空值NULL要使用 IS NULL 語句:
空值不代表值為0,是指的沒有填充值片排!
SELECT cust_name
FROM CUSTOMERS
WHERE cust_email IS NULL;
5)WHERE語句中的 AND 和 OR:
此處一定要注意結(jié)合順序寨腔,AND結(jié)合優(yōu)先級(jí)高于OR,也就是先和計(jì)算 AND率寡,之后計(jì)算 OR
SELECT prod_name, prod_price
FROM Products
WHERE vend_id = 'DLL01' OR vend_id = 'BRS01'
? ? ? ? ? ? ? ?AND prod_price >= 10;
SELECT prod_name, prod_price
FROM Products
WHERE (vend_id = 'DLL01' OR vend_id = 'BRS01')
? ? ? ? ? ? ? ?AND prod_price >= 10;