2015-08-27 4 views
0

Когда я пытаюсь выполнить эту команду, она не выполняется.Отношения между оператором и оператором запятой в оракуле?

select * from emp order by deptno asc and job desc; 

Но когда я выполняю следующую команду, он отлично работает.

select * from emp order by deptno asc,job desc; 

Может ли кто-нибудь объяснить мне, почему «и» не работает, и «работает»?

+1

Пройдите через ссылку http://docs.oracle.com/html/A95915_01/sqopr.htm – Buddi

+0

Я все еще не мог получить причину, работать и не работать. –

+1

Запятая в этом контексте является * не * оператором. Вот и все. –

ответ

4

В основном and является логическим оператором, он проверяет, что-то = что-то and something-else = something-else. Например, and вернет true или false.

Запятая просто находится между несколькими вещами в заявлении. Нельзя возвращать истину или ложь при заказе (asc или desc) ваших результатов - это просто заказывает их, и все.

+0

есть, оператор? Если да, то как его зовут? –

+0

Хм, это сложный вопрос, и я определенно не эксперт. Я бы лично сказал «нет», но я думаю, что комментарий Алдораса выше дает отличное объяснение. Согласно Oracle: «Оператор манипулирует отдельными элементами данных и возвращает результат». - Я не вижу запятую, манипулируя данными. – 100pic

2

AND Используется для фильтрации записей, основанных на более чем одном условии.

ORDER BY Используется для сортировки записей, заданных одним или несколькими столбцами.

Основное различие, и причина, почему ваша первая линия не работает, то, что order by columnName является НЕ состояние и, следовательно, вы не можете присоединиться к ним с AND.

Вот хорошее объяснение с некоторыми ПРИМЕРЫ W3Schools-Order_By

+0

есть, оператор? Если да, то как его зовут? –

+0

Я бы сказал, что это оператор. Comma ',' используется для разделения двух или более аргументов предыдущих ключевых слов. Например, 'select * from Table1, Table2, Table3' или' SELECT * FROM Customers ORDER BY Country ASC, CustomerName DESC; 'Очевидно, что вы не можете использовать это с' AND', потому что ему нужны ровно 2 логических условия. – Aldoras

2

Может кто-нибудь объяснить мне, почему «и» не работает и «» работает?

Поскольку ORDER BY может иметь лист из столбцов, псевдонимы, эталонные на позиции, функции или выражения. И когда я говорю список, это похоже на список SELECT или IN, сгенерированный значениями, разделенными запятыми. Это базовый синтаксис .

В основном, , или запятой является сепаратор в списке. И это условие , который может быть частью выражения в ORDER BYсписке, но не в качестве сепаратора в себе.

OR - separator 
AND - condition 

Из документации о SQL Conditions,

Цель и условие конъюнкции.

Например,

ORDER BY 
CASE 
    WHEN empno = 1234 
    AND deptno =10 -- AND is a part of the expression 
     THEN 0 
    ELSE 1 
END, -- comma as separator in the ORDER BY list 
id DESC 
3

order by clause является список выражений:

Вы можете указать несколько выражений в order_by_clause. Oracle Database сначала сортирует строки на основе их значений для первого выражения. Строки с одинаковым значением для первого выражения затем сортируются на основе их значений для второго выражения и т. Д.

И expression list разделено запятой. Я бы назвал запятую разделителем, а не оператором.

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

На английском, а не на SQL, не было бы различия между «order by x и y» и «order by y and x`. Как человек, вы можете считать, что имеется в виду, и что они разные; но компьютер (или, по крайней мере, SQL-парсер) будет следовать различным правилам интерпретации.

Чтобы быть явным на английском языке вы можете сказать: «упорядочить по й тому у», потому что тогда действительно подразумевает порядок оценки, и нет. SQL не понимает THEN в этом контексте. Условие order by, как состояние документов, добавляет порядок оценки к его интерпретации списка выражений.

+0

Теоретически, если Oracle SQL поддерживает логические значения, можно сказать, что «order by is_customer и is_live asc, created_at desc» Я думаю, –

+0

@DavidAldridge - если вы определили либо true, либо false как «более высокий», чем другой; но у вас все еще есть одно выражение - действительно ли это отличается от примера выражения примера Lalit? «И» все еще не заменяют запятую? (Хотя, возможно, это было не ваше дело ... просто чтобы вы могли сделать что-то, что * выглядело *, как то, что пытался сделать OP ...) –

+0

Нет, это не моя точка :) Только в альтернативной юниверсе можно было бы получить И в порядке. –

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