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;

 

你可能感兴趣的:(数据库技术)