zoukankan      html  css  js  c++  java
  • 数据库语句收藏(MySQL)

    概览

    => MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

    =>关键字不区分大小写

    => SQL语句中,表名/字段名不需要单双引号扩起,字段值根据其数据类型确定。如:数字则不需要单双引号也可,但char等类型就需要单双引号扩起

    常用字段类型

    【int】  整数类型,范围:(-2 147 483 648,2 147 483 647)

    【char(n)】固定字符串类型,n表示固定长度,可变,如果数据长度达不到则自动空格占位,超出后则截取超出部分,检索速度较varchar快,范围:(0-255)

    【varchar(n)】可变字符串类型,n表示最大长度,可变,中英文均占一位,数据长度达不到自动缩小,超出后则截取超出部分,范围(0-65535),如果值的长度大于 255,则被转换为 TEXT 类型。。

    【text】不可指定长度的字符串类型,范围(0-65535)。

    【date】日期值YYYY-MM-DD,范围(1000-01-01~9999-12-31)

    【datetime】 日期时间值YYYY-MM-DD HH:MM:SS,范围(1000-01-01 00:00:00~9999-12-31 23:59:59)

    基础增删改查

    其中into单词一般可以省略

    全部字段自定义值

    insert into 表名 values("字段1值","字段2值","字段3值","字段4值")

    确定字段

    insert 表名(字段1,字段2) values("字段1值","字段2值")

    确定字段2

    insert into 表名 set 字段1="字段1值",字段2="字段2值"

    一次性插入多行

    insert 表名 values(字段1值,"字段2值","字段3值","字段4值"),(字段1值,"字段2值","字段3值","字段4值")

    删除字段值

    delete from 表名 where 字段=值

    清空表全部内容

    delete * from 表名

    单个字段

    update 表名 set 字段1="字段1值" where 条件字段名=字段值

    多个字段

    update 表名 set 字段1="字段1值",字段2="字段2值" where 条件字段=值

    自增1

    update 表名 set 字段=字段+1 where id=2

    自减3

    update 表名 set 字段=字段-3 where id=2

    查询表中所有数据

    select * from 表名

    查询部分字段,并重命名字段名

    select 字段1,字段2 as 字段2新名字 from 表名

    条件查询

    select * from 表名 where 字段="值"

    查询无重复结果数据

    select distinct * from 表名

    排序(降序desc、默认升序asc)

    select * from 表名 order by 排序字段  desc

    二级排序

    order by 字段1 asc,字段2 desc

    limit类似分页查询

    select * from 表名 limit 跳过行,需要的行数

    分组统计

    select 字段,count(字段) from 表名 group by 字段

    字段值处理

    值的大小写转换

    全部转为大写

    ucase(字段)

    全部转为小写

    lcase(text3)

    提取字段的部分字符

    中文占一位,起点为1,范围为闭区间[1,3]

    mid(字段,1,3)

    统计字段长度

    长度根据编码不同而不同,如中文的utf-8编码下长度为3

    length(字段)

    count数据统计

    统计字段的非空数

    统计总行数:一般字段为主键,就可以实现统计表的行数,或者count(*)统计总行数

    统计不重复的行数:count(distinct 字段)

    select count(字段) as dongcount from 表名

    计算函数相关

    其它有:平均值【avg】、最大值【max】、最小值【min】

    select sum(字段) as dongsum from 表名 where id<5

    where条件补充

    like模糊查询(【%】匹配任意数量的任意字符,【_】仅代替一个字符)

    像(like)

    where 字段 like "%东%"

    不像(not like)

    where id not like "4%"

    大小判断( >、=、< 可组合作用),其中【<>】和【!=】均表示不等于

    where id>=2

    区间:

    区间内取值([2,3] 闭区间)

    where id between 2 and 3

    区间之外

    where id not between 2 and 3

    确定多个存在值

    where id in(2,3,46)

    确定多个不存在值

    where id not in(2,3,46)

    and,条件(与)

    where id=2 and text2="1234"

    or,条件(或)

    where id=2 or id=3

    and和or综合使用

    where (id=2 and text2="1234") or id=3

    是否为空

    不为空

    where 字段 is not null

    为空

    where 字段 is null

    逻辑处理,判断字段是否为空,是空则替换为参数2

    ifnull (字段,"替换空值")

    连表操作

    连表查询

    【表名.列名】即可确定对应表

    select 表名1.* from 表名1,表名2 where 表名1.id=表名2.id

    查询两个表的所有数据符合

    on条件的数据,此时表1的数据字段在前面,表2出现表1的字段时会重命名,如【id1】

    select * from 表1 join 表2 on 表1.id=表二.id

    using确定字段相同值

    select * from 表1 join 表2 using(id)

    其他连接查询

    left join ... on ... 以表1为主,表2无数据则补空
    right join ... on ... 以表2为主,表1无数据则补空
    full join ... on ... 结合,无则补空,mysql不支持

    日期相关函数

    curdate(),当前日期,格式为:2019-03-05

    curtime(),当前时间,格式为:01:39:54

    now (),当前时间,格式为:2019-03-05 01:40:45

    date(日期时间字段),返回字段中的日期,2019-03-05

    to_days(now()) 得到现在距离0000-00-00的天数

    year(now()) 得到当前年份

    yearweek("2019-01-01") 返回日期所属年和周,如(2019-01-01 =>201852)(2019-01-08=> 201901)

    period_diff("201905","201901") 得到月间隔,输出4,其格式必须为:YYYYMM

    datediff("2019-10-02","2019-10-01 01:10:10") AS dayx; 忽略时间的间隔天数(1),值有可能为负数

    now()时间函数

    设置当前数据,字段类型必须是datetime,显示效果为2019-03-05 01:04:06

    update 表名 set 字段=now();

    添加显示当前时间

    select id,now() as dnow from tb_test

    添加/减去时间

    添加两天

    其中day可以换成:【week】、【year】、【month】、【hour】、【minute】、【second】

    对应的减去时间函数为:date_sub ()

    date_add(now(),interval 2 day)

    提取时间的部分值:

    提取到几号

    其中day可以换成:【week】、【year】、【month】、【hour】、【minute】、【second】

    extract(day from now())

    格式化时间函数:

    date_format(now(),"%Y-%m-%d %H:%i:%s")

    格式化有:

    格式

    描述

    %a

    缩写星期名

    %b

    缩写月名

    %c

    月,数值

    %D

    带有英文前缀的月中的天

    %d

    月的天,数值(00-31)

    %e

    月的天,数值(0-31)

    %f

    微秒

    %H

    小时 (00-23)

    %h

    小时 (01-12)

    %I

    小时 (01-12)

    %i

    分钟,数值(00-59)

    %j

    年的天 (001-366)

    %k

    小时 (0-23)

    %l

    小时 (1-12)

    %M

    月名

    %m

    月,数值(00-12)

    %p

    AM 或 PM

    %r

    时间,12-小时(hh:mm:ss AM 或 PM)

    %S

    秒(00-59)

    %s

    秒(00-59)

    %T

    时间, 24-小时 (hh:mm:ss)

    %U

    周 (00-53) 星期日是一周的第一天

    %u

    周 (00-53) 星期一是一周的第一天

    %V

    周 (01-53) 星期日是一周的第一天,与 %X 使用

    %v

    周 (01-53) 星期一是一周的第一天,与 %x 使用

    %W

    星期名

    %w

    周的天 (0=星期日, 6=星期六)

    %X

    年,其中的星期日是周的第一天,4 位,与 %V 使用

    %x

    年,其中的星期一是周的第一天,4 位,与 %v 使用

    %Y

    年,4 位

    %y

    年,2 位

     表格来源W3Cschool

    查询今天、本周、本月、本年

    参考:https://www.cnblogs.com/shuilangyizu/p/8805384.html

    --今天
    
    select * from 表名 where to_days(时间字段名) = to_days(now());
    
    --本周
    
    SELECT * FROM  表名 WHERE YEARWEEK( date_format(  时间字段名,'%Y-%m-%d' ) ) = YEARWEEK( now() ) ;
    
    --本月
    
    SELECT * FROM  表名 WHERE DATE_FORMAT( 时间字段名, '%Y%m' ) = DATE_FORMAT( CURDATE( ) ,'%Y%m' ) 
    
    --本年
    
    SELECT * FROM 表名 WHERE YEAR(  时间字段名 ) = YEAR( NOW( ) ) 
  • 相关阅读:
    开发进度01
    eclipse 调用cmd运行DataX
    kettle 新建DB连接双击打不开
    用户体验评价
    找水王课堂练习
    人月神话阅读笔记01
    用户模板和用户场景
    大道至简阅读笔记03
    第九周
    第八周总结
  • 原文地址:https://www.cnblogs.com/dongxiaodong/p/10477231.html
Copyright © 2011-2022 走看看