mysql 经典sql收集

1、按条件进行sql数据存储

普通的 INSERT INTO 插入:
INSERT INTO card(cardno, cardnum) VALUES('1111', '100');
INSERT INTO card(cardno, cardnum) VALUES('2222', '200');

加入条件的插入sql

INSERT INTO card(cardno, cardnum) SELECT '111', '100' FROM DUAL WHERE NOT EXISTS(SELECT cardno FROM card WHERE cardno = '111');
INSERT INTO card(cardno, cardnum) SELECT '222', '200' FROM DUAL WHERE NOT EXISTS(SELECT cardno FROM card WHERE cardno = '222');

批量插入

    <insert id="insertActiveMemberList" parameterType="java.util.List">
        insert into sns_active_member ( actity_id, create_id, gmt_created,
        gmt_modified,state) values
        <foreach collection="list" item="item" index="index"
            separator=",">
            ( #{item.actityId}, #{item.createId}, #{item.gmtCreated},
            #{item.gmtModified}, #{item.state})
        </foreach> </insert>

2、条件控制

IF 语句
CASE 语句
IF 语句根据条件执行一系列语句,有三种形式:IF-THEN、IF-THEN-ELSE 和 IF-THEN-ELSIF
DECLARE
  x VARCHAR2(10);
BEGIN
  x:='&x';
  IF LOWER(x)='y' THEN
    DBMS_OUTPUT.PUT_LINE('Yes!');
  ELSIF LOWER(x)='n' THEN
    DBMS_OUTPUT.PUT_LINE('No!');
  ELSE
    DBMS_OUTPUT.PUT_LINE('Error');
  END IF;
END;

CASE 语句用于根据单个变量或表达式与多个值进行比较
执行 CASE 语句前,先计算选择器的值

BEGIN
    CASE ‘&grade’
      WHEN ’A’ THEN DBMS_OUTPUT.PUT_LINE (’优异’);
      WHEN ’B’ THEN DBMS_OUTPUT.PUT_LINE (优秀’);
      WHEN ’C’ THEN DBMS_OUTPUT.PUT_LINE (’良好’);
      WHEN ’D’ THEN DBMS_OUTPUT.PUT_LINE (’一般’);
      WHEN ’F’ THEN DBMS_OUTPUT.PUT_LINE (’较差’);
      ELSE DBMS_OUTPUT.PUT_LINE (’没有此成绩’);
    END CASE;
END;

3、循环控制用于重复执行一系列语句
循环控制语句包括:
LOOP、EXIT 和 EXIT WHEN
循环控制的三种类型:
LOOP - 无条件循环
WHILE - 根据条件循环
FOR - 循环固定的次数

LOOP 
  sequence_of_statements
END LOOP;
WHILE condition LOOP 
  sequence_of_statements
END LOOP;
FOR counter IN [REVERSE] value1..value2
LOOP 
  sequence_of_statements
END LOOP;

or 语句的使用 满足某条条件就能显示

 select  t2.content,t2.notes_id,t1.title,t1.create_date,t1.id from travel_notes t1,travel_notes_agenda t2,travel_notes_agenda_items t3 where t1.id = t2.notes_id  
            and t2.id = t3.notes_agenda_id 
            and(
            t2.content LIKE CONCAT(CONCAT('%', #{content}), '%')
            or 
            t1.title LIKE CONCAT(CONCAT('%', #{content}), '%')
            or 
            t1.author LIKE CONCAT(CONCAT('%', #{content}), '%')
            or
            t3.name LIKE CONCAT(CONCAT('%', #{content}), '%'))
        and
    <![CDATA[   t1.create_date < #{createDate}]]>
        order by t1.create_date desc
        limit 0,#{page}

update

UPDATE travel_specialty t SET t.read_num = (t.read_num +1) WHERE id = 19

Date 计算
获取指定月份的前一个月的时间

select DATE_SUB('1998-01-30 15:20:30', Interval 1 month);

获取指定月份后一个月的时间

select DATE_ADD('1998-01-30 15:20:30', Interval 1 month);

获取当前月份的月初时间

select DATE_ADD(curdate(),interval -day(curdate())+1 day)

获取指定月份上个月的月初

select DATE_ADD((select DATE_SUB('1998-01-20 15:20:30', Interval 1 month)),interval -day((select DATE_SUB('1998-01-20 15:20:30', Interval 1 month)))+1 day)

获取指定月份下个月的月初

select DATE_ADD((select DATE_ADD('1998-01-30 15:20:30', Interval 1 month)),interval -day((select DATE_ADD('1998-01-30 15:20:30', Interval 1 month)))+1 day) 

获取指定月份下个月的月末
select last_day((select DATE_ADD(‘1998-01-30 15:20:30’, Interval 1 month)))

获取上个月的第一天

select date_sub(date_sub(date_format(now(),'%y-%m-%d'),interval extract( day from now())-1 day),interval 1 month) 

获取上个月的月末

select date_sub(date_sub(date_format(now(),'%y-%m-%d'),interval extract( day from now()) day),interval 0 month) as date 

获取上个月月初的时间 格式为long (带秒数)

SELECT UNIX_TIMESTAMP(date_sub(date_sub(date_format(now(),'%y-%m-%d'),interval extract( day from now())-1 day),interval 1 month))* 1000 

获取上个月月末的时间 格式为long

select UNIX_TIMESTAMP(date_sub(date_sub(date_format(now(),'%y-%m-%d'),interval extract( day from now()) day),interval 0 month))*1000

获取当前日期在本周的周一

select subdate(curdate(),date_format(curdate(),'%w')-1)

获取当前日期在本周的周日

select subdate(curdate(),date_format(curdate(),'%w')-7)

你可能感兴趣的:(sql,mysql,数据存储)