hello呀!各位,这里是Sunlightʊə。
目前大三,主要在学习Java语言。可以一起交流呀!
相关文章:
MySQL数据库的基础操作(简单、基础版
专栏:
Java数据结构
Java基础语法
MySQL基础
目录
新增(Create)
单行数据插入
多行数据插入
指定列插入
查询(Retrieve)
全列查询
指定列查询
查询字段为表达式
别名
去重
排序
条件查询
比较运算符
模糊查询
分页查询
修改(Update)
删除(Delete)
前言:
对于我们平时使用MySQL数据库来说,最多的操作无非就是增删改查,那么这篇文章就带着大家来了解一下MySQL的增删改查如何书写。
新增(Create)
insert into 表名 values(列的值);
在这里一个(),就对应一条记录。
一条记录也就是一行数据。(行是新增的基本单位)。
values()中的内容个数和类型要和表的结构相匹配。
举个例子:
create database student;//创建一个student库
create table student( //创建一个student表
id int, // 学生id
sn int, // 学生的学号
name varchar(20), // 学生姓名
qq_mail varchar(20)// 学生的qq邮箱地址
);
插入:
insert into student values(1,1001,"张三","12345678@qq.com");
插入操作后,我们查询一下我们的学生表来看插入操作是否成功:
上图明显可以看出,我们的插入操作是成功的。
当然,如果不能插入中文的话,需要把数据库配置成支持中文的utf8编码方式。
在SQL中, ' 和 " 都可以表示字符串。
单行数据插入
insert into 表名 values(列的值);
insert into student values(2,1002,"李四","098653781@qq.com");
insert into student values(1,1003,"王五","235643566@qq.com");
多行数据插入
insert into 表名 values
( 列值 ),
( 列值 ),
( 列值 ),
( 列值 ),
( 列值 ),
( 列值 );
insert into student values
(4,1004,"三三","2320945@qq.com"),
(5,1005,"二二","4345545@qq.com");
指定列插入
指定列插入时要注意,列的值的数量一定要和指定列的数量以及顺序都一致。
insert into 表名(指定列名) values(列值);
insert into student (id, sn,name) values
(6,1006,"晨晨"),
(7,1007,"小米");
查询(Retrieve)
查询使用的是select关键字。
而select操作的是临时表。
我们说,数据库的表都是写在硬盘上的,而这个地方说的临时表不在硬盘上,而是在内存中,随着进行输出后,数据也就会被释放掉。
临时表的结果对数据库服务器的原始数据没有任何影响。
全列查询
全列查询是直接把一个表的所有的列和所有的行都查询出来。(当然,这里查询出来的表也是一个临时表)。
select * from 表名;
这里的 * 是通配符,代表了一个表中所有的列。
但是在通常情况下,不建议使用 * 进行全列查询。
1.当我们表中的数据很多时,就意味着需要传输的数据量是超级超级大的。
2.可能会影响到索引的使用。
指定列查询
select 指定列 from 表名;
列名和列名之间用逗号隔开。
指定列的顺序不需要按定义表的顺序来写。
查询字段为表达式
也就是说:在查询的时候同时对列和列进行一个运算操作。
使用表达式查询的时候,查询的临时表的列表就是我们所写的表达式。
为了更好的介绍后面的操作,在这里我们再创建一个成绩表。
create table exam_score(
id int,
name varchar(20),
chinese decimal(3,1),
math decimal(3,1),
english decimal(3,1)
);
insert into exam_score (id,name, chinese, math, english) values
(1,'唐三藏', 67, 98, 56),
(2,'孙悟空', 87.5, 78, 77),
(3,'猪悟能', 88, 98.5, 90),
(4,'曹孟德', 82, 84, 67),
(5,' 刘玄德', 55.5, 85, 45),
(6,'孙权', 70, 73, 78.5),
(7,'宋公明', 75, 65, 30);
-- 表达式不包含字段
select id, name, 10 from exam_score;
-- 表达式包含一个字段
select id, name, english + 10 from exam_score;
-- 表达式包含多个字段
select id, name, chinese + math + english from exam_score;
别名
别名相当于给查询结果的临时表指定了一个新的列名。
临时表表头的列名=别名
select 列名,列名,列名...... 表达式 (as) 别名 from 表名
去重
去重就是指,针对于查询的结果,将重复的记录给去掉。
使用distinct关键字对某列的数据进行去重操作。
去重前:
去重后: 去重前的数据中,98.0重复了,故去重时将重复的去掉。
排序
针对于查询结果的临时表进行排序,因为是对临时表进行排序所以不会影响到数据库服务器上面的原始数据。
select 列名...... from 表名 order by 列名 [asc|deac];
ASC:升序排列
DESC:降序排列
排序前:
排序后:
1.没有order by子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序。
2.ASC不写,默认也是升序。
3.null数据排序,视为比任何数都小(升序null出现在最上面,降序null出现在最下面)
4.使用表达式及别名排序。
使用别名排序:
使用表达式排序
5.对于多个字段进行排序时,排序优先级随书写顺序。(先看第一个标准、第二个、第三个......直到可以分出胜负即可。
这里的math已经能分出胜负,所以后面的成绩不需要再排序。
条件查询
比较运算符
运算符 | 说明 |
>,>=,<,<= | 大于,大于等于,小于,小于等于 |
= | 等于(在MySQL中是等于而不是赋值) |
<=> | 等于(null<=>null)——>true |
!= , <> | 不等于 |
between a0 and a1 | 范围匹配,[a0,a1],如果a0<=value>=a1,返回true |
in(option,.....) | 如果是option中任意一个值,那么返回true |
is null | 是null |
not null | 不是null |
like | 模糊匹配。 |
and | 多个条件必须都为true,整个语句的结果才是true |
or | 任意一个条件为true,整个语句是结果就是true |
not | 条件为true,结果1为false。条件为false结果为true |
1.where条件可以使用表达式,但是不能使用别名。
2.and的优先级高于or,在同时使用这两个条件时,需要用小括号()包裹住优先执行的部分。
select 列名 from 表名 where 条件;
查询语文比英语成绩好的人
其中,chinese>english,指的是同一行的语文成绩和英语成绩比较,不涉及行与行的比较。
临时表显示什么内容取决于select后面要查询的列怎么写,写或不写不会影响到后面的条件。
MySQL执行查询操作时,先针对于每一行记录,计算条件,并且按照条件筛选,满足条件的记录,才会取出对应的列,并且计算列里的表达式(生成别名
模糊查询
1.%匹配任意多个(包括0个)字符
2._匹配严格的一个任意字符
1. _ 代表的是任意单个字符。
2. % 代表任意长度的字符串。
3. _A% 代表返回第二个单词为A的任意字符串。
分页查询
在查询语句的末尾,加上limit指定N,N就表示这次查询最大结果的数量。
起始下标为0.
从0开始,筛选出n个结果。
select ... from 表名[where][order by ...] limit n;
从s开始,筛选出n个结果。
select ... from 表名[where][order by ...] limit s , n;
从s开始,筛选n个结果,但是比上一条更好用。
select ... from 表名[where][order by ...] limit n offset s;
修改(Update)
修改多个列:多个列之间使用" , "来分搁开。
update 表名 set 列名 = 值[where条件];
修改操作后,是切实的在改服务器中的硬盘数据。
如果没有写where子句,就是匹配了所有行,但如果有null,就只修改了不是null的。
删除(Delete)
delete from 表名 where 条件。
如果where没有写条件,那么就是把所有的数据都删除。