2.3 数据库的定义和操作语言
数据库定义语言用于定义数据库模式;数据库操纵语言用于数据库的更新和查询操作。早期这些语言是相互独立存在的,而现在这些语言被集成在一起,形成了一个统一的数据库语言。
2.3.1 数据定义
数据定义语言用于改变数据库的结构,包括创建、更改和删除数据库对象。用于操纵表结构的数据定义语言命令有以下几点:
· CREATE TABLE(创建表)。
· ALTER TABLE(修改表)。
· TRUNCATE TABLE(删除表中数据)。
· DROP TABLE(删除表)。
1.创建表
create table 表名(字段 字段类型 [default'输入默认值'] [null/not null])
2.修改表
(1)添加字段:
alter table 表名 add (字段 字段类型);
(2)修改字段类型:
alter table 表名 modify(字段 字段类型 [default '输入默认值'] [null/not null]); //修改多个字段用逗号隔开
(3)删除字段:
alter table 表名 drop(字段);
3.删除表中数据
truncate table 表名
4.删除表
drop table 表名;
Truncate命令与Delete命令的区别:
Truncate命令能够快速删除记录并释放空间,它不使用事务处理,因此无法回滚。
Delete命令可以在执行删除操作之后,通过Rollback撤销删除。如果确定表中的数据不再使用,使用Truncate命令效率更高。
2.3.2 数据查询
SQL为使用者提供SELECT语句进行数据查询,语句一般格式如下:
SELECT [ALL|DISTINCT]<目标列表达式1>,<目标列表达式2>,… FROM <表名或视图名> WHERE <条件表达式> GROUP BY <列名1> [HAVING <条件表达式>] ORDER BY <列名> [ASC|DESC];
语句的含义:根据WHERE子句的条件表达式从FROM子句指定的表中找出满足条件的元组,然后再按照SELECT子句中的目标表达式选出元组中对应的属性值形成目标表。
如果有GROUP BY子句,则将结果按<列名1>的值进行分组,属性值相等的元组为一个组。如果GROUP BY子句后带有HAVING语句,则只有满足HAVING语句的条件方可输出。如果有ORDER BY子句,结果还要按<列名>的值进行升(降)序排序操作后输出。
查询元组的满足条件及谓词如表2-2所示。
表2-2 查询条件及谓词
2.3.3 数据更新
在DML的操作语法中,除了查询之外还有数据库的更新操作。数据的更新操作主要指添加、修改和删除数据。这里考虑到emp表在后面的学习中还要继续使用,所以下面先将emp表复制一份,输入如下指令:
CREATE TABLE myemp AS SELECT * FROM emp;
这个语法是Oracle数据库中支持的操作,其他数据库中的语法和Oracle是不一样的。
1.数据的添加
如果想实现数据的添加操作,则可以使用如下的语法:
INSERT INTO 表名称 [(字段1,字段2,…)] VALUES(值1,值2,…);
对数据类型的处理如下:
增加数字:直接编写数字,例如“123”;
增加字符串:字符串应该使用“”声明。
2.添加DATE数据
(1)可以按照已有的字符串的格式编写字符串,例如“2020-05-28”。
(2)利用TO_DATE()函数将字符串变为DATE类型的数据。
(3)如果设置的时间为当前系统时间,则使用SYSDATE。
3.修改
如果要修改已有的数据,请按照如下的语法进行:
UPDATE 表名称 SET 更新字段1=更新值1,更新字段2=更新值2,…[WHERE 更新条件(s)]
例如:更新雇员编号8888的基本工资为6000,职位改为MANAGER,奖金改为1000。
UPDATE表名称SET job='MANAGER',sal=6000,comm=1000 WHERE empno=8888;
如果更新时不加更新条件,则更新全部数据,但这种方法不可取,如果表中数据量很大,这种更新所耗费的时间比较长,且性能也会明显降低。
4.删除
删除语法如下:
DELETE FROM 表名称 [WHERE 删除条件(s)]
例如:删除2009年雇佣的员工信息。
DELETE FROM表名称WHERE TO_CHAR(条件,'yyyy')=2009;
如果删除时没有匹配条件的数据存在,则更新记录为“0”。如果没有删除条件,则删除全部数据。