1、写出创建表的语法结构

    1. CREATE TABLE 表名( 字段名 类型, 字段名 类型, …… )
    2. CREATE TABLE 表名A AS (数据集)

    2、写出创建存储过程的语法结构

    1. CREATE [OR REPLACE] PROCEDURE 过程名(参数1 [IN|OUT|IN OUT] 数据类型,参数2 [IN|OUT|IN OUT] 数据类型……)
    2. IS|AS
    3. …… ……
    4. BEGIN
    5. …… ……
    6. EXCEPTION ……
    7. …… ……
    8. END;

    3、写出创建视图的语法结构

    1. CREATE [OR REPLACE] [{FORCE|NOFORCE}] VIEW view_name
    2. AS
    3. SELECT 查询)
    4. [WITH READ ONLY CONSTRAINT]

    4、JOIN、LEFT JOIN、RIGHT JOIN 的区别

    1. …………
    2. A
    3. [LEFT|RIGHT] JOIN
    4. B
    5. ON
    6. …………
    7. JOIN INNER JOIN 只保留 A B 完全匹配的结果集
    8. LEFT JOIN 保留 A 的所有记录 仅保留 B 能匹配上的记录(匹配不上的记录为空)
    9. RIGHT JOIN 保留 B 的所有记录 仅保留 A 能匹配上的记录(匹配不上的记录为空)

    5、Union 和 Union All 的区别

    1. Union Union All 均为对 “数据集” 采用 “并集” 的操作
    2. Union 会对数据进行去重
    3. Union All 则为不去重

    二、实践题

    有下面三个关系表:
    CARD:借书卡,
    CNO 卡号,
    NAME 姓名,
    CLASS 班级

    BOOKS:图书,
    BNO 书号,
    BNAME 书名,
    AUTHOR作者,
    PRICE 单价,
    QUANTITY 库存册数

    BORROW:借书记录,
    CNO 书卡号,
    BNO 书号,
    RDATE 还书日期

    备注:限定每人每种书只能借一本;库存册数随借书、还书而改

    1、找出借书超过5本的读者,输出借书卡号及所借图书册数。

    1. SELECT CNO, CNT
    2. FROM ( SELECT CNO,COUNT(1) CNT FROM BORROW GROUP BY CNO )
    3. WHERE CNT>5 ;

    2、查询借阅了“水浒”—书的读者,输出姓名及班级。

    1. SELECT NAME, CLASS
    2. FROM CARD
    3. WHERE CNO = (SELECT CNO FROM BORROW WHERE BNO = (SELECT BNO FROM BOOK WHERE BNAME = '水浒')) ;

    3、查询过期未还图书,输出借阅者(卡号)、书号及还书日期。

    1. SELECT CNO, BNO, RDATE
    2. FROM BORROW
    3. WHERE SYSDATE < RDATE ;

    4、查询现有图书中价格最高的图书,输出书名及作者。

    1. SELECT BNAME, AUTHOR
    2. FROM (SELECT BNAME, AUTHOR, RANK(BNAME) OVER(ORDER BY PRICE DESC) RANK_B FROM BOOK)
    3. WHERE RANK_B = 1

    5.查询当前借了 “计算方法” 但没有借 “计算方法习题集” 的读者,输出其借书卡号,并按卡号降序排序。

    1. SELECT CNO
    2. FROM (
    3. SELECT CNO FROM BORROW WHERE BNO = (SELECT BNO FROM BOOK WHERE '计算方法')
    4. MINUS
    5. SELECT CNO FROM BORROW WHERE BNO = (SELECT BNO FROM BOOK WHERE '计算方法习题集')
    6. )
    7. ORDER BY DESC

    三、谈下你对项目的理解

    项目就是在限定的资源、时间与成本下做的临时性活动。
    一个项目的开发流程为:需求阶段—-> 设计阶段 —> 开发阶段—> 测试阶段 —> 上线阶段

    1. 需求阶段:产品经理给我们交接完需求 ,项目经理会根据需求给我们分配开发任务
    2. 设计阶段:我们会根据需求完成,表结构的设计,整理出数据字典。
    3. 开发阶段:我们会根据自己负责的开发任务进行开发,

      开发完成以后 ,我们会自己做UT测试(单元测试) ,
      转测之前我们项目经理会组织我们进行代码评审,评审通过以后提交测试验证。

    4. 测试阶段:主要是改BUG ,测试发现问题我们修复,然后跟踪缺陷闭环。

    5. 上线阶段:参与上线支持,项目组的全体成员都参与,上线当天有负责生产环境部署的同事进行版本

      1. 上线的工作,有问题我们就及时定位解决,没问题就在公司休息,等上线结束。

    四、彩票题

    用SQL找出彩票出现次数最多的号码

    期数 N1 N2 N3 N4 N5 N6 N7
    202101 5 10 15 20 25 30 35
    202102 6 12 18 24 30 36 1
    202103 4 8 12 16 20 24 28
    1. SELECT N1,N2,N3,N4,N5,N6,N7
    2. FROM (
    3. SELECT N1,N2,N3,N4,N5,N6,N7
    4. FROM XXX
    5. GROUP BY N1,N2,N3,N4,N5,N6,N7
    6. ORDER BY COUNT(1) DESC
    7. )
    8. WHERE ROWNUM = 1;
    1. SELECT N1
    2. FROM (
    3. SELECT N1, ROW_NUMBER()OVER(ORDER BY COUNT(1) DESC) CNT
    4. FROM (
    5. SELECT N1 FROM TABLE_LOTTERY
    6. UNION ALL
    7. SELECT N2 FROM TABLE_LOTTERY
    8. UNION ALL
    9. SELECT N3FROM TABLE_LOTTERY
    10. UNION ALL
    11. SELECT N4 FROM TABLE_LOTTERY
    12. UNION ALL
    13. SELECT N5 FROM TABLE_LOTTERY
    14. UNION ALL
    15. SELECT N6 FROM TABLE_LOTTERY
    16. UNION ALL
    17. SELECT N7 FROM TABLE_LOTTERY
    18. )
    19. GROUP BY N1;
    20. )
    21. WHERE CNT=1;