你所須要的sql數據庫資料

 sql語法的特色
 1.沒有"",全部的字符串都使用''包含
 2.它的邏輯相等與賦值運算符同樣都是= 如 if 1=1
 3.不區別大小寫,可是習慣函數上使用大寫。全部與數據庫相關的其實都不區分
 4.類型上沒有c#嚴格。任何類型均可以作爲字符串進行賦值
 5.沒有bool值的概念,在視圖中進行插入數據操做的時候必須輸入true/false,可是在邏輯運算符的時候卻不能寫bool值
 6.它是解釋語言,你選擇了那一句執行那麼就只執行你所選擇的這一句
 
 1.它也算術運算符 + - / %
 2.它也有關係運算符: > >= < <= = != <>
 3.它也有邏輯運算符: not ! and && or ||

何時須要加,:
當它是一個能夠獨立運行的sql命令的時候就不須要加,,可是能夠加;
可是若是它只是一個語句塊中的某一個組成部分某種其中一句,那麼就須要添加,,可是若是是最後一句那麼就不能添加,
建立數據庫須要設置那一些屬性值
數據庫名稱 邏輯名稱 初始大小 自動增長(增長方式,限制自動增加最大容量) 文件全路徑
語法:
create database 數據庫名稱
on 文件組默認是主文件組primary
(
 name='邏輯名稱_data' ,
 size='初始大小' ,
 FileGrowth =文件增加,
 maxSize=最大容量,
 FileName='文件全路徑'
)
log on 日誌文件
(
 name='邏輯名稱_log' ,
 size='初始大小' ,
 FileGrowth =文件增加,
 maxSize=最大容量, 日誌文件通常不限制最大容量
 FileName='文件全路徑'
)
建立數據庫TestSchool
use master 切換當前數據庫
go
exists 若是()中的查詢語句返回非空那麼就獲得true,不然就獲得false
 1 if exists(select * from sysdatabases where name='TestSchool')
 2    drop database TestSchool
 3 go
 4 自動建立文件夾
 5 exec sp_configure 'show advanced options',1
 6 go
 7 RECONFIGURE
 8 go
 9 exec sp_configure 'xp_cmdshell',1
10 go
11 RECONFIGURE
12 go
13 exec xp_cmdshell 'mkdir d:\qqaa\vv\cc'
14  
15 create database TestSchool
16 on primary
17 (
18  name='TestSchool_data',邏輯名稱
19  size=3MB, 初始大小
20  FileGrowth=10%,每次增加按總大小的10%增加
21  maxSize=1000mb,最大容量
22  FileName='d:\qqaa\vv\cc\TestSchool_data.mdf'
23 ),
24 (
25  name='TestSchool_data1',邏輯名稱
26  size=3MB, 初始大小
27  FileGrowth=10%,每次增加按總大小的10%增加
28  maxSize=1000mb,最大容量
29  FileName='d:\project\TestSchool_data1.ndf'
30 )
31 log on
32 (
33 name='TestSchool_log',邏輯名稱
34  size=3MB, 初始大小
35  FileGrowth=10%,每次增加按總大小的10%增加
36  maxSize=1000mb,最大容量
37  FileName='d:\qqaa\vv\cc\TestSchool_log.ldf'
38 ),
39 (
40 name='TestSchool_log1',邏輯名稱
41  size=3MB, 初始大小
42  FileGrowth=10%,每次增加按總大小的10%增加
43  maxSize=1000mb,最大容量
44  FileName='d:\qqaa\vv\cc\TestSchool_log1.ldf'
45 )

 

 
-建立表,須要作那一些設置?
字段名稱,字段類型,是否爲空 標識列 默認值 主鍵,惟一鍵,索引,關係,check約束
語法:
create table 表名
 字段名稱 字段類型 列的特徵(是否爲空 標識列 默認值 主鍵 惟一鍵 索引 關係 check約束),
 字段名稱 字段類型 列的特徵(是否爲空 標識列 默認值 主鍵 惟一鍵 索引 關係 check約束)
建立老師表Teacher Id、Name、Gender、Age、Salary、Birthday
肯定表須要爲那一個數據庫建立
 1 use TestSchool
 2 go
 3 if exists(select * from sysobjects where name='Teacher')
 4  drop table Teacher
 5 go
 6 create table Teacher
 7 (
 8  Id int primary key identity(1,1), 主鍵是非空惟一
 9  Name nvarchar(50) not null, not null不爲空
10  Gender bit not null default(1) ,
11  Age int not null check(age>0 and age<=100),
12  Salary money, 能夠爲null能夠寫null,或者不寫也默認是能夠爲null
13  Birthday datetime not null
14 )

 


