--查詢數據庫是否存在
if?exists?(?select?*?from?sysdatabases?where?[name]='TestDB')
print?'Yes, the DB exists'
else
print?'No, need a new one?'
?
--新建一個數據庫
create?database?TestDB?on
(
????name?=?'TestData',
????filename?=?'G:\DBS\KeyTest.mdf',
????size?=?3,
????filegrowth?=?2
)
log?on
(
????name?=?'TestLog',
????filename?=?'G:\DBS\KeyTest.ldf',
????size?=?3,
????filegrowth?=?10
)
?
--drop database TestDB
?
use?TestDB
go
?
--新建一個表
create?table?[Scores]
(
????[ID]?int?identity(1,1)?primary?key,
????[Student]?varchar(20)?,
????[Subject]?varchar(30),
????[Score]?float
)
?
--drop table [Scores]
?
--修改表中的一列
alter?table?Scores?alter?column?[Student]?varchar(20)?not?null
?
--新增一列
alter?table?Scores?add?Birthday?datetime?
?
--刪除一列
alter?table?Scores?drop?column?Birthday
?
--往表中插入單條數據,方法:帶列名
insert?into?Scores(Student,Subject,Score)
values('張三','語文','90')
?
--往表中插入單條數據,方法:不帶列名,但要求值的類型要和列字段類型對應
insert?into?Scores
values('張三','英語','95')
?
--插入多條數據:用union或者union all
insert?into?Scores(Student,Subject,Score)
select?'李四','語文','89'
union?all
select?'李四','英語','78'
?
--刪除表中數據,沒有條件時,刪除所有
delete?from?Scores?where?ID?in(7,8)
?
--修改表中數據
update?Scores?
set?Student='王五',Score='94'
where?ID=10
?
--查看數據
select?*?from?Scores
?
--查看表中最大的identity值
select?@@identity
?
--查找兩個表中列的值是否相同,相同則不顯示,不相同的則查出結果
select?*?from?B_PowerStation?a?where?not?exists(select?*?from?B_PowerPile?b?where?a.ID=b.ID)
?
--或者利用dbcc命令查看表中最大的identity值
dbcc?checkident('Scores',noreseed)
?
--創建視圖,全部省略視圖的屬性列名,由子查詢目標列的字段組成
create?view?StudentView
as
select?Student,Subject,Score
from?Scores
?
--加上with check option,以后對視圖的操作(增,改,刪,查)都會自動加上where ID>3
/*
create view StudentView
as
select Student,Subject,Score
from Scores
where ID>3
with check option
*/
?
--創建視圖,全部定義屬性列名,需要定義列名的情況:
----某個目標列(子查詢)不是單純的屬性列,而是聚集函數或列表達式
----多表連接時選出了幾個同名列
----需要在視圖中為某個列啟用新的更合適的名字
create?view?IS_Student(Student,Subject,MaxScore)
as
select?Student,Subject,Score
from?Scores
where?Score=(select?max(Score)?from?Scores)
?
?
--查詢視圖,和基本表完全樣,只不過如果視圖中有with check option,會自動加上那個條件
select?*?
from?StudentView
?
--查詢自定義列名的視圖
select?*?
from?IS_Student
?
--對視圖的insert/delete/update,和對基本表的操作一樣,并且最終都是用RDBMS自動轉換為對基本表的更新
--并不是所有的視圖都是可更新的,因為有些視圖的更新不能有意義的轉換成對相應基本表的更新
?
--刪除視圖
drop?view?StudentView
?
1. ?SQL常用命令使用方法:
(1)數據記錄篩選:
select*from?Products:查詢出Products表里面的所有信息
select?ProductID,ProductName?from?Products:查詢出Products表里面所有ProductID,ProductName
select?ProductID,ProductName?from?Products?where?ProductID=1:查詢出Products表里ProductID=1的所有ProductID和ProductName
select*?from?employee?where?fname='Paul'?and?job_id=5 :查詢出employee表中fname=Paul,并且job_id=5的所有記錄
select*from?Products?where?ProductID?in(4,5,6):查詢出Products表中ProductID為,5,6的所有信息
select*from?Products?where?UnitPrice>10 and?UnitPrice<30 order?by?UnitPrice:查詢出Products表中<UnitPrice<30的所有信息,并按照UnitPrice的大小由小到大排序
select*from?Products?where?UnitPrice?between?10 and?30 order?by?UnitPrice:上面的另外一種寫法
select?*?from?Employees?where?FirstName?like?'A%':查詢出Employees中FirstName里面第一個字母是A的所有人信息
select*from?Employees?where?FirstName?like?'%A%':查詢出Employees中FirstName里面中間有A的所有人信息
select*from?Employees?where?FirstName?like?'%A':查詢出Employees中FirstName里面最后一個字母是A的所有人信息
select?count(*)?from?Employees:查詢出Employees表中的所有記錄數
select?min(Unitprice)from?Products:查詢出Products表中Unitprice的最小值
select?max(Unitprice)from?Products:查詢出Products表中Unitprice的最大值
select?avg(Unitprice)from?Products:查詢出Products表中Unitprice的平均值
select?sum(Unitprice)from?Products:查詢出Products表中Unitprice的總和
select?*?from?Products?where?Unitprice>?(select?avg(Unitprice)?from?Products):有子查詢,查找出比平均值高的商品信息
select?top?5*?from?Products:查詢出前五條的記錄信息
select?distinct?[name]?from?Category?:查出Category?中不重復的name
select?count(distinct?name)?from?Category?:查出Category?中不重復的name的數量
?
(2)?更新數據記錄:
sql="update 數據表set 字段名=字段值where 條件表達式"
sql="update 數據表set 字段=值,字段=值……字段n=值n where 條件表達式"
?
(3)?刪除數據記錄:
sql="delete from 數據表where 條件表達式"
sql="delete from 數據表"?(將數據表所有記錄刪除)
?
(4)?添加數據記錄:
sql="insert into 數據表(字段,字段,字段…) values (值,值,值…)"
sql="insert into 目標數據表select 字段名from 源數據表"?(把源數據表的記錄添加到目標數據表)
?
(5)?數據記錄統計函數:
AVG(字段名)?得出一個表格欄平均值
COUNT(*¦字段名)?對數據行數的統計或對某一欄有值的數據行數統計
MAX(字段名)?取得一個表格欄最大的值
MIN(字段名)?取得一個表格欄最小的值
SUM(字段名)?把數據欄的值相加
引用以上函數的方法:
sql="select sum(字段名) as 別名from 數據表where 條件表達式"
set?rs=conn.excute(sql)
用?rs("別名")?獲取統的計值,其它函數運用同上。
?
(6)?數據表的建立和刪除:
CREATE?TABLE?數據表名稱(字段?類型(長度),字段?類型(長度)?……?)
例:CREATE?TABLE?tab01(name?varchar(50),datetime?default?now())
DROP?TABLE?數據表名稱?(永久性刪除一個數據表)
?
2. 記錄集對象的方法:
rs.movenext?將記錄指針從當前的位置向下移一行
rs.moveprevious?將記錄指針從當前的位置向上移一行
rs.movefirst?將記錄指針移到數據表第一行
rs.movelast?將記錄指針移到數據表最后一行
rs.absoluteposition=N?將記錄指針移到數據表第N行
rs.absolutepage=N?將記錄指針移到第N頁的第一行
rs.pagesize=N?設置每頁為N條記錄
rs.pagecount?根據?pagesize?的設置返回總頁數
rs.recordcount?返回記錄總數
rs.bof?返回記錄指針是否超出數據表首端,true表示是,false為否
rs.eof?返回記錄指針是否超出數據表末端,true表示是,false為否
rs.delete?刪除當前記錄,但記錄指針不會向下移動
rs.addnew?添加記錄到數據表末端
rs.update?更新數據表記錄
?
3. ?排序
desc就是用于查詢出結果時候對結果進行排序,是降序排序,而asc就是升序。。要用與order?by一起用。?
例如select?*?from?student?order?by?id?desc;?就是把選出的結果經過“按id從大到小排序”后,把資源返回。
還可以select?*?from?student?order??by?age?desc,id?desc;用“,”號隔開多個排序條件,這樣,先按age?再按?id,就是說,先按age從大到小排序,如果有相同年齡的,那么相同年齡的學生再按他們的id從大到小排序。
DESC指排序時按降序排序ASC是升序。
?
約束篇:
1.主鍵約束:
要對一個列加主鍵約束的話,這列就必須要滿足的條件就是分空
因為主鍵約束:就是對一個列進行了約束,約束為(非空、不重復)
以下是代碼???要對一個列加主鍵,列名為id,表名為emp
格式為:
alter?table?表格名稱?add?constraint?約束名稱?增加的約束類型?(列名)
例子:
alter?table?emp?add?constraint?ppp?primary?key (id)
2.check約束:
就是給一列的數據進行了限制
比方說,年齡列的數據都要大于的
表名(emp)?列名(age)
格式:
alter?table?表名稱?add?constraint?約束名稱?增加的約束類型?(列名)
例子:
alter?table?emp?add?constraint?xxx?check(age>20)
3.unique約束:
這樣的約束就是給列的數據追加的不重復的約束類型
格式:
alter?table?表名?add?constraint?約束名稱?約束類型(列名)
比方說可以給ename列加個unique,讓ename列的數據不重復
例子:
alter?table?emp?add?constraint?qwe?unique(ename)
4.默認約束:
意思很簡單就是讓此列的數據默認為一定的數據
格式:
alter?table?表名稱?add?constraint?約束名稱?約束類型?默認值)?for?列名
比方說:emp表中的gongzi列默認為
alter?table?emp?add?constraint?jfsd?default?10000 for?gongzi
5.外鍵約束:
這個有點難理解了,外鍵其實就是引用
因為主鍵實現了實體的完整性,
外鍵實現了引用的完整性,
應用完整性規定,所引用的數據必須存在!
其實就是個引用,
比方說一個表名稱叫dept?里面有列數據?一列是ID一列是ENAME
id:表示產品的編號
ename:表示產品的名稱
另外一個表格名稱是emp?里面有列數據,一列是ID?一列是DID
id:表示用戶號
did:表示購買的產品號
要讓emp表中的did列去引用dept表中的id
可以用下面的方法
格式:
alter?table?表名?add?constraint?約束名稱?約束類型?(列名)?references?被引用的表名稱(列名)
例子:
alter?table?emp?add?constraint?jfkdsj?foreign?key (did)?references?dept?(id)
?
修改約束
?
?