SQL使用两个子查询

时间:2017-11-06 01:50:11

标签: mysql sql subquery

我正在学习SQL子查询。这是我在书中使用的子查询:

@implementation DetectTouchWindow

- (void)sendEvent:(UIEvent *)event {
  UITouch *touch = [[event allTouches] anyObject];

  switch ([touch phase]) {
    case UITouchPhaseBegan:
      NSLog(@"Touch Began");
      break;
    case UITouchPhaseMoved:
      NSLog(@"Touch Move");
      break;
    case UITouchPhaseEnded:
      NSLog(@"Touch End");
      break;
    case UITouchPhaseCancelled:
      NSLog(@"Touch Cancelled");
      break;
    default:
      break;
  }

  [super sendEvent:event];
}

@end

结果:

SELECT account_id, product_cd, cust_id
FROM account
WHERE open_branch_id = (
    SELECT branch_id
    FROM branch
    WHERE name = 'Woburn Branch'
) AND open_emp_id IN (
    SELECT emp_id
    FROM employee
    WHERE title = 'Teller' OR title = 'Head Teller'
);

我已经查看了这个查询,试图解释它并理解它以及它的子句背后的推理但是,我无法理解上一个+------------+------------+---------+ | account_id | product_cd | cust_id | +------------+------------+---------+ | 1 | CHK | 1 | | 2 | SAV | 1 | | 3 | CD | 1 | | 4 | CHK | 2 | | 5 | SAV | 2 | | 17 | CD | 7 | | 27 | BUS | 11 | +------------+------------+---------+ 子句AND的原因...... < / p>

我注意到只有

AND open_emp_id IN

您获得与上述相同的结果。任何人都可以向我解释上一个SELECT account_id, product_cd, cust_id FROM account WHERE open_branch_id = ( SELECT branch_id FROM branch WHERE name = 'Woburn Branch' ) 条款背后的原因以及如何省略它会影响最终结果吗?

子查询中使用的表:

帐户表

AND open_emp_id IN

分支表:

