3.2 SQL数据定义
3.2.1基本数据类型
其中char
类型和varchar
类型虽然都是字符串,但是char
会自动为字符串补空格为定长,而varchar
类型不会。
因为char类型补空格缘故,可能两个变量A、B存储的值相同,但因为类型不同,“A=B”返回值为false
。因此建议始终使用varchar
类型。
3.2.2 基本模式定义
creat table r(......);
创建关系时以分号结束。声明属性时:name type(可选),
,括号内数目按照声明类型决定。
完整性约束(部分)
- primary key 主码属性:必须非空且唯一。说明任一元组该值不为空,也没有两个元组的主码相同。
- foreign key (A1,A2…) references s:指任一元组的 (A1,A2…) 取值与关系s中某元组在主码属性对应。
- not null :该属性不允许有空值。
3.3 SQL查询的基本结构
3.3.1 单关系查询
关键词: select、from、where
,即选择属性、选择的对象模式、选择条件
因为SQL语句是允许重复值存在的,所以默认选出的模式含有重复值。如果想要强制删除重复值,就要用到 select distinct
语句;同时也可以使用 select all
来显式表明保留重复值。
select子句
中可以使用+、-、*、/运算符进行算术运算。
where子句中可以使用逻辑连词and、or、not
,逻辑连词连接的对象可以是包含比较运算符<、<=、>、>=、=和<>的表达式。
3.3.2 多关系查询
为对多个关系模式进行查询,把需要访问的对象都放在from子句
中,在where子句
中指定匹配条件。
多个关系模式会有同名属性,可以用关系名做前缀说明选择的关系属性,比如 instructor.dept_name
SQL的查询含义可理解为:
3.3.3 自然连接
from子句中默认是取多个关系模式的笛卡尔积,这时是对所有元组进行连接;使用natural join
自然连接,他会对多个关系模式的同名属性取值相同
的元组进行连接。同时两者可以一起使用,计算方式是从左到右逐个计算。
自然连接不一定能够替代条件笛卡尔积,因为自然连接时同名属性可能不止一个。这时可以用join...using
语句指定属性名。
3.4 附加基本操作
3.4.1 更名运算 as
as
子句可以出现在select
子句中,也可出现在from
子句中。