目录
1. 准备工作
首先准备一个表 grade,如下:
关于如何创建表在上一篇博客中已经写到了(博客链接),就不再展示了.下面就通过一些例子来总结如何对于表进行 新增和查询~
2. 新增(Create)
2.1 全列插入(以插入一组数据为例)
insert into grade values(1,'direnjie',95,96,45);
注意: 插入的时候,可以显示指定某一列不填内容(使用 null 来占位),在建表的时候必须指定这一列允许为空.
2.2 指定列插入(以插入一组数据为例)
在 values 之前,通过 () 来指定插入哪几列.
insert into grade (id,name,chinese,math) values (2,'liyuanfang',67,87);
2.3 插入多组数据
insert into grade values
(3,'makeboluo',34,45,98),
(4,'xiaoqiao',76,63,55),
(5,'nakelulu',23,63,44),
(6,'caocao',98,56,37),
(7,'sunwukong',56,78,69),
(8,'sunshangxiang',78,76,77),
(9,'sunbing',85,89,66);
3. 查询(Retrieve)
3.1 查找所有列
select* from grade;
3.2 查找指定列
select name,chinese from grade;
3.3 查询字段为表达式
也就是针对查找结果进行加工.
select name,chinese+10 from grade;
在进行完这样的操作之后,我们的原表有没有发生变化呢?
答案是没有,因为 select 语句的操作相当于得到了一个临时表,看起来是语文成绩加10了,实际上对于磁盘上原始的数据没有影响.
3.4 给当前列起一个别名(as)
使用 as , as 也可以省略.
select name,chinese+math+english as total from grade;
3.5 对查询结果去重(distinct)
a) 针对一列进行去重
select distinct math from grade;
b) 可以写成下面这样吗?
可以写成这样吗???
select name,distinct math from grade;
答案是: 不可以,按name 查有9行,按math去重后查,只有 8行,很难对应起来.
c) 可以同时指定多列进行去重( distinct 在前面,后面所跟的列均需要去重)
3.6 排序(order by)
升序为 asc,降序为 desc
a) 默认情况下为升序
b) 按照降序排列
c) 如果存在null,如何排序呢?
将null 作为最小值
d) order by 还可以对表达式进行排序
3.7 条件查询(where)
查找出符合条件的记录.
注意: where 条件可以使用表达式,但是不能使用别名.
比较运算符:
逻辑运算符:
3.7.1 基本查询:
- a) 查找所有英语成绩 < 60 的同学的姓名
为了方便验证,将英语成绩也输出了~~下面的例子也是如此.
- b) 查找语文成绩 > 英语成绩 的同学的姓名
- c) 查找总成绩 < 200 的同学的姓名
d) 注意= 和<=>的区别,=不包含null 的比较, <=>包含对 null 的比较相等
3.7.2 and 与 or:
- a) 查找语文成绩 >80 或者 英语成绩 > 80 的同学(or)
3.7.3 范围查询:
- a) 查找语文成绩在 [80,90]的同学(between and)
上面两种方法均可~
- b) 查找语文成绩为 34或者78或者95的同学(in)
3.7.4 模糊查询:
% 表示匹配任意字符, '%sun'表示匹配以 sun 结尾的结果; 'sun%' 表示匹配以sun开头的结果; '%sun%' 表示匹配包含 sun 的结果.针对数字也能模糊匹配.
_只能匹配一个字符
- a)查找姓 sun 的同学的信息
3.8 分页查询(limit)
进行查找的时候,有的时候数据量比较大,如果直接一下子全部查出来,就可能会卡死了,使用limit关键字来分页.
a) 从0 开始,筛选 n 条结果
select name,chinese from grade limit n;
b) 从 s 开始,筛选 n条结果
select name,chinese from grade limit n offset s;