【前言】

纵观项目的开发,当项目框架搭建起来之后,更多的功能是无非是根据业务来操控SQL语句,针对每个开发来说SQL语句是个基本功,是避不开的。

当然SQL语句也挺有意思,通过它也能尽情的展示我们的才华,今天小编梳理一下最近项目中对SQL一些应用,在此与大家共享。

【再现SQL语句】

小编最近在做的是一个维护类型的项目,基本框架已经成型,主要工作是业务变化后来修改相应功能的SQL语句来满足新提出的需求,数据库是用的SQLServer;

(一)用户登录后显示上次登录信息

1、场景再现:

(1)系统用户登录后会在系统主页上显示上次登录的相关信息,如下图:

(2)But在我们系统验收的时候出现一个Bug用演示的账号登录进去一直显示的是2016年10月1号09:14这个时间,难道系统也在玩超越?追踪下去最后定位到问题出在SQL语句上!

(3)登录相关的实现:用户登录后将记录记录到数据库的登录相关表中,当跳转到主界面后会去视图(登录表和其他一些表构成)中根据当前登录的用户查找上次登录的信息;

2、实现SQL语句:

(1)先根据用户查看下视图中的内容:

SELECT  *
FROM    PermissionDB.dbo.V_UP_LOGININFO
WHERE   userid = 'liupu'
ORDER BY logintime DESC

执行后的效果图:

(2)查看功能实现的SQL语句:

SELECT  *
FROM    V_UP_LOGININFO v
WHERE   v.logintime IN (SELECT TOP 1000MAX(logintime) AS logintimeFROM    V_UP_LOGININFOWHERE   logintime NOT IN ( SELECT TOP 1000MAX(logintime) AS logintimeFROM     V_UP_LOGININFOGROUP BY useridORDER BY MAX(logintime) DESC )GROUP BY useridORDER BY MAX(logintime) DESC )AND v.userid = 'liupu'
ORDER BY logintime DESC

执行后的结果:

3、分析:通过上面查询不难看出实现的是从登录的视图中找到次最新时间(最新时间为本次登录),可是现在还不到10月1号那?后来经过确认是有人做测试;那么如何改进那?思路:在查询的时候加上限制条件,时间不能大于当前时间。

4、最终改正后的SQL语句:

SELECT TOP 1*
FROM    ( SELECT TOP 2*FROM      V_UP_LOGININFOWHERE     userid = 'liupu'AND logintime < GETDATE()ORDER BY  logintime DESC) AS a
ORDER BY a.logintime ASC

执行后的结果:

5、最终的效果图:

(二) 数据库表太多,请问如何查询一个字段在哪张表中那?

1、场景再现:由于是半路接手项目,主要是维护项目,对项目中很多表不是太熟悉,而且由于项目比较大,数据库表的个数比较多,有时候做一个功能或修改一个功能时需要根据表的某个字段去关联其他表来满足需求,这时候痛苦就来了,一个一个点表会崩溃的;淘到一个十分不错的SQL语句。

2、SQL语句:

SELECT  b.name '表名称'
FROM    syscolumns aINNER JOIN sysobjects b ON a.id = b.idAND b.xtype = 'U'AND a.name = '字段名称'

3、实际应用:

(1)首先在SQLServerManager中定位好你需要查找的库:

(2)执行该SQL语句:

SELECT  b.name '表名称'
FROM    syscolumns aINNER JOIN sysobjects b ON a.id = b.idAND b.xtype = 'U'AND a.name = 'CompanyCode'

4、最终的效果图:

(三)Order By按正序排序时,如何把NULL值排到后面去?

1、场景再现:在修改一个功能的时候按照其中的一个字段从小到大排序,但是该字段中有NULL值;需求是NULL值放最后;具体项目功能在此不便透漏在此自己模拟一个表。

2、实现SQL语句:

(1)查询模拟表中的所有内容:

SELECT  *
FROM    [test].[dbo].[Test_Order]

执行效果图:

(2)利用Order By对字段Score从小到大排序:

SELECT  *
FROM    [test].[dbo].[Test_Order]
ORDER BY Score 

执行效果图:

3、最终改正后的SQL语句:

                   SELECT  *FROM    [test].[dbo].[Test_Order]ORDER BY CASE WHEN Score IS NULL THEN 2ELSE 1END ,Score

4、最终的效果图:

【总结】

1、在项目整体框架定下后,接下来主要的工作是灵活运用SQL语句来实现功能,SQL语句能充分调动大脑去达到目的;

