zoukankan      html  css  js  c++  java
  • SQL 1:常用SQL语句

    导读:最近写代码,几乎是天天泡在SQL语句里,各种代码各种写。但一直缺少总结,要不就是觉得简单,要不就是觉得大家都知道。想来,我还是没能明白总结的价值在哪里。现在也就写写最近都常写的一些语句。


    一,if...else语句

    <span style="font-family:KaiTi_GB2312;font-size:18px;">if(t.teacherCategory is null or t.teacherCategory='','学员',t.teacherCategory) as teacherCategory,</span>

    在这里,就是查询数据库中的教师类别,如果为空,则显示学员,否则显示为教师的具体类别。


    那么,if...else语句用于少数几个还看着挺方便,如果要判断的多了,就显得不那么好玩儿,这时候,可以用case...when语句。


    二,case...when语句

    <span style="font-family:KaiTi_GB2312;font-size:18px;">case s.applyTeacherState when '1' then '申请成功' when '0' then '申请中' when '2' then '申请失败' else null end as applyTeacherState</span>

    在这里,是判断申请状态,当其分别为0.1.2的时候,显示出其具体的状态,而不是数字。


    这是两个局部的应用,现在看完整的一个SQL 语句:

    <span style="font-family:KaiTi_GB2312;font-size:18px;">select s.realName,s.phoNum,s.versionStartTime,case s.applyTeacherState when '1' then '申请成功' when '0' then '申请中' when '2' then '申请失败' else null end as applyTeacherState,if(t.teacherCategory is null or t.teacherCategory='','学员',t.teacherCategory) as teacherCategory,s.id,t.studentId from tj_student s left JOIN tj_teacher t on s.id=t.studentId</span>


    思考:既然在实际运用的时候,这么麻烦,为什么存储的时候,要存这么难记的数字呢。用这些数字,经常会出现两个问题:

    1,遇到要显示的时候,得去将数字转化为对应的含义表达。因为用户看着这些数字,是很难理解的。如果用注释的方式,在网页上标记,又显得太不友好。

    2,在实际操作的时候,有时候经常会不知道这些数字背后的含义。


    注意:如果在项目中,使用这样的代号。那么,应该准备好相应的数据字典,或者说,建立相对应的常量类,去统一维护这种公共需要的字段。


    三,连接查询语句

    3.1,左连接left join

    <span style="font-family:KaiTi_GB2312;font-size:18px;">SELECT ec.id,ec.evaluateContent,ec.versionStartTime,c.courseName,s.phoNum,s.nickName,ts.phoNum,ts.nickName FROM tj_evaluatecourse ec LEFT JOIN tj_course c ON ec.courseId = c.id LEFT JOIN tj_student s ON ec.studentId = s.id LEFT JOIN tj_student ts ON ts.id = ec.t_studentId AND ts.isTeacher = '1' where ec.isDelete='0'</span>


    简单说来,使用left join的话,会包含第一个表的所有字段信息。比如这条语句中,则会包括tj_evaluatecourse表中的全部信息(如果这张表有10条数据,那么最终结果也是10条数据),外加上左连接其他表中的字段。


    3.2,右链接right join 

    <span style="font-family:KaiTi_GB2312;font-size:18px;">SELECT SUM(o.price) as countPrice,c.industryId FROM tj_orderlog o RIGHT JOIN tj_course c ON o.courseId=c.id where o.isDelete='0' GROUP BY industryId</span>


    事实上,右链接和左连接没有太大的区别。比如在这条语句中,将会查询出tj_course表中的所有信息(这张表中的任何一条数据,都不会丢失),如果把这里的右链接换为左连接的话,那么将会根据tj-orderlog表来显示数据。


    现在,看一条左右连接的混合使用语句:

    <span style="font-family:KaiTi_GB2312;font-size:18px;">SELECT countPrice,i.industryName FROM tj_industry i LEFT JOIN(SELECT SUM(o.price) as countPrice,c.industryId FROM tj_orderlog o RIGHT JOIN tj_course c ON o.courseId=c.id where o.isDelete='0' GROUP BY industryId) x ON i.id=x.industryId GROUP BY i.industryName</span>


    在这条语句中,整个查询结果都是以tj_industry表的数据为基础的,如果这张表有10条数据,那么最终的结果就是10条数据。


    注意:连接查询除了左右连接以外,还有内连接、完全连接。当根据具体情况去使用。

    如果是用到左、右连接,那么就一定要明确主表。


    四、总结

    现在的项目中,写的最多的就是各种连接语句,还有各种数据库函数的运用,这是总结的一小部分内容,也可以说是自己之前没怎么用到的,其他的一些应用,还需要熟练和运用。




  • 相关阅读:
    【连载】【FPGA黑金开发板】NIOSII那些事儿USB设备模式(十九)
    【连载】【FPGA黑金开发板】NIOSII那些事儿LCD中英文字符显示(二十三)
    Asp.Net缓存
    Repeater实现颜色交替
    C#迭代器简单应用
    C#泛型编程初级入门
    利用vs.net快速开发windows服务(c#) (转)
    简单的c#验证类(转)
    编写适合于自己的代码生成器 (zhuan)
    HashTable的使用(转)
  • 原文地址:https://www.cnblogs.com/hhx626/p/6010343.html
Copyright © 2011-2022 走看看