目录
一,增加(Create)
1.1 单行数据+全列插入
1.2 多行数据插入
1.3 指定列插入
二,查询(Retrieve)
2.1 全列查询
2.2 指定列查询
2.3 表达式查询
2.4 去重操作
2.5 排序(order by)
2.6 使用表达式/别名进行排序
2.7 条件查询(Where)
2.7.1 基本查询
2.7.2 and和or
2.7.3 范围查询
2.7.4 分页查询(Limit)
三,修改(update)
四,删除(Delete)
一,增加(Create)
1.1 单行数据+全列插入
语法如下:
insert into 表名 values(数据);
其中,表名不区分大小写.
注意:在进行全列插入的时候,数据不能多,也不能少.必须和表中是一一对应的!
例子如下:
假如我有一个学生表,表里的数据有ID和name,我要插入两个数据.一个是1,张三还有一个是2,李四.
insert into student values(1,'张三');
insert into student values(2,'李四');
这样,我们就将 两条数据插入到我们的student表中去了.
注意:在数据库中," "和' '都可以接收字符串类型,所以不用太过于纠结,看自己的使用习惯.
1.2 多行数据插入
在MySQL中进行插入操作的时候,我们还可以在一次性插入多条数据.
语法如下:
insert into 表名 values(数据1),(数据2)......;
其中,我们使用 ","来将数据分隔开,表明这是两个不同的数据.
例子如下:
我要向student表中插入两个数据,分别是: 3,王五和4,赵六.
insert into student values(3,'王五'),(4,'赵六');
我们看见,这里就显示了2 rows affected.这就说明两条数据都被插入成功了.warnings就说明没有警告.
1.3 指定列插入
假如我们班里面转来一个新同学叫做小美,但是因为它是新转来的,她还没有自己的id,那么我们该如何插入呢?这时候需要涉及到了指定列插入!
语法:
insert into 表名 (列1,列2,列3.....) values (数据);
我们看到了,指定列查询和前面查询不一样的是,在表名后面加了一个括号,这个扩号是用来说明你需要插入的列的名称,不需要插入的就不需要写咯.因此,在我们的数据里面,也就不需要按照表的列来写数据了,而是按照括号里的列来写.
例子如下:
我们需要插入一个只知道name为小美的同学的信息到student表中去.
insert into student(name) values('小美');
这样,我们就把小美的数据顺利插入进去了,等到小美有了id的时候,我们再去修改,这个是后面会讲到的update关键字了.
二,查询(Retrieve)
我们上面插入的数据,该如何去查看呢?接下来就是查询的相关操作了!
2.1 全列查询
全列查询就是将表中的所有列所有数据打印出来,
select * from 表名;
例子如下:
我们要查询student表的所有内容.
select * from student;
这就是student表中的内容了.同时也解释了我们的一个疑问:如果我们使用指定列插入,那么未插入的列的数据是什么呢?答案就是 NULL,如果你没有向这个列插入数据,那么默认值就是NULL.
注意:全列查询这个操作是非常危险的一个操作,因为当我们的数据量太大的时候,可能会把我们的内存吃满.因此要慎用此操作.
2.2 指定列查询
现在我们有一个exam_result表,数据如下:
现在我们只需要几列数据怎么来操作呢?
语法:
select 列1,列2,列3..... from 表名;
这样就可以实现指定列查询了.
例子如下:
需要查询exam_result表中所有人的Math成绩,要求有id,name和Math列.
select id,name,Math from exam_result;
这样,我们就可以查询出每个人的数学成绩了.还是很简单的.
2.3 表达式查询
有的时候,我们期望查询总分,或是查询有的列相加后的结果.那么这个时候,我们就需要使用表达式查询去完成这件事情.
语法如下:
select 表达式 from 表名;
这里需要注意的是,表达式里参加运算的列一定是列里的数据可以进行运算的.如果你用一个字母加上一个int类型的数据,那么肯定会出现报错的.
例子如下:
我们需要查询所有同学语文,数学,英语的总分.
select id,name,chinese+ math+ english from exam_result;
这样我们就可以很轻松的得到所有人的总分.出现了一列由表达式为名的数据.但是我们发现,chinese+math+english貌似不是特别美观.并且如果在实际工作中,我们的表达式可能会非常的长,因此我们可以给表达式设置别名.操作如下:
select 表达式 as 别名 from 表名;
只需要在表达式后面加上一个as,然后写上你的别名,这样我们就可以设置好别名.这样我们打印出来的数据也看的非常美观.
注意:设置别名的时候,as是可以省略的,但是不建议省略.因为去掉之后SQL的可读性就会下降.
2.4 去重操作
去重操作就是使用distinct关键词来进行操作.它可以帮助我们去除重复的数据.
语法如下:
select distinct 列名 from 表名;
例子如下:
语文老师想要得到语文成绩,但是要去掉重复的语文成绩数据.
没加distinct之前:
一共有八条数据,但是我们看见第一个和最后一个语文成绩重复了.
加了之后:
就只剩下了一个67分,数据也变成了7条了.
注意:如果想要使用distinct的时候查询多列数据,那么必须多个列都相同,那么才会进行去重,否则就不会去重.如下图: 虽然唐三藏的语文成绩和孙行者的语文成绩一样,但是因为名字不一样,所以没有进行去重.
2.5 排序(order by)
当我们需要得到从小到大的数据或者从大到小的数据,这个时候,我们可以使用order by来进行操作.
语法如下:
select 列名/表达式/别名 from exam_result from 表名 order by 列名 asc/desc;
例子如下:
我们需要将数学成绩从大到小进行排序
select name,math from exam_result order by math desc;
这样我们就进行了一个数学成绩的从大到小排序.
注意: 1.order by 列名后面的desc代表的是从大到小排序,而asc是从小到大排序.而如果什么都不写的话,默认就是从小到大排序!
2.当你没有使用order by的时候,你查询的时候返回的顺序是没定义的,是不可预测的.永远不要依赖于这个顺序!
3.当数据中出现null的时候,null被视为最小值,比表里的任何数据都小.
2.6 使用表达式/别名进行排序
上面我们说了排序,那么我们现在就可以使用别名来进行排序.
语法如下:
select 表达式 as from 表名 order by 表达式;
select 表达式 as 别名 from 表名 order by 别名;
例子如下:
查询一下总分,并且从小到大排序.
select name,chinese+math+english from exam_result order by chinese+math+english;
也可以使用别名:
select name,chinese+math+english as total from exam_result order by total;
2.7 条件查询(Where)
2.7.1 基本查询
语法如下:
select 列名/*/表达式/别名 from 列名 where 条件;
例子如下:
1. 查询英语不及格的同学以及其英语成绩.
select name,english from exam_result where english<60;
2. 查询总分在200分以上的同学及其成绩.
select name,chinese+math+english as total from exam_result where chinese+math+english>200;
3. 查询数学比英语高的同学以及其成绩.
select name,math,english from exam_result where math>english;
注意: 在where里面,不可以使用别名来代替表达式.但是可以使用别名.
2.7.2 and和or
and和or就代表着&和|.他们的意思是一样的.
例子如下:
1.查询数学大于80并且英语小于60的人.
select name,math,english from exam_result where math>80 and english < 60;
在这个例子中,我们使用and连接两个条件,表示只有两个条件都满足的时候,才输出此条数据.
2. 查询语文大于80 或者 数学小于80的人.
select name,chinese,math from exam_result where chinese > 80 or math < 80;
这个SQL语句中,我们就是使用or来连接条件的,这表示只要满足其中一个条件,就输出该数据.
注意:and和or同时使用的时候,and的优先级比or高,因此在使用and和or的时候,尽量使用()来表明优先级.
由这个图可知,当没加括号的时候,先执行后面的maht >70 and english > 70这个语句,然后执行chinese > 80.然后做or操作.
2.7.3 范围查询
1. 查询数学成绩在[80,90]之间的同学及其数学成绩.
select name,math from exam_result where math between 80 and 90;
这个也可以使用and来实现.
select name,math from exam_result where math>=80 and math <= 90;
在这里我们使用了between and 这个关键词,它可以查找出在其范围内的数据.并且是左闭右闭.
注意:虽然between and 有时候可以使用and来实现,但是不建议这样做.因为在MySQL中有一个最左前缀匹配原则.这个在索引的时候会了解到.
2. 查询语文成绩是87,70,56,55其中一个的人及其语文成绩.
select name,chinese from exam_result where chinese in (87,70,56,55);
在这里我们使用了in这个关键词,它可以筛选出在括号里面的数据.这个例子也可以使用or来实现,这里就不演示了.
3. 模糊查询(Like)
3.1 查询姓孙的同学,并且名字是两个字.
select * from exam_result where name like '孙_';
在这个SQL语句中,我们使用了like关键词,并且使用了下划线. 其中一个下划线代表一个字符,而孙_就表示是姓孙,名字为两个字的人.
3.2 查询姓孙的同学,无论名字有几个字.
select * from exam_result where name like '孙%';
在上述SQL语句,跟上一个例子不同的是,' '里面是孙%而不是孙_,这是因为%代表后面是任意多个字符.而_是代表一个字符.
2.7.4 分页查询(Limit)
语法如下:
select */表达式/列/别名 from 表名 limit n offset m;
这个是最简单的分页查询.在表名后面还可以加上各种条件,并且还可以使用order by来进行排序.
例子如下:
查询总成绩在前三名的同学.
select name,chinese+math+english as total from exam_result order by total desc limit 3;
这个表中就是总分前三名了.
注意: 如果limit后面的数大于数据被筛选后的总数,不会受到影响,MySQL会打印出所有的数据.
三,修改(update)
在MySQL中,我们使用update关键词来修改.
语法如下:
update 表名 set 列名 = 数据;
这个就是最简单的修改SQL语句,而在数据的后面我们还可以增加where语句,order by语句和limit语句等等,来限制我们的修改范围.
例子如下:
1. 将孙悟空同学的数学修改成70分.
update exam_result set math = 70 where name = '孙悟空';
2. 将曹孟德同学的语文改成70分,数学改成60分.
update exam_result set chinese = 70,math = 60 where name = '曹孟德';
3. 将总成绩倒数前三名的数学成绩加\30分.
update exam_result set math = math+30 order by chinese+math+english limit 3;
这是修改前倒数前三名的成绩.
修改后:
可以看见宋公明,刘玄德,曹孟德的数学成绩都加上了30分.
四,删除(Delete)
当我们想要删除某个数据或者某些数据的时候,我们可以使用delete关键词来进行操作.
语法如下:
detele from 表名 where.../order by .../limit n;
例子如下:
1. 删除唐三藏的成绩.
delete from exam_result where name = '唐三藏';
执行之后我们看见,exam_result表中已经没有了唐三藏同学了. 文章来源:https://www.toymoban.com/news/detail-448702.html
这就是所有的内容了,本人学识有限,肯定有没有说到或者说错的地方,请大家谅解!文章来源地址https://www.toymoban.com/news/detail-448702.html
到了这里,关于MySQL增删改查(基础)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!