独家为顾客表(公海赌船网站顾客ID,收到多少个赞

1   概述

公海赌船网站 1

//*诸君同学,我们上午好。我是讲演人xx。

恰好在后台的时候,我记忆了几天前在情人圈里流行起来的一个玩耍:收到多少个赞,这学期就读多少本书。大家的对象彰着得到了民众的支撑,没过多久就一起了几十个赞。我看了未来,也相继为她们点了一个赞,其它又帮他们截了一个图,打算期末的时候再问问他俩有没有看完那么多的书。我这样做的缘由,并不是不甘于相信她们,而是在大家身边,总是有众五人喜好在书桌上码着一摞书说要屯着渐渐看,很六人在新学期先河的时候决定要读几十本书,一百本书。但是,到终极真的落实诺言的,寥寥无几。

囤积了那么多书的大家,到底有多长时间没有读书了?一天?一周?一个月?依然一年?我记得南陈散文家黄山谷有这么一句话,他说:“三日不读书,便觉面目可憎。”依照这一个专业来看的话,我们的容颜一定已经同情直视了。

唯独本人记得儿时温馨也是很爱看书的,我还记得自己参与过校园的背唐诗竞赛,依旧唯一一个把一百首古诗全部背下来的少年小孩子。不过现在缘何连在路边报亭里的读者、意林都舍不得买来看了呢?

后来本身找到了答案,原来我每一天还是在海量的翻阅,只然则是对开端机屏幕,看一看娱乐圈里又暴发了什么新鲜事,网上又宣布了怎么着神奇的帖子,再关注一下本人喜欢的超新星如今有咋样行程……好像手机里装着一个全球,令人体系,哪还没事读书呢。回首过去的一年,自己读过的书真是屈指可数。

本人暴发了危机感,但要么不停的劝慰自己:尽管手里没有书,也不是不读书阿。我得以找多少个有关读书的微信公众号,或者出版社的天涯论坛,同样是在翻阅啊。不过实践声明,网上广大洒洒的随笔,质地连续参差不齐,却无一例外地有着诱人的标题,诱惑着你的点击量,读完以后,一番咋舌,却一无所获。更要紧的是,这即便可以让大家获取音讯,引发感悟,但是到底承载不了厚重的灵魂。往往是一口鸡汤灌得我们斗志昂扬,然则当鸡汤下肚,打了一个隔的工夫,就又再次来到了本来的面相,毫无起色。这一个戳中内心的金句,终究不可能提供力所能及改善生活的实质性引导,偶尔读一读可以怡情,然则,多读无益。

在这多少个新闻爆炸的一代,我们的生存处处洋溢科技要素,生活越来越便捷,我们的构思却愈发怠惰。在座的诸位,我们都是大学生,是读书人,可一旦我们每一天都是过着如此的活着,大家还有底气称自己是“文化人”吗?

钱穆先生曾说:“中国知识,于世界为先进。”然则我们注意获取音讯,却遗忘了实在的国之宝贝。古人留下的文化遗产,还亟需我们去继承和弘扬。即使现在早已没有当场王羲之这盛大的兰亭集会,但大家如故得以在心里搭建属于大家团结一心的世外桃源。

白岩松谈到读书时这样说道:“假诺没有读书,你会走到死路的限度。而在书中,你会读到跟你拥有一样经历的人,在老大死路尽头记录下来的所思所想,会帮你推开一扇新的门。”所以当自身知道这么些道理之后,我就再也不敢轻视国学经典的重量,起首广泛的读书,并且从中我发现,其实读书并不是一件枯燥的事,相反,我们读得越多,才越能觉察自己的知识面是何等狭窄。而且在无形中中,我们的神韵、谈吐、境界,都上升到一个更高的层次。在陶渊明的诗篇里摸索君子的隐逸,在苏仙的天马行空里读书逆境中的淡定,在关汉卿的热情洋溢中抽取洁净的血液,在如此的影响与感染之下,我越来越能感受到一种知识的洗礼,不过这种洗礼和畅快,却是任何网络情报都不可以带给自家的。

《中国杂文大会》这档节目风行一时,与任何富含娱乐性质的节目有所不同,它带给大家更多的是振奋上的训练,让大家在诗词当中享受国学经典的魅力。并且从它的收视率情况我们就足以窥见,其实我们大部分人或者对知识完美异常喜爱的,只可是因为一时在进化,我们的活着被更多科技因素所填充。所以我们更应该在这样快节奏的生活中把握住发展的步伐,快步慢行,时常体会国学美观之韵律,让这或高亢或柔美的词章,溅落在历史的历程里,点燃遥远的绝唱!

谢谢我们!

早期见到这多少个题材是初中的时候买了一本有关数学谜题的书里头概率论的一张的课后实行就是说到三门问题,当时看成一个扩充阅读看了弹指间,里面说到了一个社会风气智慧最高的巾帼秒杀了美利坚同盟国一大群的数学高材生的地道故事(相比较夸张),当时对这么些题材也是似懂非懂。

1.1 
已发布【SqlServer系列】文章

什么是蒙提霍尔问题?

公海赌船网站 2

蒙提霍尔

蒙提霍尔问题,亦称作蒙特霍题材或三门题材(英文:Monty 哈尔l
problem),是一个渊源博弈论的数学游戏题材,大致出自美利坚合众国的电视机游戏节目Let’s
Make a Deal。问题的名字源于该节目标主席蒙提·霍尔(Monty 哈尔l)。

中期的发布是:

参赛者会映入眼帘三扇关闭了的门,其中一扇的背后有一辆汽车,选中前面有车的这扇门就足以赢得该汽车,而其余两扇门前边则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的内部一扇,透露里面一只山羊。主持人其后会问参赛者要不要换另一扇依然关上的门。
题目是:换另一扇门会否扩充参赛者赢得汽车的机会率?

本条古老的题材即便指出就引起了霸气的争辨,有人以为换与不换最后拿到车的票房价值都是1/2,有人觉得换门之后得到车的概率更大,应该选用换门之后得到车的几率为2/3在编写这篇著作的时候在果壳上再有人在为此争吵,知乎上也有这么些关于这方面的议论,其实那些争议很多情况下都是因这多少个题目标模糊表述所引起的,关键点在于主持人对于门后的景色是不是领悟

  1. 如果主席事先知情哪位门里有山羊并且他特别挑选了有山羊的门打开了,那么参赛者应该换另一扇门,这足以将他胜利的几率从1/3升到2/3
  2. 只要主席事先不清楚哪位门里有山羊或者他只是随意的取舍了一个门,但事实发现里头恰好是山羊。那时候参赛者没有换门的必备,胜利概率总是1/2

为了持续的座谈,这里运用维基百科上对于这多少个问题的不马虎的定义

严俊的抒发如下:

  • 参赛者在三扇门中甄选一扇。他并不知道内里有哪些。
  • 主席知道每扇门后边有怎么着。
  • 主持人必须开启剩下的其中一扇门,并且必须提供换门的机遇。
  • 主持人永远都会挑一扇有山羊的门。
    • 虽然参赛者挑了一扇有山羊的门,主持人必须挑另一扇有山羊的门。
    • 假若参赛者挑了一扇有汽车的门,主持人随机在另外两扇门中挑一扇有山羊的门。
  • 参赛者会被问是否维持他的本原采用,依然转而挑选剩下的那一道门。

那么这个题材这足以很好的知情了,引用维基的一幅图片解析:

公海赌船网站 3

蒙提霍尔解答

有二种可能的图景,全部都有十分的可能(1/3):

  • 参赛者挑汽车,主持人挑六头羊的此外一头。转换将失利。
  • 参赛者挑A羊,主持人挑B羊。转换将获取汽车。
  • 参赛者挑B羊,主持人挑A羊。转换将取得汽车。

故而玩家选拔换门之后获胜的票房价值应为2/3

证明?

公海赌船网站 4

蒙提霍尔解答

定义:

  • 事件A为一起首玩家选用的一扇门
  • 事件H为结尾门后的结果

  • 设假设选项不换门的政策

因为选拔的是不交流的国策,所有只有一先导选中的是汽车,最后才能当选汽车。

  • 选取交流门的策略

因为选拔的是换成的方针,所有只有一初阶选中的是羊,最终才能入选汽车。

1.2 
本篇随笔内容概要

次第验证

实施是检查真理的唯一标准,在流言终结者看到她们人工重复这些实验区验证,发现这么很浪费时间。何通过电脑去去模拟这一段过程吧?
上面拔取python程序来效仿这一段过程:

from __future__ import division
import logging
from matplotlib import pyplot as plt
import numpy as np
import random


class MontyHall(object):
    """docstring for MontyHall"""

    def __init__(self, num=3):
        """
        创建一个door列表
        0 代表关门
        1 表示后面有车
        -1 代表门被打开
        """
        super(MontyHall, self).__init__()
        self.doors = [0] * num
        self.doors[0] = 1
        self.choice = -1
        self.exclude_car = False
        self.shuffle()

    def shuffle(self):
        """  
        开始新游戏
        重新分配门后的东西
        """
        if self.exclude_car == True:
            self.doors[0] = 1
            self.exclude_car = False
        for i in xrange(len(self.doors)):
            if self.doors[i] == -1:
                self.doors[i] = 0
        random.shuffle(self.doors)

    def make_choice(self):
        """
        player随机选择一扇门
        """
        self.choice = random.randint(0, len(self.doors) - 1)
        logging.info("choice: %d" % self.choice)
        logging.info("original: %s" % self.doors)

    def exclude_doors(self):
        """
        主持人知道门后的情况排除门
        直到剩余两扇门
        """
        to_be_excluded = []
        for i in xrange(len(self.doors)):
            if self.doors[i] == 0 and self.choice != i:
                to_be_excluded.append(i)  
        random.shuffle(to_be_excluded)
        for i in xrange(len(self.doors) - 2):
            self.doors[to_be_excluded[i]] = -1
        logging.info("final: %s" % self.doors)

    def random_exclude_doors(self):
        """
        主持人并不知道门后面的情况随机的开门
        直到剩余两扇门
        """
        to_be_excluded = []
        for i in xrange(len(self.doors)):
            if self.doors[i] != -1 and i != self.choice:
                to_be_excluded.append(i)  
        random.shuffle(to_be_excluded)
        for i in xrange(len(self.doors) - 2):
            if self.doors[to_be_excluded[i]] == 1:
                self.exclude_car = True
            self.doors[to_be_excluded[i]] = -1
        logging.info("final: %s" % self.doors)

    def change_choice(self):
        """
        player改变选择
        """
        to_change = []
        for i in xrange(len(self.doors)):
            if self.doors[i] != -1 and i != self.choice:
                to_change.append(i)
        self.choice = random.choice(to_change)
        logging.info("choice changed: %d" % self.choice)

    def random_choice(self):
        """
        player 第二次随机选择门
        """
        to_select = []
        for i in xrange(len(self.doors)):
            if self.doors[i] != -1:
                to_select.append(i)
        self.choice = random.choice(to_select)
        logging.info("random choice : %d" % self.choice)


    def show_answer(self):
        """
        展示门后的情况
        """
        logging.info(self.doors)

    def check_result(self):
        """
        验证结果
        """
        got_it = False
        if self.doors[self.choice] == 1:
            got_it = True
        return got_it

  
子查询和表连接,首假如指向两张及以上表之间关系关系进展询问。子查询,按是否单身划分,分为独立子查询和相关子查询;按内部查询重返是否为单值,分为单值子查询(注意:应清楚单值子查询和标量子查询关系)和多值子查询;如下表格内容为按子查询是否单身来划分的。

仿照1000轮,每一轮重复试验1000次

  • 不更改接纳:

def unchange_choice_test(n):
    """
    不改变初始的选择
    """
    result = {}
    game = MontyHall()
    for i in xrange(n):
        game.shuffle()
        game.make_choice()
        game.exclude_doors()
        if game.check_result():
            result["yes"] = result.get("yes", 0) + 1
        else:
            result["no"] = result.get("no", 0) + 1
    for key in result:
        print "%s: %d" % (key, result[key])
    return result["yes"] / n

if __name__ == '__main__':
    logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.WARNING)
    results = []
    test_num = 1000
    round_num = 1000
    for x in xrange(0,round_num):
        results.append(change_random_test(test_num) )

    y_mean = np.mean(results)
    y_std = np.std(results)
    x = range(0,round_num)
    y = results
    plt.figure(figsize=(8,4))

    plt.xlabel("round")
    plt.ylabel("frequency")
    plt.title("The frequency of the success")
    tx = round_num / 2
    ty = y_mean
    label_var = "$\sigma \left( X \\right)=$%f" % y_std
    label_mean = "$ X =$%f" % y_mean
    p1_label = "%s and %s" % (label_var,label_mean)
    p1 = plt.plot(x,y,"-",label=p1_label,linewidth=2)
    plt.legend(loc='upper left')


    pl2 = plt.figure(2)
    plt.figure(2)
    plt.hist(results,40,normed=1,alpha=0.8)
    plt.show()

