对于最近做的项目(教务系统),我想收获最大之一就是对sql语句的学习吧!这里,我总结一下我在项目中用到的一些SQL语句:

1,获取时间:getdate()     方法convert(varchar(10),getdate(),120)是获取当前时间的一个格式化方法,其中varchar(10)定义的是你要的字段的长度,当然长度的不同返回的也会不同的,如果我们只要日期部分,设成10正好为日期长度,如果设成19则正好可以读到时间部分。最后那个参数是返回不同的格式

参数 结果
100 05 8 2006 9:27PM
101 05/08/2006
102 2006.05.08
103 08/05/2006
104 08.05.2006
105 08-05-2006
106 08 05 2006
107 05 08, 2006
108 21:30:51
109 05 8 2006 9:31:11
110 05-08-2006
111 2006/05/08
112 20060508
113 08 05 2006 21:31:59
114 21:33:06:503
120 2006-05-08 21:33:38

2,获取当前时间是星期几:

set datefirst 1 SELECT datepart(weekday, getdate())

其中 set datefirst 1设置开始算的时间 1代表星期一 这里返回的是数字

3.获取年月日:

年:select year(getdate())  返回当前年份 比如2014

月:select month(getdate()) 返回当前月份 比如 3

日:select day(getdate()) 返回当前日期 比如 30   这三个函数参数都是传入的是时间 我这里是当前时间为例 用时可以灵活运用

4.函数 datediff(参数一,时间2,时间2)  这个函数是计算两个时间的差  参数一以什么单位计算常用的一般是 天(day)月(month)年(year)。。。当然还有其他参数,有兴趣可以百度百度  如 select datediff (day,'20014-3-29','2014-3-30')  返回的是 1

下面看几个例子

【1】     SELECT (SELECT
 CAST (
  (datediff(DAY ,(SELECT sem.StartTime
FROM
Semester AS sem
WHERE
sem.StartTime < convert(varchar(10),getdate(),120) AND
sem.EndTime > convert(varchar(10),getdate(),120) ), getdate())) AS INT
 )+7)/7 as week

说明:这个sql语句业务是:在学期表中找出以当前学期的开始时间和当前时间的差算出当前是第几周 返回 数字 如 5 表示第五周

【2】SELECT
sem.SemesterName,
sch.SchoolYearName,
sem.SchoolYearID,
sem.SemesterID
FROM
Semester AS sem ,
SchoolYear AS sch
WHERE
sem.StartTime < convert(varchar(10),getdate(),120) AND
sem.EndTime > convert(varchar(10),getdate(),120) AND
sem.SchoolYearID = sch.SchoolYearID

说明:这个sql业务很简单 就是查找学年学期表当前的学期学年

【3】   set datefirst 1 
SELECT DISTINCT cla.ClassroomName,clad.StartWeeks,clad.EndWeeks,clad.[Section],clad.Location,clad.Week,tea.TeacherName
FROM Classroom AS cla ,ClassroomDetail AS clad ,Semester AS sem ,SchoolYear AS sch ,CourseChooseDetail AS chod ,CourseChoose AS cho ,Teacher AS tea ,Student AS stu,Operator AS opr
WHERE
(SELECT datepart(weekday, getdate())) = clad.Week AND
clad.StartWeeks < (SELECT CAST ((datediff(DAY,(SELECT sem.StartTime FROM Semester AS sem,SchoolYear AS sch WHERE sem.StartTime < CONVERT (VARCHAR(10), getdate(), 120) AND sem.EndTime >CONVERT (VARCHAR(10), getdate(), 120) AND sem.SchoolYearID = sch.SchoolYearID),getdate())) AS INT) + 7) / 7 AND
clad.EndWeeks > (SELECT CAST ((datediff(DAY,(SELECT sem.StartTime FROM Semester AS sem,SchoolYear AS sch WHERE sem.StartTime < CONVERT (VARCHAR(10), getdate(), 120) AND sem.EndTime >CONVERT (VARCHAR(10), getdate(), 120) AND sem.SchoolYearID = sch.SchoolYearID),getdate())) AS INT) + 7) / 7 AND
cla.SchoolYearID = sch.SchoolYearID AND
sem.SemesterID = cla.SemesterID AND
cla.ClassroomID = cho.ClassroomID AND
clad.TeacherID = tea.TeacherID AND
opr.OperatorID = stu.OperatorID AND
stu.StudentID = chod.StudentID AND
opr.OperatorID = :operatorID AND
chod.CourseChooseID = chod.CourseChooseID

