SQL QUERY数据读取

时间:2015-02-25 06:26:43

标签: sql

enter image description here

我有两个表国家和用户。我想查看用户已禁用的国家/地区名称。所以我为此写了一个查询。

SELECT DISTINCT cntr_id,cntr_name FROM
    (SELECT  COUNTRY.cntr_id, COUNTRY.cntr_name, USERS.user_enabled,
           USERS.user_name, USERS.user_id
            FROM  COUNTRY INNER JOIN Users 
            ON COUNTRY.cntr_id = USERS.cntr_id
    )

 AS TAB where user_enabled = 0

我的问题是:

  1. 这是内部查询吗?

  2. 在运行外部查询之前,查询是否会从数据库中获取所有国家/地区(包括已启用用户)?

  3. 还有其他方法可供选择吗?

3 个答案:

答案 0 :(得分:0)

要回答你的问题,

  • 是内部和外部两个查询。

  • 内部查询将获取满足连接条件的所有行。

  • 是的,还有其他方法可以选择在内部查询中直接应用过滤器的位置,并删除外部选择。

     SELECT  COUNTRY.cntr_id, COUNTRY.cntr_name, USERS.user_enabled,
       USERS.user_name, USERS.user_id
        FROM  COUNTRY INNER JOIN Users 
        ON COUNTRY.cntr_id = USERS.cntr_id
     WHERE 
         USERS.user_enabled = 0
    

答案 1 :(得分:0)

是的,它是一个内部查询,将获取您需要的内容,但您不需要外部SELECT查询。你可以这样做:

SELECT DISTINCT COUNTRY.cntr_id, COUNTRY.cntr_name
FROM  COUNTRY INNER JOIN Users 
ON COUNTRY.cntr_id = USERS.cntr_id
WHERE USERS.user_enabled = 0

答案 2 :(得分:0)

  1. 是的,这是内部查询。
  2. 是的,内部查询将获取所有国家/地区(包括已启用用户)。外部查询将在以后删除这些记录。
  3. 您不必为此使用外部查询。

    SELECT DISTINCT C.cntr_id, C.cntr_name
    FROM COUNTRY C INNER JOIN 
         Users U ON C.cntr_id = U.cntr_id
    WHERE U.user_enabled=0
    

    SELECT C.cntr_id, C.cntr_name
    FROM COUNTRY C INNER JOIN 
         Users U ON C.cntr_id = U.cntr_id
    WHERE U.user_enabled=0
    GROUP BY C.cntr_id, C.cntr_name