结果:

公海赌船网站 5

此处输入图片的叙说

概率分布:

公海赌船网站 6

这边输入图片的描述

得逞的票房价值均值在 1/3 附近

  • 改变采用:

def change_choice_test(n):
    """
    交换选择的门
    """
    result = {}
    game = MontyHall()
    for i in xrange(n):
        game.shuffle()
        game.make_choice()
        game.exclude_doors()
        game.change_choice()
        if game.check_result():
            result["yes"] = result.get("yes", 0) + 1
        else:
            result["no"] = result.get("no", 0) + 1
    for key in result:
        print "%s: %d" % (key, result[key])
    return result["yes"] / n

同样的法子绘图得到结果:

公海赌船网站 7

此地输入图片的叙说

概率分布:

公海赌船网站 8

此处输入图片的描述

中标的几率均值在 2/3 附近

透过上边的剖析与模拟可知最佳的方针当然就是换门。

公海赌船网站 9

更为深切的议论

  • 设若门的数量不断是3个,假诺是50扇门呢?

公海赌船网站 10

此处输入图片的叙述

那种状态下,主持人打开48扇都是羊的门后,再给你挑选,很六人这一个时候应该就不会固守这1/2,而会选用换门
把门的数码增大到100,1000,这种处境会尤其肯定。
抑或经过一段程序模拟表达:

