Типы данных SQL (Как в Pg , как в стандарте)
Строковые типы
Числовые типы данных
Денежные, Символьные, Двоичные типы данных
Логический тип. Перечисления
Примеры простейших SQL-запросов
Простейшие SELECT-запросы
Оператор SELECT (выбрать) языка SQL является самым важным и самым часто используемым оператором. Он предназначен для выборки информации из таблиц базы данных. Упрощенный синтаксис оператора SELECT выглядит следующим образом.
SELECT [ ALL | DISTINCT ] select_item_commalist
FROM table_reference_commalist
[ WHERE conditional_expression ]
[ GROUP BY column_name_commalist ]
[ HAVING conditional_expression ]
[ ORDER BY order_item_commalist ]
В квадратных скобках указаны элементы, которые могут отсутствовать в запросе.
Ключевое слово SELECT сообщает базе данных, что данное предложение является запросом на извлечение информации.
После слова SELECT через запятую перечисляются наименования полей (список атрибутов), содержимое которых запрашивается.
Обязательным ключевым словом в предложении-запросе SELECT является слово FROM (из). За ключевым словом FROM указывается список разделенных запятыми имен таблиц, из ко-торых извлекается информация.
Например, select title, description from film
Любой SQL-запрос должен заканчиваться символом «;» (точка с запятой). Результатом данного запроса будет таблица...
Порядок следования столбцов в этой таблице соответствует порядку полей, указанному в запросе
Если необходимо вывести значения всех, столбцов таблицы, то можно вместо перечисления их имен использовать символ «*» (звездочка).
SELECT * FROM film;
В данном случае результатом выполнения запроса будет вся таблица film.
Еще раз обратим внимание на то, что получаемые в результате SQL-запроса таблицы не в полной мере отвечают определению реляционного отношения. В частности, в них могут оказаться кортежи (строки) с одинаковыми значениями атрибутов.
Например, запрос «список имен актеров», можно записать в следующем виде.
select first_name from actor;
Его результатом будет таблица, в таблице встречаются одинаковые строки. Для исключения из результата SELECT-запроса повторяющихся записей используется ключевое слово DISTINCT (отличный).
Если запрос SELECT извлекает множество полей, то DISTINCT исключает дубликаты строк, в которых значения всех выбранных полей идентичны.
Предыдущий запрос можно записать в следующем виде.
select distinct first_name from actor;
В результате получим таблицу, в которой дубликаты строк исключены.
Ключевое слово ALL (все), в отличие от DISTINCT, оказывает противоположное действие, то есть при его использовании повторяющиеся строки включаются в состав выходных данных. Режим, задаваемый ключевым словом ALL, действует по умолчанию, поэтому в реальных запросах для этих целей оно практически не используется.
Использование в операторе SELECT предложения, определяемого ключевым словом WHERE (где), позволяет задавать выражение условия (предикат), принимающее значение истина или ложь для значений полей строк таблиц, к которым обращается оператор SELECT. Предложение WHERE определяет, какие строки указанных таблиц должны быть выбраны. В таблицу, яв-ляющуюся результатом запроса, включаются только те строки, для которых условие (предикат), указанное в предложении WHERE, принимает значение истина.
Пример: Написать запрос, выполняющий выборку фамилий всех актеров с именем PENELOPE
select last_name from actor
where first_name="PENELOPE";
В задаваемых в предложении WHERE условиях могут использоваться операции сравнения, определяемые операторами = (равно), > (больше), < (меньше), >= (больше или равно), <- (меньше или равно), <> (не равно), а также логические операторы AND, OR И NOT.
Например, запрос для получения названий и описаний фильмов - короткометражек (короче 60 мин), прокат которых стоит меньше 3$ , будет выглядеть таким образом:
select title, description from film
where length < 60 and rental_rate < 3
Результат выполнения этого запроса имеет вид:
rental - прокат
inventory - опись, запасы
store- запас, магазин
Оператор языка SQL SELECT предназначен для запросов на выборку данных из базы данных. Он может быть использован как без условий (выбор всех строк во всех столбцах или всех строк в определённых столбцах), так и с многочисленными условиями (выбор определённых строк), которые заданы в секции WHERE. Ознакомимся со средствами SQL, которыми можно задавать эти условия на выборку данных, а также узнаем, как использовать оператор SELECT в подзапросах.
SELECT для выбора столбцов таблицы
Запрос с оператором SELECT для выбора всех столбцов таблицы имеет следующий синтаксис:
SELECT * FROM ИМЯ_ТАБЛИЦЫ
То есть для выбора всех столбцов таблицы после слова SELECT нужно ставить звёздочку.
Пример 1. Есть база данных фирмы - Company. В ней есть таблица Org (Структура фирмы) и Staff (Сотрудники). Требуется выбрать из таблиц все столбцы. Соответствующий запрос для выбора всех столбцов из таблицы Org выглядит следующим образом:
SELECT * FROM ORG
Этот запрос вернёт следующее (для увеличения картинки щёлкнуть по ней левой кнопкой мыши):
Запрос для выбора всех столбцов из таблицы Staff выглядит следующим образом:
SELECT * FROM STAFF
Этот запрос вернёт следующее:
![](https://i0.wp.com/function-x.ru/image/select2.jpg)
Для выбора определённых столбцов таблицы нам потребуется вместо звёздочки перечислить через запятую названия всех столбцов, которые требуется выбрать:
SELECT ВЫБИРАЕМЫЕ_СТОЛБЦЫ FROM ИМЯ_ТАБЛИЦЫ
Пример 2. Пусть требуется из таблицы Org выбрать столбцы Depnumb и Deptname, в которых содержатся данные соответственно о номерах отделов фирмы и об их названиях. Запрос для получения такой выборки будет следующим:
SELECT DEPNUMB, DEPTNAME FROM ORG
А из таблицы Staff нужно выбрать столбцы DEPT, NAME, JOB, в которых содержатся соответственно данные о номере отдела, в котором трудится сотрудник, его имени и должности:
SELECT и ORDER BY - сортировка (упорядочение) строк
Разобранные до сих пор запросы SQL SELECT возвращали строки, которые могли быть расположены в любой последовательности. Однако часто требуется отсортировать строки по порядку номеров, алфавиту и другим признакам. Для этого служит ключевое словосочетание ORDER BY. Такие запросы имеют следующий синтаксис:
Пример 15. Пусть требуетя выбрать из таблицы Staff сотрудников, работающих в отделе с номером 84 и отсортировать (упорядочить) записи по числу отработанных лет в возрастающем порядке:
Слово ASC указывает, что порядок сортировки - возрастающий. Это слово не обязательно, так как возрастающий порядок сортировки применяется по умолчанию. Результат выполнения запроса:
![](https://i2.wp.com/function-x.ru/image/select11.jpg)
Пример 16. Пусть требуетя выбрать те же данные, что и в предыдущем примере, но отсортировать (упорядочить) записи по числу отработанных лет в убывающем порядке.
Синтаксис:
* где fields1
— поля для выборки через запятую, также можно указать все поля знаком *; table
— имя таблицы, из которой вытаскиваем данные; conditions
— условия выборки; fields2
— поле или поля через запятую, по которым выполнить сортировку; count
— количество строк для выгрузки.
* запрос в квадратных скобках не является обязательным для выборки данных.
Простые примеры использования select
1. Обычная выборка данных:
> SELECT * FROM users
2. Выборка данных с объединением двух таблиц (JOIN):
SELECT u.name, r.* FROM users u JOIN users_rights r ON r.user_id=u.id
* в данном примере идет выборка данных с объединением таблиц users и users_rights . Объединяются они по полям user_id (в таблице users_rights) и id (users). Извлекается поле name из первой таблицы и все поля из второй.
3. Выборка с интервалом по времени и/или дате
а) известна точка начала и определенный временной интервал:
* будут выбраны данные за последний час (поле date ).
б) известны дата начала и дата окончания:
25.10.2017 и 25.11.2017 .
в) известны даты начала и окончания + время:
* выбираем данные в промежутке между 25.03.2018 0 часов 15 минут и 25.04.2018 15 часов 33 минуты и 9 секунд .
г) вытаскиваем данные за определенные месяц и год:
* извлечем данные, где в поле date присутствуют значения для апреля 2018 года.
4. Выборка максимального, минимального и среднего значения:
> SELECT max(area), min(area), avg(area) FROM country
* max — максимальное значение; min — минимальное; avg — среднее.
5. Использование длины строки:
* данный запрос должен показать всех пользователей, имя которых состоит из 5 символов.
Примеры более сложных запросов или используемых редко
1. Объединение с группировкой выбранных данных в одну строку (GROUP_CONCAT):
* из таблицы users извлекаются данные по полю id , все они помещаются в одну строку, значения разделяются запятыми .
2. Группировка данных по двум и более полям:
> SELECT * FROM users GROUP BY CONCAT(title, "::", birth)
* итого, в данном примере мы сделаем выгрузку данных из таблицы users и сгруппируем их по полям title и birth . Перед группировкой мы делаем объединение полей в одну строку с разделителем :: .
3. Объединение результатов из двух таблиц (UNION):
> (SELECT id, fio, address, "Пользователи" as type FROM users)
UNION
(SELECT id, fio, address, "Покупатели" as type FROM customers)
* в данном примере идет выборка данных из таблиц users и customers .
4. Выборка средних значений, сгруппированных за каждый час:
SELECT avg(temperature), DATE_FORMAT(datetimeupdate, "%Y-%m-%d %H") as hour_datetime FROM archive GROUP BY DATE_FORMAT(datetimeupdate, "%Y-%m-%d %H")
* здесь мы извлекаем среднее значение поля temperature из таблицы archive и группируем по полю datetimeupdate (с разделением времени за каждый час).
Вставка (INSERT)
Синтаксис 1:
> INSERT INTO