常用的MySql操作

这里记录下常用的mysql操作,如果有需要的命令忘记了就不需要再次上网查找了
首先是登录
命令行的话,可以直接输入mysql登录,如果提示’mysql’ 不是内部或外部命令,也不是可运行的程序或批处理文件。这样的报错,一般都是文件路径没有配置正确,可以直接cd到mysql安装目录的bin目录下进行操作

mysql -u<用户名> -p<密码>

注意我用的mysql5.7这里的-u和-p后面是不接空格的,加了空格反而会报错
如果实在不行也可以使用SQLyog这些可视化工具进行登录
在这里插入图片描述
操作数据库和表

/*  DML操作数据库  */
-- 查看所有数据库
SHOW DATABASES;

-- 直接创建数据库db1
CREATE DATABASE db1;

-- 判断是否存在并创建数据库db2
CREATE DATABASE IF NOT EXISTS db2;


-- 删除db2数据库
DROP DATABASE db2;


-- 判断数据库存在才删除
DROP DATABASE IF EXISTS db2;


-- 使用数据库
USE db1;

/*  DDL操作表  */

/*
创建商品表(goods)包含: 
	商品名称(name),
	商品价格(price),
	商品销量(sales_volume),
	商品生产日期(produced_date)
*/
CREATE TABLE goods(
	NAME VARCHAR(10),
	price DOUBLE,
	sales_volume INT,
	produuced_date DATE
);


/*
需求:设计一张学生表,请注重数据类型、长度的合理性
	编号,			整数
	姓名,			姓名最长不超过10个汉字
	性别,			因为取值只有两种可能(男或女),因此用一个汉字
	生日,			取值为年月日
	入学成绩,		小数点后保留两位
	邮件地址,		最大长度不超过 64
	家庭联系电话,	不一定是手机号码,可能会出现 - 等字符,20位以内
*/
CREATE TABLE student(
	id INT,
	NAME VARCHAR(10),
	sex CHAR(1),
	birthday DATE,
	score DECIMAL(5, 2),
	email VARCHAR(64),
	phone VARCHAR(20)
);
-- 查看db1数据库中的所有表
SHOW TABLES;

-- 查看表结构
DESC student;


-- 删除表goods表
DROP TABLE goods;


-- 将goods改名成goods2
ALTER TABLE goods RENAME TO goods2;


-- 为goods2表添加一个新的字段img,类型为varchar(20)

ALTER TABLE goods2 ADD img VARCHAR(20);

-- 将goods2表中的img字段的改成varchar(100)

ALTER TABLE goods2 MODIFY img VARCHAR(100);

-- 将goods2表中的img字段名改成icon,类型varchar(80)

ALTER TABLE goods2 CHANGE img icon VARCHAR(80);

-- 删除goods2表中的字段icon

ALTER TABLE goods2 DROP icon;

增删改数据

/* DML操作表中记录 */
-- 插入数据, 给指定列添加数据 给goods表添加一条数据 NAME='格力空调', price=3699
-- 注意:在MySQL中字符串可以使用""'', 建议''
INSERT INTO goods2 (NAME, price) VALUE ('格力空调', 3999);

-- 插入数据, 所有的字段名都写出来(少数做法)
-- NAME='华为P40', price=5999, sales_volume=1000, produced_date='2020-08-20'
-- 注意:日期使用''
INSERT INTO goods2 (NAME, price, sales_volume, produuced_date) VALUE ('华为P40', 5999, 1000, '2020-08-20');