約束-保證數據完整性
數據完整性:爲了保證數據是安全和準確的
1.實體完整性:實體就是指一條記錄,實體完整性就是爲了保證這一條記錄是有效的和不重複的。
 1.主鍵:非空 惟一,一個表只能有一個主鍵
 2.標識列:是由系統自動生成的,永遠不會重複
 3.惟一鍵:惟一的,能夠爲null,可是隻能null一次,一個表的惟一鍵能夠有多
2.域完整性:域就是指某一個字段列,也就意味着這個完整性是爲了保證這一列的值是合理有效的
 check約束 類型 非空 默認值 標識列
3.自定義完整性:按用戶本身的須要建立check約束
 check約束 存儲過程 觸發器
4.引用完整性:某一個表的字段值不是獨立存在的,它引用自另一個已經存在的表的字段值。它的取值範圍不能超出主表對應字段的值的範圍.被引用的表就是主表,引用的表就是從表,也稱爲外鍵表
 1.選擇外鍵表去建立主外鍵關係
 2.創建主外鍵關係的字段的類型須要一致
 3.創建主外鍵關係的字段的意義必需要同樣。
 4.在添加主外鍵表數據的時候,先添加主表,再添加外鍵表
 5.在刪除主外鍵關係表數據的時候,先刪除從表,再刪除主表的值。
 6.建議主外鍵關係的字段在主表中必須是 主鍵或者 惟一鍵
級聯操做:
1.不執行任何操做:若是有引用就不能刪除,若是沒有引用 就能夠刪除
2.刪除主表,從表對應的記錄也刪除太噁心
3.刪除主表 的值,從表對應記錄的創建了關係的字段值設置爲NULL,前提是這個字段值能夠爲null
4.設置爲默認值,從表對應記錄的創建了關係的字段值設置爲默認值,前提是這個字段值你已經添加了默認值
 
代碼建立約束:
語法:
alter table 表名
add constraint 約束名稱(PRIMARY KEYPK uniqueUQ checkCK default DF foreign keyFK) 約束類型 約束說明(字段,關係表達式,值)
-爲Teacher表添加主鍵值
1 if exists(select * from sysobjects where name='PK_id')
2  alter table teacher drop constraint PK_id
3 alter table teacher
4 add constraint PK_id primary key(id)
爲name添加惟一鍵
alter table teaher
add constraint UQ_name unique(name)
爲age添加check約束 0~100
  1 alter table teacher 2 add constraint CK_Age check(age>0 and age<=100) 
爲birthday添加默認值
alter table teacher
add constraint DF_Birthday default('1999-9-9') for birthday
爲subjectId添加外鍵約束
alter table teacher with nocheck 不檢查現有數據
add constraint FK_teacher_subjectId foreign key(subjectid) references subject(id)
on delete no action

Len():獲得當前指定字符串的個數,中英文無關
字符串變量.方法()
字符串函數(字符串變量)
DataLength():獲得當前字符串佔據的字節數,與字符類型有關
select LEN('abcdefg')
select DataLength('中華人民共和國')
char:char類型空間一旦分配,就不會作自動收縮,就算沒有存儲滿也須要佔據指定分配的空間,若是存儲過多,就會報錯二進制數據截斷的錯誤,不能越界
select LEN(Char) from chartest
select DataLength(Char) from chartest
 
VarChar它會根據存儲的內容的長度自動收縮,若是存儲的內容小於指定的空間範圍,那麼多餘的空間會收回。因此當存儲的內容的長度波動較大的時候就考慮使用VarChar
select LEN(VarChar) from chartest
select DataLength(VarChar) from chartest
n表明是unicode字符,任何字符都佔據兩個字節空間 。當之後有中文字符的時候,就使用它。
select LEN(NChar) from chartest
select DataLength(NChar) from chartest
NVarChar 是一個可變unicode字符
select LEN(NVarChar) from chartest
select DataLength(NVarChar) from chartest

 
 