2、兴趣是靠后天的努力与激励获得的,刚开始学的时候对SQL语句接触比较少,用的也比较少,所谓的不感兴趣占主导,随着接触项目越来越多,应用的越来越多,用它实现的功能越来越复杂越精妙时,便有了兴趣;其实不仅仅是SQL语句,基本上所有的事物都是这样;大概一万小时定律也是基于这么个理念。

项目中SQL语句的一些应用总结相关推荐

  1. 项目中SQL语句文件保存及提取方法

    第十九章 SQL文保存方法 @http://blog.csdn.net/struts2/article/details/1745050 在开发JavaWeb应用程序的过程中可能经常需要使用到SQL语句 ...

  2. springboot项目中sql语句出错排除错误方法

    方法一: 在application.properties中加一句 逐步走,出错的sql语句就会打印在控制台上. //在application.properties中加一句 mybatis.config ...

  3. oracle12测试骤,Oracle中SQL语句解析的步骤

    我们都知道在Oracle中每条SQL语句在执行之前都需要经过解析,这里面又分为软解析和硬解析.那么这两种解析有何不同之处呢?它们又分别是如何进行解析呢?Oracle内部解析的步骤又是如何进行的呢?下面 ...

  4. ASP中SQL语句参考及记录集对象

    DB2 提供了关连式资料库的查询语言 SQL (Structured Query Language),是一种非常口语化.既易学又易懂的语法.此一语言几乎是每个资料库系统都必须提供的,用以表示关连式的操 ...

  5. html5 webDatabase 存储中sql语句执行可嵌套使用

    html5 webDatabase 存储中sql语句执行可嵌套使用,代码如下: var data = window.openDatabase("stu","1.0&quo ...

  6. oracle大于条件,oracle中sql语句中的in的条件数量大于1000有问题

    oracle中sql语句中的in的条件数量大于1000有问题 oracle中sql语句中select * from t_Test t where  t.Id in(1,2,3......)/*数量不能 ...

  7. Mysql中SQL语句不使用索引的情况

    Mysql中SQL语句不使用索引的情况 MySQL查询不使用索引汇总 众所周知,增加索引是提高查询速度的有效途径,但是很多时候,即使增加了索引,查询仍然不使用索引,这种情况严重影响性能,这里就简单总结 ...

  8. mysql数据库语句分类_细数MySQL中SQL语句的分类

    1:数据定义语言(DDL) 用于创建.修改.和删除数据库内的数据结构,如:1:创建和删除数据库(CREATE DATABASE || DROP  DATABASE):2:创建.修改.重命名.删除表(C ...

  9. 查询oracle 表达小,oracle中sql语句小练习(使用连接查询)

    假设A(m,n,p),B(m,n,p) --1.A表中有某一项m而B表中没有 使用左连接查询: select a.* from A a left join B b on a.m=b.m where b ...

最新文章

  1. 基于比特币现金的Token逐梦而来
  2. anaconda基本概念,常用命令
  3. 读书笔记--SQL必知必会03--排序检索数据
  4. java中什么泛型_java中的泛型(一)
  5. 动手学深度学习(PyTorch实现)(五)--多层感知机
  6. 极简主义shiny app
  7. 图像局部特征(二十)--Textons
  8. java还原混淆代码_飘云阁安全论坛如何还原混淆加密的JAVA代码 - Powered by Discuz!...
  9. 树莓派爱好者基地64位系统1.0正式版说明及介绍
  10. python怎么计算相关系数_相关系数怎么算(python如何计算相关系数与协方差)
  11. 深度学习与神经网络的异同
  12. python卡方拟合性检验_卡方检验
  13. NR 5G 无线帧与子载波
  14. DA03 – Schemas导论
  15. 高通 Hexagon V65 HVX 编程参考手册(1)
  16. 【数据库系统概论】-数据库设计
  17. 计算机课的英语怎么念,电脑课是什么意思
  18. linux越狱80x24,用Cydia Impactor 免越狱安装未签名APP方法[日常] | 贝贝吧
  19. Linux基础命令---文本过滤coi
  20. 【28】核心易中期刊推荐——医学影像识别及应用

热门文章

  1. “刘强东案”细节流出;小米或全球首发5G手机;罗永浩密会纳德拉;| 极客头条...
  2. 一夜身价暴涨千倍,程序员如何发布自己的 ICO?
  3. 程序员如何淡定度过 2.14 情人节?
  4. 火爆全网MySQL路线笔记!linuxmysql允许远程连接
  5. 想搞定大厂面试官?4面阿里拿到P7Offer通用流行框架大全
  6. git reset --hard HEAD 后恢复暂存区文件
  7. android软件欢迎界面,Android应用中实现一个软件启动的欢迎界面
  8. zabbix修改tomcat监控端口
  9. java 程序找错_JAVA程序找错~
  10. window.open() 方法