实践目标:

    1.学会分解复杂问题的思路

    2.将子查询应用于select语句的where子句的表达规则

    3.单行子查询:用于where子句常用的比较符6个,in可以替代“=”

    4.多行子查询:如果返回多行一列用于where,比较符不能直接6个,用in、>all、any、<any、=any(in)、!=all(not in)

    5.多行子查询:如果返回多行多列值,可看作表,如果表的列是表达式则要取别名,用于from子句,能与其他表连接

    需求说明:

    (1)使用子查询获取“国内短线游”线路信息,按照线路价格升序显示线路编号、线路名和价格。

    1. SELECT l.lineID 线路编号, l.lineName 线路名, l.price 价格
    2. FROM line l
    3. WHERE l.lineTypeID in
    4. -- 1.1 子查询:在linetype表,查询“国内短线游”的lineTypeID
    5. (SELECT lt.lineTypeID
    6. FROM linetype lt
    7. WHERE lt.typeName = '国内短线游')
    8. ORDER BY 价格;

    3.3 任务一查询线路基本信息 - 图1

    **2使用子查询统计“国内短线游线路数量、线路最高价格和线路最低价格**

    1. -- 分析:
    2. -- 2.2 主查询:在line表,依据子查询结果作为条件,用聚合函数获取线路数量、线路最高价格和线路最低价格
    3. SELECT COUNT(lineID) 线路数量, MAX(price) 线路最高价格, MIN(price) 线路最低价格
    4. FROM line l
    5. WHERE l.lineTypeID in
    6. -- 2.1 子查询:在linetype表,获取“国内短线游”lineTypeID
    7. (SELECT lt.lineTypeID
    8. FROM linetype lt
    9. WHERE lt.typeName = '国内短线游');

    3.3 任务一查询线路基本信息 - 图2

    (3)使用子查询获取“国内短线游”以及“国内长线游”线路信息,按照线路类型、线路价格升序显示线路编号、线路名和价格。

    **4使用子查询获取比所有“国内短线游”价格高的线路信息,按照线路类型、线路价格升序显示线路编号、线路名和价格**

    **5)使用子查询获取线路数量超过“出境游线路数的线路类型信息,要求按照线路数升序显示线路类型编号和线路数**

    (6)获取不同类型的线路个数和平均价,要求输出线路类型编号、类型名、线路个数和平均价格,按照线路个数、平均价格升序排列。

    拓展练习:

    (1)使用子查询获取每一种线路类型的线路数及其最高价、最低价,并输出最高价大于2000元的线路信息。要求显示线路类型编号、线路名、线路数、最高价和最低价,要求按照线路数、线路最高价升序排列。

    (2)统计订购“华东五市”线路的订单个数。