欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

表的增删改查(CRUD)

程序员文章站 2022-03-09 08:41:24
...

1、增加
语法:

insert into table_name[(column[,column...])]  values (value [,value...]);

增加进阶:

更新: 主键插入如果重复:(如果重复做更新,如果不重复做插入)
insert into t7 values(1,”易烊千玺”) on
duplicate key update name = “哈哈”; 替换:
replace into 表名(字段名)values(值);

eg:

create table t11(
    id int primary key auto_increment comment '描述商品编号',
    name varchar(10) comment '描述商品名',
    price decimal(5,2) comment '描述商品价格'
);
insert into t11 values(1,"包子",1.2);
insert into t11 values("2","包子",1.2);
insert into t11 values("2a","包子",1.2);   // int型不能插入字母

// 约定长度,只能在范围里面插入
错误:
表的增删改查(CRUD)
2、修改
语法:

update tbl_name set col_name1=expr1, [, col_name2=expr2 ...] [where conditon]

eg:
(1)没跟where条件,则全部修改:update t7 set name = ‘蛋哥’;
(2)指定列修改 where条件:update t7 set name = ‘时sir’ where id=1;
(3)修改个数可以限制:update t7 set name = ‘蛋哥’ where name=’蛋哥’ limit 1;

3、删除
语法:

delete from  tbl_name [where condition]【where条件可选】

(1)没有where条件,全部删除(一行一行删除)
eg:

delete from t7;

全部删除表中数据:truncate table 表名(直接把文件大小变为0)

(2)带where条件:删除满足条件的属性

(3)delete只删除数据,不会影响表结构

