Access SQL. Основные понятия, лексика и синтаксис. Sql синтаксис запросы


Синтаксис SQL | SQL

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

SELECT [DISTINCT | ALL] {* | список_выбора} FROM {table_name [alias] | имя_представления}

Ключевые слова SQL

Ключевые слова (SELECT, GRANT, DELETE или CREATE) прописаны в синтаксисе SQL и имеют в этом языке предопределенное значение. Можно использовать ключевые слова в верхнем или нижнем регистре. Следующие три запроса равнозначны:

SELECT * FROM EMPLOYEES;Select * FROM EMPLOYEES;select * FROM EMPLOYEES;

В некоторых случаях ключевые слова могут быть сокращены. Например, ключевое слово DESCRIBE может быть использовано либо в форме DESC, либо DESCRIBE. Если мы выполним следующие запросы, то в обоих случаях получим структуру таблицы сотрудников.

DESCRIBE EMPLOYEES;DESC EMPLOYEES;

Идентификаторы

Идентификаторы – это имена заданные разработчиками для структурных элементов базы данных: таблицы, столбцы, псевдонимы, индексы, представления. В синтаксисе последнего SQL запроса ‘EMPLOYEES’ — это идентификатор, а ‘SELECT‘ — ключевое слово. Правила для создания идентификаторов указываются в спецификации поставщика. Рассмотрим следующую таблицу:

Правила Платформа Описание
Идентификатор должен содержать до SQL2003 128 символов.
DB2 128 символов, в зависимости от платформы.
MySQL 64 символа.
Oracle 30 байт; имена базы данных до 8 байт.
PostgreSQL 31 символ.
Идентификатор может содержать SQL2003 Любые цифры, символы и нижнее подчеркивание.
DB2 Любые цифры, символы в верхнем регистре или символ нижнего подчеркивания.
MySQL Любые цифры или символы.
Oracle Любые цифры, символы и нижнее подчеркивание (_), знак фунта стерлингов (#) или доллара ($).
PostgreSQL Любые цифры, символы и нижнее подчеркивание (_).
Первый символ должен быть SQL2003 Буквой.
DB2 Буквой.
MySQL Буквой или цифрой (но не должен содержать только цифры).
Oracle Буквой.
PostgreSQL Буквой или нижним подчеркиванием (_).
Идентификатор не может содержать SQL2003 Специальные символы или пробелы.
DB2 Специальные символы или пробелы.
MySQL Точку (.), слэш (/) или ASCII(0) и ASCII(255). Кавычки (‘) и двойные кавычки (") допускаются только в ссылающихся идентификаторах.
Oracle Пробелы, двойные кавычки (") или специальные символы.
PostgreSQL Двойные кавычки (").
В синтаксисе SQL запросов символ идентификатора SQL2003 Двойные кавычки (").
DB2 Двойные кавычки (").
MySQL Кавычки ( ‘ ) или двойные кавычки (" ) в режиме совместимости с ANSI.
Oracle Двойные кавычки (").
PostgreSQL Двойные кавычки (").
Идентификатор может быть зарезервирован SQL2003 Нет, кроме ссылающихся идентификаторов.
DB2 Да.
MySQL Нет, кроме ссылающихся идентификаторов.
Oracle Нет, кроме ссылающихся идентификаторов.
PostgreSQL Нет, кроме ссылающихся идентификаторов.
Адресация к схеме SQL2003 Каталог.схема.объект.
DB2 Схема.объект.
MySQL База_данных.объект.
Oracle Схема.объект.
PostgreSQL База_данных.схема.объект.
Идентификатор должен быть уникальным SQL2003 Да.
DB2 Да.
MySQL Да.
Oracle Да.
PostgreSQL Да.

Конвенции имен

Стандарт SQL не содержит никаких точных указаний по наименованиям, поэтому нужно следовать следующим основным принципам (в том числе и в синтаксисе SQL запросов UPDATE):

  • Выбирайте имя, которое содержит смысл и имеет описательный характер. Например, таблица сотрудников не должна называться emp, а столбец имени сотрудника должен называться first_name, а не fname, хотя и «emp», и «fname» это допустимые идентификаторы;
  • Используйте для всех объектов в базе данных SQL либо заглавные буквы, либо строчные, поскольку некоторые серверы баз данных чувствительны к регистру.

Литералы SQL

Термин литералы относится к фиксированным значениям данных. SQL распознает четыре типа литералов: числовые значения, строки символов, дата или время, логическое значение. Например, 100, -120, 544, 03, -458, 25, 3e2, 5E-2 являются действительными числовыми литералами. ‘США‘, ‘2000‘, ‘SQL Синтаксис‘, ‘1 января 1981‘ являются действительными строками символов (должны быть заключены в одинарные кавычки (‘ ‘)). Логические литералы и литералы даты/времени выглядят следующим образом: TRUE и ‘JAN-28-1976 21:12:40:00‘.

Операторы

Операторы работают с отдельными элементами данных и возвращают результат. Операторы используются в различных операциях SQL, таких как SELECT, INSERT, UPDATE или DELETE. А также при создании различных объектов базы данных, таких как функции, представления, триггеры и хранимые процедуры. MS SQL синтаксис запросов поддерживает различные типы операторов, хотя не все СУБД поддерживают все операторы.

Смотрите таблицу ниже:

Операторы Работают во
Арифметические операторы Всех базах данных.
Операторы присвоения Всех базах данных.
Побитовые операторы Microsoft SQL Server.
Операторы сравнения Всех базах данных.
Логические операторы DB2, Oracle, SQL Server и PostgreSQL.
Унарные операторы DB2, Oracle и SQL Server.

Приоритетность операторов

Приоритетность — это порядок, в котором база данных оценивает различные операторы в одном выражении. В синтаксисе SQL запросов при выполнении выражения, содержащего несколько операторов (например, +, -, /), сначала выполняются операторы с высшей приоритетностью, а затем с более низкой. При оценке операторов с одинаковой приоритетностью операторы выполняются в порядке их расстановки в выражении слева направо.

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

Приоритетность операторов
( ) (выполняются в первую очередь).
+, -, ~ (унарные операторы).
*, /, % (математические операторы).
+, — (арифметические операторы).
=, >, <, >=, <=, <>, !=, !>, !< (операторы сравнения).
I^ (Побитовый OR), & (Побитовый AND), | (Побитовый OR).
NOT.
AND.
ALL, ANY, BETWEEN, IN, LIKE, OR, SOME.
= (присвоение переменных).

Следующие выражения в запросе MySQL возвращают разные результаты:

SELECT 12 * 2 + 24;

Результат

12 * 2 + 2448

Приоритетность операторов

SELECT 12 * (2 + 24)

Результат

12 * (2 + 24)312

Приоритетность операторов

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

Комментарии в синтаксисе SQL запросов — это необязательный текст, который описывает, что делает программа и почему код был изменен. Компилятор всегда игнорирует комментарии. Комментарий вводится через двойное тире и пробел:— Это комментарий SQL

В качестве альтернативы, можно использовать блок комментариев C-стиля:

/ * Это первая строка комментария Это вторая строка комментария * /.

Пробелы

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

Список ключевых слов SQL:

ABSOLUTE ACTION ADD ADMIN
AFTER AGGREGATE ALIAS ALL
ALLOCATE ALTER AND ANY
ARE ARRAY AS ASC
ASSERTION ASSERTION AT ATOMIC
AUTHORIZATION BEFORE BEGIN BIGINT
BINARY BIT BLOB BOOLEAN
BOTH BREADTH BY CALL
CASCADE CASCADED CASE CAST
CATALOG CHAR CHARACTER CHECK
CLASS CLOB CLOSE COLLATE
COLLATION COLLECT COLUMN COMMIT
COMPLETION CONDITION CONNECT CONNECTION
CONSTRAINT CONSTRAINTS CONSTRUCTOR CONTAINS
CONTINUE CORRESPONDING CREATE CROSS
CUBE CURRENT CURRENT_DATE CURRENT_PATH
CURRENT_ROLE CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER
CURSOR CYCLE DATA DATALINK
DATE DAY DEALLOCATE DEC
DECIMAL DECLARE DEFAULT DEFERRABLE
DELETE DEPTH DEREF DESC
DESCRIPTOR DESTRUCTOR DIAGNOSTICS DICTIONARY
DISCONNECT DO DOMAIN DOUBLE
DROP ELEMENT END-EXEC EQUALS
ESCAPE EXCEPT EXCEPTION EXECUTE
EXIT EXPAND EXPANDING FALSE
FIRST FLOAT FOR FOREIGN
FREE FROM FUNCTION FUSION
GENERAL GET GLOBAL GOTO
GROUP GROUPING HANDLER HASH
HOUR IDENTITY IF IGNORE
IMMEDIATE IN INDICATOR INITIALIZE
INITIALLY INNER INOUT INPUT
INSERT INT INTEGER INTERSECT
INTERSECTION INTERVAL INTO IS
ISOLATION ITERATE JOIN KEY
LANGUAGE LARGE LAST LATERAL
LEADING LEAVE LEFT LESS
LEVEL LIKE LIMIT LOCAL
LOCALTIME LOCALTIMESTAMP LOCATOR LOOP
MATCH MEMBER MEETS MERGE
MINUTE MODIFIES MODIFY MODULE
MONTH MULTISET NAMES NATIONAL
NATURAL NCHAR NCLOB NEW
NEXT NO NONE NORMALIZE
NOT NULL NUMERIC OBJECT
OF OFF OLD ON
ONLY OPEN OPERATION OPTION
OR ORDER ORDINALITY OUT
OUTER OUTPUT PAD PARAMETER
PARAMETERS PARTIAL PATH PERIOD
POSTFIX PRECEDES PRECISION PREFIX
PREORDER PREPARE PRESERVE PRIMARY
PRIOR PRIVILEGES PROCEDURE PUBLIC
READ READS REAL RECURSIVE
REDO REF REFERENCES REFERENCING
RELATIVE REPEAT RESIGNAL RESTRICT
RESULT RETURN RETURNS REVOKE
RIGHT ROLE ROLLBACK ROLLUP
ROUTINE ROW ROWS SAVEPOINT
SCHEMA SCROLL SEARCH SECOND
SECTION SELECT SEQUENCE SESSION
SESSION_USER SET SETS SIGNAL
SIZE SMALLINT SPECIFIC SPECIFICTYPE
SQL SQLEXCEPTION SQLSTATE SQLWARNING
START STATE STATIC STRUCTURE
SUBMULTISET SUCCEEDS SUM SYSTEM_USER
TABLE TABLESAMPLE TEMPORARY TERMINATE
THAN THEN TIME TIMESTAMP
TIMEZONE_HOUR TIMEZONE_MINUTE TO TRAILING
TRANSACTION TRANSLATION TREAT TRIGGER
TRUE UESCAPE UNDER UNDO
UNION UNIQUE UNKNOWN UNTIL
UPDATE USAGE USER USING
VALUE VALUES VARCHAR VARIABLE
VARYING VIEW WHEN WHENEVER
WHERE WHILE WITH WRITE
YEAR ZONE

Перевод статьи «SQL Syntax» был подготовлен дружной командой проекта Сайтостроение от А до Я.

www.internet-technologies.ru

Оператор SELECT. Простой SQL-запрос, синтаксис, примеры

За выборку данных из таблиц базы данных в SQL отвечает оператор SELECT. В этой статье будет рассмотрен его простейший синтаксис и примеры.

Чтобы выполнить простой запрос к базе данных достаточно указать всего 2 условия (предложения):

  • Какие столбцы необходимо выгрузить;
  • Из какой таблицы необходимо выгрузить столбцы.

На языке SQL это выглядит следующим образом:

SELECT <Перечень столбцов> FROM <Перечень таблиц>

Имена столбцов перечисляются через запятую сразу после ключевого слова SELECT. Затем следует ключевой слово FROM с наименованиями таблиц. Если таблиц несколько, то они так же указываются через запятую.

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

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

Подключение к базе данных

На сервере часто присутствует более одной базы данных. Поэтому, прежде чем выполнить запрос, потребуется подключиться к конкретной базе. Научимся это делать в SQL Server Management Studio:

Теперь любой запрос будет выполняться именно в ее контексте.

Создание SQL-запроса

Выполним первую задачу:

Необходимо получить Фамилии, Имена и Отчества всех сотрудников.

В поле запроса введите следующий SQL-код:

SELECT Фамилия, Имя, Отчество FROM Сотрудники

Первая строка запроса содержит выгружаемые столбцы, вторая строка указывает таблицу столбцов. На самом деле, код напоминает обычное предложение: «Выбрать столбцы Фамилия, Имя, Отчество из таблицы Сотрудники».

Нажмите на кнопку «Выполнить» на панели редактора SQL. Внизу окна запроса должен появиться результат его выполнения. Под результатом отображается статус и продолжительность запроса, а также количество выгруженных строк. Если Вы все сделаете правильно, то статус будет сообщать «Запрос успешно выполнен», а количество строк равняться 39.

Пояснения синтаксиса

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

select ФаМиЛия, иМЯ, ОтчествО froM сотрудники

Также можно не начинать каждое условие с новой строки.

Рекомендуем писать запросы аккуратно, чтобы их было проще понимать и искать ошибки.

Иные варианты запроса

Перед написанием кода говорилось о необходимости подключения к БД. Но можно обойтись и без подключения в этом конкретном случае (в некоторых программах это обязательное требование). Достаточно в предложении FROM дополнительно указать имя базы данных и имя схемы (по умолчанию dbo):

SELECT Фамилия, Имя, Отчество FROM CallCenter.dbo.Сотрудники

Теперь опишем синтаксис простой инструкции SELECT (необязательные части запроса взяты в квадратные скобки):

SELECT [Имя_таблицы.]Имя_столбца[, [Имя_таблицы.]Имя_столбца2 …] FROM [[Имя_базы_данных.]Имя_Схемы.]Имя_таблицы

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

USE CallCenter SELECT Фамилия, Имя, Отчество FROM Сотрудники

Такой подход обеспечит подключение к нужной базе.

Многословные имена столбцов и таблиц могут содержать пробелы между словами. В таких случаях их имена заключаются в квадратные скобки, чтобы запрос сработал корректно. Например, [имя столбца].

  • < Назад
  • Вперёд >

Если материалы office-menu.ru Вам помогли, то поддержите, пожалуйста, проект, чтобы мы могли развивать его дальше.

У Вас недостаточно прав для комментирования.

office-menu.ru

SQL SELECT и запросы на выборку данных

Оператор языка SQL SELECT предназначен для запросов на выборку данных из базы данных. Он может быть использован как без условий (выбор всех строк во всех столбцах или всех строк в определённых столбцах), так и с многочисленными условиями (выбор определённых строк), которые заданы в секции WHERE. Ознакомимся со средствами SQL, которыми можно задавать эти условия на выборку данных, а также узнаем, как использовать оператор SELECT в подзапросах.

Запрос с оператором SELECT для выбора всех столбцов таблицы имеет следующий синтаксис:

SELECT * FROM ИМЯ_ТАБЛИЦЫ

То есть для выбора всех столбцов таблицы после слова SELECT нужно ставить звёздочку.

Пример 1. Есть база данных фирмы - Company. В ней есть таблица Org (Структура фирмы) и Staff (Сотрудники). Требуется выбрать из таблиц все столбцы. Соответствующий запрос для выбора всех столбцов из таблицы Org выглядит следующим образом:

SELECT * FROM ORG

Этот запрос вернёт следующее (для увеличения картинки щёлкнуть по ней левой кнопкой мыши):

Запрос для выбора всех столбцов из таблицы Staff выглядит следующим образом:

SELECT * FROM STAFF

Этот запрос вернёт следующее:

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

SELECT ВЫБИРАЕМЫЕ_СТОЛБЦЫ FROM ИМЯ_ТАБЛИЦЫ

Пример 2. Пусть требуется из таблицы Org выбрать столбцы Depnumb и Deptname, в которых содержатся данные соответственно о номерах отделов фирмы и об их названиях. Запрос для получения такой выборки будет следующим:

SELECT DEPNUMB, DEPTNAME FROM ORG

А из таблицы Staff нужно выбрать столбцы DEPT, NAME, JOB, в которых содержатся соответственно данные о номере отдела, в котором трудится сотрудник, его имени и должности:

SELECT DEPT, NAME, JOB FROM STAFF

Для выбора определённых строк таблицы вместе с оператором SELECT уже потребуется ключевое слово WHERE, указывающее на некоторое значение или несколько значений, содержащиеся в интересующих нас строках. Наиболее простые условия задаются при помощи операторов сравнения и равенства (, =), а также ключевого слова IS. Условий может быть несколько, тогда они перечисляются с использованием ключевого слова AND. Запросы для выбора строк имеют следующий синтаксис:

SELECT ИМЯ_СТОЛБЦА FROM ИМЯ_ТАБЛИЦЫ WHERE УСЛОВИЕ

Пример 3. Выберем из таблицы Staff строки, в которых содержатся данные только о сотрудниках, которые работают в 38-м отделе:

SELECT DEPT, NAME, JOB FROM STAFF WHERE DEPT=38

Этот запрос вернёт следующие данные:

Пример 4. В предыдущем примере мы выбирали строки из таблицы только по значению одного столбца - DEPT. Пусть теперь нужно выбрать данные о сотрудниках, которые работают в 38-м отделе и должность которых - служащий (Clerk). Для этого в секции WHERE соответствующие значения нужно перечислить с использованием слова AND:

SELECT DEPT, NAME, JOB FROM STAFF WHERE JOB='Clerk' AND DEPT=38

Этот запрос вернёт следующие данные:

Пример 5. Пусть нужно выбрать из таблицы Staff идентификаторы и имена тех сотрудников, размер комиссии которых - неопределённый. Для этого в секции WHERE перед указанием значения столбца COMM - NULL нужно ставить не знак равенства, а слово IS:

SELECT ID, NAME FROM STAFF WHERE COMM IS NULL

Этот запрос вернёт следующие данные:

Для указания значений в строках, которые требуется выбрать, используются и знаки сравнения.

Пример 6. Выберем из таблицы имена, размеры заработные платы и число лет, проработанных в фирме, сотрудников, которые работают в фирме более девяти лет:

SELECT NAME, SALARY, YEARS FROM STAFF WHERE YEARS>9

Запрос вернёт следующие строки:

Предикаты - слова IN, OR, BETWEEN, LIKE в секции WHERE - также позволяют выбрать определённые диапазоны значений (IN, OR, BETWEEN) или значения в строках (LIKE), которые требуется выбрать из таблицы. Запросы с предикатами IN, OR, BETWEEN имеют следующий синтаксис:

SELECT ИМЯ_СТОЛБЦА FROM ИМЯ_ТАБЛИЦЫ WHERE ЗНАЧЕНИЕ ПРЕДИКАТ (IN, OR, BETWEEN) (ЗНАЧЕНИЯ, УКАЗЫВАЮЩИЕ ДИАПАЗОН)

Запросы с предикатом LIKE имеют следующий синтаксис:

SELECT ИМЯ_СТОЛБЦА FROM ИМЯ_ТАБЛИЦЫ WHERE LIKE (ЗНАЧЕНИЯ СТРОКИ В СТОЛБЦЕ)

Пример 7. Пусть требуется выбрать из таблицы Staff имена, должности и число отработанных лет сотрудников, работающих в отделах с номерами 20 или 84. Это можно сделать следующим запросом:

SELECT NAME, JOB, YEARS FROM STAFF WHERE DEPT IN (20, 84)

Результат выполнения запроса:

Пример 8. Пусть теперь требуется выбрать из таблицы Staff те же данные, что и в предыдущем примере. Запрос со словом OR аналогичен запросу со словом IN и перечислением интересующих значений в скобках. Запрос будет следующим:

SELECT NAME, JOB, YEARS FROM STAFF WHERE DEPT=20 OR DEPT=84

Пример 9. Выберем из той же таблицы имена, должности и число отработанных лет сотрудников, зарплата которых между 15000 и 17000 включительно:

SELECT NAME, JOB, YEARS FROM STAFF WHERE SALARY BETWEEN 15000 AND 17000

Результат выполнения запроса:

Предикат LIKE используется для выборки тех строк, в значениях которых встречаются символы, указанные после предиката между апострофами (').

Пример 10. Выберем из той же таблицы имена, должности и число отработанных лет сотрудников, имена которых начинаются с буквы S и состоят из 7 символов:

SELECT NAME, JOB, YEARS FROM STAFF WHERE NAME LIKE 'S_ _ _ _ _ _'

Символ подчёркивания (_) означает любой символ. Результат выполнения запроса:

Пример 11. Выберем из той же таблицы имена, должности и число отработанных лет сотрудников, имена которых начинаются с буквы S и содержат любые другие буквы в любом количестве:

SELECT NAME, JOB, YEARS FROM STAFF WHERE NAME LIKE 'S%'

Символ процентов (%) означает любое количество символов. Результат выполнения запроса:

Значения, указанные с использованием предикатов IN, OR, BETWEEN, LIKE можно инвертировать при помощи слова NOT. Тогда запрашиваемые данные будут иметь противоположный смысл. Если мы используем NOT IN (20, 84), то будут выведены данные сотрудников, которые работают во всех отделах, кроме имеющих номера 20 и 84. С использованием NOT BETWEEN 15000 AND 17000 можно получить данные сотрудников, зарплата которых не входит в интервал от 15000 до 17000. Запрос с NOT LIKE выведет данные сотрудников, чьи имена не начинаются или не содержат символов, указанных с NOT LIKE.

Написать SQL запросы с SELECT и предикатами IN, NOT IN, BETWEEN самостоятельно, а затем посмотреть решения

Есть база данных "Театр". Таблица Play содержит данные о постановках. Таблица Team - о ролях актёров. Таблица Actor - об актёрах. Таблица Director - о режиссёрах. Поля таблиц, первичные и внешние ключи можно увидеть на рисунке ниже (для увеличения нажать левой кнопкой мыши).

Пример 12. Вывести список актёров, которые не разу не были утверждены на главную роль. В таблице team данные о главных ролях содержатся в столбце mainteam. Если роль - главная, то в соответствующей строке отмечено 'Y'.

Правильное решение и ответ.

Пример 13. Вывести список актеров, которые играли во всех спектаклях WilliamShakespeare. Данные об авторах содержается в таблице play в столбце author.

Правильное решение и ответ.

Разобранные до сих пор запросы SQL SELECT возвращали строки, которые могли быть расположены в любой последовательности. Однако часто требуется отсортировать строки по порядку номеров, алфавиту и другим признакам. Для этого служит ключевое словосочетание ORDER BY. Такие запросы имеют следующий синтаксис:

SELECT ИМЯ_СТОЛБЦА FROM ИМЯ_ТАБЛИЦЫ WHERE УСЛОВИЕ ORDER BY СТОЛБЕЦ, ПО КОТОРОМУ СОРТИРУЮТСЯ РЕЗУЛЬТАТЫ

Пример 15. Пусть требуетя выбрать из таблицы Staff сотрудников, работающих в отделе с номером 84 и отсортировать (упорядочить) записи по числу отработанных лет в возрастающем порядке:

SELECT NAME, JOB, YEARS FROM STAFF WHERE DEPT=84 ORDER BY YEARS ASC

Слово ASC указывает, что порядок сортировки - возрастающий. Это слово не обязательно, так как возрастающий порядок сортировки применяется по умолчанию. Результат выполнения запроса:

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

SELECT NAME, JOB, YEARS FROM STAFF WHERE DEPT=84 ORDER BY YEARS DESC

Слово DESC указывает, что порядок сортировки - убывающий. Результат выполнения запроса:

Когда для значений строк таблицы не задано условие уникальности, в результатах запроса могут встретиться одинаковые строки. Часто требуется вывести лишь уникальные строки. Это делается при помощи выражения DISTINCT после оператора SELECT.

Пример 17. Пусть требуетcя узнать, какие существуют отделы и какие должности среди отделов, номера которых меньше 30. Это можно сделать при помощи следующего запроса:

SELECT DISTINCT DEPT, JOB FROM STAFF WHERE DEPT

Результат выполнения запроса:

До сих пор мы разбирали конструкции SQL с оператором SELECT, в которых условия, по котором выбираются данные, и сами выбираемые данные содержатся в одной и той же таблице базы данных. На практике часто бывает, что данные, которые надо выбрать, содержатся в одной таблице, а условия - в другой. Здесь на помощь приходят подзапросы: значения условия отбора возвращаются из другого запроса (вложенного запроса), начинающегося также с SELECT. Запросы с подзапросами могут выдавать как одну, так и несколько строк.

Пример 18. Все те же таблицы ORG и STAFF. Пусть требуетcя узнать, в каком подразделении работает сотрудник с идентификационным номером 280, и где это подразделение расположено. Но информация о подразделениях хранится в таблице ORG, а информация о сотрудниках - в таблице STAFF. Это можно сделать при помощи следующего запроса с подзапросом, в котором внешний SELECT обращается к таблице ORG, а внутренний SELECT - к таблице STAFF:

SELECT DIVISION, LOCATION FROM ORG WHERE DEPTNUMB = (SELECT DEPT FROM STAFF WHERE ID = 280)

Результат выполнения запроса:

Пример 19. Пусть теперь требуетcя узнать, в каких подразделениях (без дублирования) работают сотрудники с заработной платой менее 13000. Для этого в секции WHERE внешнего SELECT (запрос к таблице ORG) задаётся условие, принимающее диапазон значений (IN), а внутренний SELECT (к таблице STAFF) как раз возвращает требуемый диапазон значений:

SELECT DISTINCT DEPTNAME FROM ORG WHERE DEPTNUMB IN (SELECT DEPT FROM STAFF WHERE SALARY

Результат выполнения запроса:

Поделиться с друзьями

Другие темы в блоке "Реляционные базы данных"

function-x.ru

Выборка. Синтаксис оператора SELECT. Язык запросов SQL

Язык запросов SQL. DML.

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

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

SELECT BNum, BName, BTown FROM Buyers

Теперь поясним эту команду:

SELECT – ключевое слово, которое сообщает БД, что эта команда является запросом выборки. Этой командой начинаются все запросы такого типа.

BNum, BName, BTown – список полей из таблицы, которые необходимо выбрать. Поля, не перечисленные здесь, не будут включены в результат запроса.

FROM – ключевое слово, которое как и SELECT должно быть представлено в любом запросе такого типа. Оно указывает на источник информации (таблицу). В данном примере указана таблица Buyers.

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

SELECT * FROM Buyers

Опишем правила написания таких запросов в общем случае:

  • Запрос начинается с ключевого слова SELECT, сопровождаемого пробелом;
  • Затем должен следовать список полей, которые необходимо выбрать. Имена полей разделяются между собой запятыми;
  • Ключевое слово FROM сопровождается пробелом и именем таблицы, запрос к которой делается.

Эта команда способна извлечь и строго определенную информацию, такую как вывод только определенных полей таблицы.

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

SELECT GTypeNum FROM Goods

В результате получим:

Выбор без повторяющихся значений

При работе с данными часто возникает потребность в удалении избыточных данных. Такая необходимость возникла в предыдущем примере. Категория с номером 1 встречается дважды в результате запроса. Удаление избыточных данных осуществляется при помощи инструкции DISTINCT. DISTINCT – это аргумент, который обеспечивает устранение повторяющихся значений из предложения SELECT. DISTINCT просматривает значения, которые были выведены ранее, и не дает им дублироваться в списке. Таким образом, чтобы избавиться от избыточности, нам необходимо переписать запрос следующим образом:

SELECT DISTINCT GTypeNum FROM GOODS

В результате получим:

Пользоваться этим аргументом следует очень внимательно, и следить за его применением. Следует знать, что DISTINCT может указываться только один раз в данном предложении SELECT. В запросах на выборку данных также допустимы условия, группировки, сортировки данных и другие предикаты и операторы языка SQL.

openu.ru

Access SQL. Основные понятия, лексика и синтаксис

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

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

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

Это статья из цикла статей о языке SQL для Access. В ней описаны основы использования SQL для выборки данных и приведены примеры синтаксиса SQL.

В этой статье

Что такое SQL?

Основные предложения SQL: SELECT, FROM и WHERE

Сортировка результатов: предложение ORDER BY

Работа со сводными данными: предложения GROUP BY и HAVING

Объединение результатов запроса: оператор UNION

Что такое SQL?

SQL — это язык программирования, предназначенный для работы с наборами фактов и отношениями между ними. В программах управления реляционными базами данных, таких как Microsoft Office Access, язык SQL используется для работы с данными. В отличие от многих языков программирования, SQL удобочитаем и понятен даже новичкам. Как и многие языки программирования, SQL является международным стандартом, признанным такими комитетами по стандартизации, как ISO и ANSI.

На языке SQL описываются наборы данных, помогающие получать ответы на вопросы. При использовании SQL необходимо применять правильный синтаксис. Синтаксис — это набор правил, позволяющих правильно сочетать элементы языка. Синтаксис SQL основан на синтаксисе английского языка и имеет много общих элементов с синтаксисом языка Visual Basic для приложений (VBA).

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

SELECT Last_NameFROM ContactsWHERE First_Name = 'Mary';

Примечание: Язык SQL используется не только для выполнения операций над данными, но еще и для создания и изменения структуры объектов базы данных, например таблиц. Та часть SQL, которая используется для создания и изменения объектов базы данных, называется языком описания данных DDL. Язык DDL не рассматривается в этой статье. Дополнительные сведения см. в статье Создание и изменение таблиц или индексов с помощью запроса определения данных.

Инструкции SELECT

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

  • таблицы, в которых содержатся данные;

  • связи между данными из разных источников;

  • поля или вычисления, на основе которых отбираются данные;

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

  • необходимость и способ сортировки.

Предложения SQL

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

Предложение SQL

Описание

Обязательное

SELECT

Определяет поля, которые содержат нужные данные.

Да

FROM

Определяет таблицы, которые содержат поля, указанные в предложении SELECT.

Да

WHERE

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

Нет

ORDER BY

Определяет порядок сортировки результатов.

Нет

GROUP BY

В инструкции SQL, которая содержит статистические функции, определяет поля, для которых в предложении SELECT не вычисляется сводное значение.

Только при наличии таких полей

HAVING

В инструкции SQL, которая содержит статистические функции, определяет условия, применяемые к полям, для которых в предложении SELECT вычисляется сводное значение.

Нет

Термины SQL

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

Термин SQL

Сопоставимая часть речи

Определение

Пример

идентификатор

существительное

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

Клиенты.[НомерТелефона]

оператор

глагол или наречие

Ключевое слово, которое представляет действие или изменяет его.

AS

константа

существительное

Значение, которое не изменяется, например число или NULL.

42

выражение

прилагательное

Сочетание идентификаторов, операторов, констант и функций, предназначенное для вычисления одного значения.

>= Товары.[Цена]

К началу страницы

Основные предложения SQL: SELECT, FROM и WHERE

Общий формат инструкций SQL:

SELECT field_1FROM table_1WHERE criterion_1;

Примечания: 

  • Access не учитывает разрывы строк в инструкции SQL. Несмотря на это, каждое предложение рекомендуется начинать с новой строки, чтобы инструкцию SQL было удобно читать как тому, кто ее написал, так и всем остальным.

  • Каждая инструкция SELECT заканчивается точкой с запятой (;). Точка с запятой может стоять как в конце последнего предложения, так и на отдельной строке в конце инструкции SQL.

Пример в Access

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

1. Предложение SELECT

2. Предложение FROM

3. Предложение WHERE

Эту инструкцию SQL следует читать так: "Выбрать данные из полей "Адрес электронной почты" и "Компания" таблицы "Контакты", а именно те записи, в которых поле "Город" имеет значение "Ростов".

Разберем пример по предложениям, чтобы понять, как работает синтаксис SQL.

Предложение SELECT

SELECT [E-mail Address], Company

Это предложение SELECT. Оно содержит оператор (SELECT), за которым следуют два идентификатора ("[Адрес электронной почты]" и "Компания").

Если идентификатор содержит пробелы или специальные знаки (например, "Адрес электронной почты"), он должен быть заключен в прямоугольные скобки.

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

В инструкции SELECT предложение SELECT всегда стоит перед предложением FROM.

Предложение FROM

FROM Contacts

Это предложение FROM. Оно содержит оператор (FROM), за которым следует идентификатор (Контакты).

В предложении FROM не указываются поля для выборки.

Предложение WHERE

WHERE City="Seattle"

Это предложение WHERE. Оно содержит оператор (WHERE), за которым следует выражение (Город="Ростов").

Примечание: В отличие от предложений SELECT и FROM, предложение WHERE является необязательным элементом инструкции SELECT.

С помощью предложений SELECT, FROM и WHERE можно выполнять множество действий. Дополнительные сведения об использовании этих предложений см. в следующих статьях:

К началу страницы

Сортировка результатов: ORDER BY

Как и в Microsoft Excel, в Access можно сортировать результаты запроса в таблице. Используя предложение ORDER BY, вы также можете указать способ сортировки результатов при выполнении запроса. Если используется предложение ORDER BY, оно должно находиться в конце инструкции SQL.

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

Предположим, например, что результаты сначала нужно отсортировать по полю "Компания" в порядке убывания, а затем, если присутствуют записи с одинаковым значением поля "Компания", — отсортировать их по полю "Адрес электронной почты" в порядке возрастания. Предложение ORDER BY будет выглядеть следующим образом:

ORDER BY Company DESC, [E-mail Address]

Примечание: По умолчанию Access сортирует значения по возрастанию (от А до Я, от наименьшего к наибольшему). Чтобы вместо этого выполнить сортировку значений по убыванию, необходимо указать ключевое слово DESC.

Дополнительные сведения о предложении ORDER BY см. в статье Предложение ORDER BY.

К началу страницы

Работа со сводными данными: предложения GROUP BY и HAVING

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

SELECT COUNT([E-mail Address]), Company

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

Задание полей, которые не используются в агрегатной функции: предложение GROUP BY

При использовании агрегатных функций обычно необходимо создать предложение GROUP BY. В предложении GROUP BY указываются все поля, к которым не применяется агрегатная функция. Если агрегатные функции применяются ко всем полям в запросе, предложение GROUP BY создавать не нужно.

Предложение GROUP BY должно следовать сразу же за предложением WHERE или FROM, если предложение WHERE отсутствует. В предложении GROUP BY поля указываются в том же порядке, что и в предложении SELECT.

Продолжим предыдущий пример. Пусть в предложении SELECT агрегатная функция применяется только к полю [Адрес электронной почты], тогда предложение GROUP BY будет выглядеть следующим образом:

GROUP BY Company

Дополнительные сведения о предложении GROUP BY см. в статье Предложение GROUP BY.

Ограничение агрегированных значений с помощью условий группировки: предложение HAVING

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

Предположим, например, что к первому полю в предложении SELECT применяется функция AVG (которая вычисляет среднее значение):

SELECT COUNT([E-mail Address]), Company

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

HAVING COUNT([E-mail Address])>1

Примечание: Запрос может включать и предложение WHERE, и предложение HAVING, при этом условия отбора для полей, которые не используются в статистических функциях, указываются в предложении WHERE, а условия для полей, которые используются в статистических функциях, — в предложении HAVING.

Дополнительные сведения о предложении HAVING см. в статье Предложение HAVING.

К началу страницы

Объединение результатов запроса: оператор UNION

Оператор UNION используется для одновременного просмотра всех данных, возвращаемых несколькими сходными запросами на выборку, в виде объединенного набора.

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

Примечание: В запросах на объединение числовой и текстовый типы данных являются совместимыми.

Используя оператор UNION, можно указать, должны ли в результаты запроса включаться повторяющиеся строки, если таковые имеются. Для этого следует использовать ключевое слово ALL.

Запрос на объединение двух инструкций SELECT имеет следующий базовый синтаксис:

SELECT field_1FROM table_1UNION [ALL]SELECT field_aFROM table_a;

Предположим, например, что имеется две таблицы, которые называются "Товары" и "Услуги". Обе таблицы содержат поля с названием товара или услуги, ценой и сведениями о гарантии, а также поле, в котором указывается эксклюзивность предлагаемого товара или услуги. Несмотря на то, что в таблицах "Продукты" и "Услуги" предусмотрены разные типы гарантий, основная информация одна и та же (предоставляется ли на отдельные продукты или услуги гарантия качества). Для объединения четырех полей из двух таблиц можно использовать следующий запрос на объединение:

SELECT name, price, warranty_available, exclusive_offerFROM ProductsUNION ALLSELECT name, price, guarantee_available, exclusive_offerFROM Services;

Дополнительные сведения об объединении инструкций SELECT с помощью оператора UNION см. в статье Просмотр объединенных результатов нескольких запросов с помощью запроса на объединение.

К началу страницы

support.office.com

Оператор выбора SELECT структурированного языка запросов SQL. Синтаксис, примеры запросов.

⇐ ПредыдущаяСтр 8 из 35Следующая ⇒

 

Запросы на выборку SELECT. Основным оператором языка SQL, позволяющим осуществлять отбор информации из базы данных, является оператор SELECT, кото­рый в простейшем виде может быть задан следующим образом:

 

SELECT <список колонок, включаемых в ответ>

FROM <список таблиц>

WHERE <условие>.

 

Предложения SELECT (отобрать) и FROM (из) должны присут­ствовать обязательно. Условие WHERE (где) может быть опущено. Тогда в ответ войдут все строки, имеющиеся в таблице (если быть точным, то надо иметь в виду, что такой оператор должен соответ­ствовать реляционной операции «проекция», и если в результате про­екции на выбранные столбцы будут появляться дублирующие строки, то они должны быть удалены из ответа; однако SQL позволяет управлять выводом в ответ повторяющихся строк, и можно добиться как вывода только уникальных строк, так и включения в ответ повторяющихся строк).

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

Если в ответ должны войти все колонки, имеющиеся в исходной таблице, то вместо их перечисления в SELECT можно поставить знак «*».

Так, например, запрос «Выдать всю информацию из таблицы «Kadr» по сотрудникам, чей возраст (vozr) равен 40 годам» может быть представлен на SQL следующим образом:

SELECT * FROM kadr WHERE vozr=40;

Условие, задаваемое в предложении WHERE, может быть про­стым и сложным. Для формулирования сложного условия могут быть использованы логические операторы AND и OR. Так, например, зап­рос «Выдать всю информацию из таблицы «Kadr» по мужчинам, чей возраст равен 40 годам» (т.е. пол=«мужской» И «возраст=40 лет) может быть представлен на SQL следующим образом:

SELECT * FROM kadr WHERE vozr = 40 AND pol = «м»;

Оператор SELECT оперирует над множествами и результатом обработки в общем случае является множество строк. К этим множе­ствам могут быть применены теоретико-множественные операции объединение (UNION), пересечение (INTERSECTION), разность (DIFFERENCE, MINUS, EXCEPT) и др. В разных реализациях языка SQL наборы теоретико-множественных операций различаются.

Язык SQL позволяет запрашивать вычисляемые значения. В этом случае в предложении SELECT указывается выражение для вычисле­ния значения колонки. Например, в приведенном ниже предложении запрашивается вывод стоимости поставленных товаров путем ее вы­числения на основе хранящихся в таблице «Postypl» данных о коли­честве (kolv)поставленных товаров и их цены (сепа):

SELECT naimprod, datapost, kolv*cena

FROM postypl;

Запрос может быть простым, состоящим из одного оператора SELECT, и вложенным, когда один оператор SELECT включается в состав другого оператора. Этот включенный оператор называется подзапросом (subselect) или подчиненным запросом. Существуют два типа вложенных подзапросов: обычный и коррелированный. В обычном подзапросе внутренний запрос выполняется первым, и его результат используется для выполнения основного запроса. В коррелированном подзапросе внешний запрос выполняется первым, и его результат используется для выполнения внутреннего запроса. Внутренний запрос выполняется для каждой строки, возвращенной внешним зап­росом.

В запросе можно указать упорядоченность ответа по определен­ному признаку (полю, совокупности полей, выражению).

Возможна подгруппировка данных в целях получения подытогов или других обобщающих величин (среднее, минимум, максимум и др.). Набор агрегатных функций отличается в разных системах. В стан­дарт SQL-92 включены следующие агрегатные функции: Count- под­счет, Avg - среднее, Sum - сумма, Мах - максимум, Min минимум.

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

При выполнении запроса может возникнуть необходимость со­единения двух или более таблиц. Возможны разные способы задания условия соединения (вложенные запросы, задание условия соедине­ния в предложении WHERE, операция JOIN в предложении FROM).

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

Запросы могут использовать функции агрегирования. Стандарт предусматривает использование следующих функций агрегирования:

COUNT – подсчет;

SUM – сумма;

МАХ – максимум;

MIN – минимум;

AVG – среднее.

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

Существуют два типа функции COUNT. Первый тип использует символ «*». В этом случае функция подсчитывает количество строк в группе. Отдельные значения столбцов при этом не учитываются, и результат не будет зависеть от того, имеются ли в полях значения Null и указан ли параметр DISTINCT. Второй тип функции COUNT игно­рирует значения Null.

Если в ответ требуется включить все поля таблицы, то для этого можно использовать символ «*». Если запрос многотабличный, то следует применять конструкцию {спецификатор.*}

 

Жизненный цикл баз данных. Этапы проектирования баз данных. Модель сущность-связь. Модель IDEF1X

ЖЦ БД - совокупность этапов, которые проходит база данных на своём пути от создания до окончания использования.

Этапы ЖЦ БД:

- планирование разработки базы данных;

- определение требований к системе;

- сбор и анализ требований пользователей;

- проектирование базы данных: (концептуальное проектирование базы данных; логическое

физическое)

- разработка приложений: (проектирование транзакций; проектирование пользовательского интерфейса; реализация; загрузка данных; тестирование)

- эксплуатация и сопровождение: (анализ функционирования и поддержка исходного варианта БД; адаптация, модернизация и поддержка переработанных вариантов)

Модель "сущность-связь" (ER-модель) - модель данных, которая позволяет описывать концептуальные схемы с помощью обобщенных конструкций блоков. ER-модель - это мета-модель данных, то есть средство описания моделей данных. ER-модель удобна при проектировании информационных систем, баз данных, архитектур компьютерных приложений и других систем (моделей).

Типичные примеры использования ER-модели данных: IDEF1x.

Стандарт IDEF1X базируется на модели типа "Сущность-Связь". Основными компонентами стандарта IDEF1X являются следующие: сущности, атрибуты, связи.

Основными компонентами IDEF1X- модели являются:

Сущности, представляющие множество реальных или абстрактных предметов (людей, объектов, мест, событий, состояний, идей, пар предметов и т.д). Они изображаются блоками. Могут быть: независимые от идентификатора сущности; зависимые от идентификатора сущности.

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

Характеристики сущностей, изображаемые именами атрибутов внутри блоков. Атрибуты могут быть: неключевыми; первичными ключами; альтернативными ключами; внешними ключами.

 

 



stydopedya.ru