说明:这个sql业务是:先找到当前是当前学期的第几周 和 是星期几  然后再 找到满足当前周次大于课堂详情表开始周,小于结束周  然后连表查询几个表  传入参数就只有OperatorID一个   主要是找学生的今日课表

5.左连接和右连接:左右查询主要是连表查询时有一边的值为空时用,当有一边为空数据时,也会返回这一列

左:FROM 表一 LEFT JOIN 表二 ON 列1=列2    右类同

【4】SELECT stu.StudentID,res.ReStudyID,cla.ClassroomName,stu.GradeMajorAssignID,stu.StudentName, stu.PassportCode, stu.StudentCode,
    maj.MajorName,maj.MajorID,cou.CourseID,cou.CourseName,res.isPaid,res.isPass FROM Student stu,
    Major maj ,Course cou,Classroom cla2,(ReStudy res LEFT JOIN Classroom cla ON cla.ClassroomID = res.ClassroomID)  WHERE res.StudentID = stu.StudentID AND res.MajorID = maj.MajorID  AND res.PreClassroomID = cla2.ClassroomID AND stu.StudentName like :StudentName
    AND stu.PassportCode like :PassportCode AND stu.StudentCode like :StudentCode AND
    maj.MajorID =:MajorID

说明:这个sql主要是左查询重修表中的课堂ID 当课堂表的课堂ID为空时  还是要返回当前这一列

6.当一个表有两个字段都是连同一个id表时,可以直接在from后面多加一次  用as重新名一个名字即可

7.case... when语句在sql中的运用

SELECT
sch.SchoolYearName,
sch.StartYear

FROM
dbo.SchoolYear AS sch
WHERE (sch.StartYear =case (select MONTH(GETDATE()))
             when 1 then (select year(GETDATE())-1)
             when 2 then (select year(GETDATE())-1)
             when 3 then (select year(GETDATE())-1)
             when 4 then (select year(GETDATE())-1)
             when 5 then (select year(GETDATE())-1)
             when 6 then (select year(GETDATE())-1)
             when 7 then (select year(GETDATE())-1)
             when 8 then (select year(GETDATE())-1)
             when 9 then (select year(GETDATE()))
             when 10 then (select year(GETDATE()))
             when 11 then (select year(GETDATE()))
             when 12 then (select year(GETDATE()))
end)

当然这个项目用的最多的还是连表查询,最多的时候接近10个表的连表查询   项目快结束了,现在还在改bug,不过还是学到了很多,给大家分享一下,就当总结下

