SQL Server 入門一

小提示這個博客編譯容易有一個小疏忽:離開此網站,保存內容可能不完整。
剛剛第一次編譯剩下二三百字的收尾,現在要重頭再來。這種感覺:嗯兒,還好。。
最後完成時,在個人中心頁–文章管理處,發現了上一篇“草稿”。。敲代碼真是一條修仙的路啊,性子躁躁的人都可以磨得對它沒脾氣~
SQL Server系列一是一天的成果,在焦急沉澱平靜中,記下今日:在心裏無數次的覺得從前不追求專注學習的自己宛如智障。現在除了專注,更需要效率。
學習使人忘記時間,更有一種很吸引人的成就感。
我們都會遇見很多bug,一次次找bug,百度搜索+自己琢磨=思維螺旋上升
希望看到我博客的朋友,無論何時何地,一定要保持學習力,這是明天不會後悔今天的東西~~

SQL Server 前言


1.數據表(DataTable)
2.行(Row) ---->稱爲 記錄
3.列(Column)---->稱爲 字段

4.文件
Test.mdf主數據文件
Test_log.ldf日誌文件

ps:bit位 1字節 = 8位 只有0和1

5.主鍵:用來唯一確定一條記錄的字段
(1) 作用:保證數據的唯一性
(2) 特點:1.唯一性 2.不能爲空
(3)分類:
1.邏輯主鍵(1.自增字段。1號進來就是1,2號進來就是2 2.GUID保證字符串唯一性 )
2.業務主鍵(業務邏輯中出現的字段作爲主鍵 eg:學號)
3.組合主鍵(聯合主鍵)
(4)選擇主鍵的策略:
1.不使用組合主鍵
2.選不會修改的列做主鍵
3.一般情況下,都推薦使用自增字段。不要使用業務字段來當主鍵。

6.數據冗餘:大量重複的數據,浪費存儲空間。
維護困難:數據安全性(數據完整性)

7.數據類型:
(1)整數類型:int,smallint,bigint,decimal(精確存儲)
ps:電話號碼用字符串
(2)實數類型:float,real
(3)字符串類型:
① char/nchar
②varchar/nvarchar
(4)有沒有var的區別:
①帶var的叫可變長度的字符串類型,不帶var的是定長的字符串。
②當我們記錄的數據有定長度時,選用定長的(char/nchar)。
③當我們無法確認記錄的數據有多長時,選用變長的(varchar/nvarchar)。

優缺點:
定長:容易浪費存儲空間,但是查詢效率高一點。
變長:節省存儲空間,但是查詢效率低一點。

(5)n的區別:
帶n的數據類型是採用Unicode編碼的,不帶n的是採用非Unicode編碼。
Unicode採用2個字節存儲1個字符。 漢字需要2個字節存儲,其他符號需要1個字節。

什麼時候使用帶n的:當這個字段要存儲比較多的漢字時,一定要使用帶n的。

(6)這4種數據類型在使用時都必須制定它的最大長度:
nvarchar(12)可存12個漢字 12個英文字母
varchar(12) 可存6個漢字
char(12) 可存6個漢字 12個英文字母

最大長度:char/varchar(8000),nchar/nvarchar(4000)

(7)text/ntext:超大文本

圖片類型:image,是以二進制的形式把圖片存入到數據庫文件中。但是,一般很少這麼做。
一般是把圖片以文件的形式存放在服務器上,數據庫裏只存放圖片的路徑。只有當對圖片的安全性要求特別高時,才把圖片直接存入數據庫。

(8)日期類型:datatime
貨幣類型:money,smallmoney

字符串的長度應該使用2的n次方

8.約束(用來保證數據完整性)
(1).主鍵約束 primary key
(2).外鍵約束 foreign key
(3).非空約束 not null/null
(4).默認值約束 default
(5).唯一性約束 unique
(6).Check約束 check:取值範圍

SQL Server正文

SQL:結構化查詢語言(Structured Query Language)
SQL語句:就是我們通過程序與數據庫進行“溝通”的語言。
SQL:是一種標準

