掌握sql,轻松面对工作中的各种数据操作

# MySQL基本语法:
    # 查询所有
    select *
    from h_user;

    # 条件查询
    select *
    from h_user where u_id = '1391967758906535937' and info_source = 'PC端注册';

    # 新增单条数据
    insert into h_order (o_id, trade_number, u_id)
    value ('DD1235648794','4561325784165156','1391967758906535937');

    # 新增多条数据
    insert into h_order (o_id, trade_number, u_id)
    values ('DD1235648794','4561325784165156','1391967758906535937'),
           ('DD1235648794','4561325784165156','1391967758906535937'),
           ('DD1235648794','4561325784165156','1391967758906535937');

    # 修改数据
    update h_user
    set user_name = '政府',country_code = '+86'
    where u_id = '1391967758906535937';

    # 删除指定数据数据
    delete from h_order where o_id = 'DD20210729182535632904';

    # 左连接查询 left join
    select  u.u_id,u.user_name,o.o_id,o.order_price,o.payment_method
    from h_order as o left join h_user as u on o.u_id = u.u_id where u.u_id =         
    '1391967758906535937';

    # 右连接查询 right join
    select  u.u_id,u.user_name,o.o_id,o.order_price,o.payment_method
    from h_order as o right join h_user as u on o.u_id = u.u_id where u.u_id = 
    '1391967758906535937';

    # 交叉连接查询 cross join
    select  u.u_id,u.user_name,o.o_id,o.order_price,o.payment_method
    from h_order as o cross join h_user as u where o.u_id = u.u_id and u.u_id = 
    '1391967758906535937';

    # 子查询
    select u_id,user_name
    from h_user where u_id = (
        select u_id
        from h_order where o_id = 'DD20210531142244345580'
        );

