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]

 

posted @ 2016-10-26 23:05  一米阳光!  阅读(357)  评论(0编辑  收藏  举报