-- 插入数据, 插入所有字段不写字段名(常用做法)
-- '小米11', 4999, 300, '2021-03-22'
INSERT INTO goods2 VALUE ('小米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 goods2 VALUE 
('iPhone 12', 6799, 12000, '2020-10-28'),
('DELL 7590', 8799, 300, '2019-06-18'),
('立白洗衣粉', 12.9, 39000, '2018-02-13');


-- 不带条件修改数据,将所有的price改成0
UPDATE goods2 SET price=0;

-- 带条件修改数据,把name为'华为P40'的商品price改成5999
UPDATE goods2 SET price=5999 WHERE NAME='华为P40';

-- 一次修改多个列,把name为'小米11'的商品price改成3999, sales_volume改成10000
UPDATE goods2 SET price=3999, sales_volume=10000 WHERE NAME='小米11';

-- 带条件删除数据,删除name为'小米11'的数据
DELETE FROM goods2 WHERE NAME='小米11';

-- 不带条件删除数据,删除表中的所有数据
DELETE FROM goods2;

查询数据

/*  DQL查询记录  */

-- 准备数据
CREATE TABLE goods2 (
  NAME VARCHAR(10),
  price DOUBLE,
  sales_volume INT,
  produced_date DATE,
  category VARCHAR(20)
);

INSERT INTO goods2 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','食物'),
('iPhone 12',6799,12000,'2020-10-28','手机'),
('DELL 7590',8799,300,'2019-06-18','电脑'),
('立白洗衣粉',12.9,39000,'2018-02-13','日用品'),
('立白洗衣粉',12.9,39000,'2018-02-13','日用品'),
(NULL,88,666,NULL,NULL),
('联想电脑',8799,700,'2017-03-13','电脑'),
('惠普电脑',8799,50,'2008-12-13','电脑');

-- 查询goods2表中的 name 和 price 列
SELECT NAME, price, sales_volume FROM goods2;

-- 细节:查询只是查看数据,不会修改表中数据

-- 查询goods2表中所有字段
SELECT NAME,price, sales_volume, produced_date, category FROM goods2;

-- 查询所有字段, 使用*代表所有列, 列就是字段
SELECT * FROM goods2;

-- 我们学习是一般使用*这样查询简单快速,实际工作中,你需要什么字段就查询什么字段.


-- 去除重复查询: DISTINCT
SELECT DISTINCT NAME FROM goods2;

-- 查询goods2表中的 name 和 price 列
-- name列的别名为 商品名称,price列的别名为 价格
SELECT NAME AS 商品名称,price AS 价格 FROM goods2;

-- 取别名时AS关键字可以省略
SELECT NAME 商品名称,price 价格 FROM goods2;

-- 条件查询
-- 查询price大于1000的商品
SELECT * FROM goods2;
SELECT * FROM goods2 WHERE price>1000;

-- 查询sales_volume小于5000的商品
SELECT * FROM goods2 WHERE sales_volume<5000;

-- 查询price不等于6799的商品
SELECT * FROM goods2 WHERE price != 6799;
SELECT * FROM goods2 WHERE NAME='小米11';
-- 逻辑运算符
-- 查询price大于1000且sales_volume小于500的商品(两个条件同时满足) and=&&
SELECT * FROM goods2 WHERE price>1000 AND sales_volume<500;

-- 查询price大于8000 或 sales_volume小于100的商品(两个条件其中一个满足) or=||
SELECT * FROM goods2 WHERE price>8000 OR sales_volume<100;

-- 查询name是华为P40和小米11和米糊的商品   or
SELECT * FROM goods2 WHERE NAME='华为P40'OR NAME='小米11' OR NAME='米糊';

-- in: 在...里面,只要是满足()里面的数据都可以
-- 查询name是 华为P40 和 小米11 和 米糊 的商品
SELECT * FROM goods2 WHERE NAME IN ('华为P40','小米11','米糊');

-- 扩展:查询name不是华为P40和小米11和米糊的商品
SELECT * FROM goods2 WHERE NAME NOT IN('华为P40','小米11','米糊');

-- 范围: BETWEEN 值1 AND 值2 -- 表示从值1到值2范围,包头又包尾
-- 查询price大于等于1000,且小于等于5000的商品
SELECT * FROM goods2 WHERE price BETWEEN 1000 AND 5000;

-- 细节: between 值1 and 值2, 小的写前,面大的写后面
SELECT * FROM goods2 WHERE price BETWEEN 1000 AND 5000;


-- 扩展:查询商品名称是null的商品
SELECT * FROM goods2 WHERE NAME IS NULL;

-- 扩展:查询商品名称不是null的商品
SELECT * FROM goods2 WHERE NAME IS NOT NULL;

-- 模糊查询like
-- 查询米开头的商品
SELECT * FROM goods2 WHERE NAME LIKE '米%';

-- 查询商品名称中包含'米'字的商品
SELECT * FROM goods2 WHERE NAME LIKE '%米%';

-- 扩展:查询名称第二个字为米的商品
SELECT * FROM goods2 WHERE NAME LIKE '_米';

-- 扩展:查询名称最后字为米的商品
SELECT * FROM goods2 WHERE NAME LIKE '%米';


/*  查询排序  */
-- order by 表示排序, ASC升序, DESC降序

-- 单列排序
-- 查询所有数据,使用price升序排序
SELECT * FROM goods2 ORDER BY price ASC;

-- 查询所有数据,使用price降序排序
SELECT * FROM goods2 ORDER BY price DESC;

-- order by 默认是升序
SELECT * FROM goods2 ORDER BY price DESC, sales_volume DESC;


-- 组合排序
-- 查询所有数据,在price降序排序的基础上,如果price相同再以sales_volume降序排序
SELECT * FROM goods2 ORDER BY price ASC, sales_volume ASC;


-- 聚合函数
-- SELECT 聚合函数(字段) FROM 表名;
SELECT 
-- 查询商品个数, COUNT统计时会忽略NULL值
SELECT COUNT(price) FROM goods2;
SELECT COUNT(NAME) FROM goods2;
-- COUNT最好的处理方式, *表示所有列理解为统计行数,最准确
SELECT COUNT(*) FROM goods2;

-- 扩展用法:统计price大于1000的总个数
SELECT COUNT(*) FROM goods2 WHERE price>1000;

-- 查询所有商品总销量
-- 总销量是把所有商品的销量加起来
SELECT SUM(sales_volume) FROM goods2;

-- 查询销量最低的商品
SELECT MIN(sales_volume) FROM goods2;

-- 查询销量最高的商品
SELECT MAX(sales_volume) FROM goods2;

-- 查询商品平均价格
SELECT AVG(price) FROM goods2;

-- 扩展:让小数显示指定的位数(2)
-- ROUND(数据, 小数位数)
SELECT ROUND(AVG(price),2) FROM goods2;

-- 细节:如果不是数值类型(整数/小数),那么聚合函数计算结果为0。
SELECT AVG(NAME) FROM goods2;


/*  分组查询  */
-- 按商品类型分组
SELECT * FROM goods2 GROUP BY category;

-- 分组后会返回每组的第一条数据
-- 通常我们只获取分组字段
SELECT category FROM goods2 GROUP BY category;

-- 分组后通常是为了统计,分组后聚合函数操作每一组的数据

-- 查询每种类型的商品数量
SELECT category,COUNT(*) FROM goods2 GROUP BY category;



-- 查询销量大于100的所有行
SELECT * FROM goods2 WHERE sales_volume>100 GROUP BY category;

-- 获取销量大于100的分组字段
SELECT category FROM goods2 WHERE sales_volume>100 GROUP BY category;

-- 查询销量大于100的商品,按商品类型分组,统计每组的数量
SELECT category,COUNT(*) FROM goods2 WHERE sales_volume>1000 GROUP BY category;

-- 查询销量大于100的商品,按商品类型分组,统计每组的数量,并只显商品类型数量大于2的数据
SELECT category,COUNT(*) FROM goods2 WHERE sales_volume>100 GROUP BY category HAVING COUNT(*)>2;


/*  分页查询  */
-- 查询商品表中数据,跳过前面2条,显示3条
SELECT * FROM goods2 LIMIT 2, 3;

-- 假设我们一每页显示3条记录的方式来分页,SQL语句如下:
-- 第一页: 跳过0条, 获取3条
SELECT * FROM goods2 LIMIT 3;
-- 如果跳过的条数是0,可以省略

-- 第二页: 跳过3条, 获取3条
SELECT * FROM goods2 LIMIT 3, 3;
-- 第三页: 跳过6条, 获取3条
SELECT * FROM goods2 LIMIT 6, 3;
-- 第四页: 跳过9条, 获取3条
SELECT * FROM goods2 LIMIT 9, 3;

/*扩展查询的七个关键字顺序
SELECT 
FROM
WHERE
GROUP BY
HAVING
ORDER BY
LIMIT
*/
-- 先查询表里面所有的数据并进行过滤。(此时用where关键字过滤的是表里面的数据,把name为null的给过滤掉了)
-- 然后进行分组,并统计每一组有多少条数据。
-- 利用HAVING关键字对查询的结果再次过滤 把个数大于等于2的展示出来。
-- 对having过滤之后的结果按照个数进行排序
-- 最后再跳过第一个,展示两条数据
SELECT category, COUNT(*) AS 个数 FROM goods2 WHERE NAME IS NOT NULL GROUP BY category HAVING 个数 >= 2 ORDER BY 个数 ASC LIMIT 1,2;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值