Структура языка SQL. 5

Основные данные о работе

Версия шаблона

2.1

Филиал

Калужский

Вид работы

Курсовая работа

Название дисциплины

Базы данных

Тема

Структура языка SQL

Фамилия студента

Коляскин

Имя студента

Максим

Отчество студента

Сергеевич

№ контракта

06400100601007


 

 

 

Содержание

Введение 3

Основная часть 6

1 Язык sql - основные функции и возможности 6

1.1 История языка SQL 6

1.2 Стандартизация управления и обмена данными 9

2 Структура языка sql 14

2.1 таблицы sql 14

2.2 структура запросов sql 15

2.3 операторы sql 21

2.4 транзакции в sql 27

Заключение 29

глоссарий 31

Список использованных источников 33

 

 

 

Введение

Одним из ключевых положительных  сторон реляционного подхода к организации  баз этих (БД) будет то, собственно пользователи реляционных БД получают вероятность успешной работы в определениях обычных и приятных понятий таблиц, их строк и столбцов в отсутствии необходимости познания настоящей  организации данных во внешней памяти.

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

Базисным требованием  к реляционным СУБД считается  присутствие сильного и в это  же время простого языка, дозволяющего исполнять все нужные пользователям  операции. В в последнее время этим везде где только можно принятым языком стал язык реляционных БД SQL - Structured Query Language (сейчас регулярно название языка понимается как Standard Query Language) .

До выхода в свет SQL в  СУБД (вне зависимости от того, на какой модели они базировались) приходилось  поддерживать как минимум три  языка, которые обыкновенно имели  слишком мало единого: язык определения  данных (ЯОД), служащий для спецификации текстур БД (обыкновенно единую текстуру БД именуют схемой БД); язык манипулирования  данными (ЯМД), дозволяющий создавать  прикладные программы, взаимодействующие  с БД; и язык администрирования БД (ЯАДБ), при помощи которого можно было скрупулезно исполнять служебные действия (к примеру, изменять структуру БД или же производить ее настройку имея цель увеличения производительности). Помимо всего этого, коль скоро требовалось дать юзерам СУБД интерактивный доступ к БД, приходилось вводить еще один язык, операторы которого производятся в диалоговом режиме. Язык SQL дозволяет решать все эти задачи.

Следует отметить, что к  плюсам языка SQL относится присутствие  интернациональных стандартов. Первый международный стандарт был принят в 1989 г., и подходящая версия языка  называется SQL-89. Данный эталон всецело  поддерживается практически во всех прогрессивных коммерческих реляционных  СУБД (к примеру, в Informix, Sybase, Ingres, DB2 и т.п.). Стандарт SQL-89 во множества долях имеет очень единый характер и дозволяет слишком обширное трактование. В данном стандарте полностью отсутствуют такие актуальные сегменты, как манипулирование схемой БД и динамический SQL. Почти все весомые аспекты языка согласно со стандартом определяются в реализации.

Вполне вероятно, более  главными достижениями стандарта SQL-89 считаются точная стандартизация синтаксиса и семантики операторов выборки  и манипулирования данными и  фиксация средств лимитирования целостности БД, включающих способности определения изначального и наружных ключей взаимоотношений и так именуемых проверочных ограничений целостности, дозволяющих сконструировать условие для любой отдельной строчки таблицы. Средства определения наружных ключей позволяют просто формулировать требования так именуемой целостности БД по ссылкам. Формулировка ограничений целостности на основе понятия внешнего ключа несложна и понятна.