def change_choice_test_large(n,m):
    """
    交换选择的门
    """
    result = {}
    game = MontyHall(m)
    for i in xrange(n):
        game.shuffle()
        game.make_choice()
        game.exclude_doors()
        game.change_choice()
        if game.check_result():
            result["yes"] = result.get("yes", 0) + 1
        else:
            result["no"] = result.get("no", 0) + 1
    for key in result:
        print "%s: %d" % (key, result[key])
    return result["yes"] / n


if __name__ == '__main__':
    logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.WARNING)
    results = []
    test_num = 1000
    round_num = 1000
    for x in xrange(0,round_num):
        results.append(change_choice_test_large(test_num,50) )

结果:

公海赌船网站 11

公海赌船网站 12

这会儿就要选用交换门

  • 相见这种情景我很疑惑,我主宰抛硬币决定,这些时候成功的票房价值?

这是第3种政策,成功的概率和硬币有关,也就是1/2,这种情况就是从剩下的门中随机选取一扇,这些方针从上边分析来看不是最好的,不过比不改动的策略要好。
程序的依样画葫芦结果:

公海赌船网站 13

此间输入图片的叙述

公海赌船网站 14

此处输入图片的叙说

  • 诸如门意外打开的意况呢,也就是下面描述的第两种状态(主持在不知门后的情事下打开门呢)?

