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