增删改查

2021/06/24 SQL 共 12147 字,约 35 分钟
闷骚的程序员

1. 对数据库的增、删、改、查【DDL数据定义语言】

1.1 增加(建立)数据库,标准sql

CREATE  DATABASE  database_name        --每次只能创建一个数据库
on
(
name=文件的逻辑名称,
filename=文件的存储路径,
size=文件初始容量大小(默认单位是MB,
maxsize=文件的最大容量,
filegrowth=文件每次增容的大小
)
log on
(
name=日志文件的逻辑名称,
filename=日志文件的存储路径,
size=日志文件初始容量大小,
maxsize=日志文件的最大容量大小,
filegrowth=日志文件每次增容的大小
);

1.2 删除数据库,标准sql

drop database 数据库名称1,数据库名称2…….;     --删除一个或者多个数据库

1.3 修改数据库,标准sql

alter database 数据库名称        --每次只能修改一个数据库
add file                        --可以同时增加多个文件
(
name=文件的逻辑名称,
filename=文件的存储路径,
size=文件初始容量大小,
maxsize=文件最大容量大小,
filegrowth=文件每次增容的大小
)
to filegroup 文件组名称
 
add log file                        --可以同时增加多个日志文件
(
name=日志文件的存储名称,
filename=日志文件的存储路径,
size=日志文件初始容量大小,
maxsize=日志文件最大容量,
filegrowth=日志文件每次增容的大小
);

1.4 查看数据库结构,标准sql

只能使用可视化控制台窗口或者调用存储过程查看数据库结构

2. 对数据表的增、删、改、查【DDL数据定义语言】

2.1 创建数据表,标准sql

create table tablename         --一次只能创建一个数据表,表名称符合标识符,oracle中表名---长度为30个字符,否则无法创建
(
列名1 数据类型(NP.S,    --N表示长度、P表示精度、S表示小数位数
列名2 数据类型(NP.S,
.
.
.
列名n 数据类型(NP.S [default] ‘默认值’ [列约束]
列名n+1 数据类型(NP.S [default] ‘默认值’ [列约束]  [表约束]
) [tablespace 表空间名称];
comment on column tablename.字段名1 is ********;
comment on column tablename.字段名2 is ********;

注意,create table创建表时,使用tablespace指定表所属的表空间;
如果不指定,则该表将被存储在默认的表空间中,使用comment on column对表中的指定字段进行说明,相当于注释,在PLSQL中查看表结构时可以看到这种注释说明,完全不影响表结构,只是对字段的一种说明。
举例:

CREATE TABLE QX_USER_GW
(
  USERID  VARCHAR2(11 BYTE)                     NOT NULL,
  GW_DM   VARCHAR2(15 BYTE)                     NOT NULL,
  CONSTRAINT PK_QX_USER_GW PRIMARY KEY(USERID, GW_DM),
  CONSTRAINT FK_QX_USER_GW_GW_DM
 FOREIGN KEY (GW_DM)
 REFERENCES QX_GW (GW_DM),
  CONSTRAINT FK_QX_USER_GW_USERID
 FOREIGN KEY (USERID)
 REFERENCES QX_USER (USERID)
);
 
COMMENT ON COLUMN QX_USER_GW.USERID IS '用户ID';
 
COMMENT ON COLUMN QX_USER_GW.GW_DM IS '岗位代码';

扩展:oracle实现同表数据的备份(表复制):

create table 1 as select * from 2 ;

实现将表2的数据备份到表1中,要求表1必须不能存在,且表1在创建时候的数据结构和as后边查出来的列的数据结构完全相同,也就是说表1的数据结构完全取决于as后面执行怎样的sql。
如果select a,b from 表2,则表1的数据结构就只有a和b这两个字段,如果是select * from 表2,则会将表2的所有数据列都插入到表1中去。
注意:create在实现表备份时候,创建的新表只拥有表的基本结构,索引,字段注释等不会备份进来,只会备份数据!

2.2 删除数据表,标准sql

drop table tablename1,tablename2,.;

一次可以删除多张表。
删除表后,定义在该表上的索引一并删除,但视图定义仍然存在,只是引用该视图时会报错。
只能删除自己建立的表,不能删除其他User建立的表,若要删除其他user的表,则当前用户应该具有该权限。

案例:

DROP TABLE alphafin.APP_AUTHORIZE;   --删除alphafin.APP_AUTHORIZE表

删除数据表后,数据表中的数据、在数据表上建立的索引、视图等一并被删除。但在oracle中,删除了数据表后,通过该数据表定义的视图定义不会被删除,但是引用该视图时会报错。

oracle还可以使用下述方式删除表,oracle扩展sql:

DROP TABLE 表名 CASCADE CONSTRAINTS ;

CASCADE CONSTRAINTS表示删除的表中若有主键是其他表的外键时,也能够成功将表删除,使用这种方式一次只能删除一张表。
举例:

DROP TABLE QX_FAV_GNMK_TREE CASCADE CONSTRAINTS ;
DROP TABLE XT_XTCS CASCADE CONSTRAINTS ;
DROP TABLE QX_SYSTEM_GW CASCADE CONSTRAINTS ;

2.3 修改数据表,标准sql

alter table tablename(一次只能修改一张表)

三种方式:
(1)方式1(为表增加新列和列约束):

ALTER TABLE TABLENAME
add 列定义  完整性约束定义

每次只能增加一个列定义或者约束定义,使用该方式增加的新列自动填充为NULL值,所以不能为新增加的列指定NOT NULL约束;
案例:

ALTER TABLE S
ADD
CLASS_NO CHAR(6) DEFAULT hello,--当表中已有数据时,不能为已经存在重复值的列或者列--组合增加unique唯一约束
ADDRESS CHAR(40)  --不能为已经存在NULL值,或者重复的列或者列组合增加主键约束;

案例:

ALTER TABLE NEWS_INFO
ADD COMMEND_COUNT INTEGER DEFAULT 0; --添加一列

(2)方式2(修改已有的列或者列约束):

ALTER TABLE 表名 ALTER COLUMN (ORACLEMODIFY 代替后面的 ALTER COLUMN)列名 数据类型 NULL/NOT NULL DEFAULT 默认值;

每次只能修改一个列或者 –约束定义。
注意:
alter方式不能改变已有的列名称;
alter方式不能将已经包含有NULL值的列的约束修改为NOT NULL;
若列中已有数据,则不能减少该列的数据长度,也不能改变该列的数据类型,但是可以增加该列的数据长度;
此方式只能修改某些列的NULL/NOT NULL约束,其他约束在修改之前必须先将该列的约束删除,然后再重新添加修改后的约束定义;

案例1:将S表中的SN列的宽度增加到10个字节:

ALTER TABLE S
ALTER COLUMN SN CHAR(10);

案例2:更改已有的字段长度

ALTER TABLE alphafin.mc_user MODIFY PAIIDTYPE Varchar2(6);

(3)方式3(删除已有的列或者约束):

 alter table 表名
 drop constraint 约束名/drop column 列名(删除某列);

注意:每次只能删除一个列或者约束定义。drop方式只能够用于删除某列的完整性约束定义或者某列的定义!其实标准sql并不提供删除某个列的语法,但是有的数据库支持!

案例1:删除S表中的主键,删除S表中的SN列:

alter table S
drop constraint s_prim;

或者

alter table S
drop column SN;

案例2:对数据表重命名,重命名后的表名称不能带有schema。否则报错。重命名后会自动带上schema。

ALTER TABLE alphafin.APP_AUTHORIZE_NEWCORE_BAK RENAME TO APP_AUTHORIZE;

2.4 查看数据表,标准sql

使用可视化界面方式查看数据库表结构,sql语句无法查看;

2.5. 补充:约束Constraints

约束分类:
表约束:表约束与列约束独立,不包括在列定义中,与列定义用,分隔,定义表约束要指明要约束的列的名称,一般在创建表语句的最后定义。
列约束:直接跟在创建表语句的列定义的其他定义之后,用空格分隔,不必指定列名称.
注意:约束列是一个列时,既能定义为表约束,也能定义为列约束;约束列是组合列时,只能定义为表约束。

2.6. 五种完整性约束类型

约束定义的语法:

 [Constrain 约束名] 约束类型;

约束关键字Constrain和约束名可以省略,系统会自动给定一个约束名,但是约束类型必须明确指定。

5种完整性约束:

2.6.1 null/not null约束(系统默认为null约束,即不指定时,则当前列/组合列默认可以设置为null值.)

null/not null不是0,也不是空白,更不是字符串”null”,而是表示不知道,不确定,没有数据的意思。
当某一字段(即某一列)的值不能为空时,则应对该列指定为not null约束。
这个约束只能用来定义列约束。
语法:

[constraint 约束名] null[not null]

案例:建立一个表S,对SNO字段进行not null约束

create table S
( SNO CHAR(6) CONSTRAINT S_CONS NOT NULL,
 SN VARCHAR(8),
 SEX CHAR(2),
 AGE INT,
 DEPT VARCHAR(20)
)

2.6.2 unique约束(对指定列/组合列进行唯一性约束,即设置内容不能重复)

unique约束指明基本表在某一个或者多个列组合上的取值必须唯一;
定义了unique约束的那些列称为唯一键,系统将会自动为唯一键建立唯一索引,从而保证唯一键在查询时的唯一性。
唯一键可以为空,但每一个作为唯一键的列最多只能出现一个null值;
一个表中可以允许有多个unique唯一约束;
unique唯一约束可以定义在多个字段上;
unique约束用于强制在指定字段上创建一个unique唯一索引,默认创建为非聚集唯一索引(聚集索引就不能保证存在多个unique唯一键了)。
unique约束既可定义列约束,也可定义表约束。

语法:

[CONSTRAINT 约束名] UNIQUE;--定义列约束
[CONSTRAINT 约束名] UNIQUE(列名1,列名2..)--定义表约束

案例:建议一个S表,定义SN+SEX为唯一键,此约束为表约束:

create table S
(
SNO CHAR(6),
SN CHAR(8) UNIQUE,
SEX CHAR(2),
AGE INT,
DEPT VARCHAR(20),
CONSTRAINT S_UNIQ UNIQUE(SN,SEX)   --表约束
)

2.6.3 Primary key约束(主键约束)

primary key约束定义基本表的主键,起唯一标识作用;
primary key约束的列或者多个列组合中,任何一个列都不能为null,也不能重复;即便主键列或者主键组合列未显式定义为not null约束,系统也会默认将主键加上not null约束;
一个基本表只能定义一个primary key主键约束;
不能为同一个列或者列组合既定义了unique唯一约束,又定义primary key约束,要明白,primary key约束范围包含unique约束和not null约束;
primary key主键约束既可以定义列约束,也可以定义表约束;
语法:

[CONSTRAINT 约束名] PRIMARY KEY;--定义列约束
[CONSTRAINT 约束名] PRIMARY KEY(列名1,列名2,..)--定义表约束

案例:建立一个SC表,定义SNO+CNO为SC的主键;

create table SC
(
SNO CHAR(5) NOT NULL,
CNO CHAR(5) NOT NULL,
SCORE NUMBER(400),
CONSTRAINT SC_PRIM PRIMARY KEY(SNO,CNO)   --表约束
)

2.6.4 foreign key约束(外键约束)

foreign key约束定义某一列或列组合作为基本表的外键;包含外键的表称为从表;包含外键所引用的主键或者唯一键的表称为主表。
从表中的外键取值只能是主表中的某一个主键,或者某一个唯一键,或取空值。
foreign key既可用于定义表约束,也可以定义列约束。

语法:

[CONSTRAINT 约束名] FOREIGN KEY REFRENCES 主表名(列名1,列名2,..);

案例:创建一个SC表,定义SNO,CNO为SC表的外键.

create table SC
(
SNO CHAR(5) NOT NULL CONSTRAINT S_FORE FOREIGN KEY REFRENCES S(SNO)--SNO是主表S表的主键
CNO CHAR(5) NOT NULL CONSTRAINT C_FORE FOREIGN KEY REFRENCES C(CNO),--CNO是主表C表的主键
SCORE NUMBER,
CONSTRAINT S_C_PRIMARY KEY(SNO,CNO)—定义SNOCNO为当前表的主键
)

2.6.5 check约束

check约束用来检查字段值所允许的范围,一个表中可以定义多个check约束,每个字段只能定义一个check约束,在组合字段上定义的check约束必须为表约束。
当执行insert、update语句时,check约束将验证数据;check既可用来定义表约束,也可以用来定义列约束。check约束的条件是个逻辑表达式。

语法:

[CONSTRAINT 约束名] check(条件);

案例:建立一个SC表,定义SCORE的取值范围在0-100之间:

create table SC
(
SNO CHAR(5),
CNO CHAR(5),
SCORE NUMBER CONSTRAINT SCORE_CHK CHECL(SCORE>=0 AND SCORE<=100)
)

3. 对索引的增删改查【DDL数据定义语言,标准sql】

3.1 什么是索引?

为一个表的某一个列增加索引,实际上就是索引指定的字段值与其相应的地址对应起来,类似于数组结构。创建了一张当前字段值和地址的对应表,索引指定的字段叫做索引列。
每个数据库都有自己对于索引独立的算法,能够快速根据索引列找到需要查找的数据。

3.2 索引的作用?

加快在指定列上的select查询速度;
保证行的唯一性(依靠唯一索引)

3.3 索引的分类

3.3.1 按照索引记录的存放位置划分 :

(1)聚集索引
为某个表的某个字段或者组合字段指定聚集索引后,则该表中各记录会按照指定的索引列或者索引列组合进行排序,默认为升序(a-z,1-9等),指定降序则为降序,相当于对该表的记录顺序重新布局了,然后会直接将这种重新布局后的顺序保存在该表中。
所以,聚集索引就是按照指定的比较规则,通过指定的索引列将源表中的数据行进行重排序,这种方式将直接呈现在源表中,改变了源表的记录顺序。
同样,源表中一旦按照比较规则,指定了某些列作为索引列对整个记录行重排后,就不能够再指定其他的列作为聚集索引列再对源表记录进行重排序了,因为同一张表只能够按照一个规则进行重排序。这也是任何一张表只能指定一个聚集索引的原因,因为聚集索引能够直接影响到表的记录顺序。
聚集索引是按照索引列或者索引列组合的物理连续性,直接将整个表的记录行重新排列显式,这样一旦需要对索引列进行数据查找,会迅速根据条件找到大致的索引列范围。
总结:聚集索引,指定的索引列(组合)按照比较规则重新排序;直接影响源表中的记录行也按照这种规则整体重排序;当执行索引列取值相同时,表示对于同一个值将存在多条记录。

(2)非聚集索引
与聚集索引一样,也是按照指定的比较规则(升序或者降序),将指定的索引列或者索引列组合进行排序,但是,非聚集索引对指定索引列字段重新排序后并不将这种排序结果直接保存在源表中呈现出来,而是单独存放在另外的位置。
聚集索引指定的索引列重新排序后,则整个表的所有记录会按照这个记录重新排序并且将重新排序后的结果直接呈现在源表中;而非聚集索引指定的索引列重新排序后,因为排序结果存放在别的地方,并没有直接修改源表的数据行顺序。
所以,跟随非聚集索引列的顺序变化的只是源表中对应的该索引列的物理位置(类似指针或者引用)并不是源表中的该索引列,索引列的位置和其对应的字段值的映射关系能够在查询时直接定位到对应的数据行;当索引列或者组合列的值相同时,则表示该索引列的对应的位置有多个,即内容相同ßà位置(引用)有多个。
同样,因为非聚集索引在其他地方保存了索引列重新排序后与其地址的映射关系,而不是直接控制源表的显示,所以可以为一个表指定多个非聚集索引,当查询时用到哪个字段就按照该字段构建的非聚集索引关系表去锁定指定的记录行;由此可以看出,聚集索引影响源表的记录顺序,直接控制源表的记录排序,导致源表中是按照索引列的物理位置连续性排列的;而非聚集索引将索引列存放在别的映射表中,并不该表源表中记录行顺序,但在查询时直接按照映射表中的地址去查找对应列数据,也就是说,尽管源表中没有按照物理位置连续性排列,但在查询时显然是按照地址的逻辑连续性去查询的,而从物理位置上看源表中的记录不是物理连续性的。
系统默认建立的是非聚集索引。

(3)总结
(3.1)在查询表时,如果查询条件中的列被指定为聚集索引,则查询速度比非聚集索引快;因为聚集索引重排序后的结果直接保存在源表中,只需要调用源表即可;而非聚集索引还需要调用“索引列(值)à地址”的映射表,再去源表中查询,所以比较慢。
(3.2)当向表中增加、删除或者更新记录行时,聚集索引要将更新后的结果保存在源表中。而非聚集索引将映射关系保存在其他地方(这不影响表的更新,不牵扯重新排序),所以在更新操作时,聚集索引比非聚集索引稍慢。
(3.3)查询时,只有查询条件中指定的字段是索引列时,索引才会发生作用,而查询条件中的字段不是索引列,则索引不会影响其他字段的查询。但如果是修改、删除、更新数据时,因为数据行整体会发生变化,所以即便没有用到索引列,索引也会自动更新,重新排序。
(3.4)查询条件的列被指定为索引列时,系统将自动使用索引查询以提高查询效率。
(3.5)未指定索引的表,查询时系统总是从表的第一行记录开始扫描整张表,所以索引就是用来加快查询速度的。

3.3.2 按照索引列或者列组合是否可以重复划分

(1)唯一索引:
(1.1)不论是聚集索引还是非聚集索引,都有唯一和非唯一之分。前者是按照索引结果的存储位置进行划分的;后者是按照索引列或索引列组合在取值上是否可以重复进行划分的。
(1.2)唯一索引要求,指定为索引列的列或者列组合在取值上不能重复。因为一旦有重复,则同一个索引列值会有多个记录行地址与其对应,违背了唯一性的原则。
(1.3)故,若索引列中已经存在重复数据,则在该列上创建唯一索引将发生失败。
(2)非唯一索引:
(2.1)不要求索引列或者列组合在取值上不能够重复,即可以重复。即同一个索引列的值可以对应多个记录行或者记录行地址。
(2.2)系统默认建立的是非唯一索引。
(2.3)按照索引列时单个列还是多个列的组合列进行划分
(2.4)单列索引:索引列是单独一个字段;
(2.5)复合索引:索引列组合是由多个字段组合而成。

3.4 索引失效

3.5 各类索引的组合情况

聚集单列唯一索引
聚集单列非唯一索引
聚集复合唯一索引
聚集复合非唯一索引
非聚集单列唯一索引
非聚集单列非唯一索引
非聚集复合唯一索引
非聚集复合非唯一索引

3.6 索引与完整性约束的关系

3.6.1 约束和索引的关系

约束是对指定字段进行insert、update、delete时对字段内容的某种约束行为。
索引是对指定字段进行select时对字段内容的过滤行为。
表中某列或者组合列只能同时创建一个索引,不能为某列或者组合列同时创建多个索引。

3.6.2 主键和唯一键自动创建索引

当表中某字段或者组合字段被设置为unique(唯一键)约束时,数据库会自动在该列或者组合列上建立相应的非聚集唯一索引(因为unique约束可以指定为多个,而非聚集索引也可以建立多个)。
当表中某字段或者组合字段被设置成primary key(主键)约束时,数据库会自动为该字段或者组合字段创建聚集唯一索引(因为primary key约束只能是一个,而聚集索引也只能是一个)。

3.7 创建索引,标准sql

create [unique] [cluster] index indexname on tablename(列名1[排序方式],列名2[排序方式],..)

unique表示建立唯一索引,不指定表示建立非唯一索引,即默认值
cluster表示建立聚集索引,不指定表示建立非聚集索引,即默认值
tablename是创建索引的基本数据表的名称
列名表示该索引建立在一个列或者多个列上,多个列的话需要使用,分隔
排序方式表示指定索引列的排列顺序,asc表示升序,desc表示降序,默认为asc

案例:

create index ESB_RSM_DB_MS_IDX on ESB_RSM_DB_MS(mon_time,serv_name)  ;
create index esb_rsm_dbspc_ms_idx on esb_rsm_dbspc_ms(mon_time,serv_name) ;
create index esb_rsm_dbsql_ms_idx on esb_rsm_dbsql_ms(mon_time,serv_name) ;

3.8 删除索引,标准sql

drop index indexname;

同时删除多个索引,用,分隔

案例:

drop index PK_ESB_FAULT_PROV;

3.9 修改索引,标准sql

由于索引是建立在基本数据表的基础上的,所以oracle不提供alter索引的语句。

3.10 查看索引,标准sql

通过PLSQL可视化界面进行索引结构的查看。

4. 对视图的增删改查【DDL数据定义语言,标准sql】

4.1 创建视图,标准sql

create view viewname[(列名1,列名2,.)] as 子查询 [with check option]

子查询可以是不包含order by子句和distinct短语的任何复杂的select语句。
with check option表示对视图进行update、insert和delete操作时,要保证更新、插入或删除的行要满足视图定义中的谓词条件(即子查询中的条件表达式)。
在输入组成视图的字段列名时,要么全部指定,要么全部省略,在省略了视图列名时,视图的列名默认是子查询中查询出来的列名。

有三种情况必须手动指定输入的所有列名:

(1)目标列存在函数或者列表达式时,需要指定视图列名
(2)子查询为多表连接查询时,有同名的列名时需要指定视图的全部列名
(3)视图中某个列需要重新命名

4.2 删除视图,标准sql

drop view viewname;

可以同时删除多个视图定义,用,分隔。
删除视图后,并不会删除导出该视图的基本表和基本表中的数据。
删除视图后,由该视图导出的其他视图在oracle中不会被删除,但是引用时会报错,需要手动再次删除。

举例:

drop view ESBFLOWLOG;

4.3 修改视图,标准sql

由于视图是基于基本数据表的虚表,所以不提供alter视图的语句。

4.4 查看视图,标准sql

通过可视化窗口查看视图结构。

5. 对表数据的增删改查【DML增删改_数据操纵语言,DQL查_数据查询语言,标准sql】

注意:所有的DML和DQL语言中,语法中的where,having和on等关键字后面的逻辑表达式可以是任何的逻辑表达式,只要表达式合法,而并非必须是与表中的某字段相关的逻辑表达式!

5.1 添加数据,标准sql

5.1.1 方式一:添加一行新数据

insert into tablename[(列名1,列名2,列名3,)] values ();

只能同时操作一张表。
列名可选,未指定时,则按照表中定义的列名添加一行完整的值。
指定列名的顺序不一定与表中定义的顺序一致,可以随便指定列名顺序,但values中的值的顺序必须和指定的列名一一对应。
不指定列名时,则表中的所有列都必须按照顺序指定值。
值之间用逗号“,”分开,字符型(字符串)用单引号“‘’”括起来。

案例:在S表中添加一条学生记录:

insert into S(SNO,SN,Age,Sex,Dept) values(S7,’张三’,22,’男’,’计算机’);

5.1.2 方式二:添加一行记录的部分数据值

insert into tablename[(列名1,列名2,列名3,)] values ();

列名是指定需要添加数据的列,值与列名对应。
列名顺序可自定义。
未指定的那些列自动取NULL值,但有not null约束的列不能取NULL值。

案例:在SC表中添加一条选课记录:

insert into SC(SNO,CNO) values(S7,C1);

5.1.3 方式三:添加多行记录(通过子查询)-常用作表复制即批量插入

insert into tablename[(列名1,列名2,列名3,)] 子查询;

实质上是表之间的复制,子查询查询的就是来源表,tablename是目标表,若不存在,需要自己手动创建。
列名可选,规则和前面相同;但列名的指定必须和子查询中查询出的列名的约束匹配。

案例1:

insert into alphafin.app_authorize  select * from alphafin.app_authorize_20180903;

案例2:下面的方式结合了union关键字实现子查询的并集,将结果插入到目标表中

--注意子查询表复制是没有values关键字的
insert into tablename[(列名1,列名2,列名3,)]
select (1) union [all]
select(2) union [all]
……
select(n)
//UNION取并集要求合并的字段类型个数必须保持一致。

5.2 删除数据,标准sql

5.2.1 方式一(delete操作时候,千万要带where条件,除非清空全部数据):

delete from 表名 [where条件];

where条件缺省时,则删除表中所有的数据;

5.2.2 方式二,oracle扩展sql:

truncate table 表名;

oracle扩展的系统命令,只能一次性删除整张表数据,没有条件过滤
(2.1)两种方式每次都只能删除一张表中的数据。
(2.2)truncate删除整张表中数据,且不能使用rollback进行数据恢复。
(2.3)delete方式可使用rollback恢复数据,但是执行速度比truncate要慢。
(2.4)oracle支持在truncate table 表名 后使用”reuse storage”或”drop storage”关键字,前者依旧保留数据原空间即内存,后者则不保存,默认是后者。
(2.5)delete不带where则删除整张表中的数据,带有where条件的话删除满足条件的所有数据记录行,所以在执行delete语句是建议检查是否存在where条件子句。
(2.6)sql语法中不提供删除字段列值的语句,要想想实现这种功能,只能间接实现,现将要保留的属性列值统一复制到一张新表中,然后删除原表,将新表重命名为原表名称。

案例一:删除刘伟老师的记录

delete from T where TN = ‘刘伟’;

案例二:删除所有老师的记录(一次性删除所有记录)

delete from T;

只是清空了数据,但是T表的定义仍旧存在于数据库中

案例三:利用子查询选择要删除的行

delete from TC WHERE(TNO = (SELECT TNO FROM T WHERE TN = ‘刘伟’));

5.3 修改数据,标准sql

update 表名 set 列名1=新值1,列名2=新值2,列名3=新值3,.[where 条件];

一次只能操作一张表;where条件缺省时,则修改所有的数据行;update用于更改表中的一行或者多行记录的某些指定列的值;其中列名1=新值1中,新值也可以是select子查询语句,但必须保证该子查询语句只返回单一的值,否则将出错。
Oracle也允许通过下述可视化界面的方式修改数据表数据:

select * from 表名 for update;

案例一:把刘伟老师转到信息系

update T set DEPT = ‘信息’ where SN = ‘刘伟’;

案例二:将所有学生的年龄增加1岁(修改多行)

update S set AGE = AGE+1;

案例三:把所有老师的工资提高到平均工资的1.2倍

update T set SAL = (SELECT 1.2*avg(SAL) from T);

注意:update的执行顺序:从左到右,变量优先,逐行执行;字段之间,并行执行。

5.4 查询数据,标准sql

SQL中在对数据表数据或者视图数据进行查询时的语法关键字很多,要注意。
distinct()函数表示对查询出来的数据列中相同的数据去重复;
max()函数表示对指定的列的数值中取最大值;
min()函数表示对指定的列的数值中取最小值;
avg()函数表示对指定的列的数值中取平均值;
count()函数表示对指定的列进行总数的统计;
注意:查询就像函数,具有返回值,而且这些返回值可以使用函数或者表达式进行运算的!
模糊查询like:

6. 对视图数据的增删改查【DML增删改_数据操纵语言,DQL查_数据查询语言】

注意:对视图数据的增删改查和对表数据的增删改查是完全相同的。

文档信息

Search

    Table of Contents