mysql的增删改查(CRUD)

表名student,字段sid int primary key,sname varchar(31) ,schengji int;

插入数据(insert)

insert into 表名(列名1,列名2...)values(值1,值2...);
insert into student(sid,sname,schengji)values(1,"张三",78);

简单写法:如果是全列名插入,表名后的列名可以省略。
insert into student values(2,"李四",89);
部分插入:只要是部分插入就不可以省略表名后的列名
insert into student(sid,sname)values(3,"lisi");
insert into student values(3,"lisi");这种写法错误;

批量插入:insert into 表名 values(),()....;
一般是使用全列插入,当然也可以是部分的,但要求每一条记录都是按照列的格式插入;
insert into student values(4,"wangwu",78),(6,"wewe",78);

批量插入与单条插入的比较:
1、插入相同的记录条数,批量插入的效率要高些。
2、但如果批量插入有一条出错,就都无法插入到数据库中。

删除操作(delete)

delete from 表名 [where 条件];
delete form student where sid=1;
delete from student;该句会删除表中所有记录。
如果不加where条件,会一条一条的删除表中所有记录。

truncate和delete的区别:
1、truncate 表名(例:truncate student)和delete from 表名(例:delete from student)都可以删除表。
2、truncate是DDL,它是先删除表,然后在重建表。delete是DML语言,它是一条一条的删除记录。
3、效率上,如果数据量大的话,truncate的效率要高些,如果数据量不大delete的效率要高点。

更新表记录(update)

update 表名 set 字段名1=值,字段名2=值 [where 条件];
如果没有where条件为修改该表的每条记录为指定值。
update student set sname='李四' where sid=2;
update student set sname='王五',schengji=89 where sid=3;

如果修改多个字段的值,字段之间使用逗号隔开。如果是字符串或字符使用单引号或双引号,日期类型如1997,03,12 12:12:01写成19970312121201

查询记录(select)

select [distinct] [*][列名1,列名2...]from 表名 [where 条件]
distinct:去除重复数据。
select distinct schengji from student;
查询所有:
select * from student;
select 全部列名 form student;
例:select sid,sname,schengji from student;
按照条件查询:
如:select * from student where sid=1;

别名查询(使用关键字as)

as可以省略。
表别名:
格式:select 别名.列名1, 别名.列名2… from 表名 as 别名;
如:select s.sname,s.schengji from student as s;
列别名:
格式:select 列名1 as 别名,列名1 as 别名… from 表名;

运算查询(仅仅在查询结果上做了运算)

 select *,schengji+10 from student;
 查询所有列后还会增加一列为schengji+10的列,结果是原先成绩加10的结果。
 别名:
 select *,schengji+10 as 最后成绩 from student;
 会将原来命名为schengji+10的列列名改为最后成绩。

查询where后条件的写法

where后的运算符有:>,<,>=,<=,=,!=,<>.
    !=:不等于,非标准的SQL语法
    <>:不等于,标准的SQL语法
    select * from student where schengji>60;
查询成绩在6080之间的sql语句,between and包括两边的数值相当于>=60,<=80;
    select * from student where schengji>60 and schengji<80;
    select * from student where schengji between 60 and 80;
小值在前,大的值在后。
    select * from student where schengji between 80 and 60;这种的写法是错误的

逻辑运算符

and,or,not
    select * from student where schengji between 60 and 80;
    select * from student where schengji<60 or schengji>80;
    select * from student where not sname='yuy';

模糊查询(like)

-:表示一个字符
%:表示多个字符
    select * from student where sname=李%;
    select * from student where sname=%小%;
    select * from student where sname=_李;

在某个范围内获得值(in)

select * from student where sid(2,5,6);

排序查询(order by)

默认为升序

将学生按成绩排序
    select * from student order by schengji;
asc:升序查询
desc:降序查询
将学生按成绩降序排序
    select * from student order by schengji desc;
查询姓李的学生成绩按成绩降序排序
    select * from student where sname like '李%' order by schengji desc

聚合函数查询

    sum():求和
    avg():求平均值
    count():统计数量
    min():求最小值
    max():求最大值
求所有学生成绩的总和:
    select sum(schengji)from student;
求学生成绩的平均值
    select avg(schengji)from student;
求出学生总数:
    select count(*)from student;
求学生成绩最大值:
    select max(schengji)from student;

``注意:where语句后不可以加聚合函数。

如:求所有大于平均值的
select * from student where schengji>avg(schengji);``这是不可以的
应该写成:

子查询:
select * from student where schengji >(select avg(schengji) from student);

分组查询(group by)

按成绩分组统计的人数:
select schengji,count(*)from student group by schengji;
按成绩分组统计的人数,并且平均值大于50select schengji,avg(schengji) from student group by schengji having avg(schengji)>50;

having 关键字 可以接聚合函数 出现在分组语句之后
where关键字 不能接聚合函数 出现在分组语句之前

编写顺序:
s ———— f ———— w ———— g ———— h ———— o
select —— from —— where —— group —— having —— order

执行顺序:
f ———— w ———— g ———— h ———— s ———— o
from —— where —— group ——having —— select ——order

猜你喜欢

转载自blog.csdn.net/weixin_41481311/article/details/81625954