SQL基础

作者: 吵吵人 | 来源:发表于2020-06-10 20:04 被阅读0次

    学习网站:https://www.w3school.com.cn/sql/index.asp
    推荐工具书:SQL必知必会

    基本认识

    • 关系数据库:多张变+各表之间的联系 关键词:主键、字段
    • SQL是一门语言,mySQL/Oracle/sql Sever是关系数据管理系统,navicat等是客户端,Notepad++中文版等SQL的文本编辑器
    • SQL分类:DDL(数据定义语言)、DML(数据操纵语言)、DCL(数据控制语言)
    • 变量类型
      字符串类型:char:定长字符串 | varchar:可变字符串
      日期:date
      日期时间:datetime(包括日期和时分秒)
      数值型:bigint 整数型 |double 浮点型
    • SQL语言注意点
      输入只能是英文;
      以(;)号结尾
      关键字不区分大小写
      AS 命名字段别名
      字符串均是使用单引号
      Null(什么都没有)和空字符(有一个空字符)是有区别的

    基本操作

    • 插入
      打开查询编辑器
    insert into 表名不加引号 (字段名不加引号1,字段名不加引号2,……字段名不加引号n)
    values ('对应的数值1', '对应的数值2', ……'对应的数值n')
    ;
    
    • 单表查询
    select 字段名1 as A, 字段名2
    from  表名
    where 筛选字段 in ('筛选字段内容1','筛选字段内容2')
    order by 排序字段 desc
    ;
    

    as将字段名1重新命名为A,order表示排序,后面加desc表示倒序排序

    • SQL聚合查询
      常见聚合函数:
      count(字段):计数
      coung(distinct 字段):不重复计数
      sum(字段):求和
      avg(字段):平均
      max(字段):最大
      min(字段):最小
    # 不分组
    select
    count(字段) as 字段计数
    ,count(distinct 字段) as 计数去重
    from 表名
    ;
    
    # 分组
    select 分组字段
    ,count(distinct 字段)
    ,sum(字段)
    from 表名
    where 表筛选条件
    and 表筛选条件
    group by 分组字段
    

    分组实际上就是分类统计,比如说不分组统计的是所有部门的所有员工人数, 按部门分组之后就是统计各个部门的员工人数。

    其他地方又说:WHERE 关键字无法与聚合函数一起使用??

    • 多表关联查询
    select 表别名.字段
    from 表 a
    join 表b
    on 两表的关联条件(如a.字段=b.字段)
    and 表b的筛选条件
    where 表a的筛选条件
    

    例:

    select a.工号,a.姓名,a.部门,b.综合考核分
    from
    (
    select 工号,姓名
    from 表A名
    where 部门 in ('市场部','客服部')
    ) a
    inner join
    (
    select 工号,综合考核分
    from 表B名
    where 综合考核分>=80
    ) b
    on a.工号=b.工号

    这样,就能查询到'市场部'和'客服部'综合考核分>=80的员工了~
    上述可以改写成

    select a.工号,a.姓名,a.部门,b.综合考核分
    from 表A名 a
    join 表B名 b
    on a.工号=b.工号
    and b.综合考核分>=80
    where a.部门 in ('市场部','客服部')

    建议新手用第一种写法,第二种的写法更简单

    注意:join 默认的就是内联结inner join ,只有都满足条件的记录才会保留下来。此外还有
    left out join:主表(表a)记录全部保留,从表(表b)若无记录则相应字段为null
    right out join:从表全部保留
    full join:两个表全部保留

    要注意表可能有重复的记录,避免出错

    • 常用函数介绍
      字符串拼接函数:concat(内容1,内容2,内容3,……)
      字符串截取函数:substr(开始位数,截取长度)
      字符串替换函数:replace(内容,原替换内容,替换目标内容)
      日期加减函数:dateadd
      如将2019-15-05 12:01:01以后的记录的时间都加上12个月:

    select date_add(数据创建时间,interval 12 month)
    ,姓名
    ,工号
    from 表名
    where 数据创建时间>'2019-15-05 12:01:01'

    条件函数

    case when <判断表达式> then <表达式> else<表达式> end
    

    如:

    select a.工号, a.姓名,b.工号,b.综合考核分
    ,case when 综合考核分>=90 then '优秀'
    when 综合考核分<90 then '良好'
    end as level
    from 表A名 a
    left outer join 表B名 b
    on a.工号=b.工号

    查询排名前三:

    select * from personinfo order by credit DESC limit 0,3
    

    limit 0,3:从0开始,提取三条

    相关文章

      网友评论

          本文标题:SQL基础

          本文链接:https://www.haomeiwen.com/subject/dhuptktx.html