MySql-增查改删【一】

新增

1.语法

INSERT [INTO] table_name [(column [, column] ...)] VALUES (value_list) [, (value_list)] ...

value_list: value, [, value]...

2.示例

--测试数据
create table goods(
    goods_id bigint,
    goods_name varchar(255),
    unitprice decimal,
    category varchar(255),
    provider varchar(255)
);

全列插入

insert into goods(goods_id,goods_name,unitprice,category,provider) values (1,'可乐',3.5,'饮料','张三');

在这里插入图片描述

指定列插入

insert into goods(goods_id) values (2);

在这里插入图片描述

多行插入

-- 一次插入多条数据
insert into goods values 
  (3,'火腿肠',3.5,'食品','张三'),
  (4,'水',3.5,'饮料','张三'),
  (5,'妙脆角',3.5,'食品','张三');

在这里插入图片描述

注意:在插入时,指定的列名和values中的值要一一对应,列名和表中的列名也要匹配。当不指定列名时,values中的值与表中所有的列要一一对应。多行插入时每条数据用逗号隔开。

问题:一次写入一条数据和一次写入多条数据,哪个效率高?
在写入数据时,请求时要进行网络通信,有网络开销;存储时要进行磁盘IO操作;MYSQL对每条语句都会开启一个事务。因此,当写入数据的条数在一个合理范围内时,一次写入多条数据比一次写入一条数据效率要高一些。

查询

1.语法

SELECT
 [DISTINCT] {* | {column [, column] ...} FROM table_name [WHERE ...] 
 [ORDER BY column [ASC | DESC], ...]
 LIMIT ...

2.示例

-- 测试数据
-- 创建考试成绩表
DROP TABLE IF EXISTS exam;
CREATE TABLE exam_result (
 id INT,
 name VARCHAR(20),
 chinese DECIMAL(3,1),
 math DECIMAL(3,1),
 english DECIMAL(3,1)
);
-- 插入测试数据
INSERT INTO exam (id,name, chinese, math, english) VALUES
 (1,'唐三藏', 67, 98, 56),
 (2,'孙悟空', 87.5, 78, 77),
 (3,'猪悟能', 88, 98, 90),
 (4,'曹孟德', 82, 84, 67),
 (5,'刘玄德', 55.5, 85, 45),
 (6,'孙权', 70, 73, 78.5),
 (7,'宋公明', 75, 65, 30);

全列查询

select * from exam;

在这里插入图片描述

指定列查询

select id,name,math from exam;

在这里插入图片描述

注意:指定列查询时指定列的顺序和表中实际的排序顺序无关。

查询字段为表达式

结果并不是一个真实的列名,而是一个计算后的结果。

-- 表达式不包含字段
SELECT id, name, 10 FROM exam;

在这里插入图片描述

-- 列对应的值和指定值做运算
-- 表达式包含一个字段
SELECT id, name, chinese + 10 FROM exam;

在这里插入图片描述

-- 一行数据中列与列之间的运算
-- 表达式包含多个字段
SELECT id, name, chinese + math + english FROM exam;

在这里插入图片描述

给查询结果的指定列起别名

select id, name,chinese + math + english as '总分' from exam;

在这里插入图片描述

去重(DISTINCT)

select distinct math from exam;

在这里插入图片描述

注意:去重时,每个字段都相同才可以去重。

排序(ORDER BY)

语法:

-- ASC 为升序(从小到大)
-- DESC 为降序(从大到小)
-- 默认为 ASC
SELECT ... FROM table_name ORDER BY column [ASC|DESC], [...];

示例1:

--语文成绩降序排列
select * from exam ORDER BY chinese DESC;

在这里插入图片描述

示例2:表达式和别名排序

-- 查询同学及总分,由高到低
SELECT id, name, chinese + english + math FROM exam ORDER BY chinese + english + math DESC;
SELECT id, name, chinese + english + math total FROM exam ORDER BY total DESC;

在这里插入图片描述
示例3:多个字段排序,用逗号隔开

-- 按语文降序,数学升序,英语降序的方式显示
SELECT * FROM exam ORDER BY chinese DESC, math asc, english desc;

在这里插入图片描述

注意:排序时,要明确指定排序规则,不要依赖于MYSQL默认。
NULL 数据排序,视为比任何值都小,升序出现在最上面,降序出现在最下面

条件查询(WHERE)

由于全列查询可能导致服务器崩溃,所以 select * from 表名 是一个非常非常危险的操作 ,因此需要过滤查询的条件,引入条件查询。
示例1:

--%表示匹配多个任意字符
--_表示只能匹配一个字符,相当于格式限定符
select * from exam where name like '孙%';
select * from exam where name like '孙_';

在这里插入图片描述
示例二:

--查询英语不及格的同学以及英语成绩(< 60)
select name,english from exam where english < 60;
--查询总分在200分以下的同学
select name,chinese + math + english as total from exam where chinese + math + english < 200;

在这里插入图片描述
示例二:

--查询语文成绩大于80分,且英语成绩大于80分的同学
select name,chinese,english from exam where chinese > 80 and english > 80;
--查询语文成绩在[80,90]之间的同学及语文成绩
select name,chinese from exam where chinese between 80 and 90;
--查询数学成绩是58或者59或者98或者99分的同学及数学成绩
select name,math from exam where math in(58,59,98,99);

在这里插入图片描述

注意:如果查询条件需要优先级时,加括号指定优先级。

分页查询(LIMIT)

1.语法

-- 起始下标为 0
-- 从 0 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
-- 从 s 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;
-- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;

2.示例

select * from exam limit 0,3;
select * from exam limit 3,3;
select * from exam limit 4,offset 3;

在这里插入图片描述

修改(Updata)

1.语法

UPDATE table_name SET column = expr [, column = expr ...]
 [WHERE ...] [ORDER BY ...] [LIMIT ...]

2.示例

-- 将孙悟空同学的数学成绩变更为 80 分
UPDATE exam SET math = 80 WHERE name = '孙悟空';

在这里插入图片描述

-- 将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分
UPDATE exam SET math = 60, chinese = 70 WHERE name = '曹孟德';

在这里插入图片描述

注意:在更新数据时,如果不加条件会影响所有行,也属于危险操作。

删除(Delete)

1.语法

DELETE FROM  table_name [WHERE ...] [ORDER BY ...] [LIMIT...]

2.示例

-- 删除孙悟空同学的考试成绩
DELETE FROM exam WHERE name = '孙悟空';

在这里插入图片描述

注意:删除也属于危险操作,不能轻易使用


继续加油~

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值