/* DDL:对象管理-数据库对象-增删改查 */
-- 查看所有的数据库列表
SHOW DATABASES
-- 创建数据库db1
CREATE DATABASE db1
-- 判断是否存在,如果不存在则创建数据库db2
CREATE DATABASE IF NOT EXISTS db2
-- 创建数据库并指定字符集为gbk,如果没有指定默认是utf-8,在安装的时候已经指定
CREATE DATABASE db3 CHARACTER SET GBK
-- 将db3数据库的字符集改成utf8
ALTER DATABASE db3 CHARACTER SET utf8
-- 删除db2数据库
DROP DATABASE db2
-- 判断db3数据库存在则删除
DROP DATABASE IF EXISTS db3
-- 使用db1数据库
USE db1
/* DDL:对象管理-表对象-增删改查 */
-- 切换数据库
-- USE db1;
-- 案例:创建存储商品数据表(增加)
-- 要求
-- 创建商品表:(goods)包含
-- 表中的字段:商品名称(name)、商品价格(price)、商品销量(sales_volume)、商品生产日期(produced_date)
-- 数据类型分析
-- 商品名称(name), 字符串类型 varchar(100)
-- 商品价格(price), 小数类型 double
-- 商品销量(sales_volume), 整型类型 int
-- 商品生产日期(produced_date), 日期类型 date
CREATE TABLE goods(
NAME VARCHAR(100) COMMENT '商品名称',
price DOUBLE COMMENT '商品价格',
sales_volume INT COMMENT '商品销量',
produced_date DATE COMMENT '商品生产日期'
);
-- 查看db1数据库中的所有表
SHOW TABLES
-- 查看表结构
DESC goods
-- 直接删除表goods表
DROP TABLE goods
-- 将goods改名成goods3
ALTER TABLE goods RENAME goods3
-- 将goods3表的编码修改成gbk
ALTER TABLE goods3 CHARACTER SET gbk
-- 为goods3表添加一个新的字段img,类型为varchar(20)
ALTER TABLE goods3 ADD img VARCHAR(20)
-- 将goods3表中的img字段的改成varchar(100)
ALTER TABLE goods3 MODIFY img VARCHAR(100)
-- 将goods3表中的img字段名改成icon,类型varchar(80)
ALTER TABLE goods3 CHANGE img ioc VARCHAR(80)
-- 删除goods3表中的字段icon
ALTER TABLE goods3 DROP ioc
/* DML:表数据管理-增删改查 */
-- 插入数据, 给指定列添加数据 给goods表添加一条数据 NAME='格力空调', price=3699
-- 注意:在MySQL中字符串可以使用""或'', 建议''
-- 细节:插入数据, 不按顺序来
-- 插入数据, 所有的字段名都写出来(比较麻烦)
-- 给goods表添加一条数据 NAME='华为P50', price=6999, sales_volume=1000, produced_date='2021-08-20'
-- 注意:日期使用''
-- 插入数据, 插入所有字段不写字段名(常用做法): '小米11', 4999, 300, '2021-03-22'
-- 扩展:一条SQL语句加入多条数据, VALUES 后面可以跟多个(),使用","隔开, 一个()对应一条数据
-- 'iPhone 12', 6799, 12000, '2020-10-28'
-- 'DELL 7590', 8799, 300, '2019-06-18'
-- '立白洗衣粉', 12.9, 39000, '2018-02-13'
INSERT INTO goods3 (NAME,price,sales_volume,produced_date) VALUES
('iPhone 12', 6799, 12000, '2020-10-28'),
('DELL 7590', 8799, 300, '2019-06-18'),
('立白洗衣粉', 12.9, 39000, '2018-02-13');
-- 不带条件修改数据,将所有的price改成 0
UPDATE goods3 SET price=0;
-- 带条件修改数据,把name为'华为P40'的商品price改成6999
UPDATE goods3 SET price = 6999 WHERE NAME='华为P40'
-- 一次修改多个列,把name为'小米11'的商品price改成3999, sales_volume改成10000
UPDATE goods3 SET price=3999,sales_volume=10000 WHERE NAME='小米11';
-- 带条件删除数据,删除name为'小米11'的数据
DELETE FROM goods3 WHERE NAME='小米11'
-- 不带条件删除数据,删除表中的所有数据
DELETE * FROM goods3
/* DQL:无条件查询 */
-- 准备数据,执行下列代码
INSERT INTO goods3 VALUES
('华为P40',5999,1000,'2020-08-20'),
('小米11',4999,5000,'2020-12-28'),
('红米K30',2999,22000,'2020-03-11'),
('糯米',8.99,200,'2016-06-08'),
('米糊',7.99,30,'2013-11-22'),
('东北大米',5.99,3000,'2011-11-22'),
('iPhone 12',6799,12000,'2020-10-28'),
('DELL 7590',8799,300,'2019-06-18'),
('立白洗衣粉',12.9,39000,'2018-02-13'),
(NULL,88,666,NULL),
('联想电脑',8799,700, '2017-03-13'),
('惠普电脑',8799,50, '2008-12-13');
-- 查询goods表中的 name 和 price 列
SELECT NAME,price FROM goods3
-- 注意:查询只是查看数据,不会修改表中数据
-- 查询goods表中所有字段
SELECT NAME,price,sales_volume,produced_date FROM goods3
-- 查询所有字段, 使用*代表所有列 列就是字段
SELECT * FROM goods3
-- 注意:我们学习时一般使用*这样查询开发简单。实际工作中,你需要什么字段就查询什么字段,不要使用*.
-- 添加一条相同的数据: '立白洗衣粉', 12.9, 39000, '2018-02-13'
INSERT INTO goods3 VALUES ('立白洗衣粉', 12.9, 39000, '2018-02-13');
-- 去除重复查询商品名字: DISTINCT
SELECT DISTINCT NAME FROM goods3
-- 查询结果参与运算
-- 查询price * sales_volume
SELECT price,price * sales_volume AS '运算' FROM goods3
-- 扩展:所有商品价格打8折
SELECT price ,price * 0.8 FROM goods3
-- 注意:只有数字才能参与运算
-- 演示:价格乘以非数字的字符串,例如:price * 'OK'
-- 查询goods表中的 name 和 price 列,使用as起字段别名
-- name列的别名为 商品名称,price列的别名为 价格
SELECT NAME AS '商品名称',price AS '商品价格' FROM goods3
-- 取别名时AS关键字可以省略
SELECT NAME '商品名称',price '商品价格' FROM goods3
/* DQL:有条件查询-运算符的使用 */
-- 比较运算符
-- 查询price大于1000的商品
SELECT * FROM goods3 WHERE price > 1000
-- 查询sales_volume小于5000的商品
SELECT * FROM goods3 WHERE sales_volume < 5000;
-- 查询price不等于6799的商品,分别使用!= 和 <> 两种方式实现
SELECT * FROM goods3 WHERE price != 6799
SELECT * FROM goods3 WHERE price <> 6799
-- 逻辑运算符
-- 查询price大于1000且sales_volume小于500的商品(两个条件同时满足)
SELECT * FROM goods3 WHERE price > 1000 AND sales_volume < 500
-- 查询price大于8000 或 sales_volume小于100的商品(两个条件其中一个满足)
SELECT * FROM goods3 WHERE price > 8000 OR sales_volume < 100
-- 查询name是“华为P40”、“小米11”和“米糊”的商品
SELECT * FROM goods3 WHERE NAME='华为P40' OR NAME='小米11' OR NAME='米糊'
/* DQL:有条件查询-关键字的使用 */
-- in关键字: 在...里面,只要是满足()里面的数据都可以
-- 演示:查询name是 华为P40 和 小米11 和 米糊 的商品
SELECT * FROM goods3 WHERE NAME IN ('华为P40','小米11','米糊')
-- 演示:查询name不是华为P40和小米11和米糊的商品
SELECT * FROM goods3 WHERE NAME NOT IN ('华为P40','小米11','米糊')
-- BETWEEN 小值1 AND 大值2 关键字:表示从小值1到大值2范围,包头又包尾
-- 演示:查询price大于等于1000,且小于等于5000的商品
SELECT * FROM goods3 WHERE price >= 1000 AND price <= 5000
SELECT * FROM goods3 WHERE price BETWEEN 1000 AND 5000 #优化
-- 注意: between 值1 and 值2, 小的写前面大的写后面
-- IS NULL 关键字:查询指定列为null的数据
-- 演示:查询商品名称是null的商品
SELECT * FROM goods3 WHERE NAME IS NULL
-- 注意:这里不可以使用NAME=NULL
-- IS NOT NULL 关键字:查询指定列不为null的数据
-- 演示:查询商品名称不是null的商品
SELECT * FROM goods3 WHERE NAME IS NOT NULL
-- like 关键字:模糊查询
-- 演示:查询米开头的商品
SELECT * FROM goods3 WHERE NAME LIKE '米%'
-- 演示:查询商品名称中包含'米'字的商品
SELECT * FROM goods3 WHERE NAME LIKE '%米%'
-- 扩展:查询名称第二个字为米的商品
SELECT * FROM goods3 WHERE NAME LIKE '_米%'
-- 扩展:查询名称最后字为米的商品
SELECT * FROM goods3 WHERE NAME LIKE '%米'
-- 扩展:查询商品名称为4个字的
SELECT * FROM goods3 WHERE NAME LIKE '____'
/* DQL:查询结果排序 */
-- order by 表示排序, ASC升序, DESC降序
SELECT * FROM goods3 ORDER BY price ASC
-- 单列排序
-- 演示:查询所有数据,使用price升序排序
SELECT * FROM goods3 ORDER BY price ASC
-- 演示:查询所有数据,使用price降序排序
SELECT * FROM goods3 ORDER BY price DESC
-- 演示:order by 默认是升序
-- 多列组合排序
-- 演示:查询所有数据,在price降序排序的基础上,如果price相同再以sales_volume降序排序
SELECT * FROM goods3 ORDER BY price DESC,sales_volume DESC
-- 1.创建数据库,名称为mhxy
CREATE DATABASE mhxy
-- 使用数据库
USE mhxy
-- 2.创建数据表,名称为prop,
-- 包含道具名称(name), 道具评分(score), 道具部位(part),
-- 道具需求等级(need_level), 道具所需职业(job)
CREATE TABLE prop(
NAME VARCHAR(20) COMMENT '道具名称',
score INT COMMENT '道具评分',
part VARCHAR(20),
need_level INT COMMENT '道具所需等级',
job VARCHAR(20)
);
-- 3.添加9个道具数据到数据表中
-- '青铜裤子', 1686, '裤子', 1, '通用'
-- '青铜头盔', 2320, '头盔', 2, '通用'
-- '青铜腰带', 9280, '腰带', 10, '通用'
-- '业焰裤子', 336010, '裤子', 200, '通用'
-- '业焰衣服', 410674, '衣服', 200, '通用'
-- '青铜戒指', 9252, '戒指', 10, '通用'
-- '青铜手镯', 12321, '手镯', 10, '通用'
-- '业焰手镯', 512321, '手镯', 200, '通用'
-- '业焰戒指', 623212, '戒指', 200, '通用'
INSERT INTO prop VALUES
('青铜裤子', 1686, '裤子', 1, '通用'),
('青铜头盔', 2320, '头盔', 2, '通用'),
('青铜腰带', 9280, '腰带', 10, '通用'),
('业焰裤子', 336010, '裤子', 200, '通用'),
('业焰衣服', 410674, '衣服', 200, '通用'),
('青铜戒指', 9252, '戒指', 10, '通用'),
('青铜手镯', 12321, '手镯', 10, '通用'),
('业焰手镯', 512321, '手镯', 200, '通用'),
('业焰戒指', 623212, '戒指', 200, '通用');
-- 4.删除2个道具的数据, 满足一个就使用OR
DELETE FROM prop WHERE NAME='青铜裤子' OR NAME='青铜头盔'
-- 5.修改1个道具的数据
UPDATE prop SET part = '腰带2' WHERE NAME = '青铜腰带'
-- 6.查询所有的道具
SELECT * FROM prop
-- 7.查询指定部位的道具为“裤子”
SELECT * FROM prop WHERE part = '裤子'
-- 8.查询指定战力范围500000 - 10000000的道具
SELECT * FROM prop WHERE score >= 500000 AND score <= 10000000
#优化
SELECT * FROM prop WHERE score BETWEEN 500000 AND 10000000
-- 9.查询所有的道具,根据战力降序排序
SELECT * FROM prop ORDER BY score DESC -- 降序
SELECT * FROM prop ORDER BY score ASC -- 升序,可以不写,默认
-- 10.查询name以“青铜”开头的所有装备
SELECT * FROM prop WHERE NAME LIKE '青铜%'
SELECT * FROM prop LIMIT 1,5
SELECT SUM(score) FROM prop