SQL - 学习笔记5
文章目录
1、数据插入 - INSERT INTO
(1) INSERT INTO 表名 VALUES(插入值)
表名(插入字段名)
插入值为完整行或部分行(允许NULL或缺省)
完整行: INSERT INTO prod_info VALUES(1, ‘火腿肠’, ‘55g’, ‘2019/2/4’, 12, 15,5, 21)
部分/完整行:INSERT INTO prod_info(prod_id, prod_name…) VALUES(1, ‘火腿肠’, …)
(2) 插入检索数据:将SELECT语句查询结果直接插入表中
不影响SELECT语句中WHERE/GROUP BY/HAVING等子句的使用
可以调整列的顺序,可以只给部分行,表结构发生变化也不影响
字段数据类型保持一致,字段顺序保持一致。
2、数据更新 - UPDATE
(1) UPDATE 表名 SET 字段 = 值 WHERE 过滤条件
指定更新的表,有且仅有一个
可更新多个字段,逗号隔开
并且需用WHERE指定更新行,否则全部更新
赋值时,若该列允许空值,则可赋值NULL
3、数据删除 - DELETE
DELETE FROM 表名 WHERE 过滤条件
删除的只是表中的数据,而非删除表
TRUNCATE TABLE 表名
表中无内容,但表仍然存在
4、表操作 - 创建表
CREATE TABLE 表名
{ 字段名 数据类型 属性,
字段名 数据类型 属性
};
是否允许NULL, 默认允许;
默认值DEFAULT设置,必须是常数
表名唯一,字段名唯一
NULL != 空串,空串是有效值
5、表操作 - 复制表
MYSQL写法:
CREATE TABLE 表名
AS 目标二维表;
任何形式的SELECT语句
表结构由SELECT字段决定
表记录由WHERE条件决定
标准SQL写法:SELECT 字段 INTO 新表 FROM 目标表 (忽略)
6、表操作 - 更新表
对表的结构进行更新,字段及其属性发生更改
ALTER TABLE 表名 ADD 字段名 数据类型 属性
DROP 字段名
DROP COLUMN 字段名
MODIFY COLUMN 字段名 数据类型 属性
表更改不能撤销,建议做完整备份
7、表操作 - 删除表
DROP TABLE 表名
没有确认,没有撤销,永久删除
备份!
8、重命名
RENAME TABLE 表名1 TO 新表名1,表名2 TO 新表名2 , …
可批量,从左往右依次执行
可连续执行
练习
Q1:写出插入语句的两种语句结构,并分析其使用场景。
① INSERT INTO 表名 VALUES()
② INSERT INTO 表名(…, …, …) VALUES(…, …, …)
①仅适用于整行插入,且要求表结构固定;
②可用于郑航插入也可用于部分插入,插入顺序可自定义。即使表后续发生修改,只要插入字段存在,则该语句有效。
Q2:请写出更新表的语句结构(多列),以及更新操作的注意事项。
UPDATE 表名 SET 字段 = 值 WHERE 过滤条件
指定更新的表有且仅有一个;可更新多个字段,逗号隔开;一定要注意过滤条件的检查。
Q3:分别写出以下语句。
1、 向 milk_tea 表中插入一个完整的行:(9,测试商品 1,100g,2019-01-01,12,13,20)
INSERT INTO milk_tea VALUES(9,测试商品 1,100g,2019-01-01,12,13,20)
2、 向 milk_tea 表中插入以下数据:prod_id = 10,pro_date = “2018-01-01”,prod_name = “测试商品 2”
INSERT INTO milk_tea(prod_id, pro_date, prod_name) VALUES(10, “2018-01-01”,“测试商品 2”)
3、 从 milk_tea 表中找到‘棒棒糖’的行,修改 prod_id 为 11 后重新插入 milk_tea 表
法1
UPDATE milk_tea SET prod_id = 11 WHERE prod_name = ‘棒棒糖’
法2
INSERT INTO milk_tea
SELECT 11, m.prod_name, m.net_w, m.pro_date, m.valid_month, m.in_price, m.sale_price
FROM milk_tea m
WHERE prod_name = ‘棒棒糖’
4、 修改 prod_id 为 11 的行数据,将 prod_name 修改为“测试商品 3”
UPDATE milk_tea SET prod_name = "测试商品 3”WHERE prod_id = 11
5、 删除 prod_id 为 9、10、11 的行。
DELETE FROM milk_tea WHERE prod_id IN (9, 10, 11)
Q4:请写出创建表语句的结构、常用的属性及相关注意事项。
CREATE TABLE 表名
(
字段名 数据类型 属性,
字段名 数据类型 属性
);
常用属性:是否允许空值 - NOT NULL, 缺省值设定 - DEFUALT,
注意事项:表名唯一,字段名唯一;NULL!=空串,空串是有效值。
Q5:写出为表增加字段和修改字段数据类型的语句结构。
ALTER TABLE 表名 ADD 字段名 数据类型 属性;
ALTER TABLE 表名 MODIFY COLUMN 字段名 数据类型 属性;
Q6:写出以下语句
1、 复制 milk_tea 表的prod_id/prod_name/prod_date/valid_month列至表 milk_tea2,使其的 prod_id 列为 milk_tea 表中 prod_id 值添加前缀‘T’,其余列与 milk_tea 表一模一样
CREATE TABLE milk_tea2
AS
SELECT CONCAT(‘T’, prod_id), prod_name, prod_date, valid_month
FROM milk_tea
2、 增加 net_w 列,类型为 VARCHAR(255)
ALTER TABLE milk_tea2 ADD net_w VARCHAR(255);
3、 修改 net_w 列与 milk_tea 表中的 net_w 列完全一样
法1:
UPDATE milk_tea2 m2
SET net_w = (
SELECT m.net_w
FROM milk_tea m
WHERE m2.prod_id = CONCAT(‘T’, m.prod_id)
);
法2:
UPDATE milk_tea2 m2
INNER JOIN milk_tea m
SET m2.net_w = m.net_w
WHERE m2.prod_id = CONCAT(‘T’, m.prod_id);
4、 修改 milk_tea2 表中的 pro_date 列缺省值为‘20190401’
ALTER TABLE milk_tea MODIFY COLUMN pro_date DATE DEFUALT ‘20190401’;
5、 删除 milk_tea2 表的 net_w 和 valid_month 列
ALTER TABLE milk_tea2 DROP