zoukankan      html  css  js  c++  java
  • 一些常用的sql

    在做东西的时候 经常要加入很多测试数据,总不能一条一条的录吧

    复制数据的sql,标记一下 免得又搞忘了。

    INSERT INTO hospital (hospitalName,functionary,telphone,address,stateid,agencyid)
    select hospitalName,functionary,telphone,address,stateid,agencyid FROM Hospital
    
    

    mssql数据库自带的函数

    遍历所有表

    exec sp_msforeachtable 'select top 2 * from ?'
    

     偶然翻黄师兄的代码 记得有个 select count(*) from(select * from tb) 的来查询一个sql查询的记录行数 今天怎么写都不对

    不得已又翻出来看 是 select count( *) from (select id from stuinfo) a   后面必须要带一个a 不然就不对

    还可以这样 select a.* from (select * from stuinfo) a  哇 好神奇 以前没想到可以这样搞

    今天考过滤有重名字的sql知道用聚合函数 结果把 聚合函数的过滤sql又搞忘了 是having ,>1代表有重复的

    select stuname ,COUNT(id) from stuinfo group by stuname having count(id)>1

    题里还出了啥写啥树状sql查询 我擦 这啥玩意 听都没听说过 ,网上一搜 还真有

    原来叫啥CTE 公共表表达式 sqlserver2005里才有的。

    来看一个例子:

    create table tb(id varchar(3) , pid varchar(3) , name nvarchar(10))
    insert into tb values('001' , null  , N'广东省')
    insert into tb values('002' , '001' , N'广州市')
    insert into tb values('003' , '001' , N'深圳市')
    insert into tb values('004' , '002' , N'天河区')
    insert into tb values('005' , '003' , N'罗湖区')
    insert into tb values('006' , '003' , N'福田区')
    insert into tb values('007' , '003' , N'宝安区')
    insert into tb values('008' , '007' , N'西乡镇')
    insert into tb values('009' , '007' , N'龙华镇')
    insert into tb values('010' , '007' , N'松岗镇')

    WITH Tree
    AS
    (
        SELECT id,pid,name FROM tb P WHERE P.Id = '003' -- parent id
        UNION ALL
        SELECT C.Id,C.pid,C.name FROM tb C
        INNER JOIN Tree T ON C.pid = T.Id
    )
    SELECT * FROM Tree

    试了一下确实可以 好神奇 ,为什么这么神奇原理在哪里 以前我们都要用c#代码写递归的

    关键在于那个with 刚刚说了CTE公共表表达式2005里才有的。 他的作用是with 出一个临时表 供后面使用

    来个简单点的例子:

    with ss
    as
    (select id from stuinfo where id>3)
    select * from ss

    这样简单噻 一看就明白 ,输出:

    id
    4
    5
    6

    上面的异曲同工 ,奥妙就在于 在with括号里面的sql他又使用了with的临时变量 这样就形成了递归调用 ,所以可以查询出树状结构咯。

    rownumber:

    select ROW_NUMBER() over(order by id desc),id from stuinfo

    关于删除重复数据的:

    delete from stuinfo where stuname in( select stuname from stuinfo group by stuname  having count(id) >1) and
    id not in(select min(id) from stuinfo group by stuname     having count(stuname)>1)

    原理是首先count>1则代表有重复的 ,然后根据stunamegroup   只要>1则代表有多个同名stuname 。如果只是此条件则会把所有重名全部删除。

    第二个子查询则是查询那些同名的最小id ,然后两个组合  删除所有重名的并把最小id排除不删。

  • 相关阅读:
    Python 3 Mysql 增删改查
    Python3 MySQL 数据库连接 -PyMySQL
    java 获取cookie
    Python 通过配置文件 读取参数,执行测试用例,生成测试报告并发送邮件
    Python 操作 Excel 、txt等文件
    SonarQube代码质量管理平台安装与使用
    Python + HTMLTestRunner + smtplib 完成测试报告生成及发送测试报告邮件
    Python 解析Xml文件
    GO语言基础
    FileBeat
  • 原文地址:https://www.cnblogs.com/assassinx/p/1837378.html
Copyright © 2011-2022 走看看