?? sql.sql
字號:
--1. 數據庫
1)概念
數據庫:存儲數據的地方,是一種經過計算機處理過的數據的集合。
數據庫管理系統:負責管理數據庫,負責人與計算機交互使用。
2)創建數據庫
create database database_name
on ---用于指定數據庫文件的位置,大小,增長幅度,最大值
(name=database_name_data,---指定數據文件的邏輯名
filename='', ---指定文件的物理位置
size= ,---指定文件的初始化大小
maxsize= ,---指定文件的最大值
filegrowth= ---指定文件的增長幅度
)
log on
(name= ,
filename='',
size= ,
maxsize= ,
filegrowth= )
go
--------------------------
如果不指定日志文件,日志文件大小=數據文件/4
------------------------------------------
3)修改數據庫
alter database database_name
--添加數據文件
alter database database_name
add file
(name= ,
filename='',
size= )
----------------------
--添加日志文件
alter database database_name
add log file
(name= ,
filename='',
size= )
-----------------------
--修改文件
alter database database_name
modify file(name=,size=)
----------------
--刪除數據庫文件
alter database database_name
remove file 文件邏輯名
--------------------------
--修改數據庫名
a)sp_renamedb 舊名,新名
b)alter database database_name
modify name 新名
--------------------
4)刪除數據庫
drop database database_name
---------------------------
--2.數據表
1)標識符:不能有空格,不能為保留字,第一個字符不能以數字開頭,第一個字符可以是‘_’
------------
2)數據類型:
整數類型: int,smallint,tinyint,bigint
字符串: char,varchar,nchar,nvarchar
時間: datetime,smalldatetime
貨幣: money,smallmoney
實數: decimal
文本: text,image
-----------------
3)約束 constraint
主鍵約束: primary key
唯一鍵約束: unique
默認值約束: default
列檢查約束: check
外鍵約束: foreign key
-------------------
4)創建表
create table table_name
(列名1 數據類型,
列名2 數據類型,
列名3 數據類型)
5)修改表
alter table table_name
--添加列
alter table table_name
add 列名 數據類型
--刪除列
alter table table_name
drop column 列名
--添加約束
alter table table_name
add constraint 約束名 constraint_type(約束類型)
--刪除約束
alter table table_name
drop constraint 約束名
--停止約束
alter table table_name
nocheck constraint 約束名
--啟用約束
alter table table_name
check constraint 約束名
--添加約束,并檢查表中數據是否符合要求
alter table table_name
with check
add constraint 約束名 constraint_type(約束類型)
--添加約束,不檢查表中數據是否符合要求
alter table table_name
with nocheck
add constraint 約束名 constraint_type(約束類型)
--刪除表格
drop table table_name
----------------------
注意:在添加主鍵約束時,表中的列一定是 not null,
----------------------
3.數據的操縱語句
-----------------
--插入數據
insert into table_name
values('value','value','value','value')
-----------
insert into table_name
select *from table_name
-----------
--修改數據
update table_name
set column1='value'
where expression
----------------
update table_name
set column1=(select*from table_name)
--------
update table_name
set column1='value'
where column2 in(select*from table_name)
--------------
--刪除數據
delete from table_name
where expression
--------------
delete from table_name
where column1 in(select*from table_name)
----------------
4.查詢語言
select *from table_name
where 條件
--------------
1)單表查詢
--查詢所有的列
select *from table_name
--指定列
select 列名1,列名2 from table_name
--加入說明性語句
select 列名1,'說明性語句',列名2 from table_name
--去掉重復的數據
select distinct 列名1 from table_name
--選者前幾條數據
select top 5 * from table_name
--數據排序
select *from table_name
order by 列名 asc/desc
--使用聚合函數
sum():求和 avg():平均值 max():最大值 min():最小值
count():記錄的行數
select sum(列名)from table_name
select avg(列名)from table_name
select max(列名)from table_name
select min(列名)from table_name
select count(列名)from table_name
------------------------------------
聚合函數和 group by 連用,表示對數據進行分組
------------------------------------
select column1,column2,sum(column3) from table_name
with cube|rollup
-----------------
--加上選擇條件
比較運算:>,<,=,<>或 !=,<=,>=
邏輯運算: between..and ,in(not in)
條件比較: not,and,or
--通配符
%,_,[],[^]
--使用計算列
+,-,*,/
--數據匯總
compute,compute by,
--轉換字符
cast,convert,
-----------------------
2)多表查詢(連接查詢)
連接查詢:通過表格中的相關信息,把幾個表格連接起來當作一個表格使用的方式
關鍵字:
內連接: inner join
外連接: outer join
左外連接: left outer join
右外連接: right outer join
全外連接: full outer join
交叉連接: cross join
--使用 join 連接時,條件要使用 on 來表示
-----------------------
select s_名稱,d_銷量,f_單價,g_地址
from ss inner join dd
on ss.s_編號=dd.s_編號 inner join ff
on ss.s_編號=ff.s_編號 inner join gg
on dd.d_編號=gg.d_編號
---------------------------------
select s_名稱,d_銷量,f_單價,g_地址
from ss ,dd , ff , gg
where ss.s_編號=dd.s_編號
and ss.s_編號=ff.s_編號
and dd.d_編號=gg.d_編號
-----------------------
3)嵌套查詢(子查詢):將一個select語句放在select,insert,update,delete命令的where語句中
作為比較條件使用,把這查詢方式叫做嵌套查詢。
把放在where 條件中的select 語句叫做子查詢。
a.'=':表示結果是單個值
b.'in':表示結果是一組值的
c.'exists':表示存在
d.'union':用于連接表格
e.'union all':用于顯示連接中的所有數據
f.'select into':在查詢過程中創建表格
j.'#和##':表示臨時的數據庫對象。
---------------------------------
5.視圖:是虛擬的表格。是基于表而存在的,用于查詢特定的數據。
1)語法:
create view view_name
as
select * from table_name
2)使用select語句來創建視圖的注意事項:
--不能使用 order by,compute by 語句
--不能使用 into 語句
--不能使用臨時表
3)創建視圖時指定列名
create view 員工信息(編號,姓名,電話)
as
select 編號,姓+'.'+名,電話
from 員工信息表
--------------
4)修改視圖
alter view
5)察看視圖的定義語句
sp_helptext view_name
6)使用加密語句:
with encryption
7)察看視圖的相關性(與哪些表或視圖有關)
sp_depends view_name
8)刪除視圖:
drop view view_name
9)注意:當視圖是多表視圖時,如果要更新數據,不能通過視圖來更新,
需要通過創建視圖的表格來更新數據,這樣視圖中的數據,就會自動更新。
(創建視圖的表有主鍵或唯一鍵約束)
------------------------------------------
6.Transact-SQL 高級編程
1)批處理:是一個SQL語句集合,這些語句作為一個單元來執行,一般的以go表示結束。(go可以省略)
2)注釋:
--:表示單行注釋
/* */:多行注釋
3)變量. 局部變量(@)和全局變量(@@)
局部變量:使用一個@來表示,使用時必須先聲明,才可使用,而且只能使用在某一范圍內。
全局變量:使用兩個@來表示,使用時用戶不必聲明,可以直接使用,在數據庫范圍內的任何角落都可以使用。
全局變量是由系統聲明的。
4)控制語句:
if...else:條件執行命令
begin...end:塊語句命令
case:計算條件列表,返回多個可能結果表達式之一
while:循環語句命令。(waitfor delay:延時/waitfor time:定時輸出/continue:表示繼續/break:表示暫停)
print:顯示語句命令。
--語法:
IF Boolean_expression
{ sql_statement | statement_block }
ELSE
{ sql_statement | statement_block }
-----------------------------
BEGIN
{
sql_statement
| statement_block
}
END
----------------
CASE input_expression
WHEN when_expression THEN result_expression
ELSE else_result_expression
END
CASE 搜索函數:
CASE
WHEN Boolean_expression THEN result_expression
ELSE else_result_expression
END
--------------------
WHILE Boolean_expression
{ sql_statement | statement_block }
BREAK
{ sql_statement | statement_block }
CONTINUE
--------------
7.函數:用于執行某項特定功能
1)時間函數:
getdate():用于顯示系統當前時間
day():用于返回指定日期中的日的部分
month():用于返回指定日期中的月的部分
year():用于返回指定日期中的年的部分
dateadd(指定的時間部分,加上的數值,指定的時間)
datediff():返回跨兩個指定日期的日期和時間邊界數
--語法
datediff ( datepart , startdate , enddate )
定的時間部分,開始時間,結束時間
-----------------
select 編號,姓名,datediff(year,出生日期,getdate())年齡
from 學員表
-----------
2)系統函數:
current_user:當前用戶
select current_user
host_name():返回工作站名稱(操作系統名)
select host_name()
--------------------
3)字符串函數:
LOWER():將大寫字符數據轉換為小寫字符數據后返回字符表達式。
select lower('ABDEF')
----------------------
upper():小轉大
select upper('asddfs')
----------------------
ascii():把字符轉換成數字
select ascii('a'),ascii('A')
-----------------------------
char():把數字轉換成字符
select char(11)
---------------
4)自定義函數:
--標量函數:用于返回單個值的函數,
--語法:
create function fun_單價(@編號 int)
returns money ---表示返回值的類型
as
begin
declare @單價 money ---通過變量來返回
select @單價=單價 from 產品表 ---把變量付值
where 編號=@編號 ---通過函數所帶的參數
return @單價 ---把變量的值返回
end
-----
--內嵌表值函數:表的結構與函數中查詢語句結構相同
--語法:
create function fun_aa(@id int)
returns table
as
return select sum(數量)和,avg(數量)平均值,
max(數量)最大值,min(數量)最小值
from aa where 編號=@id
--多語句表值函數:表的結構是函數自己定義的,查詢語句只需匹配就可以
--語法:
create function fun_aa_tab(@id int)
returns @tab table(和 int,平均值 decimal(5,1),最大值 int,最小值 int)
as
begin
insert into @tab
select sum(數量),avg(數量),max(數量),min(數量)
from aa where 編號=@id
return
end
5)修改函數:
alter function function_name
----------------------------
6)刪除函數:
drop function function_name
----------------------------
8.存儲過程:存儲過程是保存起來的可以接受和返回用戶提供的參數的 Transact-SQL 語句的集合.
用于執行客戶需求的某種功能。以一個名稱存儲,并作為一個單元處理,可以接受用
戶參數,也可以有返回參數,參數可以是一個,或多個。
----------------------
--分類:
--系統過程:主要用于從系統表中獲取信息,一般以'sp_'為開頭。
--用戶自定義過程:主要用于完成用戶的某項功能而編輯的。
--臨時過程:用于臨時執行某個任務而編寫的,以#和##為開頭。
--擴展存儲過程:是sql 可以動態加載并執行的動態連接庫文件(.dll).以'xp_'為開頭。
-------------------
--過程的優點:
1)可以減少網絡流量
2)增強代碼的共享性和重用性
3)加快系統的運行速度
4)保證安全性
------------------------
1)系統過程:
sp_helpdb --查看數據庫信息的
sp_renamedb --改數據庫名
sp_rename --改數據庫對象名(表,列,視圖,函數,過程,觸發器)
sp_helptext --查看定義對象的命令(視圖,過程,觸發器,自定義函數)
------------------------
2)用戶自定義過程:
--語法:
create proc procedure_name
@parameter datatype
as
sql_statement [ ...n ]
--使用過程實現四則運算
create proc p_aa
@a char(2),@b int,@c int
as
select case when @a='和'then @b+@c
when @a='差'then @b-@c
when @a='積'then @b*@c
when @a='商'then @b/@c
end as 結果
3)alter proc:修改
4)執行過程:
--1)直接使用名字
--2)execute 過程名
-------------------
/*在SQL中,存儲過程的參數分為兩類,一類為輸入參數,另一類是輸出參數,在過程中,
輸入參數直接添加就可以,輸出參數結尾使用 output表名使輸出參數
使用帶有輸出參數的過程,需聲明輸出參數在過程中才能使用,
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -