Oracle SQL размещение оператора where в запросе простого соединения - PullRequest
0 голосов
/ 23 апреля 2020

этот запрос не работает -

select userprofile.username, userprofile.deskid , desk.deskname
from userprofile 
where userprofile.username in ('user1', 'user2', "user3')
inner join desk on userprofile.deskid = desk.deskid 

этот запрос не выполняет - ничего не изменилось, все, что я обнаружил, это изменило порядок составных частей оператора запроса. Это было связано с положением предложения where

select userprofile.username, userprofile.deskid , desk.deskname
from userprofile 
inner join desk on userprofile.deskid = desk.deskid 
where userprofile.username in ('user1', 'user2', 'user3')

Я не совсем понимаю, почему помещение оператора where в конец запроса исправило вывод.

1 Ответ

1 голос
/ 23 апреля 2020

В синтаксисе SQL есть некоторые вещи, которые вы не понимаете.

Оператор SELECT состоит из набора предложений в фиксированном порядке. Наиболее распространенные пункты:

  • SELECT
  • FROM
  • WHERE
  • GROUP BY
  • HAVING
  • ORDER BY

Порядок фиксирован. Предложение WHERE (если присутствует) всегда следует за предложением FROM. JOIN - это оператор , распознаваемый в предложении FROM. Это не пункт, поэтому ваша первая версия не работает.

У меня довольно строгая политика отступов для любого запроса, который я пишу. Я всегда выравнивал пункты по левому краю и обычно помещал операторы в end строки. Вот почему я написал бы запрос следующим образом:

select u.username, u.deskid, d.deskname
from userprofile u join
     desk d
     on u.deskid = d.deskid 
where u.username in ('user1', 'user2', 'user3')

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...