zoukankan      html  css  js  c++  java
  • [传智播客学习日记]SQL语句一例通之二——查询、存储过程

    一、一个例子看明白select语句的用法——查询本月通话总时长最多的前三个呼叫员的编号
    先分析一下题目,这道题有几个限制条件,
    首先是本月,这里要用时间函数,然后是总时长,要用聚合函数,之后是最多,需要用排序,最后是三个,用top。
    搭出select...where...group by...order by...的框架。
    首先,查询的目标是前三人的编号,还要显示总时长,就是:
    select top 3 [CallerNumber],...... from CallRecords
    总时长的话,可以这样取:
    sum(datediff(ss,[StartDateTime],[EndDateTime]))
    发现这里用到了聚合函数sum,那肯定要:
    group by [CallerNumber]
    既然查找的是本月,那就:
    where datediff(month,[StartDateTime],'2010-07-1') = 0
    最高的前三名一定是要排序的,所以
    order by sum(datediff(ss,[StartDateTime],[EndDateTime])) desc

    于是答案就是:
    select top 3 [CallerNumber], sum(datediff(ss,[StartDateTime],[EndDateTime])) from CallRecords
    group by [CallerNumber]
    where datediff(month,[StartDateTime],'2010-07-1') = 0
    order by sum(datediff(ss,[StartDateTime],[EndDateTime])) desc

    二、一个例子看明白带返回参数的存储过程——登陆成功判断
    声明:这种方法判断用户名密码正确与否很不科学,只是演示存储过程而已!
    首先定义存储过程,传进来用户Id和密码,返回成功与否的bit值,然后定义一个usrCount计数变量,在数据库里找用户信息,如果找到了,则计数位1,否则为0。
    create proc [dbo].[usp_CheckLogin]
        @loginId varchar(100),
        @loginPwd varchar(100),
        @isSuccess bit output
    as
    begin
        declare @usrCount int
        set @usrCount = (select count(*) from TblUser where loginId=@loginId and loginPwd=@loginPwd)
        if (@usrCount > 0)
            set isSuccess = 1;
        else
            set isSuccess = 0;
    end
    调用这个存储过程:
    declare @isOK bit
    exec usp_CheckLogin @loginId='用户名',@loginPwd='密码',@IsSuccess=@isOK output
    可以通过这条语句查看结果:
    print @isOK

  • 相关阅读:
    在购物过程中的购买用请求重定向不用转发的原因
    自己在WEB学习过程中遇到的问题
    WEB应用中普通java代码如何读取资源文件
    [课堂总结]C++课堂总结(二)
    [一些问题] ubuntu 18.04下 配置qt opencv的坑
    [学习笔记] Ubuntu下编译C++ OpenCV程序并运行
    [学习笔记] cv2.Canny 边缘检测
    [C++讨论课] 课堂记录(一)
    [R] 简单笔记(一)
    Appium入门示例(Java)
  • 原文地址:https://www.cnblogs.com/Elijah/p/2259501.html
Copyright © 2011-2022 走看看