• 记录几个基础的SQL开发题


    1. 表A有5行数据,表B有7行数据,问Inner Join最多返回几行数据,Left Join最多返回几行数据,分别在什么情况下?

       Inner Join 是返回关联表的Cartesian product,然后根据On条件剔除掉不符合的行。这样的话,返回最多行的情况就是保留整个Cartesian product,On对每一行都为True.

       即最多返回5*7=35行。

       Outer Join 是返回关联表的Cartesian product,然后根据On条件剔除掉不符合的行,再将添加外部行。

       外部行是指保留表中根据On条件在非保留表中找不到与之匹配行的行,非保留表的行数据用NULL值占位。

       返回最多行的情况也是返回整个Cartesian product=35行。

       最大返回行的示例代码:

    Code

    2. 有表Tb如下,写出SELECT COUNT(*),COUNT(col1),COUNT(col2),COUNT(DISTINCT col1),COUNT(DISTINCT col2),COUNT(col1+col2),COUNT(col1-col2) FROM Tb的返回结果。

    col1 col2
    1 1
    1 NULL
    Null 1
    Null Null

    这是一个非常基础和细节性的问题,如果能用电脑,试一下就知道答案了,但是试题上碰到,很少人能全写对。定义问题,COUNT函数的定义如下:

    返回组中的项。

    COUNT(*) 返回组中的项数。包括 NULL 值和重复项。

    COUNT(ALL expression) 对组中的每一行都计算 expression 并返回非空值的数量。

    COUNT(DISTINCT expression) 对组中的每一行都计算 expression 并返回唯一非空值的数量。

    同时,NULL参与的运算,结果始终为NULL。这样结果就比较明显了:4    2    2    1    1    1    1

    3.如何得到一个1~9之间的随机整数(包含1和9)?表Tb只有一列col,包含很多个这种整数,查询Tb得到如下结果,Range随机整数的范围,Count表示计数

    Range Count
    1~3  
    4~5  
    6~9  

    1~9之间随机整数:SELECT cast(ceiling(rand() * 9) AS  INT )

    rand()返加始终会是大于0且小于1的float,ceiling取大于或者等于给定表达式的最小整数,所以会得1~9之间的随机整数。

    Code


    4. Server1上有数据库A,其镜像数据库是服务器Server2上的AM。Server2上定时生成AM的Snapshot库AS。Server2上有一个库AU,这个库中没有表,全是指向的AS的视图。

       用户只能通过AU库的视图去访问AS的数据。请问该如何实现这种安全性要求。

       这其实是一个Ownership chain的问题。参考资料:Ownership Chains

       分析:

        a. 必需有一个login(就叫tb吧)对于数据库A,AS和AU具有访问权限.假设某个用户的login叫做vw,它必需是库A和AS的public成员,同时还要对库AU中视图具有查询权限.

        b. login tb在库A和AU中必需相应表和视图的Owner

        c. 由于Mirroring db和Snapshot的安全配置继承自主库A且不可修改,所以在Server2上必需创建同名和同SID的login.

        d. 在Server2上启用cross db ownership chaining,允许跨库的所有权链接.

      测试代码:

         测试代码中主库为MirrorTest,镜像库也是MirrorTest,快照库是MT_SS,视图库为MT_VIEW

        a. 在Server1上创建库和相关配置

    Code

    b. 在成功配置镜像会话之后,再在SERVER2上配置

    Code

    这个时候以vw登录SERVER2就可以实现题目所要求的.没将USER tb和vm添加到某个role中,但是tb做为对象的owner,具有较高权限.vm只是相关库public和视图的查询权限,不能直接访问主库和快照中的数据.

    小结:

       基础知识很重要,不然就会用时方恨少.

  • 相关阅读:
    Mysql 用户管理
    php插件名称 yum安装
    U盘模式无法引导进入pe系统
    修改 ssh 远程连接 时间
    tomcat 安装在 linux
    tomcat 配置文件 server.xml
    Linux 安装 jdk
    高可用web架构: LVS+keepalived+nginx+apache+php+eaccelerator(+nfs可选 可不选)
    Keepalived 工作原理和配置说明
    Mysql 初始化 及 密码管理
  • 原文地址:https://www.cnblogs.com/Joe-T/p/3863425.html
Copyright © 2020-2023  润新知