20150929~20151016所學SQL基礎知識回顧整理,後續完善補充數據庫
服務器名稱:是指你要鏈接的安裝的數據庫服務器所在的那臺電腦的ip地址,若是是本機的話,就是 . 服務器
mdf 結尾:數據庫數據文件,一個數據庫有且只有一個數據庫設計
ldf:數據庫日誌文件,一個數據庫有且至少有一個ide
數據庫中存放數據的結構,是經過表的形式來存儲的,一個數據庫中有不少個表函數
約束ui
查詢spa
子查詢設計
錶鏈接日誌
20150929
create database xuankeData--建立數據庫 go--鏈接符 use xuankeData--使用數據庫 go create table student--建立表 ( code int not null,--列名 類型 是否爲空 name varchar(20), sex int, height decimal(18,2) ) go insert into student values(2,'張三',1,1.85)--輸入數據 go select*from student--查詢表中內容 go drop table student--刪除表 go drop database xuankedata--刪除數據庫,先要點到別的數據庫,被刪數據庫不能正在使用中 go update student set name='張三' where code=2--修改表中內容, where 篩選 go delete from student where name='李四'--刪除表中的數據 go
方法1. 清空數據時不用delete from tbname 而是用truncate table tbname 方法2: 先清空數據delete from tbname 再重置自增種子dbcc checkident(tbname,reseed,0)
20150930
--約束:對某一列數據的限制
--主鍵約束:能夠由一列或者兩列組合均可以,
--必須是惟一的,不能爲空的
--學號,外鍵,外鍵表 select*from student--查詢表中內容 insert into student values(1,'張三',1,1.85,'32330123')--添加數據 insert into student values(2,'李四',1,1.85,'32330163')--添加數據 delete from student where code=2 create table score ( ids int primary key identity(1,1), --設置主鍵 identity(1,1)自增加列 scode int references student(code), --學號,外鍵,外鍵表 course varchar(20), degree decimal(18,2) check(degree>=0 and degree<=100) ) alter table score add cid varchar(50) unique--給表再加一列,===>修改哪一個表,添加列 alter table score drop column cid --修改表,刪除列 insert into score values(2,'語文',99) select *from score
查詢
--查詢 msdn select , msdn like 20151009: Select 語句的運行前後順序: 1、 from 2、on 3、join 4、where 5、group by 6、with cube or with rollup 7、having 8、select 9、distinct 10、order by 11、top use mydb select*from car go --條件查詢:where篩選比較運算符> < >= <= != 邏輯運算符and or select name,oil from car where oil <8 and powers>160 --select 列名 from select* from car where oil <8 and powers>160 --模糊查詢 like select* from car where name like '%寶馬%'--%通配符 select top 2 *from car where name like '寶馬%'--top查詢前多少條 select* from car where name like '%寶馬系%' and price <45 select* from car where name like '%寶馬__%'--下劃線_任何單一字 select* from car where name like '%寶馬[1-4]_%'--在[]的指定範圍內 select* from car where name like '%寶馬[^1-4]_%'--^在指定的範圍以外 --排序 select *from car order by oil asc --升序 select *from car order by oil desc --降序 select * from car where name like '%寶馬%' order by oil desc --去重顯示 select distinct brand from car
子查詢
--子查詢 --把查詢語句查詢出的結果當作一個數值使用或一組數值使用 --all全部的,any任意一個,修飾符 --in('','')在數值範圍內not in()不在括號的數值範圍內 select price from car where name ='寶馬3系 325i 時尚型' select *from car where name like '%奧迪%'and price>=42.38 select *from car where name like '%奧迪%'and price>=(select price from car where name ='寶馬3系 325i 時尚型') select *from car where name like '%奧迪%'and price>(select max(price)from car where name like'%寶馬%') select *from car where name like '%奧迪%'and price>all(select price from car where name like '%寶馬%' ) select *from car where name like '%奧迪%'and price>any(select price from car where name like '%寶馬%' ) --in('','')在數值範圍內not in()不在括號的數值範圍內 == or的用法 select * from car where brand ='b001'or brand ='b002'or brand ='b003' select * from car where brand in('b001','b002','b003') select * from car where brand not in('b001','b002','b003')
錶鏈接
--錶鏈接 (inner)join on內鏈接 select* from car select*from brand select code,name,brand,brand_code from car join brand on car.brand =brand .brand_code select code,name,brand,brand_code from car inner join brand on car.brand =brand .brand_code select code,name,brand,brand_code from car left join brand on car.brand =brand .brand_code select code,name,brand,brand_code from car right join brand on car.brand =brand .brand_code
--子查詢 select code,name,(select brand_name from brand where car.brand =brand .brand_code )as brand_name from car --表的拼接 用,笛卡爾積,相似for的窮舉 select*from car,brand select*from car,brand where car.brand =brand .brand_code
各種函數
--聚合函數:max , min , sum ,avg ,count select min(oil),max(oil),sum(price) from car--放在select from 中間使用,聚合函數和聚合函數放在一塊兒使用 go select COUNT(*)from car go select avg(price) from car go select avg (price) from car where name like '%寶馬%' go --group by --分組 select brand,MIN(oil) from car group by brand--按照哪一列進行分組,select from 中間就只能查詢哪一列 go select brand from car group by brand having COUNT(*)>=3--having 只能跟在group by後面使用,對分組後的數據進行再篩選 go select*from brand go --日期時間函數 select SYSDATETIME()--系統時間 go select GETDATE()--比sysdatetime 獲取的快速 go print sysdatetime()--把數據輸出到消息框 go select YEAR(GETDATE()) go select DATENAME(WEEKDAY,'2015-5-5') select DATEPART(WEEKDAY,'2015-5-5') --字符串函數 select LTRIM(' 123213 ')--去除左空格 select RTRIM(' asder ')--去除右空格 select LEFT('abcdef',3)--返回從左邊開始指定長度的字符 select RIGHT('123123adf',3)--返回從右邊開始指定長度的字符 select LEN('afdfasfd')--返回字符串長度 select LOWER('AcDFdd')--小寫 select upper('AcDFdd')--大寫 select REPLACE('ac123123123ac123123123','ac','haha')--替換 select REPLICATE('abc',10) select REVERSE('abc')--翻轉字符串 select STR(1.567,3,2)--第一個是數值類型,是長度,是小數點後有幾位 select SUBSTRING('abcdefg',2,3)--截取字符串,索引從開始 --數學函數:abs ceiling floor square sqrt round pi select ABS(-2.1)--絕對值(負數變正數) select RAND()--隨機數(返回一個介於-1之間的僞隨機數) select ROUND(4.1,0)--四捨五入(表明小數點後幾位數) select FLOOR(5.56)--下限 select CEILING(5.2)--上限(返回大於或等於制定數值表達式的最小數) select PI()--圓周率 select SQRT(4)--開平方 select SQUARE(5)--平方 --轉換函數 select CAST('123' as int) select CONVERT(int,'123') --字符串也是能夠相加的 select '123'+'456'--結果是123456
視圖
20151013: --視圖:就是一個虛擬的表 select degree,sname,cname from (select score.sno,score.cno,score.degree, student.sname,ssex,sbrithday,class,course.cname,tno from score join student on student.sno = score.sno join course on course.cno = score.cno) table1 --一個查詢語句能夠當作是子查詢,查詢出一列或者一個做爲數據的比對參數, --做爲一個數據源,當作一個數值或一組數值使用,當放在from後面,還可做爲一個表來使用 create view tableview--建立視圖 as select score.sno,score.cno,score.degree, student.sname,ssex,sbrithday,class,course.cname,tno from score join student on student.sno = score.sno join course on course.cno = score.cno go select *from tableview select DEGREE,sname,cname from tableview--在查詢使用時就是一個表 alter view tableview--修改視圖 as select *from student--修改的內容,至關於刪了重建 go drop view tableview--刪除視圖 --應用:若是這幾個表的鏈接常常要用,那麼建好視圖以後就不用每次都寫了 --範式理論: --一、每一個表都要有主鍵 --二、每一個表的列都要直接跟主鍵相關 --三、每一列都要是單獨的數據列
存儲過程
20151015: --存儲過程 create proc JiaFa --參數 @a int, @b int as --存儲過程內容 declare @c int set @c=@a+@b return @c go declare @f int exec @f=JiaFa 3,5 print @f
alter proc Zhishuhe @num int as declare @i int--定義起點從開始到輸入的數挨個判斷 declare @sum int set @i=1 set @sum=0 while @i<=@num--開始循環判斷是不是質數 begin declare @j int--定義判斷質數的起點,從到自身循環一遍,能被整除兩次的就是質數 set @j=1 declare @count int set @count=0 while @j<=@i--判斷@i是否爲質數 begin if @i%@j=0 begin set @count=@count+1 end set @j=@j+1 end if @count=2--若是是質數 begin set @sum=@sum+@i--累加求和 end set @i=@i+1 end return @sum go declare @jieguo int exec @jieguo = zhishuhe 100 print @jieguo
觸發器
20151016: --觸發器:一種特殊的存儲過程,經過對數據庫表操做的 --動做,來觸發,增刪改 alter trigger Fruit_Insert_After --修改用alter on fruit --對哪一個表操做的時候執行觸發器 instead of insert -- for --(update,delete) for的意思是動做以後觸發after等同 as select *from inserted --inserted臨時表,就是增長的數據 go select *from student select *from score delete from student where sno=101--有主外鍵關係 alter trigger student_delete_instead on student instead of delete as --先刪除外鍵表數據 delete from score where sno in( select sno from deleted ) --再刪主鍵表 delete from student where sno in (select sno from deleted) Go
分頁語句
--分頁語句:查詢-10的數據(儘可能用主鍵惟一查詢) select top 5 *from car order by price desc go select top 5 *from car where code not in (select top 5 code from car) go select top 5 * from car where code not in (select top 10 code from car) go use shujuData go select * from score go select top 5 a.sno,a.cno,a.degree from Score as a left join (select top 5 *from Score) as b on a.sno=b.sno and a.cno=b.cno where b.sno is null--判斷是否爲空is
事務
--事務:出現錯誤時,會返回最開始的過程; --保障流程的完整執行,若是一步失敗就會返回到起點 select *From student select *From score begin tran --在流程開始的位置 delete from student where sno='304' delete from Student where Sno='303' if @@ERROR>0--看全局變量裏是否有錯誤記錄 begin rollback tran--回滾事務 end else begin commit tran--提交事務 end
數據庫表設計後不容許保存更改
在修改 SQL Server 2012 數據庫的表設計後,保存表設計時,出現以下錯誤提示:
解決方法
打開「工具」->「選項」,展開「設計器」->「表設計器和數據庫設計器」,
去掉「阻止保存要求從新建立表的更改」前面的勾。