2014-10-23 4 views
1

1: вот SQL-запрос, который я нашел в книгечто ключевое слово, как в SQL действительно указывают

select distinct T.branch_name 
     from branch as T, branch as S 
     where T.assets > S.assets and 
     S.branch_city = 'Brooklyn' 

, что я путаюсь в T и S, как показывают таблицы филиальную право? почему они используют T.assets>S.assets, это то же самое, что и branch.asset > branch.asset. В чем разница.

2: смысл следующего запроса является «Найти всех клиентов, которые имеют счета во всех филиалах, расположенных в Бруклине» question2

Но я не получил его как-то, а также бороться с в Ключевое слово

+0

Запрос дважды принимает одну и ту же таблицу и делает соединение между ними. T и S относятся к одной и той же таблице, но таблица дважды копируется в память для разрешения запроса, поэтому T и S относятся к двум различным копиям в памяти. – sturcotte06

+0

Книга устарела. Избегайте использования стандартного синтаксиса соединения, отличного от ansi. Вместо 'ветви как T, перейдите в S, где T.assets> S.assets' напишите его как' ветвь AS T INNER JOIN branch AS S ON T.assets> S.Assets AND S.branch_city = 'Brooklyn'' – billinkc

+0

@ sturcotte06: он, вероятно, не реализован как копия как таковая, но ее можно логически трактовать как две таблицы, которые имеют те же данные, что и копии. – siride

ответ

2

Think кода, как это:

for (i=0; i<10; ++i) 
    for (j=0; j<10; ++j) 
     print i, j 

Как я и J не может быть то же значение? Легко - они оба переходят по одному и тому же набору значений от 0 до 9, но на каждой итерации цикла каждый из них имеет значение различное значение в пределах этого диапазона целых чисел.

Это похоже на псевдонимы таблиц. Подумайте о соединении, подобном этому вложенному циклу. Каждый раз, когда соединяются две строки, S и T являются именами корреляции (что является техническим термином), которые ссылаются на одну строку за раз в вашей таблице branch.