+------------+------------+---------+------------+------------+--------------------+--------+----------------+-------------+---------------+-----------------+
| account_id | product_cd | cust_id | open_date  | close_date | last_activity_date | status | open_branch_id | open_emp_id | avail_balance | pending_balance |
+------------+------------+---------+------------+------------+--------------------+--------+----------------+-------------+---------------+-----------------+
|          1 | CHK        |       1 | 2000-01-15 | NULL       | 2005-01-04         | ACTIVE |              2 |          10 |       1057.75 |         1057.75 |
|          2 | SAV        |       1 | 2000-01-15 | NULL       | 2004-12-19         | ACTIVE |              2 |          10 |        500.00 |          500.00 |
|          3 | CD         |       1 | 2004-06-30 | NULL       | 2004-06-30         | ACTIVE |              2 |          10 |       3000.00 |         3000.00 |
|          4 | CHK        |       2 | 2001-03-12 | NULL       | 2004-12-27         | ACTIVE |              2 |          10 |       2258.02 |         2258.02 |
|          5 | SAV        |       2 | 2001-03-12 | NULL       | 2004-12-11         | ACTIVE |              2 |          10 |        200.00 |          200.00 |
|          7 | CHK        |       3 | 2002-11-23 | NULL       | 2004-11-30         | ACTIVE |              3 |          13 |       1057.75 |         1057.75 |
|          8 | MM         |       3 | 2002-12-15 | NULL       | 2004-12-05         | ACTIVE |              3 |          13 |       2212.50 |         2212.50 |
|         10 | CHK        |       4 | 2003-09-12 | NULL       | 2005-01-03         | ACTIVE |              1 |           1 |        534.12 |          534.12 |
|         11 | SAV        |       4 | 2000-01-15 | NULL       | 2004-10-24         | ACTIVE |              1 |           1 |        767.77 |          767.77 |
|         12 | MM         |       4 | 2004-09-30 | NULL       | 2004-11-11         | ACTIVE |              1 |           1 |       5487.09 |         5487.09 |
|         13 | CHK        |       5 | 2004-01-27 | NULL       | 2005-01-05         | ACTIVE |              4 |          16 |       2237.97 |         2897.97 |
|         14 | CHK        |       6 | 2002-08-24 | NULL       | 2004-11-29         | ACTIVE |              1 |           1 |        122.37 |          122.37 |
|         15 | CD         |       6 | 2004-12-28 | NULL       | 2004-12-28         | ACTIVE |              1 |           1 |      10000.00 |        10000.00 |
|         17 | CD         |       7 | 2004-01-12 | NULL       | 2004-01-12         | ACTIVE |              2 |          10 |       5000.00 |         5000.00 |
|         18 | CHK        |       8 | 2001-05-23 | NULL       | 2005-01-03         | ACTIVE |              4 |          16 |       3487.19 |         3487.19 |
|         19 | SAV        |       8 | 2001-05-23 | NULL       | 2004-10-12         | ACTIVE |              4 |          16 |        387.99 |          387.99 |
|         21 | CHK        |       9 | 2003-07-30 | NULL       | 2004-12-15         | ACTIVE |              1 |           1 |        125.67 |          125.67 |
|         22 | MM         |       9 | 2004-10-28 | NULL       | 2004-10-28         | ACTIVE |              1 |           1 |       9345.55 |         9845.55 |
|         23 | CD         |       9 | 2004-06-30 | NULL       | 2004-06-30         | ACTIVE |              1 |           1 |       1500.00 |         1500.00 |
|         24 | CHK        |      10 | 2002-09-30 | NULL       | 2004-12-15         | ACTIVE |              4 |          16 |      23575.12 |        23575.12 |
|         25 | BUS        |      10 | 2002-10-01 | NULL       | 2004-08-28         | ACTIVE |              4 |          16 |          0.00 |            0.00 |
|         27 | BUS        |      11 | 2004-03-22 | NULL       | 2004-11-14         | ACTIVE |              2 |          10 |       9345.55 |         9345.55 |
|         28 | CHK        |      12 | 2003-07-30 | NULL       | 2004-12-15         | ACTIVE |              4 |          16 |      38552.05 |        38552.05 |
|         29 | SBL        |      13 | 2004-02-22 | NULL       | 2004-12-17         | ACTIVE |              3 |          13 |      50000.00 |        50000.00 |
+------------+------------+---------+------------+------------+--------------------+--------+----------------+-------------+---------------+-----------------+

员工表:

+-----------+---------------+----------------------+---------+-------+-------+
| branch_id | name          | address              | city    | state | zip   |
+-----------+---------------+----------------------+---------+-------+-------+
|         1 | Headquarters  | 3882 Main St.        | Waltham | MA    | 02451 |
|         2 | Woburn Branch | 422 Maple St.        | Woburn  | MA    | 01801 |
|         3 | Quincy Branch | 125 Presidential Way | Quincy  | MA    | 02169 |
|         4 | So. NH Branch | 378 Maynard Ln.      | Salem   | NH    | 03079 |
+-----------+---------------+----------------------+---------+-------+-------+

2 个答案:

答案 0 :(得分:2)

AND open_emp_id IN子句仅选择标题为&#39; Teller&#39;的员工ID。或者&#39; Head Teller&#39;。在你的情况下,结果并没有什么不同,因为你正在寻找名为&#39; Woburn Branch&#39;的分支机构,这只是巧合,所有的员工都有标题&#39; Teller&#39;或者&#39; Head Teller&#39;仅

|     10 | Paula    | Roberts   | 2006-07-27 | NULL     |               4 |       1 | Head Teller        |                  2 |

|     11 | Thomas   | Ziegler   | 2004-10-23 | NULL     |              10 |       1 | Teller             |                  2 |

|     12 | Samantha | Jameson   | 2007-01-08 | NULL     |              10 |       1 | Teller             |                  2 |

将分支机构名称更改为&#39; Headquarters&#39;在第一个查询中,您将看到子查询产生的差异。总部的任何员工都在&#39;谁没有头衔&#39; Teller&#39;或者&#39; Head Teller&#39;将被排除在外。

答案 1 :(得分:1)

最后一个AND将选择标准缩小为仅包括由出纳员或总经理打开的帐户。如果贷款经理或运营经理已经开立了该帐户,则会将其排除在外。