SQL基础——数据更新(上)

简介: SQL基础——数据更新(上)

数据更新

前言

系统学习SQL的笔记,用于记录学习过程。

思维导图



数据的插入(INSERT语句的使用方法)

什么是INSERT

用创建表CREATE TABLE语句创建出来的表,可以任务是一个空空如也的箱子。只有把数据装入到这个箱子后,它才能够称为数据库。用来装入数据的SQL语句就是INSERT语句。

INSERT语句的基本语法

语法4.1 INSERT语句

INSERT INTO <表名> (列 1, 列 2, 列 3, …… )
VALUES
    (值 1, 值 2, 值 3, …… );

先创建ProductIns表用于后序的语句练习

代码示例4.2 创建 ProductIns表的CREATE TABLE语句

CREATE TABLE ProductIns (
    product_id CHAR ( 4 ) NOT NULL,
    product_name VARCHAR ( 100 ) NOT NULL,
    product_type VARCHAR ( 32 ) NOT NULL,
    sale_price INTEGER DEFAULT 0,
    purchase_price INTEGER,
    regist_date DATE,
PRIMARY KEY ( product_id ));

使用INSERT语句

代码示例4.3 向表中插入一行数据

INSERT INTO ProductIns ( product_id, product_name, product_type, sale_price, purchase_price ,regist_date )
VALUES
    ( '0001', '体恤衫', '衣服', 1000, 500, '2009-09-20' );

由于product_id列和product_name列是字符型,所以插入的数据需要像’0001’用单引号括起来,日期型的regist_date也需要用单引号括起来。

将列名和值用逗号隔开,分别括在()内,这种形式成为清单。在代码示例4.3中的INSERT包含如下两个清单。
列清单→(product_id, product_name, product_type, sale_price, purchase_price, regist_date)

值清单→(‘0001’, ‘T恤衫’, ‘衣服’, 1000, 500,‘2009-09-20’)注意:表名后面的列清单和VALUES子句中的值清单的列数必须保持一致,列数不一致时会出错。一般执行一次INSERT语句会插入一条数据。但是有很多RDBMS都支持一次插入多行数据。

代码示例4.4 INSERT插入多行数据

INSERT INTO ProductIns
VALUES
    ( '0002', '打孔器', '办公用品', 500, 320, '2009-09-11' ),
    ('0003','运动T恤','衣服',4000,2800,NULL ),
    ('0004','菜刀','厨房用具',3000,2800,'2009-09-20' );

注意:该语法适用于DB2、SQL、SQL Server、PostgreSQL和MySQL,但不适用于Oracle。Oracle有特定的多行插入语法。

列清单的省略

对表进行全列INSERT时,可以省略表名后的列清单,这时VALUES子句的值会默认按照从左到右的顺序赋给每一列。

代码示例4.5 省略列清单

INSERT INTO ProductIns
 VALUES ('0005', '高压锅', '厨房用具', 6800, 5000, '2009-01-15');

插入NULL

INSERT语句想要给某一列赋予NULL值时,可以直接在VALUES子句的值清单中写入NULL。

插入默认值

可以向表中插入默认值,首先需要在创建表的时候设置DEFAULT约束来设定默认值。

如在代码示例4.2 中的sale_price列默认值设置为0.如果在创建表的同时设置了默认值,就可以再INSERT语句中自动为列赋值了。

默认值的使用方法通常由显示和隐式两种。

通过显示方法插入默认值

在VALUES子句中制定DEFAULT关键字

代码示例4.5 通过显示方式设定默认值

INSERT INTO ProductIns ( product_id, product_name, product_type, sale_price, purchase_price, regist_date )
VALUES
    ( '0007', '擦菜板', '厨房用具', DEFAULT, 790, '2009-04-28' );

这样一来,RDBMS就会在插入记录是自动把默认值赋值给对应的列。

通过隐式方法插入默认值

插入默认值时也可以不使用DEFAULT关键字,只要在列清单和VALUES中省略设定的默认值的列就可以了。

代码示例4.6 通过隐式方法设定默认值

INSERT INTO ProductIns ( product_id, product_name, product_type,  purchase_price, regist_date )
VALUES
    ( '0008', '擦菜板', '厨房用具', 790, '2009-04-28' );

注意:省略INSERT语句中的列名,就会自动设定为该列的默认值(没有默认值时会设定为NULL)。

从他表中复制数据

要插入数据,除了使用VALUES子句制定具体的数据之外,还可以从其他表中复制数据。

