Новичок в SQL и нуждается в некоторых советах с запросами

#sql

#sql

Вопрос:

Недавно я начал изучать SQL, но, похоже, не могу разобраться в создании операторов SQL, которые формируют соответствующие результаты из нескольких таблиц / отношений.

Учитывая следующую схему:

 Account(accNumber, balance, type)
Branch(BSB, phone, streetAddress, town)
registered(accNumber*, BSB*)
  

Я пытаюсь сформулировать некоторые выводы:
Перечислите все номера, зарегистрированные в определенном BSB (123), и покажите его указанный город (Сидней).

Я попробовал следующий оператор для первого запроса:

 SELECT accNumber, BSB, town
FROM ACCOUNT, BRANCH
WHERE BSB = 123;
  

Тем не менее, я получаю список всех учетных записей, даже если они не принадлежат BSB, поэтому я попытался:

 SELECT accNumber, BSB, town
FROM ACCOUNT, BRANCH
WHERE BSB = 123
AND Town = 'Sydney'
AND account.accNumber=registered.accNumber
AND branch.bsb=registered.bsb;
  

На этот раз я получаю неоднозначное определение столбца, потому что они имеют одинаковое имя в таблице «registered».

Я попытался создать псевдоним в статусе выбора, т.Е. AccNumber КАК ACCOUNT_NUMBER и т. Д., Но все равно получаю неоднозначно определенные ошибки.

Я попытался просто перечислить то, что было в зарегистрированной таблице, но тогда я не получаю название города, только AccNumber и BSB, переданные в качестве внешнего ключа.

Кажется, я не могу понять, как извлекать данные из других таблиц и правильно их отображать, и был бы очень признателен за любые советы!

Комментарии:

1. Вы должны использовать join оператор вместо запятых в своем from предложении, и тогда это не будет проблемой. Ваш второй пример ссылается registered на то, что не отображается в вашем from предложении…

Ответ №1:

Это может помочь вам начать.

 SELECT a.ccNumber, b.BSB, c.town
FROM ACCOUNT as a
inner join registered as b on b.accNumber=a.accNumber
inner join BRANCH as c on c.bsb = b.bsb 
WHERE b.BSB = 123
  AND c.Town = 'Sydney'  
  

Комментарии:

1. Спасибо за помощь, Ахмед, теперь я вижу, что я выполнял условие до объединения, но по какой-то причине Orcacle выдает ошибку с вашим заявлением: Ошибка SQL: ORA-00933: команда SQL неправильно завершена 00933. 00000 — «Команда SQL неправильно завершена» * Причина: * Действие: яперед тем, как попробовать, разместил; после вашего утверждения, так что это не проблема с точкой с запятой: (

2. между a. и числом неправильно добавлен пробел, я его удалю. пожалуйста, попробуйте сейчас.

Ответ №2:

Итак, это звучит как общий вопрос SQL. Для вашего запроса вот на что вы смотрите:

 select a.account_number
  from account a, brance b, registered r
  where a.account_number = r.account_number and
        a.bsb = b.bsb and
        b.bsb = 123;
  

Это даст вам все номера учетных записей из таблицы учетных записей, которые находятся в BSB 123. Когда у вас есть несколько таблиц с одним и тем же столбцом, вам нужно сообщить Oracle (и любой базе данных, если на то пошло), на какой столбец «account_number» вы ссылаетесь (поскольку в противном случае это неоднозначно, поскольку существует несколько таблиц, содержащих столбец account_number).

SQL — это таблицы и объединения. Иногда вам приходится объединять несколько таблиц, чтобы получить то, что вам нужно, как указано выше. Если вы не объединяете таблицы, как вы делали изначально, вы получите «перекрестный продукт», а это не то, что вы хотите.

Я знаю, что это очень «легкий», но, надеюсь, из приведенного выше ответа на ваш вопрос вы получите некоторое представление о том, как это сделать.

Я был бы рад помочь вам больше, если у вас есть вопросы. Каждый новичок в SQL в какой-то момент. Не расстраивайтесь по этому поводу. Это требует практики, а затем становится намного проще.

-Джим

Комментарии:

1. Спасибо allot за помощь и поддержку, Джим, я смог получить желаемый результат с некоторыми незначительными изменениями в этом коде (я просто включил AccNumber, BSB и город в первой строке, чтобы увидеть 3 столбца вместо одного) Из справки каждого я немного больше понимаю опорядок обработки при создании операторов и могу видеть, что у меня было мое условие до моего типа соединения. Еще раз спасибо.