2013-11-24 3 views
-1

Я изучаю sql в данный момент, и я сталкиваюсь с существованием. Я знаю, что это ясно, и существуют проверки на результат подзапроса, и если результатом является ИСТИННЫЙ внешний запрос, и если он ложный, внешний запрос не запускается. Но я не могу понять, как, где предложение помещается во всем этом и как оно связано с внешним запросом. Пожалуйста, также объясните мне, что именно происходит после того, как условие условия проверяет значение ИСТИНА.Роль предложения where в запросе с использованием существующего условия?

+0

Вы пробовали посмотреть? [Верхняя ссылка в google search для «mysql where exists tutorial»] (http://dev.mysql.com/doc/refman/5.0/en/exists-and-not-exists-subqueries.html) – OGHaza

+0

Это не помогает меня. Посмотрите на один из приведенных здесь примеров SELECT DISTINCT store_type FROM stores WHERE EXISTS (ВЫБРАТЬ * FROM city_stores WHERE cities_stores.store_type = stores.store_type); Я знаю, что существо будет равно TRUE, но какова роль «WHERE cities_stores.store_type = stores.store_type» именно во всем этом. – shivams

+0

Тем не менее, вы просите очень подробное описание того, как работает «WHERE EXISTS». Таким образом, вы определенно не приложили никаких усилий, чтобы разобраться с этим, так как Google немедленно направит вас к сотням учебников по этой теме. – OGHaza

ответ

0

Вот пример того, как EXISTS относится с внешним запросом:

SELECT * 
FROM classes a 
WHERE EXISTS (
    SELECT 1 
    FROM student b 
    WHERE b.a_id = a.id -- Here you relate inner query with outside query 
    ) 

Вы хотите получить записи в классах, где Есть по крайней мере одна записи в студентах таблицы с внешним ключом ид в классов таблицы.

Вы связываете их в ГДЕ внутреннего запроса.

Если в этом классе нет учеников, внешний запрос не вернет этот класс.

+0

'select * from student s1, где не существует (выберите * из ученика s2, где s2.gpa> s1.gpa);' Это запрос, чтобы найти студента с самым высоким gpa.Пожалуйста, объясните, как это работает и как 'where s2.gpa> s1.gpa' влияет на внешний запрос? – shivams

+0

Это довольно просто. Во внешнем запросе вы хотите всех студентов, но затем NOT EXISTS говорит, что вам нужны только записи, в которых никто не имеет gpa больше, чем тот, который у вас есть в вашем внешнем запросе. Если у вас 3 студента с 1,2,3 gpa, для первых двух вы получите по крайней мере одну запись во внутреннем запросе, чтобы внутренний запрос возвращался TRUE. Поскольку у вас НЕ СУЩЕСТВУЕТ, он преобразуется в false, заставляя внешний запрос не возвращать первых двух учеников. –

+0

Большое спасибо. Теперь я понимаю, это выглядит довольно просто. – shivams

Смежные вопросы