1.创建数据库 create database 数据库名
数据库撤销 drop database 数据库名
2。基本表的创建
create table Doctor(
dName char(10)primary key,//主键
Title char(10),
Department char(10),
Assistant char(6));
create table Patient(
pID char(6)primary key,//主键
pName char(10),
Sex char(2),
job char(30),
Tel char(12),
Birth Datetime,
check(Sex in('男','女'))//check约束
);
create table CureFee(
pID char(6)NOT NULL,
dID char(6)NOT NULL,
Fee Int check(Fee>0),
primary key(pID,dID),//主键也可以这样定义
foreign key(pID)references Patient(pID),
foreign key(dID)references Doctor(dID)//外键
);
使用create table定义一张新表后,只是建立了一个无记录的空表结构。
基本表删除
drop table 表名 cascade/restrict
当选用cascade时,在删除表时,该表中的数据、表本身以及该表上建立的索引和视图全部删除;
当选用restrict,只有在清空表中记录,以及删除在该表上建立的索引和视图后,才能执行drop操作,删除一个空表,否则拒绝删除。
drop table Doctor;
基本表的修改
alter table 表名
add 新列名 数据类型 完整性约束
add constraint 约束名 完整性约束
drop constraint 约束名
drop column 列名 [cascade/restrict]
alter column 列名 数据类型
add子句用于增加新列和新的完整性约束条件;
drop子句用于删除已有的列和已有的完整性约束条件;
alter column子句用于修改已有列的定义;
alter table Docter
add sex char(2) check(sex in('男','女'))
//在Docter表中增加性别列
alter table Doctor
drop column sex;
//删除Docter中的性别列
alter table CureFee
add constraint ck_curefee check(Fee>0)
//为CureFee表增加约束,要求就诊费用列必须大于0
索引的建立和删除
create index语句
unique(唯一性索引)、clustered(聚集索引)、nonclustered(非聚集索引)
create unique index Cin
on CureFee(dID ASC,pID DESC);
//在表CureFee将dID升序,pID降序,建立唯一索引Cin
drop index Cin on CureFee
//删除Cin索引
单表查询
select 语句
select Department,dName,Title
from Doctor
//查询所有医生的科室、姓名、职称
select * from Doctor
//查询所有医生详细记录
year()函数用于返回某个日期的年份
getdate()函数用于返回当前日期
lower()变小写字母
select distinct Department
from Doctor
//去除重复行
select *
from Patient
where Birth between '2010-01-01' and '2014-01-01';
//where条件语句,between and 指定范围
where Department in('内科')
//查找科室为内科的
like 用来字符串匹配,a%b表示以a开头,以b结尾的任意长度字符串
%表示任意长度,_表示任意单个字符,a_b表以a为开头,b为结尾,长度为三的字符串
select *
from Patient
where eMail like 'his\_12@qq.com'escape'\';
//查询邮箱为his_12@qq.com的病人的基本信息
where Tel is null;
//空表的查询
select dID,dName,Title,Department,Assistant
from Doctor
where Department='内科' and Title='主治医师';
//查询内科的主治医师
select dName,Title,Department
from Doctor
where Department='内科' or Department='呼吸科'
//查询内科、呼吸科的医生的姓名、职称、科室
查询结果排序
order by子句 ASC升序,DESC降序
select *
from CureFee
order by Fee DESC;
//查询病人的就诊信息,查询结果按就诊总费用用降序排列
简单统计查询
count (distinct/all *) 统计记录个数
sum(distinct/all 列名) 计算一列(必须是数值型)的总和
avg(distinct/all 列名) 计算平均值
max(distinct/all 列名) 求一列的最大值
min(distinct/all 列名) 求一列的最小值
分组查询
group by对where的结果进行分组
having短语来筛选条件
select dName,count(*)
from Doctor
group by dName
having count(*)>1;
//查询重名医生的姓名