close

Вход

Забыли?

вход по аккаунту

?

1 Select

код для вставкиСкачать
Раздел 1 Выборка информации из базы данных
Цели
По окончании этого раздела вы должны уметь:
Перечислить основные свойства оператора SELECT
Выполнять базовые запросы выборки данных
Для доступа к данным используется предложение языка SQL –
SELECT.Он позволяет выполнять поиск и представлять данные самыми разными способами. Свойства оператора SELECT Выбор
Проектирование
Объединение
Свойства оператора SELECT
Оператор SELECT служит для доступа к данным, хранимым в базе данных. Используя оператор SELECT можно осуществлять следующие операции:
Выбора: можно отбирать только те строки, которые отвечают заданным критериям
Проектирования: можно выбирать столько столбцов, сколько необходимо, и только те столбцы в таблице, и которые необходимы.
Объединения: выборка данных может включать в себя информацию, хранимую в нескольких таблицах
Синтаксис оператора SELECT
select ::=
select [ all | distinct ] select_list [into_clause ]
[from_clause ]
[where_clause ]
[group_by_clause]
[having_clause ]
[order_by_clause ]
[compute_clause ]
[read_only_clause ]
[isolation_clause ]
[browse_clause ]
[plan_clause ]
select_list ::= {*, [alias = ] column_name | column_name [alias] | column_name [as alias], expr, @var = expr, … }
into_clause ::=
into [[database.]owner.]table_name
[ lock {datarows | datapages | allpages } ]
[ with into_ option [, into_ option] ...]
into_option ::= | max_rows_per_page = num_rows
| exp_row_size = num_bytes
| reservepagegap = num_pages | identity_gap = gap [existing table table_name]
[[external type] at "path_name"
[column delimiter delimiter]]
from_clause ::=
from table_reference [,table_reference]...
table_reference ::= table_view_name | ANSI_join table_view_name ::=
[[database.]owner.] {{table_name | view_name} [as] [correlation_name]
[index {index_name | table_name }] [parallel [degree_of_parallelism]]
[prefetch size ][lru | mru]}
[holdlock | noholdlock] [readpast]
[shared]
Синтаксис оператора SELECT
ANSI_join ::=
table_reference join_type join table_reference join_conditions join_type
::= inner | left [outer] | right [outer] join_conditions ::= on search_conditions where_clause ::= where search_conditions group_by_clause ::=
group by [all] aggregate_free_expression [, aggregate_free_expression]... having_clause ::=
having search_conditions order_by_clause ::=
order by sort_clause [, sort_clause]...
sort_clause ::=
{ [[[database.]owner.]{table_name.|view_name.}]column_name | select_list_number | expression
}
[asc | desc]
compute_clause ::=
compute row_aggregate(column_name)
[, row_aggregate(column_name)]...
[by column_name [, column_name]...]
read_only_clause ::=
for {read only | update [of column_name_list]}
isolation_clause ::=
at isolation
{ read uncommitted | 0 }
| { read committed | 1 }
| { repeatable read | 2 } | { serializable | 3 } browse_clause ::=
for browse
plan_clause ::=
plan "abstract plan"
SELECT какие столбцы выбирать
FROM из какой таблицы
Базовый синтаксис оператора SELECT
В своем простейшем виде оператор должен включать:
Предложение SELECT , которое определяет какие столбцы нужно включать в результат
Предложение FROM, которое определяет из какой таблицы будут извлекаться данные, где
DISTINCT -
подавляет вывод повторяющихся значений
•
* -
указывает на выбор всех столбцов
•
Alias -
Присваивает столбцом альтернативные имена
•
Column_name –
указывает имя выбираемого столбца
•
Expr -
любое выражение включающее арифметические выражения или вызовы встроенных функций
SELECT [DISTINCT] {*, [alias = ] column_name | column_name [alias] | column_name [as alias], expr, @var = expr, … }
FROM TABLE_NAME
Правила написания и принятые соглашения
Используя следующие простые правила вы можете создавать правильные SQL предложения, которые легко читать и легко редактировать:
SQL операторы нечувствительны к регистру
SQL операторы могут записываться в несколько строк
Отдельные ключевые слова должны быть записаны в одну строку
Порядок ключевых слов и предложений должен строго соблюдаться
Недопустимо использование сокращений ключевых слов
Предложения обычно записывают с новой строки
Для читабельности используют отступы и табуляцию
Выбор всех столбцов: SELECT *
> select * from suser
> go
USER_LOGIN USER_NAME1 USER_NAME2 USER_NAME3 USER_STATE -------------------
---------------------
-------------------------
----------
--------------------
AK010273ZVN Звягинцев Вячеслав Николаевич 1 AK010279ESN Ефремов Сергей Николаевич 1 AK010279SEV Шевченко Евгений Владимирович 1 AK010683LAG Листопад Артем Геннадиевич 1 …
Выбор всех столбцов и всех строк
.
Выбрать все строки и столбцы из таблицы можно указывая в предложении SELECT звездочку (*).(см. пример на слайде).
Второй очевидный способ выбрать все столбцы, перечислить их в предложении SELECT. Например, select USER_LOGIN, USER_NAME
1
, USER_NAME
2
, USER_NAME
3
, USER_STATE from suser
На слайде запрос выберет все столбцы и строки
Выбор отдельных столбцов
> SELECT
user_login, user_state, > FROM
suser
> go
USER_LOGIN USER_STATE -------------------
---------------------
AK010273ZVN 1 AK010279ESN 1 AK010279SEV 1 AK010683LAG 1 …
Отдельные столбцы, все строки.
Для выбора подмножества столбцов таблицы нужно просто перечислить их в списке выбора, разделяя их запятыми. Порядок вывода столбцов произвольный, в списке выбора их можно указывать в любом удобном порядке.
> SELECT
user_state
,
user_login > from
suser
> go
Заголовки
Выравнивание по умолчанию:
Влево : даты и символьные данные
Вправо: числовые данные
Регистр по умолчанию: Верхний Арифметические выражения
В списке выбора с числовыми данными и константами можно выполнять арифметические вычисления с использованием следующих операторов:
Эти операторы могут встречаться в любом месте, кроме выражения FROM. В качестве операндов могут выступать имена столбцов.
> SELECT
payment_id, payment_amt, payment_amt + 300
>
FROM
payment
>go
PAYMENT_ID PAYMENT_AMT --------------------
-----------------------
-----------------------
Krkb
4050600592 507.25 807.25
Деления
/
Остаток от деления
%
Умножения
*
Вычитания
-
Сложения
+
Порядок выполнения операторов
Порядок выполнения операторов подчиняется общепринятым правилам приоритетов арифметических операций:
Сначала выполняется умножение и деление, потом сложение и вычитание. Если в выражении присутствует несколько операторов с одинаковым приоритетом, они выполняются слева направо.
Максимальный приоритет имеют выражения в скобках.
> SELECT
payment_id, payment_amt, 12
*payment_amt + 300
> FROM
payment
PAYMENT_ID PAYMENT_AMT -----------------------
-----------------------
-----------------------
Krkb
4050600592 507.25 6387.00
> SELECT
payment_id, payment_amt, 12
*(payment_amt + 300
)
> FROM
payment
PAYMENT_ID PAYMENT_AMT -----------------------
---------------------
-----------------------
Krkb
4050600592 507.25 9687.00
Значения NULL NULL –
значение недоступно, неизвестно или неприменимо NULL –
это не тоже самое, что и нуль или пробел.
> SELECT
client_id, client_nam
1
, client_nam
2
, client_nam
3 > FROM
client
CLIENT_ID CLIENT_NAM
1 CLIENT_NAM
2 CLIENT_NAM
3 --------------
------------------------------------------------------
-----------------------------
------------------
----------------
444444 ШЕВЧЕНКО, ОАО ШЕВЧ, ОАО NULL
222222 ПЕТРЕНОК, ОАО ПЕТР, ОАО ПЕТРЕНОК, ОАО
333333 ИВАНЕНКО, ОАО ИВАН, ОАО NULL
Если в каком
-
нибудь столбце строки отсутствуют данные, то говорят, что значение равно NULL или, что он содержит NULL. Значение NULL означает, что значение , недоступно, неизвестно или неприменимо. NULL нужно отличать от арифметического нуля или пробела.
NULL могут содержать столбцы любого типа, если они не определены как NOT NULL или входят в состав первичного ключа.
NULL в арифметических выражениях
Как нетрудно догадаться, любые арифметические операции, в которых в качестве операнда используется NULL, в результате дают NULL.
> SELECT 12
/null
---------------
NULL
Если значение любого столбец в арифметическом выражении равно NULL, то результат выражения тоже будет равен NULL.Например, если попытаться разделить какое
-
нибудь число на ноль, то результатом будет ошибка. Но, при попытке деления на NULL, результатом будет NULL.
Заголовки (псевдонимы) столбцов
Псевдонимы позволяют:
Переопределить названия столбцов, выводимых по умолчанию
Сделать понятным вывод арифметических выражений
Варианты записи
Псевдоним
символ «равно» («=»)
имя столбца
или выражение
имя столбца
или выражение
опционально ключевое слово «
AS
» псевдоним
Если псевдоним содержит пробелы или спец. символы, его необходимо заключать в двойные кавычки.
При выводе результатов запроса каждый столбец по умолчанию получает заголовок, совпадающий с его именем в базе данных.Во многих случаях эти имена не достаточно информативны и их смысл трудно понять пользователю.
Для упрощения чтения и понимания результатов запроса можно переопределять заголовки столбцов по умолчанию. Использование псевдонимов
>
SELECT
Идентификатор=payment_id, payment_amt «Сумма платежа», > 12
*payment_amt + 300 AS “
12 х платежа + 300
”
>
FROM
payment
Идентификатор Сумма платежа 12 х платежа
+ 300
-----------------------
-----------------------
-----------------------
Krkb
4050600592 507.25 6387.00
Оператор конкатенации и литералы
Оператор конкатенации Соединяет столбцы и/или символьные строки с другими столбцами
Обозначается «+»
Результат операции конкатенации символьная строка Чтобы сделать результаты запроса более понятными, иногда имеет смысл добавить к ним небольшие пояснения.
Литералы -
это символьные данные включенные в предложение SELECT, которые не являются именем столбца или псевдонимом. Для того, чтобы отличать первые от вторых, литералы необходимо заключать в двойные или одинарные кавычки.
Литерал будет выводиться для каждой результирующей строки.
Если в самом литерале имеется символ совпадающий с символами его определяющими, то он (символ) должен быть продублирован.
Пример использования оператора сложения и символьных строк.
>
SELECT
‘Пользователь ’, ‘USER’’S NAME IS’ = user_name1+ ‘ ‘ + user_name2 +‘ ’ + user_name3, > Login = ‘ имеет логин ’ + user_login
> FROM
suser
USER'S NAME IS Login -
--------------
-----
Пользователь Звягинцев Вячислав Николаевич имеет логин AK010273ZVN Пользователь Ефремов Сергей Николаевич имеет логин AK010279ESN Пользователь Шевченко Евгений Владимирович имеет логин AK010279SEV Пользователь Листопад Артем Геннадиевич имеет логин AK010683LAG Пользователь Яугела Светлана Леонидовна имеет логин AK010970JSL Повторяющиеся значения
>
SELECT
user_name2 FROM
suser
USER_NAME
2 ----------
Вячеслав Сергей Евгений Артем Марина Юлия Юлия Елена Юлия Инна Если не указано обратное, и SQL Advantage и isql возвращают полный набор строк, т.е. по умолчанию режим вывода результатов таков, как если бы в предложении SELECT было указано ключевое слово ALL.
Cпособы устранение повторяющихся значений
Для подавления вывода дублирующихся строк используется ключевое слово DISTINCT в предложении SELECT.
>
SELECT
DISTINCT
user_name
2 FROM
suser
USER_NAME
2 ----------
Вячеслав Сергей Евгений Артем Марина Юлия Елена Инна Синтаксис DISTINCT
Ключевые слова DISTINCT и ALL можно использовать в запросе только один раз и они должны стоять в начале списка выбора.
Например, такой оператор вызовет ошибку:
>
SELECT
user_name2, DISTINCT
user_name3
>
FROM
suser
Если в списке выбора находится несколько элементов, при использовании ключевого слова DISTINCT выбираются только строки с уникальной комбинацией значений этих элементов.
Хотя по определению, NULL значения нельзя сравнивать, при использовании DISTINCT все NULL значения считаются повторяющимися. Т.е. если бы в таблице users для нескольких пользователей не было задано отчество, то в результате выполнения запроса >
SELECT DISTINCT
user_name2, user_name3
>
FROM
suser
была бы выбрана только одна комбинация имя –
NULL. Синтаксис DISTINCT
DISTINCT *. Данная конструкция должна возвращать полный набор строк, так как все строки в таблице должны быть уникальны. В противном случае, были допущены серьезные ошибки при проектировании.
DISTINCT & ORDER BY. В большинстве диалектов SQL каждый элемент предложения ORDER BY должен обязательно присутствовать и в списке выбора. Transact
-
SQL под вывеской большей гибкости предоставляет расширения этого правила
>
SELECT
DISTINCT
user_name
2 >
FROM
suser
>
ORDER BY
user_name
3
Этот запрос возвращает больше строк (
19
), чем запрос без ORDER BY (
16
).
>
SELECT DISTINCT
user_name
2
>
FROM
suser
Transact
-
SQL находит все возможные комбинации значений элементов из списка выбора DISTINCT и предложения ORDER BY.
, user_name3
Выводы
Select [distinct]{*, [alias = ] column [alias], …}
From table
В этом разделе мы в общих чертах рассмотрели каким образом с помощью оператора Select можно извлекать информацию из базы данных.
Указывает таблицу содержащую данные
FROM table
Указывает заголовок для столбца при выводе результатов
аlias
Выбор указанного столбца
сolumn
Выбор всех столбцов
*
Удаление дубликатов строк
DISTINCT
Список из как минимум одного столбца
SELECT
Обзор практический занятий
Выбор всех данных из разных таблиц
Выбор определенных столбцов
Вычисление арифметических выражений над данными из таблиц
Удаление повторяющихся строк из результатов запроса.
Лабораторная работа № 2
1
. Будет ли следующий оператор выполнен без ошибки? (ДА/Нет)
SELECT syslogins.* FROM syslogins
2
. Будет ли следующий оператор выполнен без ошибки? (ДА/Нет)
SELECT suid, name name, dbname name, fullname
FROM syslogins
2
. Будет ли следующий оператор выполнен без ошибки? (ДА/Нет)
SELECT suid user, name name, dbname dbname, fullname FROM syslogins
3
. Найдите 4 синтаксических ошибки в следующем операторе:
SELECT payment_id, payment_amount
2 x payment_amt двойная сумма
FROM payment
4
. Выберите все данные из таблицы SYSLOGINS.
5
. Выберите номер счета, его наименование, дату открытия и дату последней модификации. Напишите запрос так, чтобы наименование счета выводилось на первом месте (Таблица ACCOUNT).
6
. Создайте запрос, который выводит уникальный список имен пользователей.
7
. В запросе из п.
5
, определите псевдонимы для выводимых столбцов Название, Номер счета, Дата открытия, Date last modification, соответственно.
8
. Создайте запрос выводящий в одной строке имя, отчество, фамилию и логин пользователей. Имя и отчество должны быть разделены пробелом, фамилия отделена от них запятой, между фамилией и логином должна быть фраза «имеет логин». Озаглавьте вывод фразой: «Список пользователей».
Автор
sa
Документ
Категория
Презентации
Просмотров
296
Размер файла
206 Кб
Теги
1_select
1/--страниц
Пожаловаться на содержимое документа