zoukankan      html  css  js  c++  java
  • Sqlserver 增删该查----查

    数据查询应该是数据库中最常用的操作了,下面就来介绍一下我在实际开发中常用的一些查询。

    1,具有多个条件的查询方式

      这个我在sqlserver多条件查询中已经介绍过了。(地址:https://www.cnblogs.com/zpy1993-09/p/11677406.html

    2,需要分页的查询方式

      sqlserver分页查询中介绍了(地址:https://www.cnblogs.com/zpy1993-09/p/11751597.html)

    3, 需要把数据合并的查询方式

    我们通常都会用(union,union all ,left jion ,right jion)

      union,union all 的使用,从两张不同表格里取出一条数据的两列数据。

            

      把两条数据合并

    select top 1 P_NUM,P_NUMPUE from [DuanJu].[dbo].[JZ_POWER_DAYHIS] where DB_ID=52 union 
    select top 1 P_NUM1,P_NUM2 from [DuanJu].[dbo].[JZ_POWER_HIS] where DB_ID=8

    select top 1 P_NUM,P_NUMPUE from [DuanJu].[dbo].[JZ_POWER_DAYHIS] where DB_ID=52 union all
    select top 1 P_NUM1,P_NUM2 from [DuanJu].[dbo].[JZ_POWER_HIS] where DB_ID=8

     

    left jion ,right jion的使用

    --左表
    SELECT
    [DB_ID] ,[DB_CODE],[DB_PORT] FROM [DuanJu].[dbo].[JZ_DIANBIAO] where JZ_ID=2294

       

    --右表
    SELECT
    [DB_ID],[DB_CODE],[DB_PORT]FROM [DuanJu].[dbo].[JZ_DIANBIAO] where JZ_ID=2294 and DB_PORT=5041

    左关联:

    右关联:

        

       3,查询不同类型的最新一条数据。

         下面是一张数据表格,记录了,不同JZ_ID的多条记录,我们要想办法查找不同JZ_ID下的最新一条记录。

        

     
    --其实方法有很多种,我们这里只说一种就行了。
    --首先我们得到JZ_ID,记住是去重后的JZ_ID,因为在一张表里同一个JZ_ID对应多条数据。然后就是得到每一个JZ_ID最新一条数据的具体时间
    select JZ_ID ,MAX(UpdateTime) UpdateTime from [DuanJu].[dbo].[JZ_POWER_DAYHIS] group by JZ_ID

    --然后根据该查询结果和原表利用JZ_ID和最新更新时间进行关联,就得到我们想要的结果了。
    select
    a.* from [DuanJu].[dbo].[JZ_POWER_DAYHIS] a, ( select JZ_ID ,MAX(UpdateTime) UpdateTime from [DuanJu].[dbo].[JZ_POWER_DAYHIS] group by JZ_ID) b where a.JZ_ID=b.JZ_ID and a.UpdateTime=b.UpdateTime

    注意:如果要查询最新一条记录,其实不必查询整张表的,如果这张表的数据量很大,几千万条,或者上亿条,那你查询整张表,是非常耗时的。所以一般要求不是太苛刻的话,我建议你最好多加个条件,比如

      大于某个时间,三天内的,或者一天内的。当然这个要根据实际情况来。

     4,从多张表中获取不同列参数,合并一起作为查询输出表。

        从三张表中分别获取一列,组合在一起输出:

        

     

      方法1:

       

    select a.JZ_NAME,b.DB_CODE,SBD_NAME from [DuanJu].[dbo].[JZ_JIZHAN] a,[DuanJu].[dbo].[JZ_DIANBIAO] b ,[DuanJu].[dbo].[JZ_SheBeiDetail] c
    where a.JZ_ID=b.JZ_ID and b.JZ_ID=c.JZ_ID and b.DB_ID=c.DB_ID

       方法二:

    SELECT
      (select JZ_NAME from [DuanJu].[dbo].[JZ_JIZHAN] where JZ_ID=a.JZ_ID) JZ_NAME
       ,(select DB_CODE from [DuanJu].[dbo].[JZ_DIANBIAO] where JZ_ID=a.JZ_ID and DB_ID=a.DB_ID) DB_CODE
       ,a.[SBD_NAME] 
      FROM [DuanJu].[dbo].[JZ_SheBeiDetail] a

    6,将一对多条记录的,作为一个字符串输出。

    如下图将同一个jz_ID对应的不同DB_CODE拼接成字符串,作为一行输出。

    SELECT Name = STUFF((SELECT ','+a.DB_CODE FROM [DuanJu].[dbo].[JZ_DIANBIAO] a  where a.JZ_ID=2292 FOR XML PATH(''),TYPE).value('.','NVARCHAR(MAX)'),1,1,'')

    7,将查询结果拼接成json字符串的格式输出。

    select
    '{"SBD_ID":'+cast(a.SBD_ID as varchar)+',"SBD_NAME":"'+a.SBD_NAME+'","datas":['+
     (SELECT  Name=STUFF((SELECT ','+'{"P_NUM":'+ cast(P_NUM as varchar)+',"AddDate":"'+cast(AddHour as varchar)+'"}'
      FROM Power_SBHour where SBD_ID=a.SBD_ID and  convert(char(10),AddTime,120)='2020-01-10' order by AddTime asc   FOR XML PATH(''),TYPE).value('.','NVARCHAR(MAX)'),1,1,''))
      +']}' as strJson
     from JZ_SheBeiDetail a where a.JZ_ID=2292

    其实在实际开发中遇到的查询远不止这些,只能具体情况具体对待,有的时候一个算法所写的sql代码可能和后台代码一样长,还需要注意的是在保证你所需的查询结果后,还有保证查询的效率,如果查询一个结果需要十几秒或者更长,那就不好了,毕竟对用户体验不好,所以在你能需要学习一些sql代码优化的知识了,比如索引。。。等。

  • 相关阅读:
    [LeetCode]113. Maximum Depth of Binary Tree二叉树的最大深度
    [LeetCode]112. Maximum Subarray最大和连续子序列
    [LeetCode]111. Find Minimum in Rotated Sorted Array II旋转数组最小值II
    [LeetCode]110. Find Minimum in Rotated Sorted Array旋转数组最小值
    [LeetCode]109. Construct Binary Tree from Inorder and Postorder Traversal由中序序列和后序序列重建二叉树
    [LeetCode]108. Construct Binary Tree from Preorder and Inorder Traversal由前序序列和中序序列重建二叉树
    [LeetCode]107. Best Time to Buy and Sell Stock III股票买卖III
    [LeetCode]106. Best Time to Buy and Sell Stock II股票买卖II
    [LeetCode]105. Word Search单词查找
    一些杂事之后,该收心了
  • 原文地址:https://www.cnblogs.com/zpy1993-09/p/13025420.html
Copyright © 2011-2022 走看看