SQL常見語法

1. 提要

筆者作為一名互聯(lián)網(wǎng)商業(yè)數(shù)據(jù)分析師,SQL是日常工作中最常用的數(shù)據(jù)提取&簡單預處理語言。因為其使用的廣泛性和易學程度也被其他崗位比如產品經(jīng)理、研發(fā)廣泛學習使用,本篇文章主要從語法角度講解SQL語言常用的點。

2. SQL語法特點

SQL語言的幾個特點:
1 永遠第一個出現(xiàn)的是關鍵字
2 以分號結尾,使多個查詢可并列
3 SQL不區(qū)分大小寫
4 日常使用過程中,90%的場景語句都是以經(jīng)典結構構成:
select a.* from a where …
一般較為規(guī)范的復雜SQL語句也會在嵌套中凸出這種格式

3. SQL語法精要——常用操作符


3.1 表層面的操作

表的創(chuàng)建

CREATE TABLE是常規(guī)操作

CREATE TABLE CUSTOMERS(
   ID   INT              NOT NULL,
   NAME VARCHAR (20)     NOT NULL,
   AGE  INT              NOT NULL,
   ADDRESS  CHAR (25) ,
   SALARY   DECIMAL (18, 2),       
   PRIMARY KEY (ID)
);

表的修改

ALTER TABLE的用法是在現(xiàn)有的列表添加刪除或者修改列

ALTER TABLE table_name ADD column_type;

表的刪除

DROP TABLE是常規(guī)操作,從一般習慣上,很多日常刷新的表都會以drop和create開頭

DROP TABLE IF EXISTS table;

列的插入

INSERT INTO table_name (column1,column2……)
values (value1. value2……);

列的更新

WHERE子句指定哪些記錄需要更新。如果省略WHERE子句,所有記錄都將更新

UPDATE table_name
SET column1=value1, column2=value2,...
WHERE CONDITION;



3.2 篩選可加上的限制

去重:DISTINCT

SELECT  distinct column1,column2…… 
FROM table_name
where condition1 OR condition2 OR condition3;

空值:NULL

SELECT column_names
FROM table_name
WHERE column_name IS NULL;

有限數(shù)目:LIMIT

在MySQL和Oracle等不同的數(shù)據(jù)庫有細微的差別

SELECT column_names
FROM table_name
LIMIT number;

在某表內:IN

IN運算符允許在WHERE子句中指定多個值或者表,一般好處是可以限制表的范圍,從而提高語句效率

SELECT column_names
FROM table_name
WHERE column_name IN (SELECT column from table_w3c where...);

子查詢語句:一般與IN使用較多

子查詢(Sub Query)或者說內查詢(Inner Query),即在WHERE中再嵌套一層查詢

SELECT column_name [, column_name ]
FROM   table1 [, table2 ]
WHERE  column_name OPERATOR
      (SELECT column_name [, column_name ]
      FROM table1 [, table2 ]
      [WHERE]);

在某范圍內:BETWEEN

常在where之后使用,限定特定范圍

SELECT column_name
FROM tabl_name
WHERE column_name BETWEEN values and value2;



3.3 特殊查詢目的

拼接:UNION ALL

UNION ALL允許不同值,但是UNION只會選擇一個值

SELECT column_name FROM table1
UNION
SELECT column_name FROM table2;

模糊匹配:LIKE

有兩個通配符常與LIKE運算符一起使用
% - 百分號表示零個,一個或多個字符
_ - 下劃線表示單個字符

SELECT column1,column2,...
FROM table_name
WHERE column LIKE pattern;`
`SELECT * FROM customer
WHERE city LIKE 'L_n_on';

排序:ORDER BY

即按照ORDER BY后面的列名依次排序,默認從小到大,倒序即加上DESC

SELECT column_name,column_name
FROM table_name
ORDER BY column_name,column_name ASC|DESC;
分類計算相關函數(shù)

基本上你可以想到的都有包括,常用的有sum(),count(),avg(),max(),min()等;
這些函數(shù)單獨使用也可,但是一般group by存在的地方一定會有

SELECT  SUM(column_name)
FROM table_name

分類計算:GROUP BY

按照某列去計算,GROUP BY后面跟著的即是類別

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name; 

分類后限制條件:HAVING

比如需要聚合出某信息后,再根據(jù)聚合出的信息篩選,一般使用HAVING
WHERE 子句對被選擇的列施加條件,而 HAVING 子句則對 GROUP BY 子句所產生的組施加條件

SELECT COLUMN1
FROM TABLE1
WHERE [CONDITION]
GROUP BY [CONDITIONS]
ORDER BY COLUMN1;



3.4 表的關聯(lián)

JOIN語句

JOIN語句是SQL中用的最多寫法,只要有多張表,必定設計到表的關聯(lián);也是較容易出錯的一個地方,常見的JOIN方法如下:

INNER JOIN:返回兩個表里面的匹配值
LEFT JOIN:左表為基表
RIGHT JOIN:右表為基表
FULL JOIN:存在于任意一表即返回

SELECT Orders.orderID,Customer.CustomerName,Order.OrderDate
FROM Orders
INNER JOIN Customers
ON ORDERS.CustomerID=Customers.CustomerID;



3.5 行的分類排序

PARTITION

這個詞非常重要,常常是初級入門者和熟練使用者的區(qū)分,市面上90%所謂較難的SQL題也可以用此語法配合解開
簡單講其功能即分類排序:按照A累計進行分區(qū),按照B進行排序

***() over (partition by A order by B)

***處可以用不同的語法
區(qū)別如下:

rank() over

查出指定條件后進行一個排名,但是有一個特點。假如是對學生排名,那么實用這個函數(shù),成績相同的兩名是并列;

dense_rank() over

和rank() over的區(qū)別在于,兩名學生的成績并列以后,下一位同學并不空出并列所占的名次;

row_number() over

它和上面兩種的區(qū)別就很明顯了,這個函數(shù)不需要考慮是否并列,哪怕根據(jù)條件查詢出來的數(shù)值相同也會進行連續(xù)排名

實操中視情況選用,會達到不同的效果

與其他計算方程的組合

partition與計算方程時,作用類似于group by,但是使用很少

count() over(partition by ... order by ...)

求分組后的總數(shù)。

max() over(partition by ... order by ...)

求分組后的最大值

min() over(partition by ... order by ...)

求分組后的最小值

avg() over(partition by ... order by ...)

求分組后的平均值

lag() over(partition by ... order by ...)

取出前n行數(shù)據(jù)

lead() over(partition by ... order by ...)

取出后n行數(shù)據(jù)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容