刚做后台没多长时间,以前做android时接触sql也比较少,刚做完一个后台查询数据导出excel的需求,故在此留下一些sql写法的拙见;
基本的增删改查没什么好说的,我觉得W3C里面讲的已经很好了,学完之后应付一下单表查询以及较为简单的多表查询基本上问题不大,但是一些较为复杂的多表查询,可能简单的看看W3C教程学的那些东西用起来就有点捉襟见肘了,下面看看这次需求中我有些了解的sql用法 count(number) 用来统计数据条数的总和 select count(1) from p_student_grade Where name="xxx"; 最终得到的结果就是p_student_grade这张表的名字为xxx的记录的数据的条数 sum() 对值进行相加,sum(1) 和count(1) 效果类似,除此外sum(colume) 表示某一类的值得和; IF() 可以用来对值进行数值转换或逻辑处理 select IF(grade<60,'不及格',grade) from p_student_grade;很显然,将成绩低于60时的字段转换为不及格,大于60的输出成绩;注意 SQL 中IF是没有ELSE搭配的,但是可以在IF中嵌套IF,当然,对于条件较多时,推荐使用CASE WHEN THEN ENDSELECT CASE WHEN grade<60 THEN '不及格'
WHEN grade>59 AND grade<70 THEN '及格' WHEN grade>69 AND grade<80 THEN '良' ... END From p_student_grade;concat()对字符串进行拼接select concat(grade+'分') from p_student_grade;
group_concat()对查询的结果进行拼接,通常是拼接的关系是一对多的,如一个人的语文,数学成绩select group_concat(grade separator ';') from p_student_grade Where name='xxx';
此句会将xxx的所有成绩信息拼接,以‘;’分隔,并作为一个字段显示出来
left join 左拼接select a.name,b.age from p_name a left join p_age b on a.id=b.id;
左拼接,以左边的表为主表,也就是说最后查询出来的结果的数目和左边的表(p_name,以left join 为基准)的数目是一致的,也就是说p_name如果id有1,2,3,p_age的id有1,2,4,5但是最后得到的结果只会有id 为 1,2,3的数据
同理又拼接也是一样的最后,子查询,这个也是这次需求中用到最多的
如有两张表,一张存储的是个人信息,一张存储的是个人成绩,两张表的主键都是id且有对应关系
select info.id 'id',info.name 'name',
(select grade from p_grade Where id=info.id AND type='math') 'mathGrade'from p_info 'info'这样写的结果就是得到很容易就可看到,这样做的好处就是避免了强关联,()中的id=info.id并不会对p-info的id取值造成影响;
实际上,只要是想到得到某张表的某一个字段(这个字段可以是多个字段拼接而成),就可以使用子查询。
好的,基本到这里就结束了,以后如果用到了新的用法,会持续跟新本文:)