数据库的一些操作(Sql)相关推荐

  1. mysql bak 还原数据库文件格式_Navicat操作SQL server 2008R2文件.bak文件还原

    项目操作过程中,利用Navicat操作SQL Server2008R2数据备份,结果发现数据丢失了很多,不得不先对数据丢失部分进行差异对比,然后再重新输入. 1.利用Navicat导出的数据格式为sq ...

  2. 数据库常用表操作SQL语句案例

    1. 简单SQL查询语句 案例:查询没有上级领导的员工的编号,姓名,工资 select empno,ename,sal from emp where mgr is null; 案例:查询emp表中没有 ...

  3. MySQL学习笔记02【SQL基本概念与通用语法、数据库的CRUD操作】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  4. oracle 查看用户日志,Oracle查看用户操作sql语句以及数据库日志

    --查看日志文件 select member from v$logfile; --查看表空间使用情况 SELECT SUM(bytes) / (1024 * 1024) AS free_space, ...

  5. oracle dblink 20001,解决ORA-02021: 不允许对远程数据库进行 DDL 操作下面通过DBLINK调用远程过程来执行这样的操作。...

    一般情况下,当我们直接truncate一个远程的表的时候,通常会返回如下的错误信息: ORA-02021: DDL operations are not allowed on a remote dat ...

  6. Oracle 数据库简单日常操作

    Oracle 数据库简单日常操作 目录 Oracle 数据库简单日常操作 SQL基础部分 1.简介 2.安装好之后可以登录系统账户 3.用户与表空间 4.数据字典 5.如何启用scott用户 6.表空 ...

  7. sqlserver2008 获取最后插入的id_Python3操作SQL Server2008数据库

    上一次,其实也就昨天,说了<Sql Server2008安装步骤很详细,为Python3操作做准备>后,心里一直很激动,究竟在激动啥,我也不清楚,你尽管呵呵~傻笑几分钟就是了. 笑够了以后 ...

  8. python3连接sql server数据库_Python3操作SQL Server数据库(实例讲解)

    1.前言 前面学完了SQL Server的基本语法,接下来学习如何在程序中使用sql,毕竟不能在程序中使用的话,实用性就不那么大了. 2.最基本的SQL查询语句 python是使用pymssql这个模 ...

  9. Navicat工具获取操作数据库和表的SQL语句

    工具 Navicat Premium 15 MySQL服务器技术 SQL语句MySQL 在使用Navicat Premium 15客户端时,对数据库和表进行操作,会产生SQL语句.有时我们不记得SQL ...

  10. C#操作SQL Server数据库

    C#操作SQL Server数据库 1.概述 2.连接字符串的写法 3.SqlConnection对象 4.SqlCommand对象 5.SqlDataReader对象 6.DataSet对象 7.释 ...

最新文章

  1. 基因课 15天入门生物信息(2021年) 第三天 Linux基础命令(3)
  2. 2011年终盘点——附图灵公司销售榜单(TOP20)
  3. asp.net MVC 的处理流程
  4. 30年货币翻了300倍!如何能跑赢印钞机?
  5. 微软停止与华为合作:Windows暂停供应新订单
  6. 传智C++课程笔记-1
  7. Replace Pioneer
  8. 鼠标悬浮显示文字的简单方法
  9. Raki的读paper小记:A Unified MRC Framework for Named Entity Recognition
  10. 流程图软件Microsoft Visio
  11. Android资深开发者告诉你:简历这样写绝对吸引面试官眼球,面试电话接到手软
  12. 静态文件托管服务器,幽默:如何在静态文件托管服务器上使用数据库?
  13. 数字图像处理 - 实验作业一 - Python
  14. 两台计算机共享文件夹,两台电脑共享文件,详细教您两台电脑如何共享文件
  15. Git - IDEA中分支右侧上下箭头的含义
  16. 玉米社:抖音作品几大核心指标,完播率、点赞率、吸粉率多少算好?
  17. 好用的第三方网站ios
  18. matches()方法的使用规则
  19. Linux/Centos7搭建饥荒服务器教程
  20. UML图之四——活动图

热门文章

  1. PS李涛老师的课程笔记 【PS初级】绘画与修饰工具
  2. ActiveMQ 配置启动文件介绍
  3. 博客配置又拍云CDN
  4. 怎么做出牛逼的二维码图片?
  5. 安鸾渗透实战平台(文件上传)—— Nginx解析漏洞 (100分)
  6. 安卓学习布局篇 Android studio(二)
  7. 使用Unity创建塔防游戏(Part1)
  8. 自定义键盘按键AutoHotKey的简单使用
  9. 破茧成蝶2:和产品经理一起做需求分析
  10. [LabVIEW]子VI中移位寄存器未初始化的严重后果