--創(chuàng)建一個數(shù)據(jù)庫名為‘sql_test’
create database sql_test
go
--打開數(shù)據(jù)庫 sql_test
use sql_test
go
--建立學生表
create table 學生
(學生編號 char(4) primary key, 學生名字 varchar(50)not null)
go
--修改學生表
alter table 學生
add 班級編號 char(4) null --添加班級編號字段
-- (注意如果添加的字段不為空的話,,是不能被添加的)
go
--建立班級表
create table 班級
(班級編號 char(4) primary key ,班級名稱 varchar(50)not null)
go
--建立課程表
create table 課程
(課程編號 char(4) primary key ,課程名稱 varchar(50) not null,開課日期 datetime )
go
--修改課程表
alter table 課程
add 課程代號 varchar(10) null --添加課程代號字段
go
alter table 課程
drop column 開課日期 --刪除開課日期字段
go
alter table 課程
alter column 課程名稱 varchar(20) not null --修改課程名稱字段
go
--建立一個product_test_one 表,,與下個表類似,,只不過在constraint前面有個‘逗號’不影響執(zhí)行
create table product_test_one
(
id char(10) not null, name varchar(20) null, price money default 20.5,quantity smallint null, constraint pk_id primary key clustered (id)
)
go
--建立一個product_test_two 表
/*
添加 ‘主鍵約束’,語句為:constraint pk_id primary key clustered (id)
constraint 約束的名稱 primary key clustered (字段名),其中clustered為聚簇索引,,也是系統(tǒng)默認值
*/
create table product_test_two
(
id char(10) not null, name varchar(20) null, price money default 20.5,quantity smallint null constraint pk_id2 primary key clustered (id)
)
go
--刪除表 pruduct_test_one表
drop table product_test_one
go
/* 唯一性的約束用于指定一個或則多個列的組合值具有唯一性,,
以防止在列中輸入重復的值,沒個列中只能有一個主鍵,,因此,,當表中已經(jīng)有一個主鍵時,
如果還需要保證其他的標示符唯一時,,就可以使用唯一約束*/
--建立一個student表,,使其中的 name 字段具有唯一性
create table student
(
id char(8), name char(10) --表字段
constraint pk_id primary key (id), --添加一個主鍵約束
constraint uk_name unique (name) --添加一個唯一性約束
)
go
--建立一個student4表,同上 (注意:constraint 與constraint 之間一定要有逗號,,否則出錯?。?br>create table student4
(
id char(8), name char(10) --表字段
constraint pk_id4 primary key (id), constraint uk_name4 unique (name)
)
go
-- 刪除表student4
drop table student4
go
--建立一個student3表,同上
create table student3
(
id char(8), name char(10), --表字段
constraint pk_id3 primary key (id) ,constraint uk_name3 unique (name)
)
go
--刪除表student3
drop table student3
go
/*檢查約束對輸入列或整個表中的值設置檢查條件,,以限制輸入的值,,保證數(shù)據(jù)庫的完整性。
一個表中可以定義多個檢查約束,;每個表中每個字段只能定義一個檢查約束,;
在多個字段上定義檢查約束,則必須將檢查約束定義為表級約束,;
當執(zhí)行insert語句或則update語句時,,檢查約束將驗證數(shù)據(jù);檢查約束中不能包含子查詢*/
--constraint 約束名 check(邏輯條件表達式)
--創(chuàng)建一個‘員工‘表,,使其輸入的性別字段(sex)只能接受‘m’或則‘f’,,而不能接受其他數(shù)據(jù)
--并且為phone字段創(chuàng)建檢查約束,限制只能輸入類似0108564712之類的數(shù)據(jù),,而不能隨意輸入其他數(shù)據(jù)
create table 員工
(
id char(5),name char(20),sex char(2),phone int
constraint pk_zid primary key (id), --此間一定要有‘逗號’分隔 ,,定義主鍵約束
constraint chk_sex check (sex in (‘f‘,‘m‘) ),
constraint chk_phone check (phone like ‘(010) [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9]‘)
)
go
/*默認約束指定在插入操作中如果沒有提供輸入的值時,,則系統(tǒng)自動指定值,。
默認約束可以包含常量、函數(shù),、不帶變元的內(nèi)建函數(shù)或空值,。
每個字段只能定義一個默認約束,
如果定義的默認值長于其對應字段的允許長度,,那么輸入到表中的默認值將被截斷
不能加入到帶有identity屬性或者數(shù)據(jù)類型為timestamp的字段上
如果字段定義為用戶定義的數(shù)據(jù)類型,,而且有一個默認綁定到這個數(shù)據(jù)類型上,則不,、允許該字段有默認約束
*/
--constraint 約束名 default 約束表達式 [for 字段名]
-- 創(chuàng)建一個表‘默認約束’,,為字段sex創(chuàng)建默認約束
create table 默認約束
(
id char(5) primary key ,sex varchar(2) constraint con_sex default ‘m‘
)
go
--修改‘默認約束’表
alter table 默認約束
add name varchar(10)null constraint con_name default ‘你好寶貝‘ --增加一個字段為‘name’,默認值為‘你好寶貝’
go
/*利用系統(tǒng)存儲過程sp_help查看表信息,,也可以指定數(shù)據(jù)庫對象的信息,,
還可以提供系統(tǒng)或則用戶定義的數(shù)據(jù)類型的信息,sq_help存儲過程只用于當前的數(shù)據(jù)庫,,
如果不指定對象的名稱,系統(tǒng)默認為當前數(shù)據(jù)庫的所以名稱,、對象的所有者和對象的類型,。
語法如: sq_help [[@objname=]name]*/
--往班級表里添加8條記錄
insert into 班級 values(‘bj01‘,‘一班‘)
insert into 班級 values(‘bj02‘,‘二班‘)
insert into 班級 values(‘bj03‘,‘三班‘)
insert into 班級 values(‘bj04‘,‘四班‘)
insert into 班級 values(‘bj05‘,‘五班‘)
insert into 班級 values(‘bj06‘,‘六班‘)
insert into 班級 values(‘bj07‘,‘七班‘)
insert into 班級 values(‘bj08‘,‘八班‘)
go
--顯示班級所以記錄
select * from 班級
go
--刪除班級表里班級編號大于bj06的記錄
delete from 班級 where 班級編號>‘bj06‘
go
--顯示班級所以記錄
select * from 班級
go
--向?qū)W生表里添加記錄
insert into 學生 values(‘xs01‘,‘one‘,‘bj01‘)
insert into 學生 values(‘xs02‘,‘two‘,‘bj01‘)
insert into 學生 values(‘xs03‘,‘three‘,‘bj01‘)
insert into 學生 values(‘xs04‘,‘four‘,‘bj02‘)
insert into 學生 values(‘xs05‘,‘five‘,‘bj03‘)
insert into 學生 values(‘xs06‘,‘six‘,‘bj02‘)
insert into 學生 values(‘xs07‘,‘seven‘,‘bj04‘)
insert into 學生 values(‘xs08‘,‘eight‘,‘bj03‘)
insert into 學生 values(‘xs09‘,‘nine‘,‘bj04‘)
insert into 學生 values(‘xs10‘,‘ten‘,‘bj05‘)
insert into 學生 values(‘xs11‘,‘eleven‘,‘bj06‘)
insert into 學生 values(‘xs12‘,‘twleve‘,‘bj06‘)
go
--顯示學生所有的記錄
select * from 學生
go
--連接查詢
select * from 學生,班級 where 學生.班級編號=班級.班級編號
go
--以下效果同上一條相同
/*
--第一個效果
select * from 學生 a,班級 b where a.班級編號=b.班級編號
go
--第二個效果
select * from 學生 as a,班級 as b where a.班級編號=b.班級編號
go
*/
--選擇的連接查詢
select 學生.學生編號,班級.班級編號, 學生.學生名字,班級.班級名稱 from 學生,班級 where 學生.班級編號=班級.班級編號
go
--以下效果同上一條相同
/*
--第一個效果
select a.學生編號,b.班級編號, a.學生名字,b.班級名稱 from 學生 a,班級 b where a.班級編號=b.班級編號
go
--第二個效果
select a.學生編號,b.班級編號, a.學生名字,b.班級名稱 from 學生 as a,班級 as b where a.班級編號=b.班級編號
go
*/
--查詢一班的學生
select* from 學生 where 班級編號 in(select 班級編號 from 班級 where 班級編號=‘bj01‘)
go
--與上面一條查詢語句一樣功能
select a.學生編號,a.學生名字,a.班級編號 from 學生 as a ,班級 as b where a.班級編號=b.班級編號 and b.班級編號=‘bj01‘
go
--統(tǒng)計一班學生人數(shù)
select count(學生編號)as 學生統(tǒng)計 from 學生
where 班級編號 in(select 班級編號 from 班級 where 班級編號=‘bj01‘)
go
--group的用法和count()函數(shù)的用法
/*在 select 語句里出現(xiàn)聚合函數(shù),并且有其他字段時,,一定要有g(shù)roup by 子句,,
并且在group by里寫出在select里出現(xiàn)的每一個字段,否則會出錯
例如下面的語句是錯誤的:
select count(學生編號)as 學生統(tǒng)計,學生名字,班級編號 from 學生
where 班級編號 in(select 班級編號 from 班級 where 班級編號=‘bj01‘)
group by 學生名字
go
*/
--統(tǒng)計一班學生人數(shù),,并顯示學生的名字和所在班級
select count(學生編號)as 學生統(tǒng)計, 學生名字,班級編號 from 學生
where 班級編號 in(select 班級編號 from 班級 where 班級編號=‘bj01‘)
group by 班級編號,學生名字
go