數據插入:每一次向某一個表插入一條記錄
-方法的調用 一一對應:類型對應,順序對應,數量對應
語法: 字段列表就至關於形參,而值列表就至關於實參
insert [into] 表名[(字段列表)] values(值列表)
1.爲student表添加所有的列數據,若是沒有指定具體的字段列表,那麼就須要爲全部列添加值,可是標識列是永遠不能人爲添加值的,由於它是系統自動生成的。
insert into Student values('123455667','張三','',4,'110',N'廣州','1990-1-1','aa@bb.com')
2.若是字段能夠爲null,或者字段有默認值,那麼在添加值的時候可使用null/default
insert into Student values('123455667','張三','',4,null,'廣州','1990-1-1',default)
3.若是沒有指定能夠爲null或者有默認值的字段,那麼就不須要爲他賦值:列名或所提供值的數目與表定義不匹配。
insert into Student(LoginPwd,StudentName,Gender,GradeId,Birthday) values('123455667','張三','',4,'1990-1-1') 
INSERT 語句中列的數目小於 VALUES 子句中指定的值的數目。VALUES 子句中值的數目必須與 INSERT 語句中指定的列的數目匹配
4.非空字段必定須要傳入值
insert into Student(LoginPwd,StudentName,Gender,GradeId) values('123455667','張三','',4)
5.插入的值必須符合表的完整性約束
insert into Student(LoginPwd,StudentName,Gender,GradeId,Birthday) values('123456','張三','',5,'1999-9-9')
6 .任何內容均可以使用’‘包含,可是若是是字符串類型的數據沒有使用’‘就會報錯。其實緣由主就是:系統會對你傳入的值作隱式的類型轉換,若是能夠轉換成功,那麼就轉換後再使用,若是不能那麼就報錯
可是若是是字符串值沒有添加’‘,那麼會將這個字符串值當成一個列名變量名
insert into Student(LoginPwd,StudentName,Gender,GradeId,Birthday) values('123456','張三',男,'2','1999-9-9')
7.日期值若是沒有添加’‘,那麼就獲得日期的默認值1905-6-5
insert into Student(LoginPwd,StudentName,Gender,GradeId,Birthday) values('123456','張三','','2',1999-9-9)
 

數據更新(數據修改) 強調,修改刪除必定須要考慮有沒有條件。通常來講能夠作條件通常是主鍵,惟一鍵或者標識列
語法:
update 表名 set 字段=值/表達式 where 條件
修改qq的性別爲女
update Student set Gender='' where StudentNo=1
多條件查詢 若是是一個數組組成的字符串就能夠不添加’‘
update Student set Phone=119 where StudentName='qq' and Gender=''
多值同時修改,修改多個字段值的時候使用,分隔
update Student set LoginPwd='aaaaaa' ,Gender='',GradeId=1,Address='東莞' where StudentNo=6
修改的時候能夠直接賦值,也可使用表達式
update Student set Birthday+=30
 
將沒有填寫電話號碼的人員信息中的號碼修改-=110 判斷null使用 is null
update Student set Phone='110' where Phone is null
update Student set Address=DEFAULT where StudentNo=5
update Student set Phone='NULL' where StudentNo=3
 
update Student set Address='我在廣州' where Address=default
 

數據刪除:對於整個行而言,不能刪除其中某一列,也就意味着,它只是來刪除表的數據行,可是不能修改表的結構
語法:
delete [from] 表名 where 條件
刪除全部男生信息
delete from Student where Gender=''
delete from Student

 

刪除是一條一條刪除,它每一次刪除都須要將操做寫入到日誌文件中,因此效率低
刪除事後標識列不會從種子值從新計算,而是接上一次刪除最後生成的標識列
 
truncate 刪除方法
語法 :
truncate table 表名 沒有條件,它是一次性刪除整個表的數據
truncate table student

 

truncate它是一次性刪除表的全部數據,因此日誌文件是以最小化的方式寫入的。
它刪除後標識列會從種子值從新計算

select * from Student where Sex='女' and StudentName='林%'
通配符:
%:.*:表明任意個任意字符
_:它就表明一個字符佔位,至關於 . 表明一個具體的字符
[]:至關於指定一個具體的範圍或者具體的值範圍。這點用法與正則表達式同樣
[^]:取反值
like:像。。同樣:若是要使用通配符,則必須配合 模糊查詢關鍵字:
select * from Student where Sex='' and StudentName like '林%'
select * from Student where Sex='' and StudentName like '林__'

 

