2021-08-20

task02

task02有参考大佬们的学习笔记,但也有也会补充自己的学习笔记
1.创建数据库、表
CREATE DATABASE shop;

CREATE TABLE product (
product_id CHAR ( 4 ) NOT NULL,
product_name VARCHAR ( 100 ) NOT NULL,
product_type VARCHAR ( 32 ) NOT NULL,
sale_price INTEGER,
purchase_price INTEGER,
regist_date DATE,
PRIMARY KEY ( product_id ));
2.表的删除
高危操作,请三思才确认此操作
DROP TABLE < 表名 > ;

删除 product表

DROP TABLE product;
3.列的添加
ALTER TABLE 语句

语法

ALTER TABLE < 表名 > ADD COLUMN < 列的定义 >;

添加一列可以存储 100 位的可变长字符串的 product_name_pinyin 列

ALTER TABLE product ADD COLUMN product_name_pinyin VARCHAR(100);
添加前
image

添加后
image
4.列的删除
高危操作,请三思才确认此操作

语法

ALTER TABLE < 表名 > DROP COLUMN < 列的定义 >;

  • 删除刚刚添加的列 product_name_pinyin
    ALTER TABLE product DROP COLUMN product_name_pinyin;
    5.清空表的内容
    优点:相比 Drop / Delete,Truncate 用来清除数据时,速度最快。
    TRUNCATE TABLE TABLE_NAME;
    测试数据插入
    – 通常的INSERT
    INSERT INTO product VALUES (‘0002’, ‘打孔器’, ‘办公用品’, 500, 320, ‘2009-09-11’);
    INSERT INTO product VALUES (‘0003’, ‘运动T恤’, ‘衣服’, 4000, 2800, NULL);
    INSERT INTO product VALUES (‘0004’, ‘菜刀’, ‘厨房用具’, 3000, 2800, ‘2009-09-20’);

– 多行INSERT ( DB2、SQL、SQL Server、 PostgreSQL 和 MySQL多行插入)
INSERT INTO product VALUES (‘0002’, ‘打孔器’, ‘办公用品’, 500, 320, ‘2009-09-11’),(‘0003’, ‘运动T恤’, ‘衣服’, 4000, 2800, NULL),(‘0004’, ‘菜刀’, ‘厨房用具’, 3000, 2800, ‘2009-09-20’);
image

6.数据的更新

语法:

UPDATE <表名>
SET <列名> = <表达式> [, <列名 2 >=<表达式 2 >…];
WHERE
<条件>;-- 可选,非常重要。
ORDER BY;
<子句>; --可选
LIMIT
<子句>; --可选
使用 update 时要注意添加where 条件,否则将会将所有的行按照语句修改

修改前的数据
image

– 修改所有的注册时间
UPDATE product
SET regist_date = ‘2009-10-10’;
修改后的数据,可见时间栏都修改成2009-10-10
image
– 仅修改部分商品的单价
UPDATE product
SET sale_price = sale_price * 10
WHERE
product_type = ‘厨房用具’;
条件为厨房用具的 sale_price增加10倍了,由千更改成3万
image

使用 UPDATE 也可以将列更新为 NULL(该更新俗称为 NULL 清空)。此时只需要将赋值表达式右边的值直接写为 NULL 即可

例如我们将上一次更改的3万重置成空

UPDATE product
SET sale_price = NULL
WHERE
product_type = ‘厨房用具’;
image

多列更新
UPDATE 语句的 SET 子句支持同时将多个列作为更新对象。

将办公用品的sale_price字段修改成80,purchase_price修改成800

UPDATE product set sale_price=50 WHERE product_type=‘办公用品’;
UPDATE product set purchase_price=800 WHERE product_type=‘办公用品’;
上面的写法比较繁琐
image

那我们是否可以整合成一条语句?

UPDATE product
SET sale_price = 50 ,purchase_price = 800
WHERE
product_type = ‘办公用品’;
【作业】
image
CREATE TABLE Addressbook (
regist_no INTEGER NOT NULL,
NAME VARCHAR ( 128 ) NOT NULL,
address VARCHAR ( 256 ) NOT NULL,
tel_no CHAR ( 10 ),
mail_address CHAR ( 20 ),
PRIMARY KEY ( regist_no ));
image
image
ALTER TABLE Addressbook ADD postal_code CHAR(8) NOT NULL;
image

image

DROP TALBE Addressbook;
image

删除操作不可逆,只能安装步骤1进行重新建表
1.SELECT语句
比较简单,一般在线上环境尽可能不select * from 表名 后面还不接where条件。
SELECT <列名> FROM <表名>;
SELECT <列名> FROM <表名> WHERE <条件表达式>;
设定汉语别名时需要使用双引号(")括起来。
SELECT <列名> AS “别名” FROM <表名>;
插入一行测试数据
INSERT INTO shop.product (product_id, product_name, product_type, sale_price, purchase_price, regist_date) VALUES (‘0005’, ‘笔’, ‘办公用品’, 100, 200, ‘2009-10-11’)
image

使用DISTINCT删除product_type列中重复的数据
SELECT product_type FROM product;
image

SELECT DISTINCT product_type FROM product;
image

参考参考大佬们的笔记,后续继续补充自己的,加油加油。

练习题3.1作答:
SELECT product name, regist_date
FROM product
WHERE regist_date > ‘2009-4-28’

练习题3.2作答:
Line1:找出product表中purchase_price为NULL的所有数据
Line2:找出product表中purchase_price不等于NULL的所有数据
Line3:找出product表中purchase_price大于NULL的所有数据

练习题3.3作答:
第一种:
SELECT product_name, sale_price, purchase_price
FROM product
WHERE sale_price - purchase_price > 500
ORDER BY sale_price;
第二种:
SELECT product_name, sale_price, purchase_price
FROM product
WHERE NOT sale_price - purchase_price <= 500
ORDER BY sale_price;

练习题3.4作答:
SELECT product_name,
product_type,
sale_price * 0.9 AS profit
FROM product
WHERE product_name = ‘办公用品’
OR product_name = ‘厨房用具’
AND ((sale_price* 0.9 - purchase_price ) > 100);

练习题3.5作答:
1、WHERE语句使用在GROUP BY之前,分号放在GROUP BY结尾
2、SUM函数只适用数值类型的列,product_name不是数值类型
3、SUM使用的括号为中文,改成英文括号

练习题3.6作答:
SELECT product_type,
SUM(sale_price) AS sum,
SUM(purchase_price) AS sum
FROM product
GROUP BY product_type
HAVING product_type = ‘办公用品’
OR product_type = ‘衣服’
AND SUM(sale_price) > SUM(purchase_price * 1.5);

练习题3.7作答:
SELECT *
FROM product
ORDER BY regist_date DESC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值