【MySQL】表的增删改查

马肤
这是懒羊羊

目录

前言:

新增(Create):

查询(Retrieve):

别名:

去重:DISTINCT 

排序:ORDER BY :

条件查询:WHERE :

分页查询:LIMIT:

修改(Update):

删除(Delete):

内容总结:


前言:

在学会对数据库的操作后,我们就要进入到更为复杂的对表的操作,可以说MySQL的难点和数据库的核心操作基本都在对表的操作,包括后面要学到约束什么的基本也都是对表的操作,所以我们就要开始表的基本内容增删改查(CRUD)。

CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写。

为了方便叙述下面均采用下面参数的表(student)来进行表的各类操作的演示。

新增(Create):

语法:

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

小写简单版:

在表名后面可以指定某些列用括号括起来,里面的参数用逗号分开,values要对应。

基本语法如上,下面为它的多种用法👍👍👍。

(1)单行数据 + 全列插入

insert into student values ('唐三藏',65,71,83);

(2)多行数据 + 全列插入

如果可以的话我们是更加推荐多行数据插入的因为这样只需要向数据库发起一次请求,效率肯定要比访问数据库多次要高得多。

用逗号隔开即可。

insert into student values ('孙悟空', 81,45,63), ('张三', 73,84,56);

(3)多行数据 + 指定列插入

insert into student (name,math) values ('李四', 35), ('王五',83);

还有一个单行数据 + 指点列插入,这个由于和前面的这些类似,这里就不再演示。 

最终插入的数据如下:

扩展SQL语言特性:

友友们可以看看下面这个SQL语句,math的类型是int,但是这里插入varchar类型却显示成功了,这是为什么呢?

解释如下: SQL是一个“弱类型”的编程语言,和Java是不太一样的(强类型),当然C语言也是弱类型语言,那么我们如何理解弱类型和强类型呢?

在一个语言中,越是支持“隐式类型转换”,类型系统就越弱,越不支持“隐式类型转换”类型系统就越强,我们在学习Java的过程中不难看到Java基本都要自己手动转换(例如字符和整形,在c语言中二者可以直接相减,在Java中我们要进行手动转换后才能运算)。

查询(Retrieve):

语法:

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

简单小写如下: 

(1)全列查询:

用法如下:

SELECT * FROM exam_result;

查找我们上面插入的数据。

但是在通常情况下不建议使用 * 进行全列查询。

原因主要有以下两点: 

(1)查询的列越多,需要传输的数据量越大,数据的压力越大。

(2)可能会影响到索引的使用。

(2)指定列查询:

SELECT id, name, english FROM exam_result;

 注意:指定列的顺序不需要按定义表的顺序来。

(3)查询字段为表达式: 

-- 表达式不包含字段
SELECT id, name, 10 FROM exam_result;
-- 表达式包含一个字段
SELECT id, name, english + 10 FROM exam_result;
-- 表达式包含多个字段
SELECT id, name, chinese + math + english FROM exam_result;

运用我们上面演示来进行。

注意:还记得一开始就和大家说的,MySQL是一个“客户端-服务器”结构的程序,此时数据是存储在服务器上的硬盘上的。上述的表达式查询,只是针对服务器响应得到的临时结果进行了计算,不会影响硬盘上存储的数据本身。

别名:

为查询结果中的列指定别名,表示返回的结果集中,以别名作为该列的名称,语法:

SELECT column [AS] alias_name [...] FROM table_name;

用法如下: 

去重:DISTINCT 

使用DISTINCT关键字对某列数据进行去重:

语法:

演示如下: 

使用distinct语句:

排序:ORDER BY :

具备排序功能我们才能更好的管理数据。

语法:

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

小写: 

注意点:

(1)没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序。

(2)NULL 数据排序,视为比任何值都小,升序出现在最上面,降序出现在最下面  。

针对一列排序:

演示如下:

使用表达式及别名排序:

演示如下:这里会出现NULL的原因是,元素只要和NULL发生运算都为NULL。

可以对多个字段进行排序,排序优先级随书写顺序:

演示如下:

原始数据如下:我们要对math和english排序,math的优先级大于english

排序前:

排序后:

降序排序:

默认排序是升序,我们可以在要排序的列后面加一个desc就可以升序排序。

条件查询:WHERE :

比较运算符:

运算符说明
>, >=, 80 or english > 80; -- 观察AND 和 OR 的优先级: SELECT * FROM exam_result WHERE chinese > 80 or math>70 and english > 70; SELECT * FROM exam_result WHERE (chinese > 80 or math>70) and english > 70;

 这里和我们一般学的语言&& 和 || 不一样友友们要区分清楚。

3.范围查询:

(1)BETWEEN ... AND ...  

语法:

-- 查询语文成绩在 [80, 90] 分的同学及语文成绩
SELECT name, chinese FROM exam_result WHERE chinese BETWEEN 80 AND 90;
-- 使用 AND 也可以实现
SELECT name, chinese FROM exam_result WHERE chinese >= 80 AND chinese 

文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复:表情:
评论列表 (暂无评论,0人围观)

还没有评论,来说两句吧...

目录[+]

取消
微信二维码
微信二维码
支付宝二维码