这种意况下实际就是一个标准化概率,事件A是玩家最终开到的是车,事件B是主席打开的门是羊。

因为唯有主席开到是羊的动静下,玩家才有可能开到车所以

设玩家首先次采纳的门为事件C

  • 不交流策略下的标准化概率是:

QQ截图20150510140602.png

  • 换成策略下的口径概率是:

由此在主席不了解门后的事态下打开一扇,然后发现门后是羊的情况下,换门与不换门最后的几率都是1/2
要么得以因此程序举办效仿:

def unknown_doors_choice_test(n):
    """
    主持人并不知道门后面的情况随机的开门
    交换选择的门
    """
    result = {}
    game = MontyHall()
    continue_count = 0
    for i in xrange(n):
        game.shuffle()
        game.make_choice()
        game.random_exclude_doors()
        game.change_choice()
        if game.exclude_car == False:
            continue_count += 1
        if game.check_result():
            result["yes"] = result.get("yes", 0) + 1
        else:
            result["no"] = result.get("no", 0) + 1
    #for key in result:
    #    print "%s: %d" % (key, result[key])
    logging.info("continue_count: %d" % continue_count)
    if continue_count == 0:
        return 0.0
    return result["yes"] / continue_count   

公海赌船网站 15

此间输入图片的叙说

