成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

1 小時 SQL 極速入門(一)

izhuhaodev / 2706人閱讀

摘要:結果中的訂單類型列已經(jīng)被去重了。刪除數(shù)據(jù)我們刪除剛才加入的一條數(shù)據(jù)運行后,訂單號為的訂單就被刪除了,時同樣要寫好條件,如果沒有條件,會刪除表中所有數(shù)據(jù)。

前幾天,我在論壇溜達??吹揭粋€人發(fā)帖說

做了6年的企業(yè)級開發(fā),總是被互聯(lián)網(wǎng)行業(yè)的人認為沒技術含量,不就是CRUD么
先解釋下 CRUD 是什么。CRUD 就是我們常說的增刪改查(Create,Retrieve,Update,Delete)

其實,對這個問題,我也思考過。我們所有的業(yè)務流程,最終都會抽象出數(shù)據(jù)模型,保存到數(shù)據(jù)庫中。把業(yè)務之間的聯(lián)系抽象成數(shù)據(jù)庫中表與表,字段與字段之間的聯(lián)系。實際上,企業(yè)的各種系統(tǒng),在技術層面上確實是在 CRUD。

不過話說回來了,互聯(lián)網(wǎng)的系統(tǒng)不是 CRUD 嗎?只不過 CRUD 的姿勢不同罷了,互聯(lián)網(wǎng)可能是面對高并發(fā)的 CRUD, 我們是面對的是復雜業(yè)務流程的 CRUD。這些業(yè)務邏輯還需要一定的行業(yè)積淀才能捋清楚。所以在企業(yè)級開發(fā)上業(yè)務和技術基本是五五開,業(yè)務比重甚至要大于技術。

所以,今天我們就花很短的時間,來學學簡單的 SQL.了解下 CRUD 的姿勢。
假如我們有下面一個訂單表 ORDER_HEADER,不要在意表里的數(shù)據(jù),為了方便說明,瞎填的。

查詢

查詢是我們平日使用最多的,下面著重說一下:
查詢使用 SELECT 關鍵字,基本結構如下

SELECT <列名> FROM <表名> WHERE <條件>

假如我們想查找所有已經(jīng)完工的訂單信息,那么 SQL 怎么寫呢?

SELECT * FROM order_header WHERE order_status = "完工"

執(zhí)行后會看到我們需要的結果

SELECT * 代表查詢所有列,一般我們會關注我們需要的字段,比如我們要找到訂單類型為 1 的并且完工的訂單號,我們可以這么寫

SELECT order_no FROM order_header WHERE order_status = "完工" AND order_type = 1

我們可以看到只有下面兩個符合條件的訂單號被選中。在寫 SQL 中我們要盡量避免 SELECT * ,我們需要哪個字段就取哪個字段,可以節(jié)省 SQL 查詢的時間。

如果要查詢訂單類型為 1 的或者處于下達狀態(tài)的訂單,SQL 怎么寫呢?

SELECT order_no FROM order_header WHERE order_type = 1 OR order_status = "下達"

如果要查找開工,下達和完工狀態(tài)的訂單,我們可以用 IN 關鍵字

SELECT
    order_no,
    order_type,
    order_status
FROM
    order_header
WHERE
    order_status IN ( "開工", "完工", "下達" )

除了 IN 我們可以使用 LIKE 進行模糊查詢,比如我們要查詢訂單狀態(tài)中包含 “工” 的所有訂單

SELECT order_no FROM order_header WHERE  order_status LIKE "%工%"

這里的 "%" 表示通配符,"%工"表示以工結尾的所有匹配,"工%"表示以工開頭的所有匹配。
此外,我們可以用 NOT IN , NOT LIKE 來取相反的邏輯。

通過 GROUP BY 可以進行分組,比如我們按照訂單狀態(tài)來分組,就可以很方便的查看當前有幾種狀態(tài)的訂單

SELECT order_status FROM order_header GROUP BY order_status

結果如下圖

如果我們想看到每個分組中有多少訂單,那個我們可以使用 COUNT() 函數(shù)

SELECT order_status, COUNT(1) FROM order_header GROUP BY order_status

結果如下圖,可以看到每個分組中訂單的數(shù)量。除了COUNT(),還有 MAX(),MIN(),SUM()等函數(shù)

如果我們只想看到數(shù)量大于 2 的分組,該怎么寫?

SELECT order_status, COUNT(1) FROM order_header GROUP BY order_status HAVING COUNT(1) > 2

可以看到,只有數(shù)量大于2的分組被查到了。

如果僅僅想去重,比如想知道總共有幾種訂單類型,那么我們只需要對此列用 DISTINCT 即可。

SELECT DISTINCT order_type FROM order_header