Осознавая неполноту стандарта SQL-89, на фоне окончания разработки данного  стандарта эксперты разных компаний начали работу над стандартом SQL2. Данная работа помимо прочего длилась большое  количество лет, было выпущено немного  проектов стандарта, пока же, в конце  концов, в начале марта 1992 г. не был  выработан конечный проект стандарта (после этого стандарт и соответствующий  язык стали именовать SQL-92). Данный стандарт значимо более полный и охватывает почти что все необходимые для реализации аспекты: манипулирование схемой БД, управление транзакциями и сессиями (сессия - это последовательность транзакций, в пределах которой сохраняются кратковременные отношения), подключение к БД, динамический SQL. В конце концов стандартизованы отношения-каталоги БД, собственно в общем-то не связано с языком непосредственно, хотя довольно в значительной степени влияет на реализацию. Заметим, что в стандарте представлены три уровня языка - базовый, промежуточный и полный. На протяжении пары лет после принятия стандарта производители СУБД, утверждавшие совместимость личных продуктов со стандартом, действительно в лучшем случае поддерживали промежуточный уровень языка SQL-92 (естественно, с собственными расширениями). Исключительно в последних выпусках СУБД ведущих производителей поддерживается совместимость с полным вариантом языка. В конце концов, сразу с завершением работ по определению стандарта SQL-92 была начата разработка стандарта SQL3. Совокупной позицией основных производителей СУБД будет то, что будущие продукты, обладая более развитыми возможностями, должны быть совместимы с предыдущими выпусками. Хотя почти все разработчики и пользователи реляционных СУБД понимают присутствие множества неустранимых дефектов языка SQL, от него сейчас уже невозможно отказаться (как нельзя отказаться от применения языка Си в процедурном программировании). Значит, необходим новый стандарт языка, обеспечивающий эти неоспоримо нужные возможности как характеризуемые пользователями разновидности данных, наиболее развитые средства определения таблиц, наличие полного механизма триггеров и так далее Необходим именно стандарт, а не наличие развитых приватных версий языка, так как данное интересно и производителям и пользователям СУБД.

 

Основная часть

1 Язык SQL – основные функции и возможности

1.1 История развития языка SQL

Основные вехи истории развития SQL:

Работа была начата сразу  после появления статью Э.Кодда в 1970г. в лабораториях компании IBM для проверки возможностей реляционной модели.

СУБД System R - экспериментальная исследовательская система с языком SEQUEL (позже SQL), созданная IBM:

  • Полный реляционный язык БД
  • Операторы манипулирования БД
  • Средства определения и манипулирования схемой БД
  • Определение ограничений целостности
  • Определение представлений
  • Определение индексов
  • Авторизация доступа к отношениям и их полям
  • Точки сохранения транзакций и откаты

SQL в коммерческих реализациях:

1979 - Oracle (Relation Software Inc.- Oracle corp.;

1981-1982 - DB2 (IBM), Ingres - CA-OpenIngres (Relation Technology Inc. - Computer Associates)

1984 - Informix (Informix Sofrware);

1986 - Sybase (Sybase Corp.)

  • Реализован во всех коммерческих реляционных СУБД
  • Все фирмы провозглашают соответствие стандарту SQL
  • Реализованные диалекты очень близки
  • Путь "сверху вниз" - уточнение и упрощение SQL System R
  • Путь "снизу вверх" - от диалектов реализации различных фирм (наращивание возможностей, обычное отсутствие полного описания языка)

Стандартизация SQL:

  • Все фирмы провозглашают соответствие стандарту SQL
  • Реализованные диалекты очень близки
  • Деятельность началась одновременно с появлением первых коммерческих реализаций
  • В качестве стандарта нельзя было использовать SQL System R(не было технической проработки, слишком сложно реализовать)
  • Нельзя было принять за стандарт коммерческий диалект (слишком различались)

Международный стандарт 1989 г.

  • Во многих частях имеет чрезвычайно общий характер и допускает очень широкое толкование
  • Отсутствуют важные разделы (манипулирование схемой БД, динамический SQL, многое определяется в реализации)
  • Наибольшие достижения (стандартизация синтаксиса и семантики операторов выборки и манипулирования данными, фиксация средств ограничений целостности БД:определение первичного и внешнего ключей отношений, проверочные ограничения целостности)

Международный стандарт 1992 г.(SQL2)

  • Расширено манипулирование таблицами (Alter table, Drop table)
  • Манипулирование схемой БД (Users, Tables, Views, Columns, Domains, Table_priveleges, Table_constraints, , , )
  • Возможность управления доменами (Create domain имя char(25) . . .и при определении имен столбцов эти имена определяются через имена доменов)
  • Новые типы данных (Date, Time, Datetime, . . .) и новые функции
  • Управление транзакциями и сессиями (сессия - последовательность транзакций, в пределах которой сохраняются временные отношения)
  • Подключение к БД
  • Развитие динамического SQL

В 1995 г. стандарт был дополнен спецификацией интерфейса уровня вызова (Call-Level Interface - SQL/CLI). SQL/CLI представляет собой набор спецификаций интерфейсов процедур, вызовы которых позволяют выполнять динамически задаваемые операторы SQL. По сути дела, SQL/CLI представляет собой альтернативу динамическому SQL и послужил основой для создания повсеместно распространенных сегодня интерфейсов ODBC (Open Database Connectivity) и JDBC (Java Database Connectivity).

В 1996 г. к стандарту SQL/92 был  добавлен еще один компонент - SQL/PSM (Persistent Stored Modules). Основная цель этой спецификации состоит в том, чтобы стандартизировать способы определения и использования хранимых процедур, т. е. специальным образом оформленных программ, включающих операторы SQL, которые сохраняются в базе данных, могут вызываться приложениями и выполняются внутри СУБД.

Стандарт SQL:1999 (SQL3)

Незадолго до завершения работ  по определению стандарта SQL2 была начата разработка стандарта SQL3. Реально работу над новым стандартом удалось  частично завершить только в 1999 г., и  по этой причине (а также в связи  с проблемой 2000 года) стандарт получил  название SQL:1999.

1999 г. были приняты пять  первых частей стандарта SQL:1999. Первая часть (SQL/Framework) посвящена описанию концептуальной структуры стандарта: приводится развернутая аннотация следующих четырех частей.

Вторая часть SQL:1999 (SQL/Foundation) образует базис стандарта. Вводится система типов языка, формулируются правила определения функциональных зависимостей и возможных ключей, определяются синтаксис и семантика основных операторов SQL:

  • операторов определения и манипулирования схемой базы данных;
  • операторов манипулирования данными;
  • операторов управления транзакциями (расширенные модели транзакций, контрольные точки, многозвенные транзакций);
  • операторов управления подключениями к базе данных и т. д.

Третью часть занимает уточненная по сравнению с SQL/92 спецификация SQL/CLI. В четвертой части специфицируется SQL/PSM - синтаксис и семантика языка определения хранимых процедур (стандарт синтаксиса триггеров и процедур). Наконец, в пятой части - SQL/Bindings - определяются правила связывания SQL для стандартных версий языков программирования FORTRAN, COBOL, PL/1, Pascal, Ada, C и MUMPS.

В стандарт SQL:1999 не вошли  и существуют в виде отдельных  стандартов:

  • стандарт управления распределенными транзакциями (SQL/Transaction);
  • стандарт поддержки темпоральных свойств данных (SQL/Temporal);
  • стандарт управления внешними данными (SQL/MED);
  • поддержка оперативной аналитической обработки (SQL/OLAP).

В конце 2003 г. был принят и  опубликован новый вариант международного стандарта SQL:2003.

1.2 Стандартизация управления и обмена данными.

Международная организация  стандартизации ISO в рамках 32 подкомитета JTC1 ("Data Management and Interchange") разрабатывает стандарты в области управления и обмена данными для локальных и распределенных информационных систем. 

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

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

WG02 - рабочая группа, разрабатывающая и развивающая стандарты по спецификации и управлению метаданными, обмену метаданными в различных средах (Internet, Intranet ив других средах). В число наиболее интересных проектов данной группы входят следующие: 

1.32.16.01.02.00 ISO/IEC AWI 20943-2 "Информационные  технологии - Применение XML структурированных  данных для процедуры регистрации  данных" (Information technology - Procedure for Achieving Data Registry Content Consistency - XML Structured Data). Де-факто язык XML уже используется WEB-серверами как язык описания дескриптора доставки модулей, располагаемых и регистрируемых на сервере. 

1.32.17.01.00.00 ISO/IEC AWI 20944 " Информационные  технологии - Сервисы доступа к  метаданным" (Information technology - Metadata Access Service). 

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

1.32.03.05.09.00 ISO/IEC CD 9075-9 "ИТ- Язык SQL: Управление внешними данными" (Information technology - Database Languages - SQL - Part 9: Management of External Data (SQL/MED)); 

1.32.03.05.14.00 ISO/IEC WD 9075-14 "ИТ- Язык SQL: Взаимодействие SQL и ХМL" (Information technology --Database Language SQL - Part 14: SQL/XML (for SQL:200n)). 

WG04 - рабочая группа, стандартизирующая пакеты абстрактных типов данных для использования в различных прикладных областях. 

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

1.32.05.04.00.00 ISO/IEC CD 9579 ed 4 "ИТ - Удаленный доступ к данным в SQL" (Information technology - Remote Database Access for SQL: (RDA/SQL). Edition 4). 

В последнее время для  обмена данными и представления  информации все чаще используется язык XML (eXtensible Markup Language). Этот язык не привязан к какой-либо конкретной платформе или к конкретному производителю. Первая спецификация языка XML 1.0 получила статус рекомендации консорциума W3C в 1998 г. Далее консорциум W3C разработал и опубликовал ряд стандартов, связанных с XML (Extensible Markup Language (XML) Version 1.0 (second edition):http://www.w3.org/TR/REC-xml), включая стандарт на механизм связывания XLink и XPointer, стандарт синтаксиса схемы, описывающей набор данных (Recommendation) XML Schema Part 1: Structures, 2 May, 2001, (Recommendation) XML Schema Part 2: Datatypes, 2 May, 2001:http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/, http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/), спецификации по определению и использованию пространства имен (Namespaces in XML, 14 January, 1999: http://www.w3.org/TR/REC-xml-names). 

Консорциум W3C, продолжая  работу над стандартизацией XML, опубликовал  рекомендации по DOM XML - объектной модели документа, представляющей XML-документ в виде объекта. 

Вопросами стандартизации XML также частично занимается OASIS (организация  по продвижению стандартов структурирования информации - Organization for the Advancement of Structured Information Standards: http://www.oasis-open.org/). 

Инженерной группой IETF был  разработан стандарт SOAP (Simple Object Access Protocol), использующий язык XML, как язык для обмена данными. Фактически SOAP позволяет посредством применения XML реализовывать межплатформенный доступ к данным, связывая воедино применение таких технологий, как CORBA, EJB и COM. 

Разрабатываемый в настоящее  время консорциумом W3C стандарт XQL (XML Query Language:http://www.w3.org/TR/2001/WD-xquery-20011220/) включает вопросы, связанные со спецификацией методов выполнения запросов к набору XML-документов. 

В рамках WG3 32 подкомитета JTC1 также разрабатывается стандарт, связанный с использованием языка XML: "ИТ - Язык SQL - часть 14: Спецификация SQL/XML" ( Information technology - Database languages - SQL - Part 14: XML-Related Specifications (SQL/XML)). Разрабатываемый стандарт рассматривает механизмы преобразования данных, описываемых средствами языка SQL, в данные, представляемые языком XML, и обратно, включая алгоритмы соответствия SQL-таблиц типам данных XML-схемы, соответствия SQL-значений значениям XML, а также приводит описание XML-схемы для SQL/XML. По этому стандарту опубликован Final Committee Draft ISO/IEC FCD 9075-14. 

Одним из наиболее значительных стандартов, разрабатываемых в настоящее  время и предназначаемых для  обмена данными, является стандарт ISO/IEC WD 9579, Fourth Edition "ИТ - удаленный доступ к базам данных для SQL" (Information Technology - Remote Database Access for SQL with Extended Security). 

Рассматриваемый стандартRDA/SQL базируется на уже существующих следующих стандартах IETF (http://www.internic.net): 

RFC 791 Internet Protocol; 

RFC 793 Transmission Control Protocol; 

RFC 819 The Domain Naming Convention for Internet User Applications; 

RFC 1122 Requirements for Internet Hosts - Communication Layers; 

RFC 1123 Requirements for Internet Hosts - Application and Support; 

RFC 2246 The TLS Protocol. 

RDA/SQL может быть использован для реализации удаленного доступа к СУБД, соответствующей стандарту ISO/IEC 9075 (Database Language SQL). 

Стандарт RDA/SQL описывает  модель для удаленного взаимодействия SQL-клиента с одним или несколькими SQL-серверами посредством коммуникационных протоколов. 

RDA/SQL устанавливает соответствие RDA-протокола стандартным протоколам TCP/IP и TLS (Transport Layer Security), вводит понятия RDA-сообщения, RDA-оператора, RDA-протокола и RDA-передачи. 

В стандарте определяется RDA-модель среды SQL (рис 1.1.) и функциональные компоненты, составляющие среду RDA-клиента  и среду RDA-сервера. 

Рис. 1.1. RDA-модель среды SQL

RDA-модель определяет провайдера  транспортного уровня, реализующего  взаимодействие между RDA-клиентом  и RDA-сервером. 

Стандарт ISO/IEC 9075-3 (SQL/CLI) описывает  результирующий набор, определяемый на стороне сервера, а стандарт RDA/SQL описывает RDA-операторы, предназначаемые  для взаимодействия с результирующим набором и соответствующие вызовам SQL/CLI. Наряду с RDA-операторами данный стандарт вводит коды атрибутов, используемые RDA. К настоящему времени рабочей группой WR5 опубликована 4 редакция разрабатываемого стандарта RDA/SQL.

 

2 Структура языка SQL

Все операторы языка SQL можно разделить на несколько типов:

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

Операторы транзакций - определяют моменты времени в которые  значения базы данных, измененные пользователями становятся актуальными (изменения сделанные одним пользователем вступают в силу для всех пользователей).

Операторы модификации данных - позволяют создавать/удалять базовые  таблицы и изменять их структуру (добавлять столбцы, связи между  таблицами).

Операторы защиты данных - позволяют  авторизировать пользователей, давать им привилегии (разрешения на просмотр данных из одной или нескольких таблиц, изменение данных и т.д.).

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

Оператор ошибки - после  выполнения последнего SQL запроса содержит код выполнения операции (код ошибки либо удачного выполнения).

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

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

2.1 Таблицы SQL

В реляционной базе данных информация организована в виде таблиц, разделённых на строки и столбцы, на пересечении которых содержатся значения данных.

Основными объектами реляционной  базы данных являются:

(TABLE) Таблица - Прямоугольная  таблица, состоящая из строк  и столбцов. Задать таблицу –  значит указать, из каких столбцов  она состоит.

(ROW) Строка - Запись, состоящая  из полей – столбцов. В каждом  поле содержится его значение, либо значение NULL – "пусто". Строк в таблице может быть  сколько угодно. Физический порядок  их расположения друг относительно  друга неопределен.

(COLUMN) Столбец - Каждый  столбец в таблице имеет собственные имя и тип.

2.2 Структура запросов  SQL

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

В синтаксических конструкциях для обращения к БД используются следующие обозначения:

1) звездочка (*) для обозначения "все" – употребляется в обычном для программирования смысле, т.е. "все случаи, удовлетворяющие определению";

2) квадратные скобки ([]) – означают, что конструкции, заключенные в эти скобки, являются необязательными (т.е. могут быть опущены);

3) фигурные скобки ({}) – означают, что конструкции, заключенные в эти скобки, должны рассматриваться как целые синтаксические единицы, т.е. они позволяют уточнить порядок разбора синтаксических конструкций, заменяя обычные скобки, используемые в синтаксисе SQL;

4) многоточие (…) – указывает на то, что непосредственно предшествующая ему синтаксическая единица факультативно может повторяться один или более раз;

5) прямая черта (|) – означает наличие выбора из двух или более возможностей. Например, обозначение ASC|DESC указывает, можно выбрать один из терминов ASC или DESC; когда же один из элементов выбора заключен в квадратные скобки, то это означает, что он выбирается по умолчанию (так, [ASC]|DESC означает, что отсутствие всей этой конструкции будет восприниматься как выбор ASC);

