关系数据库标准语言SQL

本文介绍了SQL作为关系数据库的操作语言,包括数据类型如char、varchar、int、date等,以及数据库操作如查看数据库、创建和删除数据库。同时,详细阐述了数据表操作,如创建、修改和删除数据表,以及查询、连接查询等核心概念。最后,提到了JOIN操作,如LEFT JOIN、RIGHT JOIN和FULL JOIN,用于合并多个表的数据。
摘要由CSDN通过智能技术生成

数据库

数据库一般分为关系型数据和NoSql数据库, 关系型数据库一般使SQL操作,SQL对大小写不敏感。

SQL的数据类型

SQL支持许多内置的数据类型,并且允许用户定义新的域(数据)类型。

  1. char(n):定长字符串,长度n由用户指定。省略(n)时,长度为1。全称为character。

  2. varchar(n):变长字符串,最大长度n由用户指定。全称是character varying。定长和变长的区别主要表现在前者需要固定长度的空间,二后者占用的空间在最大长度范围内是可以改变的。

  3. bit(n):定长二进位串,长度n由用户指定。省略n时,长度为1。

  4. bit varying(n):变长二进位串,最大长度n由用户指定。

  5. int:整数,其值域依赖于具体的实现,全称是integer。

  6. smallint:小整数,其值域依赖于具体的实现,但是小于int的值域。

  7. numeric(p, d):p位有效数字的定点数,其中小数点右边占d位。

  8. dec(p, d):p位有效数字的定点数,其中小数点右边占d位。全称是decimal。

  9. float(n):精度至少为n位数字的浮点数,其值域依赖于实现。

  10. real:实数,其值域依赖于实现。

  11. double precision:双精度实数,精度依赖于实现,但精度比real高。

  12. date:日期,包括年、月、日,格式为YYYY-MM-DD。

  13. time:时间,包括时、分、秒,格式为HH:MM:SS。time(n)可以表示比秒更小的单位,秒后取n位

  14. timestamp:时间戳,是data和time的结合体,包括年、月、日、时、分、秒。timestamp(n)可以表示比秒更小的单位,秒后取n位。

  15. interval:时间间隔。SQL允许对date、time和interval类型的值进行运算。例如,如果x和y都是date类型,则x-y为interval类型,其值为x和y之间的天数。在date或time类型的值上加减一个interval类型的值得到新的date或time类型的值。

数据库操作:

  • 查看当前数据库服务器有哪些数据库: show databases;
  • 使用当前数据库服务器下的某一个数据库:use 数据库名称;
  • 创建数据库:create database 数据库名称;
  • 删除数据库:drop database 数据库名称

数据表操作

  • 创建数据表:
create table <表名> (<列定义>...<列定义>   [<表约束定义>...<表约束定义>]);

<表名>:标识符,是对定义的基本表命名

<列定义>:定义每个属性(列)的名称、类型、缺省值和列上的约束条件,格式是:
<列名> <类型> [default<缺省值>] <列约束定义>,...,<列约束定义>

列约束定义格式:
[constraint <约束名>] <列约束>
其中可选短语“constraint <约束名>”为列约束的命名。常用的列约束包括:
1)not null:不允许该列取空值,不加此限制时,该列可以取空值。
2)primary key:知名该列时主码(主键),其值非空、唯一。
3)unique:该列上的值必须唯一。这相当于说明该列为候选码。
4)check(<条件>):指明该列的值必须满足的条件,其中<条件>是一个涉及该列的布尔表达式。

表约束定义格式:
[constraint <约束名>] <表约束>
其中可选短语“constraint <约束名>”为表约束的命名。常用的表约束包括:
1)primary key(A1, A2,...Ak):说明属性列A1...Ak构成该表的主码(主键)。当主码只包含一个属性时,也可以用列定义约束定义主码。
2)unique(A1, A2,...Ak):说明这些属性列上的值必须唯一,这相当于说明A1,...,Ak构成该表的候选码。当候选码只包含一个属性时,也可以用列约束定义候选码。
3)check(A1,...,Ak):说明该表上的一个完整性约束条件。通常,<条件>是一个涉及到该表一个或多个列的布尔表达式。

外码比较复杂,它具有如下形式:
foreign key(A1,...,Ak) references <外表名> (<外表主码>)
[<参照触发动作>]
它说明属性时A1,...,Ak是表的外码,<外表名>给出被参照关系的表名,<外表主码>给出被参照关系的主码,而<参照触发动作>说明违反参照完整性时需要采取的措施。

eg:创建教师表Teachers
creat table Teachers
(
Tno      char(7) not null primary key,
Tname    char(10) not null,
Sex      char(2) check(Sex='男' or Sex='女'),
Birthday date,
Title    char(6),
Dno      char(4),
foreign key (Dno) references Departments (Dno)
);

这里,我们定义Tno为Teachers的主码,Tname不能为空,而用check短语限定Sex的值只能是“男”或“女”。最后一行定义Dno为关系Teachers的外码,它参照Departments的主码Dno。


eg:创建选课表SC
create table SC
(
Sno     char(9),
Cno     char(5),
Grade   smallint check(Grade>=0 and Grade<=100),
primary key(Sno, Cno),
foreign key(Sno) references Students (Sno),
foreign key(Cno) references Courses (Cno)
);
  • 修改数据表
(1)向数据表中添加新列
alter table <表名> add [column] <列定义>
例:向Courses中增加一个新列Pno,表示课程的先行课程号
alter table Courses add Pno char(5);

(2)对于已经存在的列,只允许修改或删除列的缺省值,语句形式为
alter table <表名> alter [column] <列名> {
   set default <缺省值> | drop default}
例:在Students的Sex列设置缺省值“女”可以减少大约一半学生性别的输入。可以使用如下语句:
alter table Students alter Sex set default '女';
而删除Sex上的缺省值可以用:
alter table Students alter Sex drop default;

(3)删除已经存在的列
alter table <表名> drop [column] <列名> {
   cascade | restrict}
其中cascade表示级联,删除将成功,并且依赖于该列的数据库对象(如涉及到该列的视图)也一并删除。restrict表示受限,仅当没有依赖于该列的数据库对象时删除才成功。
例:删除Courses中的Pno列可以用:
alter table Courses drop Pno;

(4)添加表约束
alter table <表名> add <表约束定义>
其中表约束定义与创建基本表相同。

(5)删除表约束
alter table <表名> drop constraint <约束名> {
   cascade | restrict}
其中被删除的约束名一定是命名的约束,给出约束名。cascade导致删除约束并且同时删除依赖于该约束的数据库对象。而restrict仅当不存在依赖于该约束的数据库对象才可以删除该约束。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值