免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2784 | 回复: 4
打印 上一主题 下一主题

[数据库] 好玩的SQL [复制链接]

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2015-06-12 22:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-06-11 09:48 |只看该作者 |倒序浏览
1. 做一个3*3的加法表
  1. SQL> select a||'+'||b||'='||(a+b) from (select rownum a from all_objects where rownum<4), (select rownum b from all_objects where rownum<4);

  2. A||'+'||B||'='||(A+B)
  3. ------------------------------------------------------------------------------------------------------------------------
  4. 1+1=2
  5. 1+2=3
  6. 1+3=4
  7. 2+1=3
  8. 2+2=4
  9. 2+3=5
  10. 3+1=4
  11. 3+2=5
  12. 3+3=6

  13. 9 rows selected.
复制代码
2. 做一个5*5的乘法表
  1. with multiplier as (select rownum n from dual connect by rownum<6)
  2. select a.n||'*'||b.n||'='||(a.n*b.n) from multiplier a, multiplier b
复制代码
3. 不用connect by,只用dual表,构造出1到128
  1. with a as (select 1 from dual union all select 1 from dual)
  2. select rownum from a,a,a,a,a,a,a
复制代码
4. 池塘边上有牛和鹅若干,小华总共看到15个头42条腿,请问牛和鹅各有多少?
  1. with a as (select 1 from dual union all select 1 from dual),
  2. b as (select rownum n from a,a,a,a)
  3. select x.n num_of_bull, y.n num_of_goose from b x, b y where x.n*4+y.n*2=42 and x.n+y.n=15
复制代码
5. 百钱买鸡兔:老母鸡3块1只,小母鸡4块5只,大白兔2块1只,小白兔3块4只,要求买回来的动物总共100只,并且脚不少于240条不多于320条。花100块钱来买这些动物,要求每种动物都至少要购买一只且钱正好花完,输出所有的可能情况。
  1. with t as (select 1 from dual union all select 1 from dual),
  2. t1 as (select rownum n from t,t,t,t,t)
  3. select a.n lmj,5*b.n xmj,c.n dbt,4*d.n xbt from t1 a,t1 b,t1 c,t1 d where 3*a.n+b.n*4+c.n*2+d.n*3=100 and a.n+5*b.n+c.n+4*d.n=100 and (2*a.n+10*b.n+4*c.n+16*d.n between 240 and 320) and a.n<>0 and b.n<>0 and c.n<>0 and d.n<>0;
复制代码
6. 每个雇员的薪水(SAL)都对应到一个薪水级别(SALGRADE表中的GRADE字段),哪个薪水级别上的雇员数量最多?输出该薪水级别信息。本题需要用三种不同的写法作答。

第一种写法:
  1. select * from salgrade where grade=(select grade from (select s.grade,count(*) from emp e,salgrade s where e.sal between s.losal and s.hisal group by s.grade order by 2 desc) where rownum=1);
复制代码
第二种写法:
  1. with t as (select s.grade,count(*) num from emp e,salgrade s where e.sal between s.losal and s.hisal group by s.grade),
  2. t1 as (select max(num) maxnum from t)
  3. select s.* from salgrade s,t,t1 where s.grade=t.grade and t.num=t1.maxnum;
复制代码
第三种写法:
  1. select * from salgrade where exists (select 1 from (select grade from (select s.grade,count(*) from emp e,salgrade s where e.sal between s.losal and s.hisal group by s.grade order by 2 desc) where rownum=1) s where s.grade=salgrade.grade);
复制代码

论坛徽章:
17
天蝎座
日期:2014-03-10 14:35:04数据库技术版块每日发帖之星
日期:2015-12-13 06:20:00IT运维版块每日发帖之星
日期:2015-12-13 06:20:00数据库技术版块每日发帖之星
日期:2015-10-20 06:20:00数据库技术版块每日发帖之星
日期:2015-08-21 06:20:00数据库技术版块每日发帖之星
日期:2015-06-17 22:20:002015年迎新春徽章
日期:2015-03-04 09:57:092015年辞旧岁徽章
日期:2015-03-03 16:54:15技术图书徽章
日期:2015-01-12 17:05:35亥猪
日期:2014-11-09 13:05:04金牛座
日期:2014-09-25 11:28:54处女座
日期:2014-09-15 19:58:36
2 [报告]
发表于 2015-06-16 15:51 |只看该作者
有趣味性~

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-01-14 06:20:00
3 [报告]
发表于 2015-07-08 12:01 |只看该作者
不错,挺好玩的,要多分享

论坛徽章:
7
亥猪
日期:2013-10-10 17:00:29辰龙
日期:2013-10-12 16:23:19卯兔
日期:2013-11-18 17:01:27金牛座
日期:2014-09-09 10:17:052015七夕节徽章
日期:2015-08-21 11:06:172015亚冠之柏太阳神
日期:2015-09-25 13:56:42数据库技术版块每日发帖之星
日期:2016-08-06 06:20:00
4 [报告]
发表于 2015-07-13 15:10 |只看该作者
第一題;這樣寫好看些
  1. WITH t AS
  2. (SELECT level lv FROM dual connect by level < 10)
  3. SELECT
  4. max(decode(an, 1, val)) col1,
  5. max(decode(an, 2, val)) col2,
  6. max(decode(an, 3, val)) col3,
  7. max(decode(an, 4, val)) col4,
  8. max(decode(an, 5, val)) col5,
  9. max(decode(an, 6, val)) col6,
  10. max(decode(an, 7, val)) col7,
  11. max(decode(an, 8, val)) col8,
  12. max(decode(an, 9, val)) col9
  13. FROM
  14. (
  15. SELECT a.lv an, b.lv bn, a.lv || '+' || b.lv || '=' || (a.lv + b.lv) val
  16. FROM t a, t b
  17. WHERE a.lv <= b.lv
  18. )
  19. group by bn
  20. order by  1
复制代码

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
5 [报告]
发表于 2015-07-20 11:09 |只看该作者
太厉害 了。有想象力。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP