SQL函數及總結

1.MAX()函數==>返回所選列的最大值

--MAX語法

SELECT MAX(column_name)
FROM table_name
WHERE condition;

--eg:
SELECT
    MAX(user_age)
FROM
    `table1`;

2.MIN()函數==>返回所選列的最小值
(用法同MAX)

3.COUNT()函數

--①COUNT(column_name)語法==>返回所選列的值的個數(不包括null)
(用法同MAX)

--②COUNT(*)語法==>返回表中數據的條數
SELECT COUNT(*)FROM table_name;

--③COUNT(DISTINCT column_name)語法==>返回指定列的不同值的數目
SELECT COUNT(DISTINCT column_name) FROM table_name;


4.AVG()函數==>返回所選列的平均值
(用法同MAX)
5.SUM()函數==>返回所選列的
(用法同MAX)

6.FIELD()函數

語法:

SELECT FIELD(str,str1,str2,str3,...)

註釋:從str1開始,如果有與str完全相同的則返回對應的索引值,否則返回0.

7.FIRST()函數==>返回指定列中第一列的值

註釋:只有MS Access支持FIRST()函數
語法:

SELECT FIRST(column_name) FROM table_name;

MySQL語法

SELECT column_name FROM table_name
ORDER BY column_name ASC
LIMIT 1;

 8.LAST()函數

MySQL語法

SELECT column_name FROM table_name
ORDER BY column_name DESC
LIMIT 1;

9.GROUP BY ==>根據一個或者多個列對結果集進行分組

語法:

SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
ORDER BY column_name(s);

eg:(年齡在20-99之間的用戶吃的食物種類,並輸出每個種類的數量)

SELECT
    user_eat,
    COUNT(user_eat)
FROM
    table1
WHERE
    user_age BETWEEN 20
AND 99
GROUP BY
    user_eat
ORDER BY
    COUNT(user_eat);

10.HAVING 子句

==>用於解決WHERE關鍵字無法與Aggregate函數一起使用。

語法:
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
HAVING condition
ORDER BY column_name(s);

實例用法:(在前例的基礎上增加判斷種類在兩個以上)
SELECT
    user_eat,
    COUNT(user_eat)
FROM
    table1
WHERE
    user_age BETWEEN 20
AND 99
GROUP BY
    user_eat
HAVING COUNT(user_eat)>=2
ORDER BY
    COUNT(user_eat);

11.UPPER()、UCASE()、LOWER()和LCASE()

==>大小寫轉換函數
① UPPER()、UCASE()==>全部轉換爲大寫字母
② LOWER()和LCASE()==>全部轉換爲小寫字母

12.MID語法

==>用於從文本字段中提取字符

SELECT MIN(column_name,start[,length]) FROM table_name;

註釋:column_name ==>要提取字符的字段(必須參數); 
      start==>規定開始位置(默認爲1)(必須參數);
      length==>要返回的字符數

實例用法:(從表table1中選擇user_name字段,並輸出每個字段從1位置開始,長度爲3的字符)
注意:這裏的字符從1開始,不是從0開始

SELECT
    MID(user_name, 1, 3) AS shortName
FROM
    table1;

13.LEN()返回文本字段中值的長度

14.ROUND()函數

==>用於把數值字段舍入爲指定的小數位數
語法:

SELECT ROUND(column_name,decimals) FROM table_name;

15.FORMAT()函數

==>用於對字段的顯示進行格式化
FORMAT()語法:

SELECT FORMAT(column_name,format) 
FROM table_name;

註釋:column_name要格式化的字段;
           format 規定格式;
實例用法1:
SELECT FORMAT(20.1236,3); ==>保留三位小數
實例用法2(添加美元$符號):

SELECT
    user_name,
    CONCAT(
        "$",
        FORMAT(social_status,3)
    )
FROM
    `table1`;

在MySQL中使用DATE_FORMAT()函數進行時間格式化
實例用法:
SELECT
    user_ID,
    DATE_FORMAT(NOW(), "%Y-%m-%d %H:%i:%S") AS PerDate
FROM
    table1;

16.SQRT()函數
==>求函數的平方根

17.RAND()函數

==>生成0-1之間的隨機數
ORDER BY RAND()==>對SELECT的序列進行隨機排序

18.CONCAT==>將字符串連接起來

19. ISNULL()、NVL()、IFNULL() 和 COALESCE() 函數

==>用於對null值的判斷及處理

SQL Server/MS access
語法:
SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
FROM Products

Oracle沒有isnull,使用NVL()可以達到相同的效果

MySQL===>IFNULL()、COALESCE()

20.REPLACE()函數

==>字符串替換函數
實例用法:
把數據庫表table1中的所有user_name字段裏的k字符串替換成KI。

UPDATE table1
SET user_name = REPLACE (user_name, "k", "KI");

21.TRIM()函數==>去除字符串首尾的空格

它在不同的數據庫裏的用法不同:

MySQL: TRIM(), RTRIM(), LTRIM()
Oracle: RTRIM(), LTRIM()
SQL Server: RTRIM(), LTRIM()

***********************************************************************************************************

總結1.SELECT語句的語法

SELECT
    column_1,
    column_2 ,...
FROM
    table_1 [ INNER | LEFT | RIGHT ]
JOIN table_2 ON conditions
WHERE
    conditions
GROUP BY
    column_1
HAVING
    group_conditions
ORDER BY
    column_1
LIMIT OFFSET,
 length;

SELECT==>之後是逗號分隔列或星號(*)的列表,表示要返回所有列。
FROM==>指定要查詢數據的表或視圖。
JOIN==>根據某些連接條件從其他表中獲取數據。
WHERE==>過濾結果集中的行。
GROUP BY==>將一組行組合成小分組,並對每個小分組應用聚合函數。
HAVING==>過濾器基於GROUP BY子句定義的小分組。
ORDER BY==>指定用於排序的列的列表。
LIMIT==>限制返回行的數量。
其中SELECT和FROM語句必須,其他部分可選。

總結2:如何使用INSERT INTO語句和SELECT語句複製表?

步驟1:複製表結構
CREATE TABLE table_copy LIKE table;

步驟2:SELECT table裏的數據,INSERT INTO table_copy中

總結3:將表user裏的數據更新到表task中

UPDATE task
SET end_date = (
    SELECT
        cerate_date
    FROM
        `user`
    WHERE
        user_id = 3
)
WHERE
    end_date = "2017-01-02";

總結4:如何刪除表中的重複數據?

注意:這裏必須複製表之後纔可以刪除重複。

DELETE
FROM
    task
WHERE
    (
        SUBJECT,
        start_date,
        end_date,
        description
    ) IN (
        SELECT
            SUBJECT,
            start_date,
            end_date,
            description
        FROM
            task_copy
        GROUP BY
            SUBJECT,
            start_date,
            end_date,
            description
        HAVING
            COUNT(*) > 1
    )
AND task_id NOT IN (
    SELECT
        min(task_id)
    FROM
        task_copy
    GROUP BY
        SUBJECT,
            start_date,
            end_date,
            description
    HAVING
        count(*) > 1
);

總結5:ALTER TABLE 修改表結構

①增加列
ALTER TABLE tableName
ADD COLUMN new_column_name [null|not null]
AFTER column_name;

②刪除列
ALTER TABLE tableName
DROP column_name;

③重命名
ALTER TABLE tableName
RENAME TO new_name;
或者
RENAME TABLE old_table_name TO new_table_name;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章