SQL基本操作(工作中夠用了)


以下文章內容都是我自己從平時學習SQL語言時整理而來,寫這篇文章是希望我或大家在使用能更方便的查詢。
如果有不完整或不正確的地方請大家指出~謝謝大家

基本SQL操作

創建數據庫

CREATE DATABASE DB_name

插入數據

INSERT INTO DB_name   
VALUE{value1,value2}

更新數據

UPDATE table_name
SET Age=11
WHERE ID='123'

Alter

Alter 是不對表格本身內容修改的,對表格框架修改。

ALTER table_name
ADD state VARCHAR(2)  #增添新列

ALTER table_name
DROP COLUMN state    #刪除列

ALTER table_name
MODIFY id INT       #把id列改成數字類型

ALTER table_name    #修改列名
CHANGE 'id' 'student_id' VARCHAR(5)

邏輯運算符

1.LIKE
WHERE url LIKE '%google%' #字符串匹配,在url中尋找中間字符串為google的url,%代表0或多個字符

2.IN
WHERE id IN (1001,1002) #表示尋找id為1001,1002的行

3.NOT
NOT 與 LIKE IN連用,表示否定

主鍵(PK): 表中唯一的一列,這一列中不可重復。 標志列。
外鍵(FK):外鍵是另一個表的主鍵
注意:兩個表就是通過主外鍵進行連接。

JOIN

1. 多表鏈接:
INNER JOIN:

 FROM A
 JOIN B
 ON  A.FK =B.PK  #合集包括A、B表單共有的

LEFT JOIN:

 FROM A
 LEFT JOIN B
 ON  A.FK =B.PK  #合集只包括A、B表單共有的,和A表中沒在B中匹配到的行

RIGHT JOIN:

 FROM A
 RIGHT JOIN B
 ON  A.FK =B.PK  #合集只包括A、B表單共有的,和B表中沒在A中匹配到的行

Union:
豎向連接兩張表,兩張表的列數必須相同。

2. 別名:
FROM tablename AS t1
JOIN tablename2 AS t2 # AS可省略

3. 外連接 OUTER JOIN = FULL OUTER JOIN :
外連接,它將返回內連接的結果,以及被連接的表格中沒有匹配的行。

4. ON子句
ON A.FK=B.PK #A表的外鍵和B表的主鍵

聚合函數

  1. NULL
    NULL是一種數據類型,表示 SQL 中沒有數據;
    查詢時:WNERE name IS NULL #查詢name為NULL值的行

  2. COUNT()
    COUNT(*) #一行記錄中只要一列有數據,則計數
    COUNT(COLUMN_name) #空值不計數

  3. SUM()
    sum(col_name) #垂直聚合,只對數值進行計算總和,SUM 將忽略 NULL 值,當做0處理

  4. MAX() MIN()
    MAX() #返回最大值
    MIN() #返回最小值
    它們都可以用在非數字列上。MIN 將返回最小的數字、最早的日期或按字母表排序的最之前的非數字值,具體取決於列類型

  5. AVG()
    AVG() #返回平均值,只對值列;忽略分子和分母中的 NULL 值;

GROUP BY函數

GROUP BY() #在使用聚合函數時,對關鍵列進行分組;如果SELECT語句中有字段沒進行聚合,則必須寫入GROUP BY函數
GROUP BY 始終在 WHERE 和 ORDER BY 之間

DISTINCT函數

DISTINCT 看做僅返回特定列的唯一值的函數 ?后面的行會怎么出現

HAVING()

HAVING SUN(money)>10000 # 過濾聚集列,當篩選條件有聚合函數時,用HAVING

日期時間函數

DATE_TRUNC:SELECT DATE_TRUNC('month',DATE) (如果數據2015.01~2017.12,行會把每年的每月都列出來) 使你能夠將日期截取到日期時間列的特定部分。常見的截取依據包括日期、月份 和 年份。

DATE_PART: SELECT DATE_PART('month',DATE) (如果數據2015.012017.12,行只會列出0112個月份,但每個月份是包含所有年的)可以用來獲取日期的特定部分,但是注意獲取 month 或 dow 意味着無法讓年份按順序排列。而是按照特定的部分分組,無論它們屬於哪個年份。

CASE 語句

CASE WHEN condition THEN result #進行條件選擇,分情況生成新列
ELSE result END ;
注意:
1) CASE 語句始終位於 SELECT 條件中。
2) CASE 必須包含以下幾個部分:WHEN、THEN 和 END。ELSE 是可選組成部分,用來包含不符合上述任一 CASE 條件的情況。
3)你可以在 WHEN 和 THEN 之間使用任何條件運算符編寫任何條件語句(例如 WHERE),包括使用 AND 和 OR 連接多個條件語句。
4)你可以再次包含多個 WHEN 語句以及 ELSE 語句,以便處理任何未處理的條件。

總體順序:

  SELECT
        CASE WHEN condition THEN result
        ELSE result END ;
  FROM
  JOIN
  ON
  WHERE
  GROUP BY
  HAVING      #有WHERE時不需要用HAVING
  ORDER BY
  LIMIT

高級SQL語句

子查詢

就是查詢語句嵌套查詢語句
格式

SELECT *
FROM (SELECT id,channel, COUNT(*) as events
      FROM web_events
      GROUP BY 1,2
      ORDER BY 3 DESC) sub
GROUP BY channel
ORDER BY 2 DESC;

注意:在條件語句中編寫子查詢時,不能包含別名。

WITH語句

把要嵌套的查詢語句先定義在開頭,后面直接帶入

WITH table1_name AS (SELECT *
                      FROM 1 ),
     table2_name AS (SELECT *
                      FROM 2)

SELECT  *
FROM table1
JOIN table2
ON   table1.id=table2.id

注意:在使用 WITH 創建多個表格時,需要在每個表格后面加一個逗號,但是在引向最終查詢的最后一個表格后面不需添加

SQL數據清理

1.清理和重新整理混亂的數據。
  1. LEFT(): left函數可以從字符串左側輸出一定數量的字符 。

  2. RIGHT(): right函數則是從右側 。

  3. LENGTH(): 獲取字符串的長度。

  4. POSITION():獲取字符和列,並提供該字符在每行的索引。第一個位置的索引在 SQL 中是1
    例:POSITION(',' IN city_state) 獲取逗號的索引。

  5. STRPOS(): 和 POSITION 提供的結果相同,但是語法不太一樣.
    例:STRPOS(city_state, ‘,’)

  6. LOWER(): 把字符串全變成小寫

  7. UPPER(): 把字符串全變成大寫

  8. CONCAT(first_name, ' ', last_name):拼接兩列字符串。
    或者使用雙豎線:first_name || ' ' || last_name, 也可以達到相同效果。
    注意:POSITION 和 STRPOS 都區分大小寫,因此查找 A 的位置與查找 a 的結果不同。

2.將列轉換為不同的數據類型。
  1. TO_DATE:將英文月份改成數字,DATE_PART('month', TO_DATE(month, 'month'))
    例:將'JULY' 改成 '6'

  2. CAST(): 將拼接成的字符串'2014-9-19' 變成時間類型'2014-09-19'.

  3. :: :兩個冒號是對數據列轉變數據類型。
    例 age::INT,將age字符串類型轉換成數字類型

3.處理 NULL 的技巧
  1. COALESCE():COALESCE來處理NULL值,COALESCE('name','0')把name列中空值變成0
    這樣 COUNT()、AVGAGE()函數就可以包含其計算。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM