• SQL查询(一)


    sql的查询

    DQL 查询
    分类
    单表查询
      a.基础查询
        1.查询特定列
        2.查询所有列
      b.字段控制查询
        1.列起别名
        2.列拼接
        3.列计算
        4.去除重复列
        5.查询常量列
      c.条件查询
      d.模糊查询
      e.排序
      f.聚合函数
      e.分组
    多表查询
     a.合并结果集
     b.连接查询
     c.子查询

    sql基础查询

    a.基础查询
    1.查询t_student表中所有的学生的学号和姓名
    /*
    列 : 学号和姓名 1
    表 : t_student 
    条件 : 无 
    */

    select s.sid, s.sname from t_student s;

    2.查询所有列

     select s.*,s.sid,s.sname from t_student s;

    b.字段控制查询
    1.列起别名
    查询出学生表中 sid 学生编号 sname 学生姓名 sid[学生编号] sname[姓名]

    select s.sid 学生编号, s.sname 学生姓名, sid "[学生编号]" from t_student s;

    注意:

    1.这里的as是可以省略的
    2.当别名中出现特殊符号的时候,不能省略
    3.列拼接查询出 学生表中 sid,sname,[sid]sname

    select sid, sname, '[' || sid || ']'|| sname 信息 from t_student

    3.列计算
    oracle也是提供了运算符的, 算数运算符 有 + - * / 没有 % ,oracle针对求余提供了函数 mod(x,y)

    select sname, sage, sage + 100, mod(sage,5)  from t_student;

    alter table t_student add salary number(7,2);

    select sname, sage, salary*12 + 3000 全年工资  from t_student;


    注意: null和任何数据进行运算结果还是为null
    4.去除重复列distinct关键字

    select distinct sage  from t_student;

    5.常量列查询

    select sname, '合格' 合格率  from t_student;


    注意: 常量列不存在 null 值的情况

    where子句(条件查询)

    where子句是按照“条件表达式”指定的条件进行查询。

    条件查询相关关键字

    = 、!=、<> <= < >= >
    between ... and not between ... and
    in 、 not in
    is null 、 is not null
    and
    or
    not
    1.查询学生表中 id 为 1的学生信息

    select *  from t_student  where sid = 1

    2.查询出学生表 班级编号为 null的学生信息

    select *  from t_student  where classid is not null;

    3.查询出学生表中年龄 不等于 20的学生的信息

    select *  from t_student
    -- where sage != 20;
    -- where sage <> 20;
    -- where sage not in (20);
    where not sage = 20;

    4.查询出年龄在20到25之间的学生 同时 学生编号 小于6的学生信息

    select *  from t_student  where sage between 20 and 25 and sid < 6;

    5.查询年龄小于 22,或者学生编号大于 4的学生信息

    select *  from t_student  where sage < 22 or sid > 4;

    模糊查询

    1.查询出学生表中 所有 姓张的学生的信息

    select *  from t_student where sname like '%张%';

    -- %张 以张结尾 包含张的 %张%

    like模糊查询模式匹配

    其中关于条件,SQL提供了四种匹配模式:

    • % :表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。
    • _ : 表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:
    • [ ] :表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。
    • [^ ] :表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。
    • 查询内容包含通配符时 由于通配符的缘故,导致我们查询特殊字符“%”、“_”、“[”的语句无法正常实现,而把特殊字符用“[ ]”括起便可正常查询。

    group by子句(分组查询)

    group by子句是按照“属性名”指定的字段进行分组。group by子句通常和count()、sum()等聚合函数一起使用。

    聚合函数

    mysql中五种常用的聚合函数:

    • max(列名):求最大值。
    • min(列名):求最小值。
    • sum(列名):求和。
    • avg(列名):求平均值。
    • count(列名):统计记录的条数。
    select count(*) from t_student;
    select count(sage) from t_student;
    select count(classid) from t_student;
    select count(sid) from t_student;
    select count(1) from t_student;

    count()函数的使用:

    count(*): 统计的是各个字段的数量,然后计算统计结果的最大值,效率低
    count(字段): 统计的是输入字段不为null的数量
    count(sid): 统计主键的字段,肯定是记录的总字段,因为主键不能为null,这种方式不灵活,如果是另外一张表,那么主键名称不一样
    count(1): 给出一个常量列,然后统计常量列的记录条数,常量列不可能为null,而且这种方法灵活,不会和主键关联,开发中使用

    select sum(sage) 总和 from t_student; 
    select avg(sage) 平均值 from t_student; 
    select max(sage) 最大值 from t_student; 
    select min(sage) 最小值 from t_student;

    聚合函数一般用于分组使用,但是也可以在聚合函数之间使用

    select sum(sage),avg(sage),max(sage),min(sage) from t_student;

    关于group by子句和聚合函数联合使用的三条规则:

    1. 如果select 子句中使用了统计函数同时没有group by 子句,那么select子句中只能出现统计函数,不能出现其他任何字段。
    2. 如果在select子句中使用统计函数同时有group by子句,则在select子句中只能出现统计函数和分组的字段。
    3. 如果select子句中使用了嵌套的统计函数,则不管是否group by子句那么select子句不能出现统计函数之外任何字段。

    having子句(筛选查询)

    有group by才能having子句,只有满足“条件表达式”中指定的条件的才能够输出。having子句可以让我们筛选成组后的各种数据,where子句在聚合前先筛选记录,也就是说作用在group by和having子句前。而 having子句在聚合后对组记录进行筛选。

    where 和 having 的区别?
    where 只能够 放在 from 的后面,表示对查询的数据源进行过滤,这里的数据源可以是 一张表或者是一个结果集(子查询的结果集)
    having 只能够 放在 group by 的后面, 对分组后的 数据 进行过滤

    order by子句(排序查询)

    按照“属性名”指定的字段进行排序。排序方式由“asc”和“desc”两个参数指出,默认是按照“asc”来排序,即升序。

  • 相关阅读:
    【贪心】CodeForces-545C:Woodcutters
    【贪心】雷达问题
    【贪心】poj1328:雷达设置
    【最短路】HDU2680:Choose the best route
    2018年第四阶段组队训练赛第九场
    第四阶段组队训练赛第八场
    2018年第四阶段组队训练赛第七场
    第四阶段组队训练赛第六场( 题源:UKIEPC2017)
    Coins I
    2018年第四阶段组队训练赛第五场
  • 原文地址:https://www.cnblogs.com/lqhhome/p/10886701.html
Copyright © 2020-2023  润新知