sql笔记
create table s (sno char(6), sn char(8)constraint sn_uniq unique, sex char(2), age int, dept varchar(20))
定义SN为唯一键,系统自动为唯一键建立唯一索引,从而保证了唯一性,可以为空,但最多只可以出现一个NULL值。sn_uniq可以省略。
[constraint<约束名>]unique
定义sn+sex为唯一键,此表为约束表
create table ss ( sno char(6) unique, sn varchar(8), sex char(2), age int, dept varchar(20) constraint s_uniq unique (sn,sex))
前面的约束名可以省略,后面的不可以。 为sn+sex建立唯一索引,确保同一性别的学生没有重名
null/not null约束
null值不是也不是空白,更不是填入字符串NULL,而是表示不知道,不确定,或没有数据。
当某一字段的值一定要输入才有意义的时候,则可以设置not null
主键就允许出现空值,否则就失去了唯一表示一条记录的作用。
[constraint<约束名>][null|not null]
create table ss ( sno char(6) constraint s_cons not null, sn varchar(8), sex char(2), age int, dept varchar(20))
当约束名省略时即 s_cons,系统会自动加字
UNIQUEQ约束(唯一约束)
[constraint<约束名>] unique
定义了Unique约束的那些列称为唯一键
系统自动为唯一键建议一个唯一索引
1使用unique约束时,约束的字段允许为Null值
2一个表中可以允许有多个uniqe约束
3可以把unique约束定义在多个字段上
4unique约束用于强制在指定字段上创建一个unique索引,缺省为非聚集索引。
create table s (sno char(6), sn char(8)constraint sn_uniq unique, sex char(2), age int, dept varchar(20))
sn_uniq为指定的约束名称,可以省略
用于定义表约束时,
[constraint<约束名>]unique (<列名>[{,<列名>}])
create table ss ( sno char(6) unique, sn varchar(8), sex char(2), age int, dept varchar(20) constraint s_uniq unique (sno,sex))
确保同一性别的学生没有重名
PRIMARY KEY约束
用于定义基本表的主键,起唯一标识作用,值不能为NULL,也不能重复,来保证实体的完整性
[constraint<约束名>]primary key 列约束
1在一个基本表中只能定义一个primary key约束,但可以有多个unique约束。
2对于制定为primary key的一个列或多个列的组合,任何一个列都不能为null,对于unique所约束的唯一键,则允许Null
3不能为同一个列或一组列,及定义unique又定于primary key约束
[constraint<约束名>]primary key(<列名>[{,<列名>}])表约束
CREATE table c ( cno char(5) constraint c_prim primary key, cn char(20), ct int)
CREATE table sc (sno char(5) not null, cno char(5) not null, score numeric(4,1), constraint sc_prim primary key(sno,cno))
Foreign key 约束(外键约束)
外键约束指定某一个列或几列作为外部键。包含外部键的表称为从表,包含外部键所引用的主键或唯一键的表称为主表。
[constraint]约束名 foreign key references <主表名>(<列名>[{,列名}])
例如:建立以个SC表,定义SNO,CNo为SC的外部键
CREATE table c (cno char(5) constraint c_prim primary key, cn char(20), ct int)
CREATE table s (sno char(6) constraint s_prim primary key, sn char(8), sex char(2), age int, dept varchar(20))
CREATE table sc (sno char(5) not null , cno char(5) not null , score numeric(4,1), constraint s_c_prim primary key(sno,cno))
CREATE table cc (sno char(6) not null constraint s_fore foreign key references s(sno), cno char(5) not null constraint c_fore foreign key references c(cno), score numeric(4,1), constraint sc_prim primary key(sno,cno))
sql命令修改数据库
(1)add方式
alter table<表名> add<列定义>| <完整性约束定义>
此方法增加的新列自动填充Null值,不能添加Not null约束。
ALTER table s add class_no char(6), address char(40)
(2)alter 方式
alter方式用于修改某些列
alter table<表名>
alter column <列名><数据类型>[null|not null]
ALTER table s alter column sn char(10)
把S表中的sn列加宽到10个字符
注意事项
1,不能改变列名
2不能将含有空值的列的定义修改为Not null约束
3若列中已有数据,则不能减少该列的宽度,也不能改变其数据类型
4只能修改null/not null约束, 其他类型的约束在修改之前必须先将约束删除,然后重新添加修改过的约束定义。
DROP方式只用于删除完整性约束定义
ALTER TABLE<表名>
DROP CONSTRAINT<约束名>
例:alter table s
drop constraint sno_prim
DROP删除基本表
DROP TABLE <表名>
例:drop table s
查询选修C1或C2且分数大于等于85分学生的学号,课程号,成绩 查询C1或C2 查询即没有选C1也没有选C2的
select sno,cno,score
from sc
where (cno='c1' or cno='c2')and(score>=85) where cno in ('c1','c2') where cno not in ('c1','c2')
工资在1000-1500的 不在1000-1500的
. . 。。
where sal between (1000 and 1500) where sal not between (1000-1500)
部分匹配查询 like 或 not like
《属性名》like <字符串常量>
通配符
% 代表0个或多个字符 a%
_(下划线 ) 代表一个字符 a_b
[] 表示在某一范围的字符 [0-9]
[^] 表示不在某一范围的 [^0-9]