標籤:
子曰:“溫故而知新,可以為師矣。”孔子說:“溫習舊知識從而得知新的理解與體會,憑藉這一點就可以成為老師了。“ 尤其是咱們搞程式的人,不管是不是全棧工程師,都是集十八般武藝於一身。不過有時候有些知識如果有很久沒用了的話,就會忘記,甚至是忘的你一點都想不起來,尤其是一些基礎的東西。所以我才打算寫個"溫故而知新"的系列博文出來,一來是這些基礎的東西我比較健忘,以後方便自己翻閱;二來是希望可以協助到一些剛入門的朋友。這個系列記錄的所有知識點都是最最最(重要的事情說三遍)基礎的知識。大部分都是我學習的時候所積累的筆記。
溫故而知新系列都是一些基礎知識,大神可以直接跳過。
v寫在前面
如果十八般武藝都融會貫通,如果什麼兵器你都耍得有模有樣,那麼這篇博文你大可以跳過了。只是在忘記的時候,可以拿出來溫習溫習。
v基本概念
SQL Server 是Microsoft 公司推出的關係型資料庫管理系統。具有使用方便延展性好與相關軟體整合程度高等優點,可跨越從運行Microsoft Windows 98 的膝上型電腦到運行Microsoft Windows 2012 的大型多處理器的伺服器等多種平台使用。 Microsoft SQL Server 是一個全面的資料庫平台,使用整合的商業智慧 (BI)工具提供了企業級的資料管理。Microsoft SQL Server 資料庫引擎為關係型資料和結構化資料提供了更安全可靠的儲存功能,使您可以構建和管理用於業務的高可用和高效能的資料應用程式。
簡單點一句話概括: 資料是具有一定意義的數字、字母、符號的統稱,資料庫就是存放資料的
vSql(Structured Query Language) server基礎
1.Sql server的組成:
- 主要資料庫檔案:.mdf 特點:有且只有一個
- 次要資料庫檔案:.ndf 特點:任意個
- 日誌資料庫檔案:.ldf 特點:至少一個
2.操作資料庫:
- 建立資料庫:create databse 庫名
- 查看所有資料庫:exec sp_helpdb
- 查看當前資料庫:exec sp_helpdb 庫名
- 使用資料庫:use 庫名
- 刪除資料庫:drop database 庫名 ps:正在使用的資料庫無法刪除
3.表的結構: 欄位 資料類型(屬性)
4.資料類型:
- 整型
- 微整型 tinying 1個位元組
- 小整型 smallint 2個位元組
- 整型 int 4個位元組
- 大整型 bigint 8個位元組
- 浮點型
- float 不能精確儲存數值
- real 不能精確儲存數值
- decimal(numeric ) 同義,用於精確儲存數值
- 字元型
- char 長度在1到8000之間 定長字元資料
- varchar 長度在1到8000之間 變長字元資料
- text 儲存可變長度的非Unicode資料,最大長度為2^31-1(2,147,483,647)個字元
- 時間日期型:datetime 年月日時分秒毫秒
- 貨幣型:money 精確到貨幣單位的千分之十。儲存大小為 8 個位元組。儲存形式為12345.67
vsql server表
1.建立表的文法:
create table 表名( 欄位名稱1 資料類型[屬性], 欄位名稱2 資料類型[屬性], ... )
2.查看所有表文法: exec sp_help
3.查看當前表文法: exec sp_help 表名
4.修改表結構:
- 增加一列文法:alter table 表名 add 欄位名 資料類型
- 刪除一列文法:alter table 表名 drop column 欄位名
- 修改一列文法:alter table 表名 alter column 欄位名 資料類型
- 刪除表文法:drop table 表名
5.動作表資料:
- 完全插入資料文法:insert into 表名(欄位名1,欄位名2...) values(值1,值2...)
- 省略插入資料文法:insert into 表名 values(值1,值2...)
- 部分插入資料文法:insert into 表名(欄位名1,欄位名2...) values(值1,值2...)
- 多行插入資料文法:insert into 表名 values(值1,值2...),(值1,值2...)
- 查看所有記錄文法:select * from 表名
- 查看部分記錄文法:select 欄位名1,欄位名2... from 表名
- 修改一條記錄文法:update 表名 set 欄位名=值 [where條件]
- 刪除一條記錄文法:delete from 表名 where 條件
- 清空表所有記錄
- delete from 表名
- truncate from 表名 ps:至於他們的區別,我就不多介紹了,有興趣的可以看這裡SQL Server中truncate、delete和drop的異同點
6.識別欄位 identity(初值,增值):
- 定義:能唯一區分表中的每一條記錄,且該屬性是自動成長的
- 特點
- 一個表中有且只有一個識別欄位
- 識別欄位不能編輯,不能更新
- 識別欄位資料類型只能是整型
- 識別欄位不為null
- 識別欄位不重複
- 作用:保證資料完整性
7.運算子:
sql server的運算子與其他語言不同,這裡列舉三個
- &&-----and
- ||-----or
- !-----not
8.六大約束:
- 檢查約束 check 文法 check(條件)
- 預設約束 default 文法 default‘預設語句‘
- 非空約束 not null
- 唯一性限制式 unique
- 主鍵 primary key
- 主鍵的值不能重複
- 一個表中有且只有一個主鍵
- 外鍵與主鍵相對應
- 主鍵類型可以是整型、字元型
- 文法:欄位名 資料類型 primary key
- 外鍵 foreign key references
- 與主鍵相對應
- 外鍵的值一定在主鍵範圍之內
- 外鍵的值可以重複
- 文法:欄位名 資料類型 foreign key references 主表名
- 注意事項:
- 在操作主表從表時:先刪除從表,再刪除主表,刪除資料,也要先從後主
- 在建立表時:要先建立主表,再建立從表,插入資料,先主後從
vsql server查詢
1.查詢合格資料: select 欄位名 from 表名 [where 條件]
2.之間的
- and ... or
- between ... and
- 例句:查詢23歲到25歲之間的學生
- select * from student where age>=23 and age<=25
- select * from student where age between 23 and 25
3.不顯示重複項:distinct select distinct 欄位名 from 表名
4.前幾項 top select top n * from 表名
5.排序 order by + 欄位名 asc升序 desc降序(預設情況下為升序) select * from student where age>25 order by name desc
6. is not null/null select * from 表名 where 欄位名 is null
7.列起別名as select id as 學生編號, name as 學生姓名 from student as a 註:實際文法中as可以省略
8.進階查詢(模糊查詢) like select 欄位名 from 表名 where 欄位名 like ‘萬用字元 值 萬用字元‘
sql server 萬用字元
- % 任一字元
- []範圍內任一字元
- [^]非範圍內任一字元
9.聯集查詢 join
- 交叉查詢:select 欄位名 from 表1 cross join 表2 [where 條件]
- 內串連查詢:select 欄位名 from 表1 inner join 表2 on 聯合條件 [where 條件]
- 外串連
- 左外串連:select 欄位名 from 表1 left join 表2 on 聯合條件 [where 條件]
- 右外串連:select 欄位名 from 表1 right join 表2 on 聯合條件 [where 條件]
- 全外串連:select 欄位名 from 表1 full join 表2 on 聯合條件 [where 條件]
- 多表串連:select 欄位名 from 表1 inner join 表2 on 聯合條件 inner join 表3 on 聯合條件 [where 條件]
10.巢狀查詢(巢狀查詢都可以用聯集查詢完成),顯示的欄位在一個表中,條件在另外一個表中
- in() 在...範圍之內的
- not in() 不在...範圍之內的
- exists 存在
- not exists 不存在
11. 分組 group by
v系統函數
1.統計(彙總)函數
- sum() 求和
- avg() 平均值
- max() 最大值
- min() 最小值
- count() 數量
2.日期函數
- getDate()擷取目前時間
- Dateadd() 增加時間
datediff(datepart,startdate,enddate)
startdate 和 enddate 參數是合法的日期運算式。
datepart 參數可以是下列的值:
| datepart |
縮寫 |
| 年 |
yy, yyyy |
| 季度 |
qq, q |
| 月 |
mm, m |
| 年中的日 |
dy, y |
| 日 |
dd, d |
| 周 |
wk, ww |
| 星期 |
dw, w |
| 小時 |
hh |
| 分鐘 |
mi, n |
| 秒 |
ss, s |
| 毫秒 |
ms |
| 微妙 |
mcs |
| 納秒 |
ns |
- datepart(datepart,date)函數用於返回日期/時間的單獨部分,比如年、月、日、小時、分鐘等等,datepartd參數可以參見上表
- datename(datepart,date)傳回代表指定 date 之指定 datepart 的字元字串
3.數學函數
- abs()取絕對值
- round()四捨五入
- floor()函數返回小於或等於所給數字運算式的最大整數
- ceiling()函數返回大於或等於所給數字運算式的最小整數
- sqrt()開平方根
- 關於abs()/round()/...這些數學函數的demo可以在我的上篇部落格中找到
4.字串函數
- left()左截串
- right()右截串
- ltrim()去左空格
- rtrim()去右空格
- replace(字串,舊字串,新字串) 替換
- substring(字串,位置,長度) 截字串 ps:sql中字串下標從1開始
- reverse()反轉
- len()長度
- upper()轉大寫
- lower()轉小寫
vT-sql
1.聲明變數文法: declare @變數名 資料類型
給變數賦值
輸出變數 select @變數名
ps:若想輸出變數、聲明變數、變數賦值和變數輸出三條語句需一起執行
2.編程語句
v視圖
1.建立視圖
create view 視圖名稱assql中查詢語句
2.使用視圖 select * from 視圖名
3.查看視圖 exec sp_help
4.查看視圖內容 exec sp_helptext 視圖名
5.修改視圖 alter view 視圖名 as select * from 表名 [where條件]
6.刪除視圖 drop view 視圖名
7.修改視圖 update 視圖名 set 欄位名=值 [where條件]
v預存程序/觸發器/事務
1.sql server 預存程序
create proc | procedure pro_name [{@參數資料類型} [=預設值] [output], {@參數資料類型} [=預設值] [output], .... ]as select ......
2.sql server 觸發器
- insert觸發器
- update觸發器
- delete觸發器
- 關於sql server 觸發器這裡就不多介紹了,更多詳情大家有興趣可以看這裡
sql server 基礎教程[溫故而知新三]