先创建一张表

代码示例4.7 创建ProductCopy表的CREATE TABLE语句

 -- 用来插入数据的商品复制表
CREATE TABLE ProductCopy (
    product_id CHAR ( 4 ) NOT NULL,
    product_name VARCHAR ( 100 ) NOT NULL,
    product_type VARCHAR ( 32 ) NOT NULL,
    sale_price INTEGER DEFAULT 0,
    purchase_price INTEGER,
    regist_date DATE,
PRIMARY KEY ( product_id ));

ProductCopy(商品复制)表的结构与之前使用的ProductIns(商品)表完全一样,只是更改了一下表名而已。

接下来将ProductIns表中的数据插入到ProductCopy表中。

代码示例4.8 INSERT…SELECT语句

-- 将商品表中的数据复制到商品复制表中
INSERT INTO ProductCopy ( product_id, product_name, product_type, sale_price, purchase_price, regist_date ) SELECT
product_id,
product_name,
product_type,
sale_price,
purchase_price,
regist_date 
FROM
    ProductIns;

这样就将ProductIns表中的所有数据插入到了ProductCopy表中。,INSERT … SELECT

语句可以在需要进行数据备份时使用
注意:INSERT语句的SELECT语句中,可以使用WHERE子句或者GROUP BY子句等任何SQL语法(但使用ORDER BY子句并不会产生任何效果)。

数据的删除(DELETE语句的使用方法)

DROP TABLE语句与DELETE语句

① DROP TABLE语句可以将表完全删除

② DELETE语句会留下表(容器),而删除表中的全部数据

DELETE语句的基本语法

语法4-2 保留数据表,仅删除全部数据行的DELETE语句

 DELETE FROM <表名>;

代码示例4.9 清空Product表

DELETE FROM Product;

注意:DELETE语句的删除对象并不是表或者列,而是记录(行)。

指定删除对象的DELETE语句(搜索型DELETE)

想要删除部分数据行时,可以像SELECT语句那样使用WHERE子句制定删除条件。这种指定了删除对象的DELETE语句成为搜索型DELETE。

语法4.3 删除部分数据行的搜索型DELETE

DELETE 
FROM
    <表名> 
WHERE
    <条件>;

以Product表为例进行DELETE语句的操作。

目录
相关文章
|
21天前
|
SQL 关系型数据库 MySQL
实时计算 Flink版产品使用合集之当 SQL Server 源数据库中的数据更新后,CDC 吐出的操作(op)是怎样的
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
22天前
|
SQL 算法 数据库
【数据库SQL server】关系数据库标准语言SQL之数据更新
【数据库SQL server】关系数据库标准语言SQL之数据更新
36 0
|
11月前
|
SQL Oracle 关系型数据库
SQL基础——数据更新(下)
SQL基础——数据更新(下)
73 0
|
9月前
|
SQL 数据库 数据库管理
第3章 关系数据库标准语言SQL——3.5 数据更新
第3章 关系数据库标准语言SQL——3.5 数据更新
|
SQL 数据格式
SQL之数据更新(操纵)
SQL之数据更新(操纵)
129 0
|
SQL 数据库管理
SQL的数据更新
SQL的数据更新
59 0
|
SQL 数据库管理
【SQL开发实战技巧】系列(九):一个update误把其他列数据更新成空了?Merge改写update!给你五种删除重复数据的写法!
本篇文章讲解的主要内容是:***你有没有经历过一个update把其他列数据清空了、使用merge更新合并记录、删除违反参照完整性的记录、给你五种删除重复数据的写法*** 【SQL开发实战技巧】这一系列博主当作复习旧知识来进行写作,毕竟SQL开发在数据分析场景非常重要且基础,面试也会经常问SQL开发和调优经验,相信当我写完这一系列文章,也能再有所收获,未来面对SQL面试也能游刃有余~。
【SQL开发实战技巧】系列(九):一个update误把其他列数据更新成空了?Merge改写update!给你五种删除重复数据的写法!
|
SQL 数据库
SQL 基础(八)数据更新操作实战演练
SQL 基础(八)数据更新操作实战演练
195 0
|
SQL Oracle 关系型数据库
一次难忘的Oracle数据更新经历,用游标?还是用动态SQL?
最近工作中遇到一个比较棘手的问题,拿出来和大家分享一下。
一次难忘的Oracle数据更新经历,用游标?还是用动态SQL?