公海赌船网站 16

此处输入图片的讲述

在这种情景下互换门也从来不提升成功的几率


1.3
本章测试样表和sql

总结

前日写的这篇东西也总算明白自身刻钟候的一个不满,人的直觉有时候是很不可靠,要摆脱个人局限的咀嚼才能抱抱更大的社会风气。
哪些?看完这一个分析,你还认为不合意那么你仍可以从下面的参照中检索更好的辨析,本文撰写过程有一些的图片引用自一下的参阅,倘若您还有问号欢迎您关系自身更加的座谈。

事务场景:

练习

下边是三门题材的多个翻版,引用自三门题材及相关

有两张表,分别为顾客表(顾客ID,顾客姓名,顾客公司),即Customers(CustID,CustName,CustCompany)和消费者订单表(顾客ID,订单ID,订单日期),即Orders(CustID,OrderID,OrderDate),两张表经过顾客ID(CustID)举行关联。

女孩的概率

  • 您结交一位新情人,问她是不是有儿女。她说有,有四个。你问,有女孩啊?她说有。那么,七个都是女孩的概率是有些?

答:三分之一。因为生六个子女的可能性有四种等可能:BB、GG、BG、GB(即男男、女女、男女、女男)。
因为我们已知至少有一个丫头,所以BB是无法的。由此GG是唯恐出现的三个等可能的结果之一,所以两个子女都是姑娘的几率为三分之一。这对应了三门题材的第一种情状。

  • 你结交一位新情人,问他是否有男女。她说有,有五个。你问,有女孩吧?她说有。第二天,你瞧瞧他带了一个小女孩。你问她,这是你外孙女吧?她说,是。她的六个男女都是女孩的概率是稍微?

这个概率和生女孩的几率一样,二分之一。这如同非常想得到,因为我们所怀有的信息看起来并不比第一种状态时多,但概率却不比。可是此地的问题莫过于是,那多少个你没>见过的儿女是女孩的概率是有些?这么些概率和生女孩的几率一样,二分之一。
这对应了三门题材的第二种状态。当然这里也有语言问题,必须假定那位阿姨不是特定带出一个小女孩来给您看的。也就是说你只是刚刚发现了它是位小女孩。这取决于是判断采纳或q
随机挑选。假如是被您刚好撞见这是属于自由采用。这就对应了三门问题的第二种情形。这实则是增多了信息的。否则要是他主动带一个小女孩过来给您,则属于判断接纳。
你取得的答案依赖于所讲的故事;它凭借于您是如何获悉至少一个孩子是女孩的。