查詢學員信息,學號是13,15,18,19
select * from Student where StudentNo in (13,15,18,19)
select * from Student where StudentNo like '[11-14]'

 

 
ISNULL對所查詢出的結果值作判斷,若是是null值就使用指定的內容進行替換
select StudentNo,StudentName,ISNULL(Email,'沒有填寫') from Student

 

 
排序 默認是升序排序,若是排序有多字段,是指,先按第一個字段進行排序,相同的記錄再按第二個字段進行排序
select * from Student order by sex desc,StudentNo desc
 

順序不能變 select(5) top/distinct 7 查詢字段 from (1)表列表 where (2)對源數據進行篩選 group by(3) 分組統計字段列表 having (4)對分組統計結果集作篩選 order by (6)對最終的結果集作記錄重排
 
where是對源數據作篩選的。它只能去使用from後面的表中所指定的列
聚合不該出如今 WHERE 子句中,就意味着聚合函數的條件不能經過where來指定
若是是對分組以後的結果集作篩選,那麼就須要使用having
having的列是從group by中獲取的
對分組統計結果集作篩選後再進行數據的顯示。
select ClassId, COUNT(*) num from Student group by ClassId order by num desc
 
select top 2 ClassId, COUNT(*) num from Student group by ClassId order by num desc

 

 
1.查詢每一個班級的總學時數,並按照升序排列
2.查詢每一個參加考試的學員的平均分
3.查詢每門課程的平均分,並按照降序排列
4.查詢每一個班級男女生的人數
 
當你看到相似於:各個,各自,每一個,不一樣這些詞的時候須要 考慮分組
select ClassId, SUM(ClassHour) from Subject where ClassId is not null group by ClassId
 
select StudentNo,AVG(StudentResult) from Result group by StudentNo
 
select SubjectId,AVG(StudentResult) from Result group by SubjectId
 

數據檢索返回虛擬結果集
語法:
select 字段列表/* from 表列表 where 條件not and or
查詢全部學員信息
select * from Student
指定查詢的列
select StudentNo,StudentName,Gender,Address from Student
指定查詢的列及查詢的條件
select StudentNo,StudentName,Gender,Address from Student where Gender='' and Address='廣州'
設置虛擬結果集中的列名
select StudentNo as 學號,StudentName 姓名,性別=Gender,Address from Student where Gender='' and Address='廣州'
添加常量列
select StudentNo as 學號,StudentName 姓名,性別=Gender,Address, 國籍='中國' from Student where Gender='' and Address='廣州'
 
select 能夠作查詢,也能夠賦值和輸出
select '1'+'1'
 
select StudentNo as 學號,StudentName 姓名,性別=sex,Address from Student where sex='女' and Address='廣州傳智播客'
使用top能夠返回指定條數或者百分比的記錄
select top 10 percent StudentNo as 學號,StudentName 姓名,性別=sex,Address from Student order by StudentName

 

 
使用distinct來去除重複記錄:
重複記錄與表的原始數據行無關。它只關注經過查詢語句查詢出來以後的結果集,若是虛擬結果集的每一列的值都同樣,那麼纔算重複記錄,若是有一個值不同,那麼就是一條單獨的記錄
select distinct 性別=sex,Address from Student
 
select distinct sex from Student

SQL聚合函數
count():求知足條件的記錄數,與值無關
max():求最大值
min():求最小值
sum():求和 只能對數值進行計算不能運用於日期和字符串
avg():求平均值
1.求整個表的記錄數,隨意傳入參數,由於它與具體的值無關,只與記錄數有關
select COUNT(sex) from Student
查詢班級年齡最小的學員和最大的學員
select MAX(BornDate) from Student
select min(BornDate) from Student
無論什麼類型均可以使用max/min進行計算,若是是數值就比較大小,若是是字符串變比較拼音的大小
select MAX(sex) from Student nv
select min(sex) from Studentnan
查詢成績最高分和最低分,平均分和總分
select MAX(StudentResult) from Result
select MIN(StudentResult) from Result
 
select sum(StudentResult) from Result where StudentNo=2
select avg(StudentResult) from Result where StudentNo=2
-不能使用sum/avg去計算日期類型的值
select sum(BornDate) from Student where StudentNo=2
select avg(BornDate) from Student where StudentNo=2
也不能運用於字符串類型
select sum(StudentName) from Student where StudentNo=2
select avg(StudentName) from Student where StudentNo=2 
相關文章
相關標籤/搜索