結果中的訂單類型列已經(jīng)被去重了。

CASE WHEN ,有時我們會需要簡單的判斷邏輯,就可以用 CASE WHEN 了。比如我們想讓 訂單類型為1 的表示生產(chǎn)訂單,訂單類型為2 的表示更改訂單,訂單類型為3 的表示廢棄訂單。那么我們可以這么寫

SELECT
    order_no,
    order_type,
    order_status,
CASE
    WHEN order_type = 1 THEN "生產(chǎn)訂單"
    WHEN order_type = 2 THEN "更改訂單"
    WHEN order_type = 3 THEN "廢棄訂單"
    ELSE "未知類型"
    END AS type_desc
FROM
order_header

結果如下圖

子查詢,有時候我們需要從一個結果集中再次查找,就會用到子查詢。比如下面這樣寫

SELECT
    order_no,
    type_desc
FROM
    (
SELECT
    order_no,
    order_type,
    order_status,
CASE
    WHEN order_type = 1 THEN "生產(chǎn)訂單"
    WHEN order_type = 2 THEN "更改訂單"
    WHEN order_type = 3 THEN "廢棄訂單"
    ELSE "未知類型"
    END AS type_desc
FROM
    order_header
) t

下節(jié)課我們說一下 連接查詢和常用到的分析函數(shù),在企業(yè)中,單表查詢情況是很少的,要關聯(lián)查詢。

插入數(shù)據(jù)

插入數(shù)據(jù)我們使用 INSERT 語句

INSERT INTO order_header ( order_no, order_type, order_status, order_date, createdon )
VALUES
    ( "2018102109", 2, "下達", sysdate( ), sysdate( ) )

看到,最下面就是我們新插入的一行

更新數(shù)據(jù)

更新數(shù)據(jù)使用 UPDATE 語句,我們更新一下剛才插入的數(shù)據(jù)的訂單號

UPDATE order_header SET order_no = "112109" WHERE order_no = "2018102109"

我們把 訂單號為"2018102109"的一行數(shù)據(jù)更新為了"112109",在update時一定要寫好 WHERE 條件,如果沒有 WHERE 條件,會更新表中所有數(shù)據(jù)。

刪除數(shù)據(jù)

我們刪除剛才加入的一條數(shù)據(jù)

DELETE FROM order_header WHERE order_no = "112109"

運行后,訂單號為"112109"的訂單就被刪除了,DELETE 時同樣要寫好 WHERE 條件,如果沒有 WHERE 條件,會刪除表中所有數(shù)據(jù)。

下節(jié)重點說說 多表連接,常用分析函數(shù)。不要走開哦。

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/17824.html

相關文章

  • 1 小時 SQL 極速入門(三)——分析函數(shù)

    摘要:小時極速入門前面兩篇我們從的最基礎語法講起,到表聯(lián)結多表查詢。大家可以點擊鏈接查看小時極速入門一小時極速入門二今天我們講一些在做報表和復雜計算時非常實用的分析函數(shù)。就會得到每個分組內的按照訂單數(shù)量排序的行號。 1 小時 SQL 極速入門 前面兩篇我們從 SQL 的最基礎語法講起,到表聯(lián)結多表查詢。大家可以點擊鏈接查看1 小時 SQL 極速入門(一)1 小時 SQL 極速入門(二)今天我...

    cyixlq 評論0 收藏0
  • 1 小時 SQL 極速入門(三)——分析函數(shù)

    摘要:小時極速入門前面兩篇我們從的最基礎語法講起,到表聯(lián)結多表查詢。大家可以點擊鏈接查看小時極速入門一小時極速入門二今天我們講一些在做報表和復雜計算時非常實用的分析函數(shù)。就會得到每個分組內的按照訂單數(shù)量排序的行號。 1 小時 SQL 極速入門 前面兩篇我們從 SQL 的最基礎語法講起,到表聯(lián)結多表查詢。大家可以點擊鏈接查看1 小時 SQL 極速入門(一)1 小時 SQL 極速入門(二)今天我...

    WilsonLiu95 評論0 收藏0
  • 1 小時 SQL 極速入門(三)——分析函數(shù)

    摘要:小時極速入門前面兩篇我們從的最基礎語法講起,到表聯(lián)結多表查詢。大家可以點擊鏈接查看小時極速入門一小時極速入門二今天我們講一些在做報表和復雜計算時非常實用的分析函數(shù)。就會得到每個分組內的按照訂單數(shù)量排序的行號。 1 小時 SQL 極速入門 前面兩篇我們從 SQL 的最基礎語法講起,到表聯(lián)結多表查詢。大家可以點擊鏈接查看1 小時 SQL 極速入門(一)1 小時 SQL 極速入門(二)今天我...

    zhangfaliang 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<