6) точка с запятой (;) – завершающий элемент предложений SQL;

7) запятая (,) – используется для разделения элементов списков;

8) пробелы ( ) – могут вводиться для повышения наглядности между любыми синтаксическими конструкциями предложений SQL;

9) жирные прописные латинские  буквы и символы – используются  для написания конструкций языка  SQL и должны (если это специально  не оговорено) записываться в  точности так, как показано-……..;

10) строчные буквы используются  для написания конструкций, которые  должны заменяться конкретными  значениями, выбранными пользователем,  причем для определенности отдельные  слова этих конструкций связываются  между собой символом подчеркивания (_);

11) термины "таблица"  и "столбец" заменяют (с целью  сокращения текста синтаксических  конструкций) термины "имя_таблицы", "имя_столбца", …, соответственно;

12) термин "таблица" - используется  для обобщения таких видов  таблиц, как базовая_таблица, представление или псевдоним; здесь псевдоним служит для временного (на момент выполнения запроса) переименования и (или) создания рабочей копии базовой_таблицы (представления).

В дальнейшем все примеры приводятся для базы данных приведенной в  приложении.

Оператор SELECT осуществляет выборку из базы данных и имеет наиболее сложную структуру среди всех операторов языка SQL. Простейший оператор SELECT выглядит:

