如何利用SQL进行推理

2016-02-19 09:15 8 1 收藏

今天天气好晴朗处处好风光,好天气好开始,图老师又来和大家分享啦。下面给大家推荐如何利用SQL进行推理,希望大家看完后也有个好心情,快快行动吧!

【 tulaoshi.com - 编程语言 】

数据库环境:SQL SERVER 2008R2

有如下需求:
Baker, Cooper, Fletcher, Miller and Smith住在一座房子的不同楼层。
Baker 不住顶层。Cooper不住底层。
Fletcher 既不住顶层也不住底层。Miller住得比Cooper高。
Smith住的楼层和Fletcher不相邻。
Fletcher住的楼层和Cooper不相邻。
用SQL写出来
 
解题思路:
先实现所有人住楼层的排列组合,然后把条件套进去即求得。如何实现排列组合,
 
1.基础数据准备
--准备基础数据,用A、B、C、D、E分别表示Baker, Cooper, Fletcher, Miller and Smith

CREATE TABLE ttb (  subname VARCHAR(1) ,  realname VARCHAR(10) )INSERT INTO ttbVALUES ( 'A', 'Baker' ),  ( 'B', 'Cooper' ),  ( 'C', 'Fletcher' ),  ( 'D', 'Miller' ),  ( 'E', 'Smith' )

2.生成所有可能情况的排列组合
--生成A、B、C、D、E所有的排列组合

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)
WITH x0   AS ( SELECT CONVERT(VARCHAR(10), 'A') AS hidUNION ALLSELECT CONVERT(VARCHAR(10), 'B') AS hidUNION ALLSELECT CONVERT(VARCHAR(10), 'C') AS hidUNION ALLSELECT CONVERT(VARCHAR(10), 'D') AS hidUNION ALLSELECT CONVERT(VARCHAR(10), 'E') AS hid),  x1   AS ( SELECT hidFROM  x0WHERE LEN(hid) = 5UNION ALLSELECT CONVERT(VARCHAR(10), a.hid + b.hid) AS hidFROM  x0 a  INNER JOIN x1 b ON CHARINDEX(a.hid, b.hid, 1) = 0) SELECT hid AS name INTO #tt FROM x1 WHERE LEN(hid) = 5 ORDER BY hid

3.加入条件,找出满足要求的楼层安排

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)
WITH x2   AS ( SELECT nameFROM  #ttWHERE SUBSTRING(name, 5, 1)  'A'--Baker 不住顶层  AND SUBSTRING(name, 1, 1)  'B'--Cooper不住底层  AND ( SUBSTRING(name, 1, 1)  'C'AND SUBSTRING(name, 5, 1)  'C'--Fletcher 既不住顶层也不住底层   )  AND name LIKE '%B%D%'--Miller住得比Cooper高  AND name NOT LIKE '%CE%' AND name NOT LIKE '%EC%' --Smith住的楼层和Fletcher不相邻  AND name NOT LIKE '%BC%' AND name NOT LIKE '%CB%' --Fletcher住的楼层和Cooper不相邻),  x3--生成楼层号   AS ( SELECT number AS id ,  SUBSTRING(x2.name, number, 1) AS nameFROM  master.dbo.spt_values  INNER JOIN x2 ON 1 = 1WHERE type = 'P'  AND number = 5  AND number = 1) SELECT a.id AS 楼层,   b.realname AS 姓名 FROM x3 a   INNER JOIN ttb b ON b.subname = a.name ORDER BY id

楼层安排如下:

通过以上的代码的介绍,希望对大家的学习有所帮助。

来源:http://www.tulaoshi.com/n/20160219/1590120.html

延伸阅读
所谓多表查询是相对单表而言的,指从多个数据表中查询数据,这里我们主要学习从两个数据表中如何查询数据的方法。 4.3.1 无条件多表查询 无条件多表查询是将各表的记录以笛卡尔积的方式组合起来。 如scott.dept表共有4条记录,scott.emp表共有14条记录,其笛卡尔积将有4*14=56条记录。 在执行下列语句。 ―――...
如何利用WPS书签来进行快速定位   我们在阅读文档的时候,遇到一些不重要的地方,往往都会跳过,直接去重要的地方看,获取自己想要的信息。这个时候要怎么办呢? 当然,这时就需要用到书签功能了,它比一般的查找更加实效,一般的查找只能搜索关键字,而不能整个段落,这大大降低了阅读的效率,而且重复的关键字还要一个一个往下...
在select查询语句里可以嵌入select查询语句,称为嵌套查询。有些书上将内嵌的select语句称为子查询,子查询形成的结果又成为父查询的条件。 子查询可以嵌套多层,子查询操作的数据表可以是父查询不操作的数据表。子查询中不能有order by分组语句。 4.4.1 简单嵌套查询 在执行下列语句。 ――――――――――――――...
《真的3分钟推理》攻略 全24题答案解答(一) 1:闺房。 答案:凶手是亨利,因为史班克会偷,乔很宠爱艾米,女仆没有勒死她的和弄坏鸟笼的力道。 2:纸片谜团。 答案:罗莉的丈夫有杀人动机,他从罗莉晚宴包中起得票根找到卡特的住宿旅馆,并在卡特的房里找到同样的票根,由...
如何利用360安全卫士进行主页锁定?   如何利用360安全卫士进行主页锁定呢?下面将通过该教程进行详细介绍。 1、打开360安全位置中的系统修复项,点击页面右方的IE主页未锁定进行主页锁定。 2、在锁定窗口中输入你想锁定为主页的网址,如下图所示,在输入框中输入www.2345.com,输入完成后,点击安全锁定。 3、设...

经验教程

178

收藏

23
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部