SQL基礎知識回顧整理

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

清空後讓表的id從1開始

方法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 語句的運行前後順序:
1from     2on    3join    4where     5group  by
6with  cube  or  with  rollup  7having  8select   9distinct 
10order  by   11top

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 數據庫的表設計後,保存表設計時,出現以下錯誤提示:

不容許保存更改。您所作的更改要求刪除並從新建立如下表。您對沒法從新建立的標進行了更改或者啓用了「阻止保存要求從新建立表的更改」選項。

解決方法

打開「工具」->「選項」,展開「設計器」->「表設計器和數據庫設計器」,

去掉「阻止保存要求從新建立表的更改」前面的勾。

相關文章
相關標籤/搜索