• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >MsSql > 如何利用SQL进行推理

如何利用SQL进行推理

作者:Boss_he 字体:[增加 减小] 来源:互联网 时间:2017-05-11

Boss_he通过本文主要向大家介绍了利用sql,sql综合利用工具,用sql进行数据分析,如何进行sql优化,如何进行防sql注入等相关知识,希望本文的分享对您有所帮助

数据库环境: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 ttb
VALUES ( 'A', 'Baker' ),
  ( 'B', 'Cooper' ),
  ( 'C', 'Fletcher' ),
  ( 'D', 'Miller' ),
  ( 'E', 'Smith' )

</div>

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

 

WITH x0
   AS ( SELECT CONVERT(VARCHAR(10), 'A') AS hid
    UNION ALL
    SELECT CONVERT(VARCHAR(10), 'B') AS hid
    UNION ALL
    SELECT CONVERT(VARCHAR(10), 'C') AS hid
    UNION ALL
    SELECT CONVERT(VARCHAR(10), 'D') AS hid
    UNION ALL
    SELECT CONVERT(VARCHAR(10), 'E') AS hid
    ),
  x1
   AS ( SELECT hid
    FROM  x0
    WHERE LEN(hid) <= 5
    UNION ALL
    SELECT CONVERT(VARCHAR(10), a.hid + b.hid) AS hid
    FROM  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
</div>

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

 

WITH x2
   AS ( SELECT name
    FROM  #tt
    WHERE 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 name
    FROM  master.dbo.spt_values
      INNER JOIN x2 ON 1 = 1
    WHERE 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
</div>

楼层安排如下:

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

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 如何利用SQL进行推理

相关文章

  • 2017-05-11AD域中成员服务器SQL 2008 Server安装配置图文教程
  • 2017-05-11使用SQLSERVER 2005/2008 递归CTE查询树型结构的方法
  • 2017-08-28SQL Server 2008 R2 企业版/开发版/标准版(中英文下载,带序列号)
  • 2017-05-11sql server 2008安装过程中服务器配置出错解决办法
  • 2017-05-11SQLSERVER2005 中树形数据的递归查询
  • 2017-05-11SQL Server中的XML数据进行insert、update、delete操作实现代码
  • 2017-12-17sql server 数据库简繁转换
  • 2017-05-11Excel导入数据库时出现的文本截断问题解决方案
  • 2017-05-11SQLServer 设置单词首字母大写
  • 2017-05-11用jdom创建中文的xml文件的方法

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • sqlserver 中charindex/patindex/like 的比较
    • SQL SERVER 2005数据库还原的方法
    • SQL SERVER 2008 R2配置管理器出现“远程过程调用失败”(0x800706be)错误提示
    • Sql server2005 优化查询速度50个方法小结
    • MSSQL2005在networkservice权限运行附加数据库报(Microsoft SQL Server,错误: 5120)
    • 探讨如何配置SQL2008,让其允许C#远程外部连接的方法详解
    • MSSQL2005数据库备份导入MSSQL2000
    • sql server 2008 忘记sa密码的解决方法
    • Java连接sqlserver2008数据库代码
    • 收缩数据库日志文件的方法(仅适用于mssql2005)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有