公海赌船网站 17

三犯人问题

  • Adam、Bill和查尔斯(Charles)被关在一个监狱里,唯有监狱看守知道什么人会被判死刑,其它两位将会放出。有1/3的票房价值会被处死刑的Adam,给她姨妈写了一封信,想要获释的比尔(比尔)或Charles协理代寄。当Adam问看守他应该把她的信交给比尔(比尔)依旧查理时,这位富有同情心的看守很难堪。他以为一旦她把即将获释的人的名字告诉Adam,那么亚当(Adam)就会有1/2的概率被判死刑,因为剩下的人和Adam这五个人中肯定有一个人被行刑。倘诺她背着这消息,亚当(Adam)被处决的概率是1/3。既然亚当知道其他五人中必有一人会自由,那么亚当自己被处死的票房价值怎么可能会因为看守告诉她另外六人中被获释者的真名后而变更啊?

正确的答案是:看守不用当心,因为即使把自由人的真名告诉Adam,Adam被处死的票房价值仍旧是1/3,没有改变。但是,剩下的这位没被点名的人就有2/3的几率被行刑(被处死的可能提高了)。倘使那个题材换一种说法,就是防守无意间流露了Charles不会死。那么几率就会时有暴发改变。
这多少个实在和三门问题是同样的。你可以把狱卒当成主持人,被处死当成是大奖,那么这多少个是对应于三门问题的首先种状态,就是主持人知道门后边的事态。狱卒说出何人会被放飞,约等于主席打开一扇门。但是因为三囚徒问题无法接纳,也就一定于三门问题中的不换门的方针。最后的票房价值依然1/3是从未有过发生改变的。
为了制止发出歧义,规定一下:
1.假设(Adam,查理(Charles))被假释,那么狱卒会报告亚当(Adam):”查尔斯(Charles)被保释”。
2.比方(亚当(Adam),比尔(Bill))被放走,那么狱卒会报告Adam:”比尔(比尔)被放飞”
3.只要(查理(Charles),比尔(Bill))被保释,那么狱卒会以1/2的概率告诉Adam:”查尔斯(Charles)被放出”或者”比尔被放走”
情趣就很精晓了,在看守说出比尔被假释的原则下,Adam被假释的票房价值是?用标准化概率算一下。
概念事件:

A :狱卒说出”比尔(Bill)被放飞”
B :代表亚当(Adam)被释放。

公海赌船网站 18

这怎么时候才是1/2的票房价值呢?
规则3更改为:倘使(Charles,比尔(比尔))被放飞,那么狱卒会报告亚当(Adam)”比尔(Bill)被释放”
其一时候总结就是:

公海赌船网站 19

这假如规则3改为:如果(Charles,比尔(比尔(Bill)))被放走,那么狱卒会告知亚当(Adam)”查理(Charles)被放飞”
以此时候:亚当(Adam)被假释的几率就会变成1
题材在于规则2和规则3下说”比尔被放走”不是等概率发生的。

SQL语句分别如下:

仿佛的题目还有

  • 抛两枚硬币其中有一枚硬币是不俗,问两枚硬币都是正经的几率是?
  • 抛两枚硬币其中第一枚硬币是正面,问两枚硬币都是端正的几率是?

the end.


(1)创设子查询DB:WJM_CHildQuery

