資料庫的一些操作(Sql)
對於最近做的專案(教務系統),我想收穫最大之一就是對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命令(轉)資料庫SQL
- 一些常用的Oacle資料庫操作資料庫
- Sql Server系列:資料庫操作SQLServer資料庫
- SQL資料庫的一些攻擊(轉)SQL資料庫
- 資料庫常用操作SQL語句資料庫SQL
- T-SQL之資料庫操作SQL資料庫
- 【侯壘 】SQL資料庫操作類SQL資料庫
- 資料庫映象 (SQL Server)操作模式資料庫SQLServer模式
- SQL資料庫操作語言DCLSQL資料庫
- SQL Server資料庫對大容量表的操作SQLServer資料庫
- C#:資料庫SQL操作通用類C#資料庫SQL
- 認識及操作SQL Server 資料庫SQLServer資料庫
- SQL的資料庫操作:新增、更新、刪除、查詢SQL資料庫
- 轉發:C#操作SQL Server資料庫C#SQLServer資料庫
- 關於SQL資料庫一些簡單的筆記SQL資料庫筆記
- idea內建資料庫 + sql語句庫表操作Idea資料庫SQL
- Perl連線Oracle資料庫的一些操作指令碼【轉】Oracle資料庫指令碼
- 常用操作 / 資料庫操作資料庫
- 資料庫操作資料庫
- 資料庫操作·資料庫
- 記錄一些有關資料庫操作的擴充套件包資料庫套件
- 資料庫操作規範及SQL書寫建議資料庫SQL
- Golang原生sql操作Mysql資料庫增刪改查GolangMySql資料庫
- SQL資料庫SQL資料庫
- 值得白嫖的資料庫常用操作語句彙總(資料庫、資料表、資料操作)資料庫
- 一些常用的SQL(05版以上)資料庫維護指令碼SQL資料庫指令碼
- asp.net 操作Excel表資料匯入到SQL Server資料庫ASP.NETExcelSQLServer資料庫
- 【MYSQL資料庫開發之二】MYSQL基礎語句的書寫與一些資料庫操作(建立使用資料庫、表)!MySql資料庫
- SQL Server 2005中的tempdb資料庫的一些特點SQLServer資料庫
- 資料庫安全性操作——操作原則及SQL隱碼攻擊資料庫SQL
- 【Falsk 使用資料庫】---- 資料庫基本操作資料庫
- MongoDB 資料庫操作MongoDB資料庫
- mongodb資料庫操作MongoDB資料庫
- MySQL 資料庫操作MySql資料庫
- laravel 資料庫操作Laravel資料庫
- django資料庫操作Django資料庫
- Ecos 資料庫操作資料庫
- 資料庫基本操作資料庫