市場上有很多DBMS,所有的關係型數據都支持標準SQL,但是各個廠商也制定了自己獨特1的語句。
Eg:微軟的MS SQL Server,它裏面有一種叫做T-SQL的語句,就是對標準SQL做出的擴展。

SQL語句分類:
1)DDL:數據定義語句(創建數據庫,創建表)
2)DML:數據操作語句(對數據的增刪改查)
3)DCL:數據庫控制語句(控制用戶的權限,取消授權)

呼出和隱藏"結果視圖"快捷鍵:ctrl+r

一.基本的Create database語句

–1.創建School庫

create database School

–2.刪除已有的庫

drop database School

–3.創建School庫標準版

create database School
on primary--主數據文件參數
(
  name = 'SchoolMain',--主數據文件邏輯名稱
  size = 10mb,--初始大小
  filegrowth = 10%,--文件增長比例
  fileName = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\School.mdf',--絕對路徑
  maxsize = 100mb
)
log on 
(
  name = 'SchoolLog',--日誌文件
  size = 10mb,
  filegrowth = 10%,--文件增長比例
  fileName = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\School_log.ldf',
  maxsize = 100mb
)

–4.SQL語句創建數據表
–保存庫文件很重要,更要注意保存SQL腳本文件

create database Test
go
--SQL語句創建數據表:TbClass
--語法:create table [表名]
--      (
--         字段名 數據類型 [約束]
--         ...
--       )
use Test--使用Test庫,作爲當前查詢的庫
go
create table TbClass
(
  clsId int primary key identity(1,1),--班級編號,自增,主鍵
  clsName nvarchar(16) unique,--唯一性約束
  clsTeacher nvarchar(4),--什麼都不寫,就是默認可以爲null
  clsNumber smallint check(clsNumber>=20 and clsNumber<=80) --check約束
)
--最後一個字段可以不加逗號
--go不是SQL語句,它只是MS SQL Server的一個命令
--go可以把一個SQL腳本文件上的衆多SQL語句,分爲多個批次發送給數據庫引擎去執行,
--這樣可以讓不能同時選中執行的SQL語句,能夠一次全選中,點執行提交
go
create table TbStudent
(
   stuId int identity(1,1) primary key,--主鍵
   stuName nvarchar(4) not null,--不爲空
   stuNumber char(9) unique,--學號,唯一
   stuGender bit default(1),--默認值約束
   stuAddress smallint,
   stuPhone char(11),
   stuClassId int foreign key references TbClass(clsId)--外鍵約束
)
go
--刪除庫
--dorp database Test

二.Insert 和 select作用

–1.標準insert插入數據語句,語法:
insert into 表名 values(值列表)

insert into TbClass(clsName,clsTeacher,clsNumber)
values('14級數據庫班','李俊峯',34)
insert into TbClass(clsTeacher,clsName,clsNumber)
values('東哥','13嵌入式班',67) 

2.省略某些字段的insert語句,not null的字段不能省略

insert into TbClass(clsName,clsNumber) values('14級.NET班',32)

3.如果想讓所有的字段都有值,省略全部字段列表

insert into TbClass values('13.NET班','吳',48)

4.select語句基礎
–(1)基本語法:select [字段列表] from [表名]:查詢出該表的所有記錄

select clsId,clsName,clsTeacher,clsNumber from TbClass

–(2)只查詢若干字段

select clsName,clsTeacher from TbClass

–(3)如果想要查看所有字段,可以使用‘*’代替字段列表

select * from TbClass

三.[]的作用

--[]的作用:避免字段名與關鍵字的衝突,但是不要使用關鍵字做字段名或者表名

SELECT [clsName],[clsTeacher] FROM [TbClass]

四.Insert插入數據高級部分

use Test
go
1.一條insert語句錄入多條記錄

--語法:insert into[表名](字段列表)
--      select [值列表] union,
--      select [值列表] union,
--      ......
--      select [值列表]

select * from TbClass