SELECT * FROM PC;

Он осуществляет выборку всех записей  из объекта БД табличного типа с  именем PC. При этом столбцы и строки результирующего набора не упорядочены. Чтобы упорядочить поля результирующего набора, их следует перечислить через запятую в нужном порядке после слова SELECT:

SELECT price, speed, hd, ram, cd, model, code

FROM Pc;

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

SELECT speed, ram FROM PC;

Следует отметить, что вертикальная выборка может содержать дубликаты  строк в том случае, если она  не содержит потенциального ключа, однозначно определяющего запись. В таблице PC потенциальным ключом является поле code, которое выбрано в качестве первичного ключа таблицы. Поскольку это поле отсутствует в запросе, в приведенном выше результирующем наборе имеются дубликаты строк (например, строки 1 и 3). Если требуется получить уникальные строки (скажем, нас интересуют только различные комбинации скорости процессора и объема памяти, а не характеристики всех имеющихся компьютеров), то можно использовать ключевое слово DISTINCT:

SELECT DISTINCT speed, ram FROM Pc;

Помимо DISTINCT может применяться  также ключевое слово ALL (все строки), которое принимается по умолчанию. Чтобы упорядочить строки результирующего  набора, можно выполнить сортировку по любому количеству полей, указанных  в предложении SELECT. Для этого используется предложение ORDER BY , являющееся всегда последним предложением в операторе SELECT. При этом в списке полей могут  указываться как имена полей, так и их порядковые позиции в  списке предложения SELECT. Так если требуется  упорядочить результирующий набор  по объему оперативной памяти в порядке  убывания, можно записать:

SELECT DISTINCT speed, ram

FROM Pc

ORDER BY ram DESC

Или

SELECT DISTINCT speed, ram

FROM Pc

ORDER BY 2 DESC

Сортировку можно проводить  по возрастанию (параметр ASC принимается  по умолчанию) или по убыванию (параметр DESC). Сортировка по двум полям:

SELECT DISTINCT speed, ram

FROM Pc

ORDER BY ram DESC, speed DESC

Горизонтальную выборку реализует  предложение WHERE , которое записывается после предложения FROM. При этом в  результирующий набор попадут только те строки из источника записей, для  каждой из которых значение предиката  равно TRUE. То есть предикат проверяется  для каждой записи.