1. 插入否则更新
由于 主键 或者 唯一键 对应的值已经存在而导致插入失败
insert into (属性1,属性2,……) values(值1,值2,……) on duplicate key update 属性=新值,属性=新值;
2. 替换
主键或者唯一键没有冲突,则直接插入
主键或者唯一键发生冲突,则删除后在插入,相当于旧值替换新值
replace into 表名(属性1,属性2,……) values (值1,值2,……);
3. 查询 select
3.1 全列查询
select * from 表名称
; 通常情况下,如果表很大,查询的列越多,意味着需要传输的数据量越大
3.2 指定列查询
select 列1,列2,…… from 表名称
举例:
创建一个学生表:
create table student(
id int unsigned primary key comment'学号',
name varchar(32) not null comment'姓名',
chinese float default 0.0 comment'语文成绩',
math float default 0.0 comment'数学成绩',
english float default 0.0 comment'英语成绩');
查询全部列:
查询部分列:
3.3 查询字段为表达式
3.3.1 表达式为指定数据
select 指定列1,指定列2…… 指定数据 from 表名;
3.3.2 表达式包含一个字段
select 指定列1,指定列2…… 表达式 from 表名; //只是显示打印结果 数据库中的值没有任何变化
3.3.3 表达式包含多个字段
select 指定列1,……,多项表达式 from 表名;
3.3.4 为查询结果指定别名
select 表达式 新名称 from 表名;
3.4 查询结果去重
select distinct 列名 from表名;
3.5 where 条件
比较运算符:
运算符 | 说明 |
---|---|
>、 >=、 < 、<= | 大于、大于等于、小于、小于等于 |
= | 等于NULL=NULL的结果是NULL |
<=> | 等于NULL<=>NULL的结果是true |
!=,<> | 不等于 |
between A and B | 范围匹配[a0,a1] a0<=value<=a1 返回true |
in(option1.option2……) | 如是option中任意一个返回true |
is null | null |
is not null | 不为空 |
like | 模糊匹配 %表示任意多个字符 _表示一个字符 |
逻辑运算符:
运算符 | 说明 |
---|---|
and | 对个条件都必须为true ,结果才是true |
or | 任意一个条件为true,结果才为true |
not | 条件为true,返回false |
3.5.1 英语不及格的同学及英语成绩
select name,english from student where english<60;
3.5.2 语文成绩在[80,90]分的同学及语文成绩
select name,chinese from student where chinese >= 80 and chinese <=90;
//对于betweena..and... 两边的区间为闭区间
select name,chinese from student where chinese between 80 and 90;
3.5.3 数学成绩是38或者48或者98或者99分的同学及数学成绩
select name,math from student where math=38 or math=48 or math=98 or math=99;
select name,math from student where math in(38,48,98,99);
3.5.4 姓王的同学
//%匹配多个任意字符
select name from student where name like '王%';
3.5.5 王某同学
// _ 匹配一个任意字符
select name from student where name='王_';
3.5.6 语文成绩好于数学成绩的同学
select name from student where chinese > math;
3.5.7 总分在200分以下的同学
select name,chinese+math+english 总分 from student where chinese+math+english<200;
3.5.8 语文成绩>80 但是不姓孙的同学
select name from student where chinese > 80 and name not like '孙%';
3.5.9 孙某同学 否则要求总成绩>200并且语文成绩<数学成绩 并且英语成绩>80
select name from student where name like'孙%' or (chinese+math+english >200 and chinese<math and english >80);
3.6 结果排序
ASC为升序
DESC为降序
默认为ASC
和order by语句搭配使用
3.6.1 同学及数学成绩,按数学成绩升序排放
select name,math from student order by math;
3.6.2 查询同学各门成绩,依次按数学降序、英语升序、语文升序的方式显示
select *from student order by math desc,english,chinese;
3.6.3 查询同学及总分,由高到低
select name,chinese+math+english 总分 from student order by chinese+math+english desc;
//order by语句中可以使用别名
select name,chinese+math+english 总分 from student order by 总分 desc;