Sql oracle поиск данных по сравнению. Примеры внедрения независимыми поставщиками ПО. Поддержка независимых поставщиков программного обеспечения

SQL: Операции

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

Операции отличаются от функций тем, что представляются специальными символами, в то время как функции используют следующий формат:

function_name(argument1, argument2, ...)

Большинство операций используют максимально 2 аргумента, структура же функций позволяет использовать три и более.

В каждой приводимой ниже таблице операторы приводятся в порядке убывания старшинства. В нашем обсуждении старшинство - это порядок, в котором операции выполняются. Например, в выражении 1+2*3 сперва 2 умножается на три (результат 6), а затем результат прибавляется к 1 (получая 7), так как умножение выполняется перед сложением. В зависимости от порядка выполнения (т.е. старшинства) ответ может быть 8 или 9. Операторы с одинаковым старшинством группируются вместе.

Арифметические операции

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

Символьные операции

Символьные операции используются в выражениях, работающих с символьными строками. В следующей таблице приводится единственная символьная операция:

В результате конкатенации также получается символьное значение. Символьные строки могут быть длиной максимально 255 символов; это же ограничение относится и к результату конкатенации символьных строк.

Операции сравнения

Операции сравнения применяются в условиях, сравнивающих одно выражение с другим. Как и для всех условий, результат сравнения одного выражения с другим может быть либо TRUE, либо FALSE (См. ниже раздел "Условия"). В следующей таблице приводятся операции сравнения SQL:

Операция Выполняемая функция Пример
() ...NOT(A=1 OR B=1)
= Проверяет на равенство ...WHERE SAL=10000
!=,^=,<> Проверяет на неравенство ...WHERE SAL!=10000
>
<
"Больше чем" и
"меньше чем"
...WHERE SAL>10000
>=
>=
"Больше или равно" и
"меньше или равно"
...WHERE SAL>=10000
IN "Равен любому члену из списка" ...WHERE JOB IN ("CLERK","ANALIST")
Эквивалентен "=ANY" ...WHERE SAL IN (SELECT SAL FROM EMP WHERE DEPTNO=30)
NOT IN Эквивалентен "!=ALL"
Результат FALSE любой элемент из набора NULL
...WHERE SAL NOT IN (SELECT SAL FROM EMP WHERE DEPTNO=30)
ANY Сравнивает значение с каждым значением из списка или запроса. Должен предваряться: =,!=,>,<,<=,>=. ...WHERE SAL=ANY (SELECT SAL FROM EMP WHERE DEPTNO=30)
ALL Сравнивает значение со всеми значениями из списка или запроса. Должен предваряться: =,!=,>,<,<=,>=. ...WHERE (SAL,COMM)>=ALL ((1400,300),(3000,0))
BETWEEN x AND y [Не] больше или равно x и меньше или равно y. WHERE A BETWEEN 1 AND 9
EXISTS TRUE, если запрос возвращает [не возвращает] как минимум одну строку WHERE EXISTS (SELECT SAL FROM EMP WHERE DEPTNO=30)
LIKE "не сопоставляется/сопоставляется со следующим шаблоном". Символ "%" используется для сопоставления с любой строкой из нуля или более символов, кроме NULL - строки, а "_" сопоставляется с любым одиночным символом. Примеры приводятся ниже в разделе "Операция LIKE".
IS NULL "проверка на [не] null. IS должен использоваться для проверки на NULL. WHERE JOB IS NULL
Операция NOT IN

Все строки будут иметь значение false (и ни одной строки не выберется), если какой-нибудь элемент в списке операции NOT IN имеет значение null. Например:

SELECT "TRUE" FROM EMP WHERE DEPTNO NOT IN (5,15,null)

Не возвращает строк, в то время как:

SELECT "TRUE" FROM EMP WHERE DEPTNO NOT IN (5,15)

Вернет значение "TRUE". Первый пример не возвращает строк, потому что:

DEPTNO NOT IN (5,15,null)

Вычисляется как:

DEPTNO !=5 AND DEPTNO !=15 AND DEPTNO != null

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

Логические операции

Логические операции используются для объединения результатов нескольких условий. Оператор AND используется, когда строка должна удовлетворять обоим условиям, OR - одному из условий. Например, в следующей фразе WHERE оператора SELECT операция AND гарантирует, что должны выдаваться только строки с датой приема на работу ранее 1984 года и заработком больше 1000 долларов в месяц:

SELECT * FROM EMP WHERE (HIREDATE 1000)

Следующая таблица представляет логические операции в порядке убывания старшинства:

Операция Выполняемая функция Пример
() Меняет нормальные правила старшинства операций. SELECT...WHERE x=y and (a-b or p=q)
NOT Инвертирует результат логического выражения ...WHERE NOT(JOB IS NULL)
...WHERE NOT(CODE LIKE "T%")
...WHERE NOT(SAL BETWEEN 500 AND 999)
...WHERE NOT(A=1)
AND Устанавливает в TRUE логическое выражение, если оба условия TRUE. ...WHERE A=1 AND B=1
OR Устанавливает в TRUE логическое выражение, если одно из условий TRUE. ...WHERE A=1 OR B=1

Следующие таблицы иллюстрируют результаты операции AND и OR с двумя условиями.

Таблица истинности: AND

AND true false null
true true false null
false false false false
null null false null

Таблица истинности: OR

OR true false null
true true true true
false true false null
null true null null

Операции с множествами объединяют в один результаты нескольких запросов. В следующей таблице в порядке убывания старшинства приводятся SQL - операции над множествами.

Замечание: Если в двух таблицах встречаются дублирующиеся записи, то при использовании множественных операций UNION, MINUS, INTERSECT выдается только одна.

Рисунок 4-3 графически иллюстрирует результаты операций с множествами. Затемненные части показывают результат, возвращаемый ORACLE.

ОПЕРАЦИИ С МНОЖЕСТВАМИ

Другие операции

Ниже описываются другие операции языка SQL:

Операция Выполняемая функция Пример
(+) Указывает, что предыдущий столбец - столбец внешнего объединения WHERE DEPT.DEPTNO=EMP.DEPTNO(+)
* Выбирает в запросе все столбцы из таблиц. Когда предваряется именем таблицы с точкой, запрос выбирает все столбцы этойтаблицы. SELECT * FROM EMP
SELECT EMP.* FROM EMP
COUNT(expr) Возвращает число строк, в которых expr не null. SELECT COUNT(COMM) FROM EMP
COUNT(*) Возвращает число строк в таблице, включая содержащие null. SELECT COUNT(*) FROM EMP
ALL Возвращает дублирующиеся значения в запросах и агрегатах. (ALL - умалчиваемое в отличие от DISTINCT) SELECT ALL * ...
...COUNT(ALL DEPTNO)
DISTINCT Удаляет дублирующиеся строки из запроса или удаляет дублирующиеся значения из агрегатного выражения. DELECT DISTINCT *...
...COUNT(DISTINCT DEPTNO)...
PRIOR Определяет отношение "отец-сын" в древовидном запросе. Выражение в левой части условия (EMPNO) представляет родительскую строку; выражение справа (MGR) представляет строку ребенка. Может использоваться в любой фразе древовидного запроса, а не только в CONNECT BY. CONNECT BY PRIOR EMPNO=MGR

Операция LIKE

Назначение Используется при сравнении символьных строк с помощью шаблонов. Предпосылки Нет. Синтаксис SELECT .... WHERE char LIKE pattern Ключевые слова char выражение с типом данных CHAR. и параметры Строчные литералы должны заключаться в одиночные кавычки. Обратитесь к описанию expr ранее в этой главе и text в Главе 3 данного руководства. pattern выражение с типом данных CHAR, в котором используются специальные символы сопоставления с шаблоном (% и _). Замечания по использованию

Когда Вы применяете операцию "=" для точного сравнения одной символьной строки с другой, на самом деле Вы используете операцию LIKE для сравнения части одной строки с другой.

В фразе LIKE вы должны сравнить столбец с шаблоном, а не с константой. Столбец специфицируется перед ключевым словом LIKE. Например, Вы должны ввести такой запрос: SELECT SAL FROM EMP WHERE ENAME LIKE "BL%" вместо любого из следующих запросов: SELECT SAL FROM EMP WHERE ENAME = "BL%" SELECT SAL FROM EMP WHERE "BL%" LIKE ENAME

Символьный шаблон может включать в себя два специальных символа, с которыми можно сопоставлять различные символы в значении данных. Символ подчеркивания "_" используется для сравнения ровно одного символа, а знак процента "%" - для сравнения нуля и более символов. Заметьте однако, что строка "%" не может сопоставляться с NULL.

Во всех условиях, сравнивающих символьные выражения, включая операции LIKE и =, регистр имеет значение. Для выполнения регистронезависимого сравнения можно воспользоваться функцией UPPER(), например:

UPPER(ENAME) LIKE UPPER("sm%")

LIKE можно использовать в любом логическом выражении, работающем с данными типа CHAR. Если LIKE используется для поиска индексированного столбца по шаблону, преимущества индекса в скорости теряются, если первый символ в шаблоне "%" или "_". Если же это не так, то преимущества индекса почти полностью сохраняются, так как ORACLE может ограничить сравниваемые строки теми, которые начинаются с известного символа.

Сами символы "%" и "_" можно отыскивать с помощью функции TRANSLATE. Например, для поиска всех служащих, содержащих в имени символ подчеркивания, надо ввести:

SELECT ENAME FROM EMP WHERE TRANSLATE(ENAME,"_","#") LIKE "%#%"

Предыдущий пример использует функцию TRANSLATE для преобразования "_" в "#". Он вернет всех служащих, содержащих в имени #.

Примеры

Условие ENAME LIKE "BL%" означает "Вернуть TRUE, если значение ENAME начинается с BL, а далее следует ноль или более символов". Все перечисленные ниже значения приведут к выдаче TRUE: BLAKE, BL, BLACK, BLUE

Регистр здесь играет важную роль, так что значения Bl и bl возвратят FALSE. Для условия ENAME LIKE "SMITH_" верны следующие значения: SMITHE, SMITHY, SMITHS, но не верно значение SMITH, потому что шаблон "_" означает сопоставление в точности с одним символом.

Сравнение популярных СУБД

Появившись в 1980 году, реляционные базы данных (СУРБД) очень быстро стали фактическим стандартом управления массивами данных. Как следует из названия, в основе этих систем лежит реляционная модель организации данных, что подразумевает существование табличных групп, состоящих из отдельных, связанных между собой, таблиц.

Данная статья предлагает сравнительный обзор особенностей трех наиболее популярных СУРБД: Oracle, MySQL и SQL Server. Такое сравнение может оказаться существенным подспорьем при подборе под конкретные проекты.

Сравнительная таблица общих характеристик

Данная таблица содержит общие характеристики СУРБД Oracle, MySQL и SQL Server

Характеристика Oracle MySQL SQL
Server
Интерфейс GUI, SQL SQL GUI, SQL, другое
Поддержка языков С, С++, Java, Ruby, Objective С и
др.
С, С++, Java, Ruby, Objective С и др. Java, Ruby, Python, VB, .Net, PHP
Операционная система Windows, Linux, Solaris, HP-UX, OS X, z/OS, AIX Windows, Linux, OS X, FreeBSD, Solaris Windows
Лицензия Проприетарная Свободная Проприетарная

Oracle

Первым «настоящим» выпуском СУРБД Oracle стал Oracle 2. Система была написана на ассемблере и поддерживала только базовые свойства SQL. Все последующие 11 лет Oracle занималась тем, что выпускала обновления для этого флагманского продукта.

Вероятно, одной из причин, почему СУРБД Oracle так долго удерживала лидерство среди мощных корпоративных СУРБД, было то, что все ее апдейты оказались тесно связанными с удовлетворением насущных потребностей рынка.

Все эти жаргонизмы мира баз данных, такие как «масштабируемая», «распределенная», «программируемая», «переносимая», также тесно связаны с линейкой продуктов Oracle. Например, в 1985 году, в связи с возросшей ролью сетевых коммуникаций, в СУРБД Oracle была добавлена поддержка клиент-серверной модели, а с наступлением Эры Интернет, продукты Oracle стали включать в себя собственную виртуальную машину Java (JVM).

Особенности

В результате релиз первой в мире облачной базы данных Oracle Database 12c (2013 г), обладал уже следующими особенностями:

  • Улучшенный алгоритм защиты чувствительных данных
  • Улучшенное сжатие данных
  • Высокая плотность консолидации данных
  • Максимальная доступность
  • Автоматическая оптимизация данных
  • Средства быстрой разработки веб-приложений с помощью SQL и/или PL/SQL
  • Улучшенная сетевая производительность

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

Microsoft SQL Server

Компания Microsoft вышла на рынок СУРБД в середине 90-х в содружестве с компанией Sybase, у которой Microsoft и приобрела этот одноименный продукт. В дальнейшем обе компании совместно трудились над разработками для платформы IBM OS/2.

Однако, с появлением Windows NT, связи Microsoft и Sybase были разорваны, так как Microsoft хотела самостоятельно разрабатывать СУРБД для своей новой ОС.

В 2000 году вышел релиз SQL Server 2000, который ознаменовал собой важную веху, поскольку это был первый продукт, в котором полностью отсутствовал код Sybase.

Особенности

Последним релизом SQL Server является SQL Server 2014 в котором Microsoft предлагает:

  • Новые технологии работы с памятью
  • Улучшенную производительность
  • Гибридные облачные решения
  • Улучшенную бизнес-аналитику
  • Резервное копирование старых версий в облачное хранилище

MySQL

Огромным преимуществом MySQL, сравнительно с проприетарными продуктами, является открытость ее исходного кода. Согласно маркетинговым отчетам, на сегодняшний день существует более 10 миллионов инсталляций MySQL, что является показателем ее стремительного вхождения в корпоративный сектор.

Особенности

Такие системы, как Oracle и SQL Server, являются крупными корпоративными СУРБД, в то время как MySQL предназначена для поддержки малых и средних проектов. Обновления MySQL выходят практически каждый год.

Поворотным для MySQL оказался 2010 год, когда увидела свет MySQL 5.5, обладающая рядом значительных улучшений сравнительно с предыдущими выпусками, а именно:

  • Наличие движка InnoDB
  • Полусинхронная репликация
  • Улучшенный механизм секционирования данных
  • Новая система блокировок
  • Оптимизация под многоядерные процессоры

Заключение

Сравнение демонстрирует, что все три СУРБД по своим ключевым параметрам весьма схожи. Трудно ответить на вопрос, какая из них лучшая, да это и не нужно - СУРБД следует подбирать, исходя из требований собственного проекта, а не руководствуясь абстрактными показателями производительности и эффективности.


Oracle и MS SQL Server – де-факто стандарты СУБД корпоративного уровня. У каждой из них имеются свои преданные сторонники и ярые противники. Обе СУБД выполняют примерно одинаковые задачи для примерно одинаковых пользователей и управляются примерно одинаковыми dba . В чём же разница? Далее в этом посте предлагаю экспресс-сравнение функциональности Oracle и SQL Server , пусть достаточно поверхностное и без залезания в глубокие дебри на уровень "прожжёных админов", зато пригодное для начального сопоставления.

Оба продукта развиваются, правят косяки, реализуют удачные фичи и пр. Так что, по правде говоря, сравнивать можно только конкретные версии/редакции (2k 5 vs. 10g , 2k 8 vs. 11g ). И всё-таки, если попытаться обращать внимание только на самые обобщённые характеристики...


    SQL Server работает только на windows (зато может сосредоточиться именно на этой связке СУБД – ОС). Oracle же выпускает версии для разных платформ (windows , linux , solaris , solaris sparc , aix , hp-ux itanium , hp-ux pa-risc , z/linux , z/os , mac os ), что означает возможность использовать бесплатные ОС для серверов СУБД.

    Обе СУБД поддерживают файловые системы и СХД. Но у oracle есть один очень классный инструмент – automatic storage management . Фишка в том, что oracle -dba приходится вникать в особенности файловых систем тех ОС, на которых разворачивается СУБД. Чтобы помочь ему, asm скрывает в себе такие особенности и позволяет работать в стандартном и привычном oracle -окружении (в том числе с помощью sql ). Фактически, asm "у можно сказать "вот есть массив неотформатированных дисков, ты будешь работать с ним", и asm самостоятельно отформатирует диски, разместит на них данные и будет ими управлять. Причём – по субъективным ощущениям – получится гораздо эффективнее, чем управление "вручную" (один коллега, участвовавший в курсах по администрированию oracle, признался, что сами тренеры не особенно представляют, как этот asm работает "внутри").

    С портами всё ясно – обе СУБД имеют стандартные порты и могут быть настроены на использование другого значения, отличного от дефолтного. В sql server имеется также возможность запуска инстанса на случайном, динамически выделяемом порту (чтобы узнать этот порт, клиенту потребуется обратиться к СУБД по 1434).

    Что касается базовых сервисов (в windows ). MSSQLSERVER – самая главная служба одноимённой СУБД, обеспечивает хранение данных, их обработку и управление доступом. SQLServerAgent осуществляет планирование и исполнение заданий, оповещений, извещений и планов обслуживания базы данных. В oracle основных служб также две: OracleService и . Первая служба обеспечивает функциональность БД (за исключением разного рода надстроек, аналитики и т.д.), вторая – это диспетчер подключений. Есть важная особенность – при остановке или поломке TNSListener -а все активные подключения продолжают работать.

    По разграничению прав доступа также есть интересное отличие. Если в ms sql server пользователю дать права администратора, то он может выполнять любые операции, в т. ч. – передать такие же права dba другому пользователю. В oracle же возможны два варианта – передача прав with grant option (с разрешением дальнейшей передачи прав) и без такого разрешения.

    Также интересные моменты касаются соответствия терминов.

      С инстансом понятно – это экземпляр СУБД, установленный на сервере. В sql server он имеет имя, по которому можно к нему обратиться (тут ещё такая фишка, как возможность использовать неименованный инстанс – когда на сервер устанавливается только один экземпляр этой СУБД, то он получает дефолтное имя, и обращаться к СУБД можно без указания такого имени). В oracle каждый инстанс имеет SID , который указывать обязательно.

      А вот с базой и схемой дела обстоят сложнее. Пользователи sql server привыкли к тому, что база данных – это какое-то хранилище для размещения таблиц, процедур, представлений и прочих объектов, к которому они могут получить доступ; и что на одной СУБД может быть любое количество баз данных. И когда такие пользователи приходят к oracle -dba и просят "сделать им базу данных", админы сильно пугаются. Ведь в oracle база данных – это фактически инстанс. А вот "хранилищу для размещения... объктов, к которому... могут получить доступ" соответствует понятие "схема".

    Далее – соответствие состояний. Фактически sql server либо работает (служба MSSQLSERVER успешно стартовала), либо нет. В oracle же целый набор состояний:

      не работает – все службы остановлены;

      смонтирован (mount ) – особенное состояние, в которое СУБД может перейти сама (при каких-то проблемах), либо в которое её может перевести администратор. В какой-то мере это безопасный режим, в котором можно изменять критические параметры конфигурации СУБД. Естественно, в этом состоянии СУБД не обслуживает пользователей;

    • запущен и работает, обслуживает старые подключения и не принимает новые. В этом состоянии запущена служба OracleService и остановлена OracleTNSListener . Иногда бывает так, что разработчик Вася никак не может соединиться с СУБД и громко ругается, в то время как разработчик Коля отлично работает с ней же – причина такой ситуации зачастую кроется в том, что Коля уже давно установил соединение, затем была отключена служба TNSListener , и новое соединение от Васи не принимается;
    • запущена и работает в полной мере (запущены обе службы).

    Обе СУБД используются свои диалекты языка запросов. И хотя они основаны на одном и том же стандарте ansi sql , диалекты получились разные, а многие их функции – специфичными и несовместимыми. Следует отметить, что PL/SQL мощнее T-SQL .

    Для управления sql server используется management studio – большой и полноценный клиент, достаточный для выполнения подавляющего большинства операций любого уровня – от простого пользователя до администратора. В свою очередь из-за обилия платформ oracle предлагает web -консоли для работы и администрирования СУБД.

Представленное сравнение не претендует на полноту и абсолютную достоверность, а специфичных моментов перечислено всего несколько, выбранных субъективно. Но надеюсь, что и в таком виде информация будет полезной. Если есть желание добавить - u r welcome !

SELECT

Основы запросов SELECT в Oracle SQL, базовый синтаксис запросов, список столбцов, псевдонимы и литералы, оператор q", ключевое слово DISTINCT

Основное средство для получения информации из базы данных - это запросы, то есть команда SELECT . Базовые возможности этой команды будут рассмотрены в этом разделе, другие, более сложные возможности - в следующих разделах. В каждом разделе будут указываться отличия по сравнению с аналогичными возможностями в Microsoft SQL Server .

Поскольку во всех главных базах данных поддерживается стандарт ANSI SQL , то базовые возможности и в Oracle , и в других базах данных (Microsoft SQL Server , IBM DB 2, Informix , Sybase , Microsoft Access ) будут схожи. Отличия - в частностях, которые стандарт SQL не определяет, но которые довольно существенны, и которые могут привести к сложностям для пользователей, которые привыкли создавать запросы к другим базам данных.

Базовый синтаксис команды SELECT в Oracle выглядит следующим образом:

SELECT [ DISTINCT ] список_столбцов FROM источник WHERE фильтр ORDER BY выражение_сортировки

Приведем пример такого запроса:

SELECT employee_id, first_name, last_name, hire_date FROM hr.employees WHERE hire_date < "01.01.2000" ORDER BY last_name

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

SELECT * FROM hr.employees WHERE hire_date < "01.01.2000" ORDER BY last_name

Выводимое имя столбца можно поменять при помощи псевдонима (alias ). Для этого достаточно просто написать имя пседвонима сразу после названия столбца или использовать ключевое слово AS (оба синтаксиса полностью равнозначны):

SELECT last_name Фамилия FROM hr.employees

SELECT last_name AS Фамилия FROM hr.employees

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

SELECT last_name AS Фамилия, salary*12 AS "Зарплата за год" FROM hr.employees

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

Отметим и некоторые особенности, связанные со списком столбцов в Oracle . Если в SQL Server "проблемные" имена столбцов (с пробелами и зарезервированными словами) можно было помещать в квадратные скобки (а обычно и в двойные кавычки - в зависимости от настроек сеанса), то в Oracle и тот, и другой вариант вызовет ошибку.

В список столбцов в Oracle можно включать литералы (literals ). Литералы - это любое строковое значение, дата или число, которое помещается в список столбцов и при этом не является ни названием столбца, ни псевдонимом. Литералы будут повторяться для каждого возвращаемого столбца. Обычно они используются для создания пояснений в возвращаемом наборе результатов:

SELECT last_name AS Фамилия, "Зарплата за год: " , salary*12 FROM hr.employees

В этом примере "Зарплата за год: " - это литерал, который будет выводиться для каждой записи.

Строковые литералы и литералы с датой должны заключаться в одинарные кавычки. Литералы в виде числовых значений в кавычки не помещаются.

Отметим, что литералы часто сливаются в выводимых результатах с возвращаемыми из базы данных значениями при помощи оператора конкатенации (||). Про операторы Oracle будет рассказываться в разделах 2.2 , 2.3 , .

При работе с литералами иногда возникает проблема, связанная с тем, что литерал сам по себе может содержать зарезервированный символ, например, одинарные кавычки. Oracle , в отличие, например, от SQL Server , позволяет пользователю самостоятельно определять символ, который будет использоваться в качестве кавычек. Выглядеть такое переопределение может. например, так:

select department _ name , q "[ It " s assigned manager ID : ]" , manager _ id from departments

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

Отметим некоторые особенности применения оператора q ":

  • можно использовать как строчную букву q , так и заглавную (Q) ;
  • после q должна идти обычная одинарная кавычка. Следующая одинарная кавчка определяет завершение области действия оператора q ;
  • сразу после одинарной кавычкой должен идти символ, выбранный пользователем для применения в качестве кавычек. Этот символ может быть любым, за исключением пробела, перевода строки или табуляции (в том числе и одинарная кавычка). Если пользователь выбрал символ (, {, [ или <, то закрываться кавычки должны соответствующим символом), }, ] и >. В других случаях закрытие кавычек производится при помощи того же символа, который использовался для их открытия.

И последний момент, связанный с базовым синтаксисом запросов. По умолчанию запрос возвращает из базы данных все значения, соответствующие параметрам запроса, даже если некоторые из возвращаемых значений будут полностью одинаковыми. Например, запрос

SELECT salary FROM hr . employees

вернет 107 строк, несмотря на то, что значительная часть значений будет повторяться.

Чтобы вернуть только уникальные значения (или наборы значений, если возвращается несколько столбцов), в запросе можно использовать ключевое слово DISTINCT :

SELECT DISTINCT salary FROM hr.employees

Такой запрос вернет уже 57 значений, при этом все значения будут уникальными.

Отличительной особенностью Oracle является то, что вместо DISTINCT можно использовать ключевое слово UNIQUE . SQL Server такого не позволяет.




Top