起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10596|回复: 12

[分享] sql语句 高级查询

  [复制链接]

90

主题

703

帖子

1026

积分

金牌会员

Rank: 6Rank: 6

积分
1026
QQ
发表于 2017-1-1 22:52:28 | 显示全部楼层 |阅读模式
版本: 小版本号:
数据库: 服务器操作系统: 应用服务器:
客户端操作系统: 浏览器:

评分

参与人数 1威望 +20 收起 理由
Masion + 20 很给力!

查看全部评分

15

主题

67

帖子

322

积分

中级会员

Rank: 3Rank: 3

积分
322
QQ
发表于 2017-1-11 14:56:05 | 显示全部楼层
这些都是基础,搞开发的哪里会不懂这些,最好分享一些优化的才有用
回复 支持 0 反对 1

使用道具 举报

90

主题

703

帖子

1026

积分

金牌会员

Rank: 6Rank: 6

积分
1026
QQ
 楼主| 发表于 2017-1-2 09:44:52 | 显示全部楼层
1、单行子查询
        select ename,deptno,sal
        from emp
        where deptno=(select deptno from dept where loc='NEW YORK');

     2、多行子查询
        SELECT ename,job,sal
        FROM EMP
        WHERE deptno in ( SELECT deptno FROM dept WHERE dname LIKE 'A%');

     3、多列子查询
        SELECT deptno,ename,job,sal
        FROM EMP
        WHERE (deptno,sal) IN (SELECT deptno,MAX(sal) FROM EMP GROUP BY deptno);

     4、内联视图子查询
       (1)SELECT ename,job,sal,rownum
          FROM (SELECT ename,job,sal FROM EMP ORDER BY sal);
       (2)SELECT ename,job,sal,rownum
          FROM ( SELECT ename,job,sal FROM EMP ORDER BY sal)
          WHERE rownum<=5;
  
     5、在HAVING子句中使用子查询
        SELECT deptno,job,AVG(sal) FROM EMP GROUP BY deptno,job HAVING AVG(sal)>(SELECT sal FROM EMP WHERE ename='MARTIN');
回复 支持 反对

使用道具 举报

90

主题

703

帖子

1026

积分

金牌会员

Rank: 6Rank: 6

积分
1026
QQ
 楼主| 发表于 2017-1-2 10:02:55 | 显示全部楼层
回复 支持 反对

使用道具 举报

90

主题

703

帖子

1026

积分

金牌会员

Rank: 6Rank: 6

积分
1026
QQ
 楼主| 发表于 2017-1-2 10:06:32 | 显示全部楼层
关联子查询与嵌套子查询 http://blog.chinaunix.net/uid-26568540-id-3057781.html
回复 支持 反对

使用道具 举报

90

主题

703

帖子

1026

积分

金牌会员

Rank: 6Rank: 6

积分
1026
QQ
 楼主| 发表于 2017-1-2 10:28:31 | 显示全部楼层
子查询不但可以出现在Where子句中,也可以出现在from子句中,作为一个临时表使用,也可以出现在select list中,作为一个字段值来返回。
回复 支持 反对

使用道具 举报

90

主题

703

帖子

1026

积分

金牌会员

Rank: 6Rank: 6

积分
1026
QQ
 楼主| 发表于 2017-1-2 10:36:02 | 显示全部楼层

回复 支持 反对

使用道具 举报

90

主题

703

帖子

1026

积分

金牌会员

Rank: 6Rank: 6

积分
1026
QQ
 楼主| 发表于 2017-1-3 15:35:11 | 显示全部楼层
http://m.blog.csdn.net/article/d ... mp;isappinstalled=1
Case when 用法  比较全面 通俗易懂
回复 支持 反对

使用道具 举报

90

主题

703

帖子

1026

积分

金牌会员

Rank: 6Rank: 6

积分
1026
QQ
 楼主| 发表于 2017-1-3 15:38:50 | 显示全部楼层
千里之外2 发表于 2017-1-3 15:35
http://m.blog.csdn.net/article/details?id=38961359&from=singlemessage&isappinstalled=1
Case when 用 ...

纵列数据变横列数据,也就是多行数据统计后,变一行数据的时候,用case when ,效率比较高;
但一行数据变多行数据的时候,除了用join相关的方法外,目前没有想到有什么样的好方法,但遇到多列需要转换的时候,用join就会特别笨重。
回复 支持 反对

使用道具 举报

90

主题

703

帖子

1026

积分

金牌会员

Rank: 6Rank: 6

积分
1026
QQ
 楼主| 发表于 2017-1-3 23:02:38 | 显示全部楼层
用case when else end

回复 支持 反对

使用道具 举报

90

主题

703

帖子

1026

积分

金牌会员

Rank: 6Rank: 6

积分
1026
QQ
 楼主| 发表于 2017-1-4 23:12:50 | 显示全部楼层
合同基本信息包括交接信息
过户信息表是结合流程呢 还是另建一个表呢
操作日志是否马上需要,审核键 乐观锁是否需要


获取提成须由人工筛选一次  阶梯提成较复杂
查某月过户表 附带分成
查某部门业绩
查某人业绩
查某人该月共获得提成合计
查某人某月提成清单
查某人某月总业绩与已过户业绩
(根据应用场景 设计语句和库表,修改数据库风险大 尽量一次成功 不能有大改动)
把竖表变横表 用联合查询
把横表变竖表 用联合查询
查询结果 灵活加工 横的有Excel data竖的有Excel,sum 横竖方法不止一个

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-5-2 16:23 , Processed in 0.078653 second(s), 30 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表