4、查询(重点**
select:

首先先创建一张表来测试

create table student (
  id int not null default 1,
  name varchar(20) not null default '',
  chinese float not null default 0.0 comment '语文成绩',
  english float not null default 0.0 comment '英语成绩',
  math float not null default 0.0 comment '数学成绩' );

插入数据:

insert into student values(1, '李涛', 89,78, 90);
 insert into student values(2, '唐僧', 67,98, 56);
 insert into student values(3, '孙悟空', 87,78, 77); 
insert into student values(4, '老妖婆', 88,98, 90); 
insert into student values(5, '红孩儿', 82,84, 67); 
insert into student values(6, '如来佛祖', 55,85, 45);
 insert into student values(7, '菩萨', 75,65, 30);

1、指定查询列:

select id,name,math from student;

表的增删改查(CRUD)
2、去重查询:

 select distinct math from student;

表的增删改查(CRUD)

3、在select语句中进行运算并且起别名

查询学生总成绩:

select id,name,(chinese+math+english) from student;

表的增删改查(CRUD)
起别名:

select id,name,(chinese+math+english) as '总成绩' from student;

表的增删改查(CRUD)
4、将所有姓唐的学生成绩增加60%

select id,name,(chinese+math+english)*1.6 as '总成绩' from student 
    where name like '唐%';

表的增删改查(CRUD)
5、where语句查询过滤

like和not like(模糊查询):
查询所有姓李的学生信息以及总成绩

select id,name, (chinese+math+english) as '总成绩' from student 
    where name like '李%';

表的增删改查(CRUD)
查询英语成绩大于90的同学

select id,name, english  from student 
where english > 90;

表的增删改查(CRUD)
查询所有总分大于200的同学:

错误:where字句后面不能使用别名(原因:先执行where字句,再执行selectselect id,name, (chinese+math+english) as '总成绩' from student 
    where '总成绩' > 200;
正确:
select id,name, (chinese+math+english) as '总成绩' from student 
    where (chinese+math+english) > 200;

表的增删改查(CRUD)
查询姓李并且id>10的信息(and)

select id,name from student
where name like '李%' and id >10;

表的增删改查(CRUD)
查询英语成绩大于语文成绩的同学

select id,name from student
where english > chinese;

表的增删改查(CRUD)
查询总分大于200分并且数学成绩小于语文成绩的姓唐的学生:

select id,name from student
where (chinese+math+english) > 200 and math < chinese and name like '唐%';

表的增删改查(CRUD)
查询英语分数在80 - 90 之间的同学

select id,name from student
where english >= 80 and english <= 90;

表的增删改查(CRUD)
【进阶写法】:between and 只能用于闭区间(开区间不能用)

select id,name from student
where english between 80 and 90;

表的增删改查(CRUD)
查询数学成绩为89,90,91的同学

select id,name from student
where math = 89 or math = 90 or math = 91;

表的增删改查(CRUD)

【不好的写法】:尽量不要这么写(防止查出太多,因为是个区间概念)
select id,name from student
where math between 80 and 91

【第二种写法】

表示若干个特定值
select id,name from student
where math in (89,90,91);

表的增删改查(CRUD)
6、、select的order by(排序) 子句

  • a、默认升序,如果要使用降序排序添加关键字desc
  • b、order by语句一定放在语句结尾
  • c、order by可以使用别名(先拿到查询的数据之后再进行排序,所以可以使用别名)

对数学成绩进行排序

升序:
select math from student order by math;
降序:
select math from student order by math desc;

表的增删改查(CRUD)
对总分进行排序后,按从高到低输出:

select (chinese+math+english) as '总成绩' from student
order by 总成绩 desc;

表的增删改查(CRUD)
对姓李的学生按成绩进行从低到高排序(因为表中只有一个姓李的学生,所以我插入一条记录)

insert into student values(8,'李华',60,60,60);

查询:

select  ,id,name,(chinese+math+english) as '总成绩' from student
where name like '李%'
order by 总成绩 desc;

表的增删改查(CRUD)
7、常用函数

(1)count

  • count (*) || count(列名):统计数量
  • count(*)会统计为null
  • count(列名)会排除为null值

因为刚开始math列属性给成了空,现在修改一下,尝试一下count(列名)和count(*)的区别:

alter table student modify math float;
insert into student values(8,'雨殇',60,60,null);

表的增删改查(CRUD)
统计一个表*有多少学生

select count(*) from student;

表的增删改查(CRUD)

select count(*) as '学生人数' from student;

表的增删改查(CRUD)
统计数学成绩大于等于90的学生人数

select count(*) as '学生人数' from student
where math >= 90;

表的增删改查(CRUD)
(2)sum

统计一个班级数学总成绩

select sum(math) from student;
[where]

表的增删改查(CRUD)
(3)avg(): 去除空值后求平均数

先用总和除以学生人数:

不去重:
select sum(math)/count(*) from student;
去重:
select sum(math)/count(math) from student;

表的增删改查(CRUD)

select avg(math) from student;

表的增删改查(CRUD)

* 注意:sum和avg只能用于数值型的起作用

(4)max/min
求一个班级的最高分以及最低分的学生信息

select max(chinese+math+english) as '最高成绩', min(chinese+math+english) as '最低成绩' from student;

表的增删改查(CRUD)
7、group by(必考点)

  • a、group by多次分组,不同分组之间按照“,”,并且有先后顺序
  • b、在group by字句中,要想进行条件过滤,只能使用having语句,having语句也只能作用于group by语句

显示每个部门的平均工资和高工资

select deptno,max(sal) as '最高工资' , avg(sal) '平均工资' from emp
group by deptno;

表的增删改查(CRUD)
表的增删改查(CRUD)

显示每个部门的每种岗位的平均工资和低工资(首先按照部门分组,其次按照job分组)

select deptno,job,max(sal) as '最高工资' , avg(sal) '平均工资' from emp
group by deptno,job;

表的增删改查(CRUD)
显示平均工资低于2000的部门编号和它的平均工资

select deptno,avg(sal) as '平均工资' from emp
group by deptno 
having avg(sal) < 2000;

表的增删改查(CRUD)

今天就先写到这吧,敬请下回接着说……