sql 基礎知識

sql 基礎知識

不要極至最求一條sql語句搞定一切,可合理拆分爲多條語句sql

1. sql 變量定義與賦值

  1. Sql 語句中,直接在SELECT使用@定義一個變量,如:[@a](https://my.oschina.net/a8856225a)express

  2. 使用:=來給變量賦值,:[@a](https://my.oschina.net/a8856225a):=123,則變量a的值爲123。函數

    SELECT @a := id FROM table_a
    SELECT @a := 1 FROM table_a
  3. 同時定義多個變量,須要在子語句中定義spa

    SELECT @a := 1 FROM table_a,(SELECT @b := 2,@c := 3) as rcrcia
  4. 例子.net

    根據子查詢結果,將主查詢結果進行排序code

    # 使用 find_in_set 查詢ID排序位置
    select id, find_in_set(id, @rank) `rank`
    from user,
    			# 聲明定義變量 賦值爲 子查詢結果 結果爲 '3,1,31'
         (SELECT @rank := (SELECT group_concat(content_id) as content_id
                        FROM `collect_records`
                        WHERE user_id = 1
                        order by creation_time desc)) as indexRank
    # 查詢符合子查詢結果的數據                    
    where find_in_set(id, @rank) > 0
    # 根據排序值排序
    order by `rank`;

2.sql if 表達式

if(A,B,C)表示,若是A條件成立,那麼執行B,不然執行C排序

@abc := if(2>1,100,200)
> @abc = 100

3.sql case...when...then

  1. CASE 後面不帶表達式ci

    CASE WHEN expression THEN 操做1
    
         WHEN expression THEN 操做2
    
         .......
    
         ELSE 操做n
    
    END
  2. CASE 後面帶表達式,此時WHEN 後面的則是該表達式可能的值字符串

    CASE expression
    
    WHEN  值1 THEN  操做1
    
    WHEN  值2 THEN  操做2
    
         .......
    
        ELSE 操做n
    
    END

注:自上而下,凡是走了其中一個when或者是走了else了,其餘的都再也不走了。get

4. group_concat()

請注意,該函數有拼接字符串最大長度限制。而且,與 limit不能共存。

相關文章
相關標籤/搜索