SQL server 复习一
第一天
下面我們從最基礎的開始:
在運行里面輸入:services.msc
?
一、啟動服務
?
?
?
二、數據庫登錄的兩種身份驗證方式
另外一種身份驗證方式就是SQL Server身份驗證.
sa不能使用的時候可以這樣的操作:
1.用windows登錄,然后在“實例”右鍵“屬性”,“安全性”,設置“服務器身份驗證方式”
為“SQl Server和windows混合”,點擊確定?!爸貑⒎铡?
2.啟用sa賬號。用windows連接好數據庫后,點擊“安全性”,→“登錄名”→右鍵“sa”屬性,→狀態→啟用,啟用后,再找到“常規”選項卡,修改sa的密碼。
?
實例
?
啟用sa賬號
?
相關的登錄操作已經介紹完了,接下來開始進入實戰
1.創建數據庫:
?
三、創建數據庫
怎么樣建一張表呢?
?
四、新建表
?
?
五、如何設定自動編號
?
六、修改創建好的表
?
七、給表中添加數據
?
八、數據庫中的常用數據類型
上圖中列舉的是常用的數據庫當中的數據類型。
下面分別介紹一下。
有的時候圖片信息是存儲在數據庫里面的,這個時候就要用二進制image類型。
?
char(10)存的多了不行,如11個,但是少了是可以的。占得空間是固定的。
nchar(10)? 性別存儲建議用它
char、nchar凡是?? 前面不帶var的都表示固定長度。
?
varchar、nvarchar則表示可變長度,長度是可變的。
varchar(10); 2,實際存儲的時候,會根據實際的數據來動態的計算長度,
對于超出預先聲明的長度則會報錯,如果不夠的,則重新計算,按實際長度來算。
地址一般用可變長度。
?
nchar(10)
char(10)和nchar(10)的區別:
char(10) 'aaaaaaaaaa','找找找找找'? 占10個字節
nchar(10) 'aaaaaaaaaa','找找找找找找找找找找'? ,占20個字節
什么時候用帶n的呢?系統用的是帶中文的信息,用char就行了。
但是如果我們要在英文的操作系統下執行,還是建議使用帶n的。
?
?
它們的最大值:varchar(8000)
????????????? char(8000)?
?
????????????? nvarchar(4000)
????????????? nchar(4000)
?
varchar(10)
nvarchar(10)
varchar(max)文章的內容非常的長時用。
nvarchar(max)
?
SQL2005以后,不建議使用這個。
text
ntext
?
數據庫的分離和附加
?
九、分離
?
十、分離2
?
十一、附加
?
十二、附加2
?? 自動編號永遠是勇往直前的,不會后退的。
下面介紹用代碼的方式創建數據庫
?
?
十三、新建數據庫
????
十四、創建數據庫的代碼
接下來時創建表:
?
十五、在數據庫中創建表
?
十六、go語句
如果我想把我的數據庫的腳本拷給我的同事,但是他的現在使用的是SQL2005版本,我用的是SQL2008版本,此時就不能用分離,附加了.請看下面的步驟:
?
十七、生成腳本步驟一
?選擇下一步
選擇:編寫整個數據庫的所有的腳本。
?
十八、生成腳本步驟二
當然這里面還有一些我們可以選擇的項。在這不一一敘述了。
關于附加這塊可能會遇到些小問題,有問題的朋友可以向我提問?
?
Ctrl+K+C注釋;
Ctrl+K+U取消注釋;
?
結果試圖可以用ctrl+R
?
十九、如何查看表中的數據
下面介紹插入數據的幾種形式。
?
二十、插入數據
? 這里除去自動編號,不需要人工插入的那些列。
?
二十一、插入不為空的數據
?
二十二、轉譯了
? 不能為空的列必須插入數據,否則的話會報錯的。
?
二十三、插入自動編號
?
二十四、插入多行數據
? 注意這的寫法,union在后面詳細介紹。
?
二十五、把現用表中的數據導出到一個新表
?
二十六、創建一張表,與源表的結構一樣,但是不含數據
?
新增內容
?
新增建議
二十七、向已有表中插入數據
?
二十八、插入中文,前面加N
下面介紹更新的常用方法:
?
二十九、更新一列
?
三十、同時更新多列數據
先來說一下這個。
?
三十一、限定條件查詢行
?
三十二、限定列和行查詢
?
三十三、同時更新指定行和指定的列
? 注意在更新之前先要備份一下,否則會出現令人麻煩的事情??梢宰鰝€備份,還原。
?
三十四、同時限定更新符合兩列條件。
? 同時注意下數據庫當中邏輯運算符not and or 的使用;優先級:not and or
?
三十五、把所有的年齡都加1
? 在數據庫中寫加1還是寫成圖中的形式比較的好。永遠這么寫,換個地方可能就不能用了。小括號可以改變優先級。
? 下面介紹下刪除數據的兩種方式:
?
三十六、刪除指定的數據
?
三十七、兩種刪除語句及其區別
? 圖中注釋部分是它們之間的區別。
下面介紹下關于約束的一些知識:
建約束以前先把之前的數據都刪掉,因為之前的數據都是不合法的。
?
三十八、建約束第一步
?
三十九、建約束第二步
?
四十、建約束第三步
點擊:表達式
輸入約束條件
點擊:確定
?
?
四十一、約束執行
?
四十二、再設定其它的一些約束
?
四十三、約束獲取當前數據庫時間
除檢查約束外的其它的形式:
默認約束:
?
四十四、修改默認值
唯一約束
?
四十五、唯一約束,如身份證號碼不能一樣
四十六、填好唯一約束的內容
如果我在輸入數據的時候,輸入的部門是30,而部門表中沒有30這個部門。這個時候,我需要設定外鍵。
外鍵約束:
?
四十七、建立外鍵約束
?
四十八、外鍵關系設定
點下:表和列規范
設定好主鍵表 外鍵表? 以及相關聯的ID,注意要一樣
點擊確定自動生成標識,名稱
?
?
四十九、設定好的主外鍵
? 從圖中我們清晰的看到,主鍵為黃色,外鍵為灰色。
? 沒有被外鍵引用的表可以刪掉,而被引用的不能刪掉。
? 由于建立了主外建關系會引起一系列的麻煩,所以,一般我們不建。但是,我們通過程序來維護主外建關系。
?
五十、刪除主外建約束前奏
?
?
五十一、刪除主外建約束一
?
五十二、刪除主外建約束二-級聯刪除
?
第二天:
數據庫對我們現在工作中的朋友的幫助是相當大的,在大數據處理的時候,可以讓我們方面的查詢,管理數據。
? 尤其是當下的電商行業,都是在網絡上面進行銷售,所以,數據庫更加彰顯出其魅力。
比如,我在指南針的幾年里面,當然是公司設計好的數據庫讓我們用。對于客戶的查詢,處理等問題,包括對自己管轄范圍內的客戶的管理?;旧隙际峭ㄟ^數據庫來完成的。所以,經常的會用到一些基本的查詢,更新,刪除等等語句。
? 在這里我也為大家整理了相關的資料,希望大家喜歡。
?
一、新建兩張表
?
二、手動刪除一列
?
三、手動增加一列
?
四、增加一個非空列
?
五、修改列
? 下面我們看看數據庫中增加約束和刪除約束的相關案例:
?
六、增加一個主鍵約束
?
七、增加一個非空約束
?
八、增加一個唯一約束
?
九、為性別增加一個默認約束
?
十、為性別增加一個檢查約束
?
十一、為年齡增加一個檢查約束
?
十二、增加一個外鍵約束
?
十三、增加級聯刪除,更新
?
十四、刪除某個名字的約束
?
十五、一條語句刪除多個約束
?
十六、用一條語句為表增加多條約束
下面看下數據的檢索:
?
十七、查詢學生表
?
十八、這列是干什么的呢?
? 圖中畫圈的部分是干什么的呢?比如,我在中國移動辦了個手機號,現在注銷了。那么,在中國移動的數據庫中我的數據就真的刪了么?很多時候,并沒有刪。對于用戶來講,是刪了,只是中國移動做了個標記。就是用戶下次再登陸的時候登陸不進去了,但是,并沒有刪。在記錄里面用0和1表示,這個我們一般叫做“軟刪除”。一般0表示false沒有刪,1表示true刪了。
?
我只想看其中的三列,這么寫,見下圖:
?
十九、只看其中三列的信息
? 上圖中直接顯示英文,對于用戶來講不是特別的友好,我現在需要顯示它們的中文信息。也就是給列起別名。怎么給列起別名呢?
?
二十、起別名
?
二十一、起別名的第2,3種寫法
?
二十二、顯示自定義查詢結果
?
二十三、基本檢索
?
二十四、top
?
二十五、查看前十行且只有姓名
?
二十六、返回前百分之十
現在數據庫里面就有11條數據,返回百分之十,是多少條呢?
答案是:2條。
?
二十七、排序
?
二十八、distinct
如果有三列,看三列當中這個的數據有沒有重復,有的話,就會去掉重復。
影響表中數據么?根本不影響。
?
下面我看來看看數據庫當中五個常用的聚合函數:
當我們在工作中有什么不會的了,可以點開幫助-索引,輸入:聚合函數。
?
二十九、五種常用聚合函數
下面我們看下帶條件查詢:
?
三十、帶條件查詢1
?
三十一、帶條件查詢2? in的用法
接下來我們看下帶條件查詢-模糊查詢
?
三十二、like查詢 %
?
三十三、like查詢 _
?
三十四、like查詢 [? ]
^ 是非的意思,跟正則表達式中一樣。
?
三十五、like查詢 ^
下面我們看下數據庫中的Null值處理
請你查出年齡不為空的所有人得年齡,怎么查呢?
?
三十六、null就是unknow的意思
? 系統沒辦法識別了,就是比如20不等于不知道。怎么比啊?返回的也是個unknow,在where后面就是個false,所以沒有任何的查詢記錄。
? 沒法用<> 和 = 進行比較,那么我們怎么寫呢?
?
三十七、這么寫null判斷
?
三十八、空值的替換
? 設計器上面要插入個空值的話,得寫大寫的N,Null。要是什么都沒寫,不行的,那是個字符串為0的字符串。要是寫的小寫的null,是字符串為null的字符串。這是我們需要小注意的地方。
下面我們再看下order by語句:
一般都是寫在查詢語句的最后的。
?
三十九、按多列的條件進行排序
?
四十、按表達式排序
一旦有了order by以后這個表就不是集合了?,F在只提一下這個概念。
?
接下來我們看下數據分組:
? 首先,我們提出幾個問題。什么時候才會遇到這個分組情況呢?分組是個什么東西呢?
? 比如根據籍貫分組,根據男女分組。
? Group by在數據匯總統計的時候用,一般和聚合函數一起來用。如果不分組就用聚合函數的話,它是把組里面所有的信息當成了一組來統計。
? 要是分組了再用聚合函數的話,統計的是每一組的信息。
?
四十一、按照班級分組
?
四十二、分組后查詢每個組里面有多少個人
? 現在想看看組中數據大于3的,如果要想對分組再進行篩選,我們用的是having。
?
四十三、對分組以后再篩選用having
?
四十四、分組判斷的時候需要注意的情況
?
四十五、分組判斷的時候需要注意的情況二
? Select 這塊哪些列能寫?哪些列不能寫呢?group by中包含的列和聚合函數都能寫,其它的不能寫。
? 為什么呢?還是思考那個問題,當分完組以后,就都是組當中的信息了。在分組之前對數據的篩選用where,它們兩個是不能混用的。
四十六、簡單的SQL語句執行順序
? 了解SQL語句的執行順序能知道哪用別名?對于理解SQL語句的命令也是有好處的。當然,這里列出的是簡單的SQL語句執行順序。
?
四十七、Group By練習
下面我看來看下函數的類型轉換:
?
四十八、數據類型轉換的兩種寫法
?什么情況下會遇到數據類型的轉換呢?
?
四十九、實際問題中遇到的數據類型轉換一
如果不轉換的話,將按照字符進行排序。而不是兩起來的兩個或多個數字進行排序。
?
五十、實際問題中遇到的數據類型轉換二
? 在日期轉換的時候用convert就行了,120是不同數據庫中時間的類型。
接下來我們看下聯合結果集union(集合運算符)
?
五十一、union
? 這里有個需要注意的地方,每列當中相對應的數據類型必須得一樣。調一下位置是不行的。要想能聯合的話,必須得保證每個列的數量相同,數據類型相同。
?
五十二、聯合中有一列為空的時候
? 最后查詢的結果集是以第一個的列名命名的。
但從姓名和性別看的話,有幾條是一樣的數據。Union可以去除重復數據,如果不想去除的話,后面加個all
?
五十三、union all
那么union all在什么時候用呢?
常見應用:底部匯總。
?
五十四、年齡匯總
?
五十五、成績匯總
? 下面我們看看字符串函數:
? 這塊的學習,使用還是要多借鑒微軟的幫助。
?
五十六、字符串函數
? 自己可以看看replace,stuff這兩個函數怎么用。
再下來我們看看日期函數:
? 日期函數還是,我們可以在數據庫當中的幫助里面輸入:日期和時間
?
五十七、在當前時間增加時間
?
五十八、計算兩個時間的差
?
五十九、datediff具體的應用
?
六十、獲取時間的某個部分
下面這個案例對做電銷工作的朋友非常的實用:
?
創建一張表,記錄電話呼叫員的工作流水,記錄呼叫員編號、對方號碼、通話開始時間、通話結束時間。建表、插數據等最后都自己寫SQL語句。 要求:輸出所有數據中通話時間最長的5條記錄。orderby datediff 輸出所有數據中撥打長途號碼(對方號碼以0開頭)的總時長。like、sum 輸出本月通話總時長最多的前三個呼叫員的編號。 輸出本月撥打電話次數最多的前三個呼叫員的編號.group by,count(*)
?
CREATE TABLE [CallRecords] ([Id] [int] NOT NULL identity(1,1),[CallerNumber] [nvarchar](50), --三位數字,呼叫中心員工編號(工號)[TelNum] [varchar](50),[StartDateTime] [datetime] NULL,[EndDateTime] [datetime] NULL --結束時間要大于開始時間,默認當前時間 )--主鍵約束 alter table [CallRecords] add constraint PK_CallRecords primary key(id)--檢查約束 alter table [CallRecords] add constraint CK_CallRecords check(CallerNumber like ‘[0-9][0-9][0-9]’) \d{3}錯誤!!alter table [CallRecords] add constraint CK_CallRecords_EndDateTime check(EndDateTime > StartDateTime)--默認約束 alter table [CallRecords] add constraint DF_CallRecords default(getdate()) for EndDateTimeINSERT [dbo].[CallRecords] ([CallerNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('001', '0208888888', CAST(0x00009DAF00A4CB80 AS DateTime), CAST(0x00009DAF00A62E94 AS DateTime)); INSERT [dbo].[CallRecords] ([CallerNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('001', '0208888888', CAST(0x00009DB000D63BC0 AS DateTime), CAST(0x00009DB000D68DC8 AS DateTime)); INSERT [dbo].[CallRecords] ([CallerNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('001', '89898989', CAST(0x00009DB000E85C60 AS DateTime), CAST(0x00009DB000E92F50 AS DateTime)); INSERT [dbo].[CallRecords] ([CallerNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('002', '98987676', CAST(0x00009DB2015BB7A0 AS DateTime), CAST(0x00009DB2015C4DA0 AS DateTime)); INSERT [dbo].[CallRecords] ([CallerNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('002', '02188839389', CAST(0x00009DA4014C9C70 AS DateTime), CAST(0x00009DA4014E0308 AS DateTime)); INSERT [dbo].[CallRecords] ([CallerNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('001', '767676766', CAST(0x00009DB400DAA0C0 AS DateTime), CAST(0x00009DB400DD5FE0 AS DateTime)); INSERT [dbo].[CallRecords] ([CallerNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('003', '0227864656', CAST(0x00009DB200B9AB40 AS DateTime), CAST(0x00009DB200B9FC1C AS DateTime)); INSERT [dbo].[CallRecords] ([CallerNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('003', '676765777', CAST(0x00009DB8014042B8 AS DateTime), CAST(0x00009DB80141804C AS DateTime)); INSERT [dbo].[CallRecords] ([CallerNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('001', '89977653', CAST(0x00009D9A00FB9898 AS DateTime), CAST(0x00009D9A00FE6118 AS DateTime)); INSERT [dbo].[CallRecords] ([CallerNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('004', '400400400', CAST(0x00009D9A00FB9898 AS DateTime), CAST(0x00009D9A00FE6118 AS DateTime));?
六十一、通話第一小題
? 思路:看到通話時長最長的,先求通話時長;最長-倒排序;前五條-top 5
?
六十二、通話時長第二小題
?
六十三、通話時長第三小題
?
六十四、通話時長第四小題
最后一個小題,暫時不公布答案,留個做思考。
?
轉載于:https://www.cnblogs.com/zxh930508/p/4189648.html
總結
以上是生活随笔為你收集整理的SQL server 复习一的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vsftp服务器搭建
- 下一篇: 谈谈用SQLite和FMDB而不用Cor