案例
insert into TbClass
select '16級IOS班','呂布',40 union
select '16級android班','呂布',40 union
select '16級大數據班','馬超',40 union
select '16級大數據班','馬超',40 union
select '16級大數據班','馬超',40 union
select '16級雲計算班','典韋',40
select * from TbClass

2.union關鍵字,剔除重複記錄。
–如果錄入多條重複的記錄,會被union刪除掉。
–如果要插入重複的記錄,需要在union後面添加all關鍵字,使用union all

insert into TbClass
select '16級IOS班','呂布',40 union all
select '16級android班','呂布',40 union all
select '16級大數據班','馬超',40 union all
select '16級大數據班','馬超',40 union all
select '16級大數據班','馬超',40 union all
select '16級雲計算班','典韋',40

3.把一個數據表中的記錄,備份到另外一個目前不存在的表中

--語法:select [字段列表] into [新表名] from [舊錶名]

–案例:把TbClass中的記錄,備份到TbClassBak中

select * into TbClassBak from TbClass

在做項目的時候,千萬不能用*代替字段列表

4.向一個已經存在的表裏,錄入另一個表中的數據

--語法:insert into [新表名]([字段列表])

– 案例 select([字段列表]) from [舊錶名]

select * from TbClass

insert into TbClassBak(clsName,clsNumber,clsTeacher)
select clsName,clsNumber,clsTeacher from TbClass

5.漢字亂碼的問題 解決方法
–(1).把字段類型改成帶n的字符串類型
–(2).在錄入數據的時候,在字符串前面加1個N

use T2
drop table t
create table t
(
  name nvarchar(4)
)
insert into t values(N'吳鑫')
insert into t values(N'東哥')
select * from t

select * from TbStudent

–五.複雜的select查詢

1.給列起別名

select stuName as '姓名',--第一種起別名方法
stuNumber 學號,--第2種起名方法
性別 = stuGender--第3種起別名方法
from TbStudent

–2.select關鍵字後,可以跟任何表達式,往往用在給查詢結果構造一個表中沒有的字段

  select stuName,stuNumber,stuGender,是否黨員= '是' from TbStudent
  select * from TbStudent

–3.查詢出學生的出生年份

select stuName,stuNumber,出生年份=2019-stuAge from TbStudent

–4.構造新的無字段列

select *,'未婚' from TbStudent

–六.where子句(條件查詢)

where子句一定要放在被查詢的表名的後面
–1.查找性別爲女的所有數據,SQL Server中判等使用**=**

select * from TbStudent where stuGender = 0 

–2.大小範圍比較,關係運算:=,>,<,>=,<=,!=(不等於)

select * from TbStudent where stuAge>20 and stuAge<25

–3.邏輯運算:and or not

select * from TbStudent where stuClassId != 2

–4.between…and…範圍比較,between…and包含兩端的數字
–between…and…是用來比較連續的值

select * from TbStudent where stuAge between 20 and 25


--案例1:查詢所有1,2,3班的學生信息
--很多情況下,一個查詢有多重實現方法
select * from TbStudent where stuClassId = 1 or stuClassId = 2 or stuClassId = 3
select * from TbStudent where stuClassId between 1 and 3

--案例2:查詢所有1,3,4班的學生信息
--使用in關鍵字 查詢離散值
select * from TbStudent where stuClassId in (1,3,4)

*--案例3:不在這3個班的同學*
select * from TbStudent where  stuClassId not in(1,3,4)

–5.top關鍵字:查詢前若干條語句

--案例1:查詢前5條數據
select top(5) * from TbStudent where stuClassId in(1,2)

--案例2:查詢前百分之幾記錄,按百分比查詢出頂端的記錄,不按四捨五入,是直接進位。eg:前2.1條直接取3條記錄。
select top 10 percent * from TbStudent where stuClassId in(1,2)

–6.distinct關鍵字:用來去除查詢結果中完全重複的記錄

--distinct是先從數據表中查詢出數據,再把結果集中**完全相同**的記錄去掉。
select distinct * from TbStudent
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章