# MySQL 函数使用:
    # 数学函数
        # count()、sum()
        select count(*)
        from h_order;
        select sum(order_price)
        from h_order;

        # ABS(X) -返回X的绝对值
        select ABS(-32);

        # MOD(N,M)  -或% 返回N被M除的余数
        select 15 / 7;
        select 15 % 7;
        select MOD(15,7);

        # FLOOR(X) -返回不大于X的最大整数值
        select FLOOR(1.23);
        select FLOOR(-1.23);

        # CEILING(X) -返回不小于X的最小整数值
        select CEILING(1.23);
        select CEILING(-1.23);

        # ROUND(X) -返回参数X的四舍五入的一个整数
        select ROUND(1.58);
        select ROUND(-1.58);

    # 字符串函数
        # ASCII(str) -返回字符串str的最左面字符的ASCII代码值 如果str是空字符串返回0 如果str是 
        NULL返回NULL。
        select ASCII('2');
        select ASCII(2);
        select ASCII('dx');

        # CONCAT(str1,str2,...) -返回来自于参数连结的字符串 如果任何参数是NULL返回NULL 可以有 
        超过2个的参数 一个数字参数被变换为等价的字符串形式
        select CONCAT('My', 'S', 'QL');
        select CONCAT('My', NULL, 'QL');
        select CONCAT(14.3);

        # LENGTH(str) -返回字符串str的长度
        select LENGTH('text');

        # LOCATE(substr,str) 返回子串substr在字符串str第一个出现的位置 如果substr不是在str里 
        面返回0
        select LOCATE('bar', 'foobarbar');
        select LOCATE('xar', 'foobar');

        # INSTR(str,substr) -返回子串substr在字符串str中的第一个出现的位置
        select INSTR('foobarbar', 'bar');
        select INSTR('xfoobarfoobar', 'foobar');
        select INSTR('xbar', 'foobar');

        # LEFT(str,n) -返回字符串str的最左面n个字符
        select LEFT('foobarbar', 5);

        # RIGHT(str,n) -返回字符串str的最右面n个字符
        select RIGHT('foobarbar', 4);

        # SUBSTRING(str,pos) -从字符串str的起始位置pos返回一个子串
        select SUBSTRING('foobarbar',5);

        # TRIM(str) -返回字符串str 所有前缀或后缀被删除了
        select TRIM(' bar ');

        # LTRIM(str) -返回删除了其前置空格字符的字符串str
        select LTRIM(' barbar');

        # RTRIM(str) -返回删除了其拖后空格字符的字符串str
        select RTRIM('barbar ');

        # REPLACE(str,from_str,to_str) -返回字符串str 其字符串from_str的所有出现由字符串 
        to_str代替
        select REPLACE('www.mysql.com', 'w', 'Ww');

        # REPEAT(str,count) -返回由重复count次的字符串str组成的一个字符串 如果count <= 0返回 
        一个空字符串 如果str或count是NULL返回NULL
        select REPEAT('MySQL', 3);

        # REVERSE(str) -返回颠倒字符顺序的字符串str
        select REVERSE('abc');

        # INSERT(str,pos,len,newstr) -返回字符串str 在位置pos起始的子串且len个字符长的子串由 
        字符串newstr代替
        select INSERT('whatareyou', 5, 3, 'is');
        select INSERT('whatareyou', 5, 0, 'is');

    # 获取日期时间函数
        # now() yyyy-MM-dd HH:mm:ss
        select now();

        # curdate() yyyy-MM-dd
        select curdate();

        # curtime() HH:mm:ss
        select curtime();

        # 定义日期
        set @dt = now();

        # Extract() 选取日期时间的各个部分:日期、时间、年、季度、月、日、小时、分钟、秒、微秒
            # yyyy
            select extract(year from @dt);
            # MM
            select extract(month from @dt);
            # dd
            select extract(day from @dt);
            # HH
            select extract(hour from @dt);
            # mm
            select extract(minute from @dt);
            # ss
            select extract(second from @dt);
            # sss
            select extract(microsecond from @dt);
            # yyyy-MM
            select extract(year_month from @dt);
            #..........
             # 季度
            select extract(quarter from @dt);
            # 周,星期
            select extract(week from @dt);
        # last_day()
            # 取当月最后一天 dd
            select day(last_day(now())) as days;
            # 取当月最后一天 yyyy-MM-dd
            select last_day(now());

    # Mysql日期时间计算函数
        # date_add()
            # yyyy +-
            select date_add(@dt, interval 1 year);
            select date_add(@dt, interval -1 year);
            # MM +-
            select date_add(@dt, interval 1 month);
            select date_add(@dt, interval -1 month);
            # dd +-
            select date_add(@dt, interval 1 day);
            select date_add(@dt, interval -1 day);
            # HH +-
            select date_add(@dt, interval 1 hour);
            select date_add(@dt, interval -1 hour);
            # mm +-
            select date_add(@dt, interval 1 minute);
            select date_add(@dt, interval -1 minute);
            # ........

        # date_sub() 与 date_add() 用法一致
        select date_sub(now(), interval '-1' day);

        # datediff() dd  -两个日期相减
        select datediff('2008-08-08', '2008-08-01');
        select datediff('2008-08-01', '2008-08-08');

        # timediff() HH:mm:ss -两个日期相减
        select timediff('2008-08-08 08:08:08', '2008-08-08 00:00:00');
        select timediff('08:08:08', '00:00:00');

        # str_to_date(str, format) 字符串转换为日期
        select str_to_date('08/09/2021', '%m/%d/%Y');
        select str_to_date('08/09/08' , '%m/%d/%y');
        select str_to_date('08.09.2021', '%m.%d.%Y');
        select str_to_date('08:09:30', '%h:%i:%s');
        select str_to_date('08.09.2021 08:09:30', '%m.%d.%Y %h:%i:%s');

        # date_format() -日期转换为字符串
        select date_format(now(), '%Y-%m-%d %H:%i:%s');
        select date_format(now(), '%Y-%m-%d');
        select date_format(now(), '%H:%i:%s');

        # time_format() -时间转换为字符串
        select time_format(now(), '%H:%i:%s');

        # convert_tz(dt,from_tz,to_tz) 时区转换 from_tz目标时区,to_tz当前时区
        select convert_tz(now(), '+08:00', '+07:00');

    # 控制流程函数
        # if函数
        select if(100%2=0,'偶数','奇数');
        select if(100%2=0,'偶数','奇数');
        select  u_id,user_name,if(sex=1,'男','女')
        from h_user;

        # ifnull函数 -判断【表达式1】的值是否为空,如果不为空,就返回【表达式1】的值,否则返回 
       【表达式2】的值
        select  u.u_id,u.user_name,o.o_id,o.order_price,ifnull(o.payment_method,'未支付')
        from h_order as o left join h_user as u on o.u_id = u.u_id;

        # case函数
            # 语法一:case 表达式 when [value1] then 表达式1 [when [value2] then 表达式2 
            ...] [else 表达式n] end
            select case child_sex when 1 then '男' when 0 then '女' else '其它' end from 
            h_user_child;
            # 语法二:case when [逻辑表达式1] then 表达式1 [when [逻辑表达式2] then 表达式2 
            ...] [else 表达式n] end
            select case when child_sex=1 then '男' when child_sex=0 then '女' else '其它' 
            end from h_user_child;

        # Strcmp(str1,str2) -如果str1>str2返回1 str1=str2反回0 str1<str2返回-1
        select STRCMP('text', 'text2');
        select STRCMP('text2', 'text');
        select STRCMP('text', 'text');

    # 系统信息函数
        # VERSION() -函数返回数据库的版本号
        select version();

        # CONNECTION_ID() -函数返回服务器的连接数 也就是到现在为止MySQL服务的连接次数
        select connection_id();

        # DATABASE()和SCHEMA() -返回当前数据库名
        select database();
        select schema();

        # USER()、SYSTEM_USER()、SESSION_USER()、CURRENT_USER() -这几个函数可以返回当前用户 
        的名称
        select user();
        select system_user();
        select session_user();
        select current_user();