参考:

  1. 蒙提霍尔问题 –
    维基百科,自由的百科全书

  2. 三扇门问题 |
    左岸读书

  3. 蒙提霍尔问题(又称三门问题、山羊汽车问题)的正解是何许?

  4. 意思编程:三门题材

  5. 三门题材及有关

  1. 换依旧不换?争议没有停歇过的三门问题

  2. 在「三门题材」中,参预者应该选取「换」依旧「不换」?主持人是否领会门后状况对结论有何影响?

  3. THE MONTY HALL
    PROBLEM

  4. 流言终结者第九季

  5. 某个家庭中有 2
    个孩子,已知其中一个是女孩,则另一个是男孩的几率是稍稍?-新浪

  6. 从贝叶斯定律的角度通晓“蒙提霍尔题材”和“六个罪犯问题”

  7. 六个罪犯问题,求解?


革新日志:

  • 2015-05-20 扩充三囚徒问题的解答
  • 2015-05-09 第一次作文
1 --创建子查询数据库WJM_ChildQuery
2 IF DB_ID('WJM_CHildQuery') IS NOT NULL
3    DROP DATABASE WJM_ChildQuery
4    GO
5    CREATE DATABASE WJM_ChildQuery

(2)成立Customers表并起始化

 1 USE WJM_CHildQuery
 2 
 3 --CREATE TABLE Customers
 4 CREATE TABLE Customers
 5 (
 6    CustID INT IDENTITY(1,1)  NOT NULL PRIMARY KEY,  --顾客ID
 7    CustName  VARCHAR(50),--顾客姓名
 8    CustCompany VARCHAR(50) --顾客公司
 9 )
10 
11 --Initial Customers
12 
13 INSERT INTO Customers VALUES('赵武','A')
14 INSERT INTO Customers VALUES('刘杨','B')
15 INSERT INTO Customers VALUES('张永为','C')
16 INSERT INTO Customers VALUES('李龙飞','D')
17 INSERT INTO Customers VALUES('邓华','E')
18 INSERT INTO Customers VALUES('张涛明','F')

举行查询语句:

1 SELECT *
2 FROM Customers

询问结果为:

公海赌船网站 20

 (3)创设Orders表并开首化

 1 USE WJM_CHildQuery
 2 
 3 CREATE TABLE Orders
 4 (
 5   OrderID INT IDENTITY(1,1) PRIMARY KEY NOT NULL, --订单ID
 6   CustID INT NOT NULL,  --顾客ID
 7   OrderDate DATE --订单日期
 8 ) 
 9 
10 --Initial Orders
11 
12 INSERT INTO Orders VALUES(1,'2015-06-25')
13 INSERT INTO Orders VALUES(2,'2017-06-03')
14 INSERT INTO Orders VALUES(3,'2016-04-25')
15 INSERT INTO Orders VALUES(4,'2016-03-04')
16 INSERT INTO Orders VALUES(5,'2013-03-04')
17 INSERT INTO Orders VALUES(6,'2017-01-01')
18 INSERT INTO Orders VALUES(2,'2016-08-25')
19 INSERT INTO Orders VALUES(5,'2016-12-25')

施行查询语句:

1 SELECT *
2 FROM Orders

查询结果为:

公海赌船网站 21

2  独立子查询

2.1 
独立标量子查询

题目:请用两种办法重回Orders表中的订单ID最大的订单音讯。

办法一:标量单值子查询

1 --返回Orders表中订单ID最大的记录
2 SELECT OutQueryOrders.OrderID,OutQueryOrders.CustID,YEAR(OutQueryOrders.OrderDate) AS OrderDateYear
3 FROM Orders AS OutQueryOrders
4 WHERE OutQueryOrders.OrderID=
5 (
6    SELECT MAX(InnerQueryOrders.OrderID)
7    FROM Orders InnerQueryOrders
8 )

查询结果:

公海赌船网站 22

结果分析

a.期望结果

公海赌船网站 23

b.查询语句分析

公海赌船网站 24

主意二:拔取变量

1 DECLARE @MaxOrderID AS INT=
2 (
3    SELECT MAX(OD.OrderID)
4    FROM Orders AS OD
5 )
6 
7 SELECT *
8 FROM Orders 
9 WHERE Orders.OrderID=@MaxOrderID

