• sql增删查找语句(包括聚合函数及分组)


    -------------查询表中的数据------------
    --1.下面的语句表示查询MyStudent表中的所有行、所有列
        select * from Mystudent
    
    --2.只显示部分列的数据(显示所有行,但是只查看指定的列)
        select fname,fage,fgender from MyStudent
    
    --3.select语句中请查询出年龄在20-23岁之间的所有女同学的姓名,年龄,性别,学号
        select fname,fage,fgender,fid from MyStudent where fage>=20 and fage<=23 and fgender=''
    --4.select语句中的between
        select * from TblStudent where fage between    20 and 30 and fgender=''
    --5.select语句中的in
        select * from TblStudent where tsclassId in(5,3,1)    查询的若是连续的数据尽量用大于小于来选择,便于后期使用索引,提高性能
        select * from TblStudent where tscalssId not in(5,3,1)
    --6.为列起别名(alias)
        select
        fname as 姓名,
        fage as 年龄,
        fgender as 性别,
        fid as 学号
        from MyStudent
        where fgender='' and fage>=20 and fage<=24
        select
        姓名=fanme,  
        年龄=fage,
        性别=fgender,
        学号=fid
        from MyStudent
        where fgender='' and fage>=20 and fage<=24
         说明:若是别名里面含有空格等非法字符 则需要将别名用单引号或者方括号包起来 比如: 
        [姓  名]=fname 或者'姓  名'=fname
    --7.select可以单独使用
        select '你好','世界'
        select A='你好',B='世界'
    --8.打印日期
        select getDate()
    --9.select语句中的distinct对已经通过select语句查询的结果集,进行去除
        select * from TblTeacher
        select
            distinct
            ttname,
            ttgender,
            ttage
        from TblTeacher
    --10.select语句中的top,获取查询出的结果中的前n条
        --一般使用top的时候,必须匹配order by 进行排序才会有意义
        select * from Mystudent
        select top 5* from Mystudent order by fage desc,fmath desc
        select top (5*3) from MyStudent order by fage desc,fmath desc    说明:表达式需要用()括起来
        select top 5percent * from MyStudent by fage desc,fmath desc   说明:若是取得5 percent为5.5,则实际查出来为6条。向上去整
    -------------更新、插入、删除表中的数据--------------
    1.update语句
    --update 表名 set列名1='',set列名2='',set列名3='',..where 条件
        select * from Employees
        update Employees set EmpCardNumber='431122199001225729' 说明将表中所有EmpCardNumber都修改了(Ctrl+z也回复不了,因为这只能恢复内存中的数据)
        update Employees set EmpCarNumber='11111111111111111' where EmployeeID=5
        例子:将所有员工的年龄都加5岁
        update Employee set EmpAge=EmpAge+5(安全写法)  说明:EmpAge+=5这只能在tSQL里面使用
    2.delete语句
    --delete from 表名 where
    --如果delete from 表名 后面不跟where 条件,则表示会删除当前表中的所有数据
        delete from EmPlyee where EmpName-='李四' and EmpAutoID=4
    3.insert语句
        insert table 表名(列名1,列名2,列名3...)values()
    --注意:插入的时候给自动编号的列插值,必须将列自动编号那列的列名写上 并声明允许插入自动编号的值的语句为:
        set indentity_insert employee on
    --insert语句中values值前加N
        insert into Department values(N'张三')为了保证不会乱码,unicode
    --注意:delete语句删除记录后,再插入值的时候,自动编号还是紧跟删除前的最后的自动编号的值
        -- 要想重新编号,用truncant 表名(后面不能跟where条件句) truncant删除比delete更高效
    --注意:delete语句只能删除数据,表结构依然存在
    --删除表 drop table 表名
    ------------------------------聚合函数-----------------------
    --说明:聚合是将一列中多行数据汇总成一条数据
    --1.求总和的聚合函数 sum
        select sum(tMath) as 数学成绩总和 from TblScore
    --2.求最大值 max
        select max(tMath) as 数学最高分 from tblScore
    --3.求最小值 min
        select min(tMath) as 数学最低分 from TblScore
    --4.求平均值
        select avg(tMath) as 数学平均分 from TblScore     说明:若是整数值求平均后得到结果带小数,但sql查询得到的结果确是整数,所以我们要其中一个转成小数
    --5.求记录的条数,比如所有数学成绩大学80的学生的个数
        select count(*)from TblScore where fmath>80 说明:其中*表示所有列,取的是列的值不为空的总行数,聚合函数不统计null值
        select count(1)from TblScore where fmath>80 
        说明:1为常数,每行都不会为null(不是null表达式都可以)以前一般采用此种,因为效率为高,但是现在数据库内部会做优化。所以也无所谓了
        注意:统计平均成绩的时候,若有null存在,也不统计。凡是聚合函数都不统计
        select 
            tSId,
            tEnglish,
            tMath,
            个人平均分=(tEnglish+tMath)/2
        from TblScore
        order by 个热平均分 desc
    -----------------模糊查询-------------------
    --说明;模糊查询类似于正则表达式,只针对字符串。比如判断一个年份是否为闰年,用正则匹配会很麻烦复杂,而用数学逻辑判断非常简单,因为正则值针对字符串
    --1.查询所有以“张”字开头的,并且是两个字的人
        select * from TblStudent where tsname like '张%' 
        备注:表示以张开头的任意多个或一个字符 %任意多个或一个字符
    --2.查询那些所有以“张”开头的,并且是两个字的人
        select * from TblStudent where tsname like '张%' and len(tsname)=2
        备注:Len()函数 求字符长度
        select * from TblStudent where tsname like'张_'
        备注:_表示一个任意字符
    --3.[]中括号表示在一个中括号范围里面的一个字符
        select * from TblStudent where name like'_[a-z0-9]_'
    --4.^中括号中的^表示非,否则就表示一个^字符
    --5.当希望通配符只表示普通字符的时候,此时应该将通配副放在[]中。
    --6.
        select * from TblStudent where tsname not like'张%' 说明:只要不是张开头的 都能查出来
        select * from TblStudent where tsname like'[^张]%'   说明:必须有一个字符
    ----------数据中null值的处理-----------------
    --1.查询数据中为null值的数据
        select * from TblStudent where tsage is null(正确)
        select * from TblStudent where tsage=null(错误)
        select * from TblStudent where tsage<>null(错误)
        select * from TblStudent where tsage is not null(正确)
        说明:null值和任何值做操作运算,结果都为null
    --2.isnull()函数 后期介绍
    ------------数据排序-----------------------
    --1.
        order by 列1,列2,列2   desc(降序)  asc(升序)
        select
        列名1,
        列名2,
        列名3,
        ...
        where 条件(对数据进行筛选)
        order by 列(对已经被where语句筛选过的数据进行配需)
        说明:无论一条查询语句多复杂,一般情况下,order by都是最后执行的。另外,order by也可以跟表达式,比如
        select
            tSId,
            tEnglish,
            tMath,
        from TblScore
        order by (tEnglish+tMath)/2
        注意:查询的结果数据集可以查询数据源,但是前提是数据集,如果一个数据集被order by 排序后,就有了序
        就不再是数据集了,所以不可以再作为查询的数据源
    --------分组group---------
    --分组的目的 就是为了汇总,统计
    --聚合函数其实就是把整个表中的数据作为一组,来进行统计汇总
    --如果使用聚合函数时,一定会配合分组(group by)来使用,如果使用聚合函数,没有分组,那么意义上不大
    --当聚合函数与group by 分组语句一起使用的时候,其实这个聚合函数会将分组后的每一组记录的数据进行聚合
    --1.group by 语句执行完毕后,分了几组,那么聚合函数对每组进行汇总
        select 
            tSGender,
            count(*),
            from TblSudent
            Group by tSGender
    --2.当在查询中使用聚合函数的时候,在该查询的select语句中,不能再写其他的列名,除非该列也包含在
    分组语句(group by)中, 或者该列也包含在聚合函数中
            --查找出班级人数大于10的每个班级总人数
            select tsclassId,count(*)as 班级人数  --4
            from TblStudent    --1
            group by tsclassId    --2
            having count(*)>10    --3
            --having在分组后进行筛选,having就是对分组后的结果进行筛选,筛选完了,最后确定哪组显示,哪组不显示
            --注意在having中不能使用select中所使用的别名,因为在执行having的时候,select的还没执行呢。
            --但是在order by 语句中可以使用,因为order by语句是在最后执行
            --查找出每个班级中男生的人数
            select tscalssId,count(*) as 人数
            from TblStudent    --1    
            where tsGender='' --2
            group by tsclassId  --3
        --where 与having 的区别,where是在分组前进行筛选,having在分组后进行筛选
    执行顺序5>..Select5-1>选择列5-2>distinct5-3>top>应用top最后计算
        1>from
        2>where
        3>group by
        4>having
        5>Order by
  • 相关阅读:
    docker 笔记
    XML解析
    P1047 校门外的树
    4829 [DP]数字三角形升级版
    1996 矿场搭建
    5524 割点
    4817 江哥的dp题d
    4809 江哥的dp题c
    4816 江哥的dp题b
    4815 江哥的dp题a
  • 原文地址:https://www.cnblogs.com/tobecabbage/p/3570045.html
Copyright © 2020-2023  润新知