0%

沾ibator的光,sql忘得不能再多了

单行子查询

select * from t_mon_task tmt where tmt.bill_id=(select tpt.bill_id from t_pub_task tpt where tpt.task_sn='anything');

多行子查询

select * from t_mon_task tmt where tmt.bill_id in (select tpt.bill_id from t_pub_task tpt where tpt.task_sn='anything');

多列子查询

select tmt.deal_desc from t_mon_task tmt where (tmt.bill_id, tmt.task_id) in (select tpt.bill_id,tpt.task_id from t_pub_task tpt where tpt.task_sn='anything');

sql函数

http://blog.csdn.net/jojo52013145/article/details/6998984

group by

个人最为憎恨的地方就是,网上有很多所谓深入讲解sql语法的各种博文,其引用的example中,表用A表、B表或者table1、table2来表示,没有和实际应用场景配合说明,那这样子你还说个**毛啊。

group by 将结果集进行分组,一般与多配合聚合函数,sum,count,min,max等一起使用。
举个简单的例子,数据表记录学生id,课程名称,课程成绩,一个学生多门课程,多条记录。
现在想要计算学生的总成绩,需要通过id进行分组,然后里面sum(成绩)就可以计算出总成绩了

select sum(t.成绩) 成绩 from 表 t group by t.成绩

有时候我们再分组的同时需要查询其他字段,这时候可以采用多字段分组。
举个简单的例子,基于上面的例子,现在数据表还有一个字段学期(上学期和下学期)。
现在要统计分别每个同学上下成绩的总成绩。

select sum(t.成绩) 成绩, t.学期 学期 from 表 t group by t.成绩, t.学期

sql select语句完整的执行顺序

1、from子句组装来自不同数据源的数据;
2、where子句基于指定的条件对记录行进行筛选;
3、group by子句将数据划分为多个分组;
4、使用聚集函数进行计算;
5、使用having子句筛选分组;
6、计算所有的表达式;
7、select 的字段;
8、使用order by对结果集进行排序。SQL语言不同于其他编程语言的最明显特征是处理代码的顺序。在大多数据库语言中,代码按编码顺序被处理。但在SQL语句中,第一个被处理的子句式FROM,而不是第一出现的SELECT。

内连接 && 外链接

内连接

所谓内连接,可以这么理解,还是引用上面学生的例子,现在两个表tb_student(学生表),tb_exam(成绩表),两个表用id主键关联,想要一一列出各个学生的成绩sql如下:

select s.id, s.name, e.course_name, e.score from tb_student s inner join tb_exam e on s.id=e.id;

未完待续