查询
全列查询
指定列查询
查询字段并添加自定义表达式
自定义表达式重命名
查询指定列并去重
select distinct 列名 from 表名
where条件
查询列数据为null的 null与' '(空串)是不同的!
附:一般null不参与查询。
查询列数据不为null的
查询某列数据指定范围
select * from 表名 where 列名 between 起点 and 末尾;
若未指定,其他不满足的数据也会显示,因为本身命令没要求他们不显示,其次也没要求他们不显示。
查询某列数据指定范围并且指定显示
select 列名... from 表名 where 列名 between 起点 and 末尾
select 列名... from 表名 where 列名>范围 and 列名<范围
select 列名... from 表名 where 列命 in(指定范围)
查找列指定数据
模糊匹配
查找第一个为孙的
查找以孙开头两个字的
查找以孙开头三个字的
查找不以孙字开头的
查找两个列比较大小的
查找语文>数学
查找语文大于80并且name不以孙字开头的
查找总分>200的
为什么这里用别名会报错?
可以看到select的执行顺序,先找到表,其次是条件,再去表里查找,而条件是 ’总分' 但并没用这个条件,因为总分是在第四次才开始重命名的,所以报错了。
正确做法
结果排序
升序 ascending order 简asc
降序 descending order 简desc
查询chinese的升序
查询chinese的降序
查询以数学降序,英语升序,语文升序的方式显示
以数学为key先排 如果数学数据相同,以英语来排,如果英语数据也相同,以语文来排。
附:NULL默认为最小
查询姓孙的同学或者姓曹的同学数学成绩,结果按数学成绩由高到低显示
以总分排降序
为什么这里用别名可以,而where不行?这也跟select执行顺序有关
因为排序是最后才执行的,所以第二步时其实并没用用到 ‘总分' ,执行排序时,排序是第五梯队,而重命名是第四梯队,所以排序时总分已经重命名了,即可以使用,不会报错。
查询总分降序并且只显示前三个。
limit 3 取得结果后的前三行
limit s,n 取第s个到n个
更新
update 表名 set 修改的数据 where 条件
将孙悟空的英语修改为90
update test12 set chinese=80; 谨慎使用!
将数据内chinese所有数据都修改为80
将总成绩倒数前三的 3 位同学的数学成绩加上 30 分
update 表名 set 条件 order by 排序的分数 desc limit n(要修改的n行)
附:math+=30 这种在mysql是不能用的。
删除
delete from 表名 where 条件
delete from 表名 order by 总分 limit n(要删除n行)
delete from 表名 truncate 表名
都是清空表数据 delete不会重置auto_increment(自增长) truncate会重置auto_increment(自增长)
truncate不能回滚。truncate只能做清空表数据操作