sql语句汇总

简介
面向SQL入门者,快速掌握SQL语句
基本
查询
    SELECT
        *      
    FROM
        table_name;

'*': 所有列
新增
    INSERT 
    INTO
        table_name

    VALUES
        (1, 'A', 'aa', '2017-09-22 00:00:00');

'VALUES'后面括号里的字段,需要对应表定义的列,从左到右依次填入
更新
    UPDATE
        table_name               
    SET
        col_name1 = value1,
        col_name2 = value2               
    WHERE
        id = 1

'WHERE‘后面跟着指定更新条目所需的条件。
删除
    DELETE 
    FROM
        table_name       
    WHERE
        条件
查询细化
AND (且)
    SELECT
        * 
    FROM
        table_name 
    WHERE
        条件 
        AND 条件
OR (或)
    SELECT
        * 
    FROM
        table_name 
    WHERE
        条件 
        OR 条件
比较计算
运算符说明
=左右相等
<左边小于右边
>左边大于右边
<=左边小于等于右边
>=左边小于等于右边
<>左右不相等
    SELECT
        *      
    FROM
        table_name      
    WHERE
        价格 >= 1000
NULL判断
  • 指定列的值为空判断
    SELECT
        * 
    FROM
        table_name 
    WHERE
        col_name IS NULL
  • 指定列的值不为空判断
    SELECT
        * 
    FROM
        table_name 
    WHERE
        col_name IS NOT NULL
LIKE
匹配符号说明
%任意文字组成的任意长度的字符串
_任意的1个文字
  • 从备忘列的值里,选出满足’1月‘前后任意文字长度大于0的任意长度的条目。
    SELECT
        * 
    FROM
        table_name 
    WHERE
        memo LIKE '%1月%'
  • 从备忘列的值里,选出'1月'为文字开始,其后只跟着一个文字的条目
    SELECT
        * 
    FROM
        table_name 
    WHERE
        memo LIKE '1月_'
BETWEEN
  • 匹配出指定字段符合给定区间内的值的所有条目
    SELECT
        * 
    FROM
        table_name 
    WHERE
        价格 BETWEEN 50 AND 100;
IN/NOT IN
  • 匹配出指定字段符合给定集合里的的任意一个值的所有条目
    SELECT
        * 
    FROM
        table_name 
    WHERE
        col_name IN (
            value1, value2,value3, ...
        );
  • 匹配出指定字段不符合给定集合里的的任意一个值的所有条目
    SELECT
        * 
    FROM
        table_name 
    WHERE
        col_name NOT IN (
            value1, value2, value3, ...
        );
ANY/ALL
  • 指定字段与给定的值列表比对,筛选出只要其中一个为真就为真的所有条目
    SELECT
        * 
    FROM
        table_name 
    WHERE
        col_name =< ANY(
            value1, value2, value3
        );
  • 指定字段与给定的值列表比对,筛选出所有值比对都为真的所有条目
    SELECT
        * 
    FROM
        table_name 
    WHERE
        col_name =< ALL(
            value1, value2, value3, ...
        );
查询结果加工
DISITINCT
  • 根据指定列名结果去重
    SELECT
        DISITINCT user_name 
    FROM
        table_name;
ORDER BY
  • 结果排序
    SELECT
        * 
    FROM
        table_name 
    ORDER BY
        价格 DESC;

升序-> ASC, 降序-> DESC
LIMIT + (OFFSET)
  • 从指定位置起获取指定数量行
    SELECT
        * 
    FROM
        table_name 
    ORDER BY
        价格 DESC LIMIT 3 OFFSET 2;
UNION
  • 和集合。2个查询结果合并且去重
    SELECT
        user_name,
        age,
        address 
    FROM
        table_1 
    UNION
    SELECT
        user_name,
        age,
        address 
    FROM
        table_2;
EXCEPT (mysql不支持)
  • 差集合。选出第一个表有,第二个没有的条目
    SELECT
        user_name,
        age,
        address 
    FROM
        table_1 
    EXCEPT
    SELECT
        user_name,
        age,
        address 
    FROM
        table_2;
INTERSECT (mysql不支持)
  • 积集合。2个查询结果里重复的条目
    SELECT
        user_name,
        age,
        address 
    FROM
        table_1 
    INTERSECT
    SELECT
        user_name,
        age,
        address 
    FROM
        table_2;
操作符与函数
代表性的操作符
操作符使用方法说明
+数值 + 数值数值相加
日期+数值日期加天数
-数值 - 数值数值相减
日期 - 数值日期减天数
日期 - 日期两日期相差天数
*数值 * 数值数值相乘
/数值 / 数值数值相除
CASE
  • 数据展示时可以使用的条件操作符
    SELECT
        user_name,
        CASE age 
            WHEN age < 20 THEN '未成年' 
            WHEN age >= 20 
            AND age <= 65 THEN '成年' 
            ELSE '高龄' 
        END AS 分类 
    FROM
        table_name;
LENGTH
  • 文字长度计算
    SELECT
        user_name,
        LENGTH(user_name) as '名字长度' 
    FROM
        table_name;
TRIM
  • 指定字符串的左右空白移除
    SELECT
        user_name,
        TRIM(user_name) as '去左右空白后名字' 
    FROM
        table_name;
REPLACE
  • 指定字符串的内容替换
    UPDATE
        table_name 
    SET
        user_name = REPLACE(user_name,
        '李',
        '张');

将用户名里带’李‘的转为’张‘
SUBSTRING
  • 字符串截取
    SELECT
        * 
    FROM
        table_name 
    WHERE
        SUBSTRING(user_name, 1, 3) LIKE '%德%'
ROUND
  • 指定位数,四舍五入
    SELECT
        支出金额,  ROUND(支出金额, -2) AS '以百计支出金额' 
    FROM
        table_name;

SELECT 12345.67, ROUND(12345.67, -1) => '12345.67', '12350'
TRUNC(mysql命令为TRUNCATE)
  • 指定位数,不四舍五入
    SELECT
        支出金额,  TRUNCATE(支出金额, -2) AS '以百计支出金额' 
    FROM
        table_name;

SELECT 12345.67, TRUNCATE(12345.67, -1) => '12345.67', '12340'
POWER
  • 指数乘
    SELECT
        支出金额,
        POWER(支出金额,
        2) AS '指数乘后的支出金额' 
    FROM
        table_name;
汇总和GROUP化
  • 汇总
分类方法名说明
汇总SUM各行的值合计
MAX各行的值取最大值
MIN各行的值取是小值
AVG各行的值取平均值
计数COUNT行数计算
    SELECT
        SUM(支出金额) AS '支出金额合计' 
    from
        table_name;
    SELECT
        COUNT(*) AS '合计行数' 
    FROM
        table_name;

COUNT(*) NULL行也会计算
GROUP化
  • 以指定列的同样值为基础进行分组
    SELECT
        支出项目,
        SUM(支出金额) AS '以支出项目合计金额' 
    FROM
        table_name 
    GROUP BY
        支出项目;
子查询
  • 将一个表的查询结果当作另一个查询语句的参考条件
    SELECT
        MAX(以支出项目合计金额) 
    from
        (SELECT
            支出项目,
            SUM(支出金额) AS '以支出项目合计金额'      
        FROM
            table_name      
        GROUP BY
            支出项目);
表结合
    SELECT
        to.id,
        to.price,
        tu.user_name,
        tu.address 
    FROM
        table_order AS to 
    JOIN
        table_user AS tu 
            ON to.user_id = tu.id;


查看原文:http://www.huuinn.com/archives/172
更多技术干货:风匀坊
关注公众号:风匀坊
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值