询问结果:

公海赌船网站 25

结果分析:

a.期望结果

公海赌船网站 26

 

b.查询语句分析

公海赌船网站 27

2.2  独立子查询

问题:再次来到订单表中订单ID>5的主顾音信

1 --返回订单表中订单ID>5的顾客信息
2 SELECT C.CustID,C.CustName,C.CustCompany
3 FROM Customers AS C
4 WHERE C.CustID  IN
5 (
6     SELECT Orders.CustID
7     FROM Orders
8     WHERE Orders.OrderID>5
9 )

查询结果:

公海赌船网站 28

结果分析:

a.期望结果

公海赌船网站 29

b.查询语句分析

公海赌船网站 30

2.3  小结

a.每个子查询均有所属的外部查询;
b.独立子查询独立于其外部查询;
c.可以把独立子查询单独运行;
d.独立子查询在执行外部查询之前先执行一次,接着外部查询再使用子查询的结果继续进行查询;
e.标量子查询只返回单个值,不管其是否是独立子查询;
f.标量子查询可以出现在外部查询中期望使用单个值的任何地方(WHERE、SELECT等)
g.算术运算符(>,>=,<,<=,!=,=)其后只能为单值;
h.如果标量子查询没有返回任何值,其结果就转换为NULL,和NULL进行比较得到的是UNKNOWN,查询过滤器不会返回任何让过滤表达式计算结果为UNKOWN的行;
i.多值子查询,一般与谓词连用,如IN,NOT IN,EXISTS等;
j.在子查询中,一般单值和多值是混合用,如常见与BETWEEN......AND.....连用等;

3   相关子查询

3.1 
SQL示例及示范结果

问题:在订单表Orders表中,为各样客户重返其订单ID最大的订单

 1 --为每个客户返回其订单ID最大的订单
 2 
 3 SELECT OutQueryOrders.OrderID,OutQueryOrders.CustID,YEAR(OutQueryOrders.OrderDate) AS OrderDateYear
 4 FROM Orders AS OutQueryOrders
 5 WHERE OutQueryOrders.OrderID=
 6 (
 7    SELECT MAX(InnerQueryOrders.OrderID)
 8    FROM Orders InnerQueryOrders
 9    WHERE OutQueryOrders.CustID=InnerQueryOrders.CustID
10 )

查询结果:

公海赌船网站 31

3.2  示例结果分析

a.期望结果

公海赌船网站 32

 

b.查询语句分析

公海赌船网站 33

3.3  小结

a.相关子查询内部查询依赖于外部查询,不能独立运行;
b.相关子查询内部查询中,受限制于外部查询的条件,如上述例子中的WHERE之后的条件;
c.在逻辑上,子查询会为每个外部查询单独计算一次;
d.多值子查询,一般与谓词连用,如IN,NOT IN,EXISTS等;
e.在子查询中,一般单值和多值是混合用,如常见与BETWEEN......AND.....连用等;

4   子查询拓展

 关于子查询,还有很多情节,如重返前后记录查询,连续聚合,行为不当等,但这有些情节属于子查询的中高等部分,准备放在【SqlServer体系】中高等部分来与我们大快朵颐。

5   参考文献

【01】Microsoft  SqlServer
2008技巧内幕:T-SQL 语言基础

【02】Microsoft  SqlServer
2008技术内幕:T-SQL 查询

6   版权

 

  • 感谢您的开卷,若有不足之处,欢迎指教,共同学习、共同提升。
  • 博主网址:http://www.cnblogs.com/wangjiming/。
  • 极少一些小说利用读书、参考、引用、抄袭、复制和粘贴等多种办法组成而成的,大部分为原创。
  • 如你喜欢,麻烦推荐一下;如您有新想法,欢迎提议,邮箱:2016177728@qq.com。
  • 可以转载该博客,但必须闻明博客来源。

相关文章