下面的所有基本操作都是基于这两张表:
第一张表是成绩表(grade),记录了学号(id),总分(score),学分(credit),成绩(grade),排名(rank)。
第二张表是id和姓名的对应表(id_name),记录了学号(id),和姓名(name)。
表的数据格式:
1. 检索数据
1.1 查询单列,多列,所有列
#单列
select id from grade;
#多列
select id,score,rank from grade;
#所有列
select * from grade;
1.2 检索不同的值(去掉相同的值)
比如说,在查询分数的时候,有很多同学都考了相同分数,如果直接select的话,就会出现很多一样的结果,那么如果在查询里面去除重复的结果呢?
#distinct
select distinct score from grade;
1.3 限制查询的长度
#limit 表示只返回前五条查询结果
select * from grade limit 5;
2. 排序检索数据
2.1 排序单个列的数据
要求:对成绩表(grade)排序,按照rank从小到大排序
select * from grade order by rank asc;
2.2 排序多个列的数据
要求:对成绩表(grade)排序,按照分数排名,如果分数相同,学号大的排在前面
select * from grade order by grade asc ,id desc;
3. 过滤数据
3.1 where子句
要求:查找学号是3120610046的成绩
select * from grade where id=3120610046
要求2:查询学号大于3120610046的成绩
select * from grade where id >3120610046
3.2. Or 和And 条件
要求:查询分数大于80,并且学号小于3120610030的学生
select * from grade where id<3120610030 and grade >80;
要求2:查询分数大于90或者是分数小于60的学生
selectr * from grade where grade>80 or grade < 60;
3.3 IN 和 NOT IN 操作符
select * from grade where id in (3120610046,3120610047);
3.4 使用通配符
#%表示匹配的任意个数的字符
select * from id_name where name='xxx%'
4. 拼接字段
比如说需要学号后面紧跟着姓名,以这样的方式3120610046(xx)的方式进行查询
select concat(id,'(',name,')') from id_name ;
5. 执行计算
比如说,要查询分数,学分,然后是分数乘以学分的结果
select id, grade,score,grade*score from grade;
6. 使用函数处理数据
sql里面的函数大概分为三种:
- 文本处理函数
- 时间处理函数
- 数字处理函数
6.1 文本处理函数
常用的文本处理的函数:
1.字符串大小写转换
2.返回字符串的长度
3.去掉字符串的空格
6.2时间和日期处理函数
1.now() 返回当前的时间
6.3 数字处理函数
1.返回一个绝对值函数
2.返回一个sin,cos,exp等数值计算的函数
6.4 汇总数据的函数
1.avg()函数,返回某列的平均值
2.count()函数,返回某列的行数
3.max()函数,返回某列的最大值
4.min()函数,返回某列的最小值
5.sum()函数,返回某列的之和
注意:这里指的是列
要求:统计一下学生里面的平均成绩
select count(*) ,avg(grade) from grade;
7.外键
设表t1,t2中都有一个name字段,而且是t1的主键
那么如果设t2中的name为外键的话
向t2中添加数据的时候,如果name值不在t1之中就会报错
其他:
MySQL 的常用命令小结2 http://www.jianshu.com/p/2d3e43c6a6a5