Слайд 2Типы данных sql (interbase)
BLOB
Синтаксис: BLOB
Размер: Переменный
Диапазон/Точность: Нет
Описание: Большой двоичный объект.
Сохраняет данные большого объема, такие как графика, текст и цифровой
звук. Основная структура модуля: сегмент. Cубтип данных BLOB описывается в их контексте.
CHAR
Синтаксис: CHAR(n)
Размер: n символов
Диапазон/Точность: от 1 до 32767 байтов. Размер символа кодировки определяет максимальное число символов, которые разместятся в 32K.
Описание: Фиксированной длины CHAR или строка текста. Альтернативное ключевое слово: CHARACTER
Слайд 3Типы данных sql (interbase)
DATE
Синтаксис: DATA
Размер: 64 бита
Диапазон/Точность: от 1 янв
100 до 11 янв 5941
Описание: Так же включает информацию о
времени.
DECIMAL
Синтаксис: DECIMAL (precision, scale)
Размер: Переменный
Диапазон/Точность: precision = от 1 до 15. Определяет, что сохраняется, по крайней мере precision цифр числа. scale = от 1 до 15. Определяет число знаков после запятой. Должно быть меньше или равно precision.
Описание: Для примера, DECIMAL(10,3) сохраняет числа точно в следующем формате: ppppppp.sss
Слайд 4Типы данных sql (interbase)
DOUBLE PRECISION
Синтаксис: DOUBLE PRECISION
Размер: 64 бита
Диапазон/Точность: от
1.7E-308 до 1.7E308
Описание: Для научных вычислений: 15 цифр точности.
Обратите внимание:
Текущий размер типа DOUBLE зависит от платформы. Большинство платформ поддерживает размер в 64 бита.
FLOAT
Синтаксис: FLOAT
Размер: 32 бита
Диапазон/Точность: от 3.4E-38 до 3.4E38
Описание: Одиночная точность: 7 цифр точности.
Слайд 5Типы данных sql (interbase)
INTEGER
Синтаксис: INTEGER
Размер: 32 бита
Диапазон/Точность: от -2 147 483 648 до
2 147 483 648
Описание: Длинное целое со знаком (long, longword).
NUMERIC
Синтаксис: NUMERIC (precision, scale)
Диапазон/Точность:
precision = от 1 до 15. Определяет, что сохраняется, по крайней мере precision цифр числа. scale = от 1 до 15. Определяет число знаков после запятой. Должно быть меньше или равно precision.
Описание: Для примера, NUMERIC(10,3) сохраняет числа точно в следующем формате: ppppppp.sss
Слайд 6Типы данных sql (interbase)
SMALLINT
Синтаксис: SMALLINT
Размер: 16 бит
Диапазон/Точность: от -32768 до
32767
Описание: Короткое целое со знаком. (shot, word).
VARCHAR
Синтаксис: VARCHAR (n)
Размер: n
символов
Диапазон/Точность: от 1 до 32767 байтов. Размер символа кодировки определяет максимальное число символов, которые разместятся в 32K.
Описание: переменной длины CHAR или строка текста. Альтернативные ключевые слова: VARYING CHAR, VARYING CHARACTER.
Слайд 7Типовая базА данных
Рассматриваема база данных будет иметь три таблицы Продавцов
(SALESPEOPLE), Клиентов (CUSTOMERS), Заказы (ORDERS)
Структура таблиц:
TABLE SALESPEOPLE
SNUM
ID_INT NOT NULL /* ID_INT = INTEGER NOT NULL */, (уникальный номер назначенный каждому продавцу)
SNAME NAME /* NAME = VARCHAR(50) */, (имя продавца)
CITY N_CITY /* N_CITY = VARCHAR(50) */, (расположение продавца)
COMM NUM_K /* NUM_K = NUMERIC(5,2) */(комиссионные продовцов)
Слайд 8Типовая базА данных
TABLE CUSTOMERS
CNUM ID_INT NOT
NULL /* ID_INT = INTEGER NOT NULL */, (уникальный номер
назначенный каждому клиенту)
CNAME NAME /* NAME = VARCHAR(50) */, (имя клиента)
CITY N_CITY /* N_CITY = VARCHAR(50) */, (расположение клиента)
RATING ID_INT /* ID_INT = INTEGER NOT NULL */, (число указывающее уровень предпочтения данного клиента перед другими. Большое число указывает на большее предпочтение)
SNUM ID_INT /* ID_INT = INTEGER NOT NULL */ (номер продавца, назначенного этому клиенту (из таблицы продавцов))
Слайд 9Типовая базА данных
TABLE ORDERS
ONUM ID_INT NOT
NULL /* ID_INT = INTEGER NOT NULL */, (уникальный номер
данный каждому заказу)
AMT NUM_K /* NUM_K = NUMERIC(5,2) */, (сумма заказа)
ODATE DATE_Z /* DATE_Z = DATE */, (дата заказа)
CNUM ID_INT /* ID_INT = INTEGER NOT NULL */, (номер клиента, разместившего заказ (из таблицы Клиентов))
SNUM ID_INT /* ID_INT = INTEGER NOT NULL */ (номер продавца, исполняющего заказ (из таблицы продавцов))
Слайд 10Содержание таблиц
Таблица продавцов (SALESPEOPLE)
Слайд 11Содержание таблиц
Таблица клиентов (CUSTOMERS)
Слайд 12Содержание таблиц
Таблица заказов (ORDERS)
Слайд 13Извлечение информации из таблиц
ЧТО ТАКОЕ ЗАПРОС?
Запрос - это команда,
которую вы даете вашей СУБД, и которая сообщает системе какую
именно информацию и из каких таблиц базы данных необходимо вывести. Эта информация обычно посылается непосредственно на экран компьютера или терминала, которым вы пользуетесь, хотя, в большинстве случаев, ее можно также послать на принтер, сохранить в файле, или представить как вводную информацию для другой команды.
Слайд 14Извлечение информации из таблиц
КОМАНДА SELECT
В самой простой форме, команда SELECT
просто приказывает СУБД извлечь информацию из таблицы. Например, вы могли
бы вывести таблицу Продавцов,
напечатав следующее:
SELECT snum, sname, city, comm FROM Salespeople;
Вывод для этого запроса:
Слайд 15Извлечение информации из таблиц
SELECT - ключевое слово, которое сообщает СУБД,
что эта команда запрос. Все запросы начинаются этим словом, сопровождаемым
пробелом.
FROM - ключевое слово, которое должно быть представлено в каждом запросе. Оно сопровождается пробелом и затем именем таблицы, используемой в качестве источника информации.
; - точка с запятой используется во всех интерактивных командах SQL, чтобы сообщать СУБД что команда введена полностью и готова выполниться
Слайд 16Извлечение информации из таблиц
ВЫБИРАЙТЕ ВСЕГДА САМЫЙ ПРОСТОЙ СПОСОБ
Если вы хотите
видеть каждый столбец таблицы в выводе вашего запроса, имеется необязательное
сокращение, которое вы можете использовать. Звездочка * может применяться для вывода полного списка столбцов
следующим образом:
SELECT * FROM Salespeople;
Это равносильно:
SELECT snum, sname, city, comm FROM Salespeople;
Слайд 17Извлечение информации из таблиц
ПРОСМОТР ТОЛЬКО ОПРЕДЕЛЕННОГО СТОЛБЦА ТАБЛИЦЫ
Команда SELECT способна
извлечь строго определенную информацию из таблицы. Сначала мы продемонстрируем возможность
увидеть только определенные столбцы таблицы. Это выполняется легко, простым исключением столбцов, которые вы не хотите видеть, из списка столбцов команды SELECT. Например, запрос:
SELECT sname, comm FROM Salespeople;
Слайд 18Извлечение информации из таблиц
ПЕРЕУПОРЯДОЧЕНИЕ СТОЛБЦОВ
Даже если столбцы таблицы, по определению,
упорядочены, это не означает, что вы обязаны извлекать, их в
том же порядке. Звездочка * покажет все столбцы в их естественном порядке, но если вы перечислите столбцы отдельно, вы можете получить их в том порядке, в котором хотите. Например:
SELECT odate, snum, onum, amt FROM orders;
Вывод
Слайд 19Извлечение информации из таблиц
УДАЛЕНИЕ ИЗБЫТОЧНЫХ ДАННЫХ
Аргумент DISTINCT (ОТЛИЧИЕ) дает вам
возможность, устранять повторяющиеся значения из вывода вашего запроса. Предположим, что
вы хотите знать, какие продавцы в настоящее время имеют заказы в таблице Заказов, для этого вводим:
SELECT snum FROM Orders;
Слайд 20Извлечение информации из таблиц
Видим повторяющиеся номера продавцов: 1001, 1002, 1007.
Для
того что их устранить вводим:
SELECT DISTINCT snum FROM Orders;
Однако если
вы не хотите потерять некоторые данные, вы не должны безоглядно использовать DISTINCT, потому что это может скрыть какую- то проблему или какие то важные данные. Например, вы могли бы предположить, что имена всех наших клиентов различны. Если кто-то помещает второго Андреева в таблицу Клиентов, а вы используете SELECT DISTINCT cname, вы не будете даже знать о существовании двойника. Вы можете получить не того Андреева или даже не знать об этом.
Слайд 21Извлечение информации из таблиц
Если предложение выбирает несколько полей, DISTINCT опускает
строки, где все выбранные поля идентичны. Строки, в которых значения
некоторых полей одинаковы, а некоторых различны, будут сохранены.
DISTINCT ВМЕСТО ALL
Вместо DISTINCT вы можете указать ALL. Это будет иметь противоположный эффект, дублирование строк вывода сохранится. Так как это тот же самое, что и не указывать ни DISTINCT ни ALL, то ALL, по существу, скорее пояснительный, а не действующий аргумент.
Слайд 22Извлечение информации из таблиц
КВАЛИФИЦИРОВАННЫЙ ВЫБОР С ИСПОЛЬЗОВАНИЕМ ПРЕДЛОЖЕНИЯ WHERE
Таблицы имеют
тенденцию становиться очень большими, ведь с течением времени в них
добавляются все новые строки. Поскольку обычно не все, а только определенные строки интересуют вас: в данное время, SQL дает вам возможность указать какие строки будут выбраны для вывода.
WHERE - предложение команды SELECT, позволяющее вам устанавливать предикаты (логические выражения с переменными), которые могут оказаться верными или неверными для любой строки таблицы.
Слайд 23Извлечение информации из таблиц
Команда извлекает только те строки из таблицы,
для которых предикат верен.
Например, вы хотите видеть имена и комиссионные
всех продавцов в Благовещенске. Вы можете ввести такую команду:
SELECT sname, city FROM Salespeople WHERE city='Благовещенск';
Когда предложение WHERE присутствует, СУБД просматривает всю таблицу по одной строке и определяет верен ли предикат для каждой строки.
Слайд 24Извлечение информации из таблиц
Рассмотрим пример с числовым полем в предложении
WHERE . Поле rating таблицы Клиентов предназначено для того, чтобы
разделять клиентов на группы на основании некоторых критериев. Возможно, это форма оценки кредита клиента, или оценка, связанная с предыдущими заказами клиента. Такие числовые оценки могут быть полезны в реляционных базах данных как способ подведения итогов обработки сложной информации. Мы можем выбрать всех клиентов с рейтингом 100, следующим образом:
SELECT * FROM Customers WHERE rating = 100;
Одиночные кавычки не используются здесь потому, что рейтинг числовое поле.
Слайд 25Извлечение информации из таблиц
Результат вывода:
Слайд 26Извлечение информации из таблиц
************* РАБОТА С SQL ***************
Напишите команду SELECT,
которая бы вывела номер заказа, сумму и дату для всех
строк из таблицы Заказов.
Напишите запрос, который вывел бы все строки из таблицы Клиентов, дня которых номер продавца - 1001.
Напишите запрос, который вывел бы таблицу со столбцами в следующем порядке: city, sname, snum, comm.
Напишите команду SELECT, которая вывела бы оценку (rating), сопровождаемую именем каждого клиента в Шимоновске.
Напишите запрос, который вывел бы значения snum всех продавцов в текущем порядке из таблицы Заказов без каких бы то ни было повторений.
Слайд 27Использование реляционных и булевых операторов
РЕЛЯЦИОННЫЕ ОПЕРАТОРЫ
Реляционный оператор - математический
символ, который указывает на определенный
тип сравнения двух значений.
Предположим, что вы хотите видеть всех Продавцов, комиссионные которых превышают определенное значение. Вы можете использовать оператор "больше чем" (>). Реляционные операторы, которыми располагает SQL :
= Равно
> Больше чем
< Меньше чем
>= Больше чем или равно
<= Меньше чем или равно
<> Не равно
Слайд 28Использование реляционных и булевых операторов
Предположим, что вы хотите увидеть всех
клиентов с оценкой (rating) выше 200. Так как 200 -
это скалярное значение, как и значение в столбце rating, для их сравнения вы можете использовать реляционный оператор.
SELECT * FROM Customers WHERE rating > 200;
Вывод
Слайд 29Использование реляционных и булевых операторов
БУЛЕВЫ ОПЕРАТОРЫ
Основные логические операторы также распознаются
в SQL. Выражения Буля являются или верными или неверными, подобно
предикатам. Булевы операторы связывают одно или более верных или неверных значений и производят единственное верное или неверное значение.
Стандартными логическими операторами, распознаваемыми в SQL, являются AND, OR и NOT.
Существуют другие, более сложные, логические операторы (типа "исключающей или"), но они могут быть сформированы из этих трех простых операторов.
Слайд 30Использование реляционных и булевых операторов
Пример
SELECT * FROM Customers WHERE city
= 'Шимоновск' AND rating > 200;
SELECT * FROM Customers
WHERE city = 'Шимоновск ' OR rating >200;
Слайд 31Использование реляционных и булевых операторов
NOT может использоваться для инвертирования значений
Буля. Пример запроса с NOT:
SELECT * FROM Customers WHERE
city = 'Шимоновск' OR NOT rating > 200;
Все записи за исключением Курапаткина были выбраны. Курапаткин не был в Шимоновске, и его рейтинг больше чем 200, так что он потерпел неудачу при обеих проверках. В каждой из других строк встретился один или другой, или оба критерия.
Слайд 32Использование реляционных и булевых операторов
Обратите внимание, что
оператор NOT должен предшествовать Булеву оператору, чье
значение он изменяет, и не должен помещаться перед реляционным оператором. Например, неправильным будет:
rating NOT > 200
А как SQL оценит следующее?
SELECT * FROM Customers WHERE NOT city = 'Шимоновск' OR rating > 200;
NOT применяется здесь только к выражению :
city = 'Шимоновск', или к выражению rating > 200 тоже?
SQL применяет NOT к логическому выражению, которое непосредственно следует за NOT.
Слайд 33Использование реляционных и булевых операторов
Совершенно другой результат от запроса:
SELECT *
FROM Customers WHERE NOT (city = 'Шимоновск' OR rating
> 200);
Здесь SQL берет каждую строку и определяет, соответствует ли истине равенство city = 'Шимоновск' или равенство rating >200. Если любое условие верно, выражение Буля внутри круглых скобок верно. Однако, если выражение Буля внутри круглых скобок верно, предикат как единое целое неверен, потому что NOT преобразует верно в неверно, и наоборот.
Слайд 34Использование реляционных и булевых операторов
Проследить логику выражения:
SELECT * FROM
Orders
WHERE NOT ((odate = '10.03.2012' AND snum
> 1002) OR amt > 2000.00) ;
Слайд 35Использование реляционных и булевых операторов
SELECT * FROM Orders
WHERE
NOT ((odate = '10.03.2012' AND snum > 1002)
OR amt > 2000.00) ;
Слайд 36Использование реляционных и булевых операторов
1. Напишите запрос, который может дать
вам все заказы со значениями суммы выше чем $1,000.
2. Напишите
запрос, который может выдать вам поля sname и city для всех продавцов в Благовещенске с комиссионными выше 0.10 .
3. Напишите запрос к таблице Клиентов, чей вывод может включить всех клиентов с оценкой =< 100, если они не находятся в Риме.
4. Что может быть выведено в результате следующего запроса ?
SELECT * FROM Orders
WHERE (amt < 1000 OR NOT (odate=’10.03.1990’ AND snum > 2003 ) ) ;
5. Что может быть выведено в результате следующего запроса ?
SELECT * FROM Orders
WHERE NOT ((odate = ’10.03.1990’ OR snum > 1006) AND amt > = 1500 );
6. Как можно проще переписать такой запрос ?
SELECT srmm, sname, city, com FROM Salespeople
WHERE ( comm > + . 12 OR comm < .14 ) ;
Слайд 37Использование специальных операторов операторов в предикатах
ИСПОЛЬЗОВАНИЕ СПЕЦИАЛЬНЫХ ОПЕРАТОРОВ В ПРЕДИКАТАХ
В
дополнение к реляционным и логическим операторам, SQL использует специальные операторы:
IN, BETWEEN, LIKE, и IS NULL.
С помощью этих операторов можно сложные и мощные предикаты.
Слайд 38Использование специальных операторов операторов в предикатах
ОПЕРАТОР IN
Оператор IN определяет набор
значений, с: каждым из которых данное проверяемое значение сравнивается.
Если
вы хотите:
найти всех продавцов, которые размещены в Благовещенске или в Шимоновске, выдолжны использовать следующий запрос:
SELECT * FROM Salespeople WHERE city = 'Благовещенск' OR city = 'Шимоновск';
Имеется и более простой способ получить ту же информацию:
SELECT * FROM Salespeople WHERE city IN ('Благовещенск', 'Шимоновск' );
Слайд 39Использование специальных операторов операторов в предикатах
Давайте найдем всех клиентов продавцов,
у которых значение snum = 2001, 2007, и 2004. Вывод
для следующего запроса:
SELECT * FROM Customers WHERE cnum IN ( 2001, 2007, 2004 ) ;
Слайд 40Использование специальных операторов операторов в предикатах
ОПЕРАТОР BETWEEN
Оператор BETWEEN (МЕЖДУ) похож
на оператор IN. В отличие от сравнения проверяемого значения с
каждым из элементов набора, как это делает IN, BETWEEN определяет диапазон, в который должно попасть проверяемое значение, чтобы предикат стал верным.
Вы должны ввести ключевое слово BETWEEN с начальным значением, ключевое AND и конечное значение. В отличие от IN, BETWEEN чувствителен к порядку, и первое значение в предложении должно быть первым по алфавитному или числовому порядку.
Слайд 41Использование специальных операторов операторов в предикатах
Пример извлекать из таблицы Продавцов
всех продавце» комиссионными между .10 и .12:
SELECT * FROM
Salespeople WHERE coram BETWEEN .10 AND .12;
Для оператора BETWEEN, значение, совпадающее с любым из двух значений I границ диапазона (в этом случае, .10 и .12) заставляет предикат быть верным.
Слайд 42Использование специальных операторов операторов в предикатах
SQL не предусматривает непосредственной поддержки
BETWEEN, не включающего граничные значения. Вы должны или определить ваши
граничные значения так, чтобы включающая интерпретация была приемлема, или сделать что-нибудь типа этого:
SELECT * FROM Salespeople WHERE (comm BETWEEN .10 AND .12 ) AND NOT comm IN ( .10, .12 );
Слайд 43Использование специальных операторов операторов в предикатах
Подобно реляционным операторам, BETWEEN может
работать с символьными полями. Это означает что вы можете использовать
BETWEEN, чтобы выбира ряд значений из упорядоченных по алфавиту значений.
Этот запрос выбирает всех клиентов, чьи имена попали в определенный алфавитиый диапозон :
SELECT * FROM Customers WHERE cname BETWEEN 'Б' AND 'Т';
Вывод для этого запроса:
Слайд 44Использование специальных операторов операторов в предикатах
ОПЕРАТОР LIKE
LIKE применим только к
полям типа CHAR или VARCHAR, с которыми он используется чтобы
находить подстроки. Т.е. он ищет поле символа чтобы видеть, совпадает ли с условием часть его строки. В качестве условия он использует групповые символы (wildkards) — специальные символы которые могут соответствовать чему-нибудь. Имеются два типа групповых символов используемых с LIKE:
символ подчеркивания (_) замещает любой одиночный символ. Например, 'b_t' будет соответствовать словам 'bat' или 'bit', но не будет соответствовать 'brat'.
знак процента (%) замещает последовательность любого числа символов (включая символы нуля). Например '%p%t' будет соответствовать словам 'put', 'posit', или 'opt', но не 'spite'.
Слайд 45Использование специальных операторов операторов в предикатах
SELECT * FROM Customers WHERE
cname LIKE 'К%';
Слайд 46Использование специальных операторов операторов в предикатах
LIKE может быть удобен если
вы ищете имя или другое значение, и если вы не
помните как они точно пишутся. Предположим что вы неуверены как записано по буквам имя одного из ваших продавцов Петров или Пестов. Вы можете просто использовать ту часть которую вы знаете и групповые символы, чтобы найти все возможные пары
SELECT * FROM Salespeople
WHERE sname LIKE ‘Пе_ _ов';
Слайд 47Использование специальных операторов операторов в предикатах
РАБОТА С НУЛЕВЫМИ (NULL) ЗНАЧЕНИЯМИ
В
таблицах могут быть записи которые не имеют никаких значений для
какого либо поля, например потому что информация не завершена, или потому что это поле просто не заполнялось. SQL учитывает такой вариант, позволяя вам вводить значение NULL (ПУСТОЙ) в поле, вместо значения. Когда значение поля равно NULL, это означает, что программа базы данных специально промаркировала это поле как не имеющее никакого значения для этой строки (или записи). Это отличается от просто назначения полю значения нуля или пробела, которые база данных будет обрабатывать также как и любое другое значение. Точно также, как NULL не является техническим значением, оно не имеет и типа данных. Оно может помещаться в любой тип поля.
Слайд 48Использование специальных операторов операторов в предикатах
NULL ОПЕРАТОР
Так как NULL указывает
на отсутствие значения, вы не можете знать, каков будет результат
любого сравнения с использованием NULL. Когда NULL сравнивается с любым значением, даже с другим таким же NULL, результат будет ни верным ни неверным, он — неизвестен. Вы должны понимать различия между неверно и неизвестно. SQL предоставляет специальный оператор IS, который используется с ключевым словом NULL, для размещения значения NULL. Найдем все записи в нашей таблице Заказчиков с NULL значениями в city столбце:
SELECT * FROM Customers WHERE city IS NULL;
Здесь не будет никакого вывода, потому что мы не имеем никаких значений NULL в наших типовых таблицах. Значения NULL — очень важны, и мы вернемся к ним позже.
Слайд 49Использование специальных операторов операторов в предикатах
ИСПОЛЬЗОВАНИЕ NOT СО СПЕЦИАЛЬНЫМИ ОПЕРАТОРАМИ
Специальные
операторы могут немедленно предшествовать Булеву NOT.
Он противоположен реляционным операторам, которые
должны иметь оператор NOT вводимым выражением. Например, если мы хотим устранить NULL из нашего вывода, мы будем использовать NOT, чтобы изменить на противоположное значение предиката:
SELECT * FROM Customers WHERE city NOT NULL;
При отсутствии значений NULL (как в нашем случае), будет выведена вся таблица Заказчиков. Аналогично можно ввести следующее:
SELECT * FROM Customers WHERE NOT city IS NULL;
Слайд 50Использование специальных операторов операторов в предикатах
Мы можем также использовать NOT
с IN:
SELECT * FROM Salespeople WHERE city NOT IN ('Благовещенск',
‘Райчихинск' );
А это — другой способ подобного же выражения:
SELECT * FROM Salespeople WHERE NOT city IN ('Благовещенск', 'Райчихинск');
Результат этих запросов один и тот же:
Таким же способом Вы можете использовать NOT BETWEEN и NOT LIKE.
Слайд 51Использование специальных операторов в предикатах
Самостоятельная работа
1. Напишите два запроса которые
могли бы вывести все заказы на 10 апреля или мая
2012 года;
2. Напишите запрос который выберет всех заказчиков обслуживаемых продавцами Петровым или Питкиным. (Подсказка: из наших типовых таблиц, поле snum связывает вторую таблицу с первой);
3. Напишите запрос, который может вывести всех заказчиков, чьи имена начинаются с буквы попадающей в диапазон от А до К.
4. Напишите запрос который выберет всех продавцов чьи имена начинаются с буквы C.
5. Напишите запрос который выберет все заказы имеющие нулевые значения или NULL в поле amt (сумма).
Слайд 53Агрегатные функции
ЧТО ТАКОЕ АГРЕГАТНЫЕ ФУНКЦИИ ?
Запросы могут производить обобщенное групповое
значение полей точно также как и значение одного поля. Это
делает с помощью агрегатых функций. Агрегатные функции производят одиночное значение для всей группы таблицы. Имеется список этих функций:
COUNT производит номера строк или не-NULL значения полей которые выбрал запрос.
SUM производит арифметическую сумму всех выбранных значений данного поля.
AVG производит усреднение всех выбранных значений данного поля.
MAX производит наибольшее из всех выбранных значений данного поля.
MIN производит наименьшее из всех выбранных значений данного поля.
Слайд 54Агрегатные функции
КАК ИСПОЛЬЗОВАТЬ АГРЕГАТНЫЕ ФУНКЦИИ ?
Агрегатные функции используются подобно именам
полей в предложении SELECT запроса, но с одним исключением, они
берут имена поля как аргументы. Только числовые поля могут использоваться с SUM и AVG.
С COUNT, MAX, и MIN, могут использоваться и числовые или символьные поля. Когда они используются с символьными полями, MAX и MIN будут транслировать их в эквивалент ASCII(American Standard Code for Information Interchange) — американская стандартная кодировочная таблица для печатных символов и некоторых специальных кодов), который должен сообщать, что MIN будет означать первое, а MAX последнее значение в алфавитном порядке.
Слайд 55Агрегатные функции
Чтобы найти SUM всех наших покупок в таблицы Заказов,
мы можем ввести следующий запрос:
SELECT SUM (amt) FROM Orders;
Результат запроса:
Чтобы
найти AVG всех наших покупок в таблицы Заказов, мы можем ввести следующий запрос:
SELECT AVG (amt) FROM Orders;
Результат запроса:
Слайд 56Агрегатные функции
СПЕЦИАЛЬНЫЕ АТРИБУТЫ COUNT
Функция COUNT несколько отличается от всех. Она
считает число значений в данном столбце, или число строк в
таблице. Когда она считает значения столбца, она используется с DISTINCT, чтобы производить счет чисел различных значений в данном поле. Мы могли бы использовать ее, например, чтобы сосчитать номера продавцов в настоящее время описаных в таблице Заказов:
SELECT COUNT ( DISTINCT snum ) FROM Orders;
Результат запроса:
В примере, DISTINCT, сопровождаемый именем поля с которым он применяется, помещен в круглые скобки, но не сразу после SELECT, как раньше.
Слайд 57Агрегатные функции
ИСПОЛЬЗОВАНИЕ COUNT СО СТРОКАМИ, А НЕ ЗНАЧЕНИЯМИ
Чтобы подсчитать общее
число строк в таблице, используйте функцию COUNT со звездочкой вместо
имени поля, как например в следующем примере:
SELECT COUNT (*) FROM Customers
Результат запроса:
COUNT со звездочкой включает и NULL и дубликаты, по этой причине DISTINCT не может быть использован. DISTINCT не применим c COUNT (*), потому, что он не имеет никакого действия в хорошо разработаной и поддерживаемой базе данных.
В такой базе данных, не должно быть таких строк, которые бы являлись полностью пустыми или дубликатов (первые не содержат никаких данных, а последние полностью избыточны). С другой стороны, если все таки имеются полностью пустые или избыточные строки, вы вероятно не захотите чтобы COUNT скрыл от вас эту информацию, поэтому если вы не уверены в качестве базы данных то можете применять distinct в сочетании с count(*).
Слайд 58Агрегатные функции
АГРЕГАТЫ ПОСТРОЕННЫЕ НА СКАЛЯРНОМ ВЫРАЖЕНИИ
Можете также использовать агрегатные функции
с аргументами, которые состоят из скалярных выражений, включающих одно или
более полей (При этом если вы это делаете, DISTINCT не разрешается). Предположим, что таблица Заказов имеет еще один столбец который хранит предыдущий не уплаченый баланс (поле blnc) для каждого заказчика. Вы должны найти этот текущий баланс, добавлением суммы приобретений к предыдущему балансу. Вы можете найти наибольший неуплаченый баланс следующим образом:
SELECT MAX ( blnc + amt ) FROM Orders;
(в практической работе добавить данное поле заполнить и выполнить select)
Слайд 59Агрегатные функции
ПРЕДЛОЖЕНИЕ GROUP BY
Предложение GROUP BY позволяет вам определять подмножество
значений в особом поле с другим названием поля, и применять
функцию агрегата к подмножеству. Это дает вам возможность объединять поля и агрегатные функции в едином предложении SELECT. Например, предположим что вы хотите найти наибольшую сумму приобретений полученную каждым продавцом. Вы можете сделать раздельный запрос для каждого из них, выбрав MAX (amt) из таблицы Заказов для каждого значения поля snum. GROUP BY, однако, позволит Вам поместить их все в одну команду:
SELECT snum, MAX (amt) FROM Orders
GROUP BY snum;
Слайд 60Агрегатные функции
Вывод для этого запроса:
GROUP BY применяет агрегатные функции независимо
от серий групп, которые определяются с помощью значения поля в
целом. В этом случае, каждая группа состоит из всех строк с тем же самым значением поля snum, и MAX функция применяется отдельно для каждой такой группы.
Слайд 61Агрегатные функции
Можно также использовать GROUP BY с многочисленными полями. Предположим
что вы хотите увидеть наибольшую сумму покупок получаемую каждым продавцом
за каждый день. Чтобы сделать это, вы должны сгруппировать таблицу Заказов по датам продавцов, и применить функцию MAX к каждой такой группе, подобно этому:
SELECT snum, odate, MAX ((amt)) FROM Orders GROUP BY snum, odate;
Вывод для этого запроса
пустые группы, в дни когда текущий продавец не имел заказов, не будут показаны в выводе.
Слайд 62Агрегатные функции
ПРЕДЛОЖЕНИЕ HAVING
Предположим (предыдущий пример) вы хотели бы увидеть только
максимальную сумму покупок, значение которой выше $3000.00
Чтобы увидеть максимальную стоимость
покупок свыше $3000.00, вы можете использовать предложение HAVING. Предложение HAVING определяет критерии, используемые для удаления определенных групп из вывода, точно также как предложение WHERE делает это для индивидуальных строк.
SELECT snum, odate, MAX ((amt)) FROM Orders GROUP BY snum, odate HAVING MAX ((amt)) > 3000.00;
Вывод для этого запроса:
Слайд 63Агрегатные функции
HAVING может использовать только аргументы которые имеют одно значение
на группу вывода.
SELECT snum, MAX (amt) FROM Orders GROUP
BY snum HAVING snum IN (1002,1007);
Результат:
НЕ ДЕЛАЙТЕ ВЛОЖЕННЫХ АГРЕГАТОВ
В строгой интерпретации ANSI SQL, вы не можете использовать агрегат агрегата. Предположим что вы хотите выяснять, в какой день имелась наибольшая сумма приобретений. Если вы попробуете сделать это,
SELECT odate, MAX ( SUM (amt) ) FROM Orders
GROUP BY odate;
то ваша команда будет вероятно отклонена.
(Некоторые реализации не предписывают этого ограничения, которое является выгодным, потому что вложенные агрегаты могут быть очень полезны, даже если они и несколько проблематичны.)
Слайд 64Скалярные выражения
СКАЛЯРНОЕ ВЫРАЖЕНИЕ С ПОМОЩЬЮ ВЫБРАННЫХ ПОЛЕЙ
Предположим что вы хотите
выполнять простые числовые вычисления данных чтобы затем помещать их в
форму больше соответствующую вашим потребностям. SQL позволяет вам помещать скалярные выражения и константы среди выбраных полей. Например, вы можете пожелать, представить комиссионные вашего продавца в процентном отношении а не как десятичные числа. Просто достаточно:
SELECT snum, sname, city, comm * 100 FROM Salespeople;
Слайд 65Скалярные выражения
СТОЛБЦЫ ВЫВОДА
Последний столбец предшествующего примера помечен как MULTIPLY (т.е.
автоматически), потому что это — столбец вывода. Столбцы вывода —
это столбцы данных созданные запросом способом, иным чем просто извлечение их из таблицы. Вы создаете их всякий раз, когда вы используете агрегатные функции, константы, или выражения в предложении SELECT запроса. Так как имя столбца — один из атрибутов таблицы, столбцы которые приходят не из таблиц не имеют никаких имен или именуются произвольно. Другими словами непомеченные, столбцы вывода могут обрабатываться также как и столбцы извлеченные из таблиц, почти во всех ситуациях.
Слайд 66Скалярные выражения
ПОМЕЩЕНИЕ ТЕКСТА В ВАШЕМ ВЫВОДЕ ЗАПРОСА
Символ 'A', когда ничего
не значит сам по себе, — является константой, такой например
как число 1. Вы можете вставлять константы в предложение SELECT запроса, включая и текст. Однако символьные константы, в отличие от числовых констант, не могут использоваться в выражениях. Вы можете иметь выражение 1 + 2 в вашем предложении SELECT, но вы не можете использовать выражение типа 'A' + 'B‘. Возможность вставлять текст в вывод ваших запросов очень удобная штука.
Слайд 67Скалярные выражения
Вы можете усовершенствовать предыдущий пример представив комиссионные как проценты
со знаком процента (%).
SELECT snum, sname, city, ' % ',
comm * 100 FROM Salespeople;
или
SELECT snum, sname, city, (comm * 100) AS PROCENT FROM Salespeople;
Слайд 68Упорядочивание вывода полей
В SQL на ряду с командой ORDER BY
которая позволяет упорядочивать ваш вывод существуют команды: возрастание (ASC) и
убывание (DESC) для каждого столбца. По умолчанию установлено — возрастание. Давайте рассмотрим нашу таблицу порядка приводимую в порядок с помощью номера заказчика (обратите внимание на значения в cnum столбце):
SELECT * FROM Orders ORDER BY cnum DESC;
Слайд 69Упорядочивание вывода полей
УПОРЯДОЧЕНИЕ С ПОМОЩЬЮ МНОГОЧИСЛЕНЫХ СТОЛБЦОВ
Мы можем также упорядочивать
таблицу с помощью другого столбца, например с помощью поля amt,
внутри упорядочения поля cnum :
SELECT * FROM Orders ORDER BY cnum DESC, amt DESC;
Слайд 70Объединение таблиц
Одна из наиболее важных особенностей запросов SQL — это
их способность определять связи между многочислеными таблицами и выводить информацию
из них внутри одной команды.
Этот вид операции называется — объединением, которое является одним из видов операций в реляционных базах данных. Главное в реляционном подходе – это связи которые можно создавать между позициями данных в таблицах. Используя обьединения, мы непосредственно связываем информацию с любым полем таблицы, и таким образом способны создавать связи между фрагментами данных.
Слайд 71Объединение таблиц
ИМЕНА ТАБЛИЦ И СТОЛБЦОВ
Полное имя столбца таблицы фактически состоит
из имени таблицы, сопровождаемого точкой и затем именем столбца. Имеются
несколько примеров имен :
Salespeople.snum
Salespeople.city
Orders.odate
До этого, опускали имена таблиц потому что запрашивали только одну таблицу. Когда делается запрос к не одной таблице, то можно опускать имена таблиц, если все ее столбцы имеют разные имена. Но это не всегда так бывает. Например, мы имеем две типовые таблицы со столбцами называемыми city.
Если мы должны связать эти столбцы, мы будем должны указать их с именами Salespeople.city или Customers.city, чтобы SQL мог их различать.
Слайд 72Объединение таблиц
СОЗДАНИЕ ОБЬЕДИНЕНИЯ
Предположим что вы хотите поставить в соответствии вашему
продавцу ваших заказчиков в городе в котором они живут, поэтому
вы увидите все комбинации продавцов и заказчиков для этого города. Вы будете должны брать каждого продавца и искать в таблице Заказчиков всех заказчиков того же самого города. Вы могли бы сделать это, введя следующую команду:
SELECT Customers.cname, Salespeople.sname, Salespeople.city FROM Salespeople, Customers WHERE Salespeople.city = Customers.city;
Слайд 73Объединение таблиц
ОБЪЕДИНЕНИЕ ТАБЛИЦ ЧЕРЕЗ СПРАВОЧНУЮ ЦЕЛОСТНОСТЬ
Эта особенность используется через встроенных
связей в базу данных. В предыдущем примере, установили связь между
двумя таблицами через простые поля. Но эти таблицы, уже были соединены через snum поле. Эта связь называется состоянием справочной целостности. Используя обьединение можно извлекать данные в терминах этой связи. Например, чтобы показать имена всех заказчиков соответствующих продавцам которые их обслуживают, мы будем использовать такой запрос:
SELECT Customers.cname, Salespeople.sname
FROM Customers, Salespeople
WHERE Salespeople.snum = Customers.snum;
Слайд 74Объединение таблиц
Результат запроса:
Слайд 75Объединение таблиц
ОБЪЕДИНЕНИЯ ТАБЛИЦ ПО РАВЕНСТВУ ЗНАЧЕНИЙ В СТОЛБЦАХ И ДРУГИЕ
ВИДЫ ОБЪЕДИНЕНИЙ
Обьединения которые используют предикаты основанные на равенствах называются —
объединениями по равенству. Все наши примеры в этой главе до настоящего времени, относились именно к этой категории, потому что все условия в предложениях WHERE базировались на математических выражениях использующих знак равно (=).
Строки 'city = 'London' и 'Salespeople.snum = Orders.snum' — примеры таких типов равенств найденных в предикатах.
Объединения по равенству — это вероятно наиболее общий вид объединения, но имеются и другие. Вы можете, фактически, использовать любой из реляционных операторов в обьединении.
Слайд 76Объединение таблиц
пример другого вида объединения
SELECT sname, cname FROM Salespeople, Customers
WHERE sname < cname AND rating < 200;
Эта команда не
часто бывает полезна. Обычно, мы не создаеМ сложных связей подобно этой, и, по этой причине, мы вероятно будем строить наиболее общие объединения по равенству, но вы должны хорошо знать и другие возможности.
Слайд 77Объединение таблиц
ОБЪЕДИНЕНИЕ БОЛЕЕ ДВУХ ТАБЛИЦ
SELECT onum, cname, Orders.cnum, Orders.snum FROM
Salespeople, Customers, Orders WHERE Customers.city < > Salespeople.city AND Orders.cnum
= Customers.cnum AND Orders.snum = Salespeople.snum;
Предположим что мы хотим найти всех заказчиков не находящихся в тех городах где находятся их продавцы. Для этого необходимо связать все три наши типовые таблицы:
Слайд 78Объединение таблиц
РАБОТА С SQL
Напишите запрос, который бы вывел список номеров
заказов, сопровождающихся именем заказчика, который создавал эти заказы.
Напишите запрос, который
бы выдавал имена продавца и заказчика для каждого заказа после номера заказа.
Напишите запрос, который бы выводил всех заказчиков, обслуживаемых продавцом с комиссионными выше 12%. Выведите имя заказчика, имя продавца и ставку комиссионных продавца.
Напишите запрос, который вычислил бы сумму комиссионных продавца для каждого заказа заказчика с оценкой выше 100.
Слайд 79Объединение таблиц
SELECT onum, cname FROM Orders, Customers WHERE Customers.cnum =
Orders.cnum;
SELECT onum, cname, sname FROM Orders, Customers, Salespeople WHERE Customers.cnum
= Orders.cnum AND Salespeople.snum = Orders.snum;
SELECT cname, sname, comm FROM Salespeople, Customers
WHERE Salespeople.snum = Customers.snum AND comm * .12;
SELECT onum, comm * amt FROM Salespeople, Orders, Customers WHERE rating > 100 AND Orders.cnum = Customers.cnum AND Orders.snum = Salespeople.snum;
Ответы:
Слайд 80Объединение таблицы с собой
Это объединение — такое же, как и
любое другое объединение между двумя таблицами, за исключением того, что
в данном случае обе таблицы идентичны.
Синтаксис команды для объединения таблицы с собой, тот же что и для объединения многочисленых таблиц, в одном экземпляре.
Когда вы объединяете таблицу с собой, все повторяемые имена столбца, заполняются префиксами имени таблицы.
Вы можете сделать это с помощью определения временных имен называемых — переменными диапазона, переменными корреляции или просто — псевдонимами.
Имеется пример, который находит все пары заказчиков имеющих один и тот же самый рейтинг:
SELECT first.cname, second.cname, first.rating FROM Customers first, Customers second WHERE first.rating = second.rating;
Слайд 82Объединение таблицы с собой
УСТРАНЕНИЕ ИЗБЫТОЧНОСТИ
Обратите внимание, что наш вывод имеет
два значение для каждой комбинации, причем второй раз в обратном
порядке. Это потому, что каждое значение показано первый раз в каждом псевдониме, и второй раз (симметрично) в предикате.
Следовательно, значение A в псевдониме сначала выбирается в комбинации со значением B во втором псевдониме, а затем значение A во втором псевдониме выбирается в комбинации со значением B в первом псевдониме.
Слайд 83Объединение таблицы с собой
Простой способ избежать этого состoит в том,
чтобы налагать порядок на два значения, так чтобы один мог
быть меньше чем другой или предшествовал ему в алфавитном порядке. Это делает предикат ассиметричным, поэтому те же самые значения в обратном порядке не будут выбраны снова, например:
SELECT tirst.cname, second.cname, first.rating FROM Customers first, Customers second WHERE first.rating = second.rating AND first.cname < second.cname;
Слайд 84Объединение таблицы с собой
ЕЩЕ БОЛЬШЕ КОМПЛЕКСНЫХ ОБЪЕДИНЕНИЙ
Предположим что вы еще
не назначили ваших заказчиков к вашему продавцу. Компания должна назначить
каждому продавцу первоначально трех заказчиков, по одному для каждого рейтингового значения. Вы лично можете решить, какого заказчика какому продавцу назначить, но следующий запрос вы используете, чтобы увидеть все возможные комбинации заказчиков, которых вы можете назначать.
SELECT a.cnum, b.cnum, c.cnum FROM Customers a, Customers b, Customers c WHERE a.rating = 100 AND b.rating = 200 AND c.rating = 300;
Слайд 85подзапросы
ВСТАВКА ОДНОГО ЗАПРОСА ВНУТРЬ ДРУГОГО
С помощью SQL вы можете вкладывать
запросы внутрь друг друга. Обычно, внутренний запрос генерирует значение, которое
проверяется в предикате внешнего запроса, определяющего, верно оно или нет.
Например, предположим что мы знаем имя продавца: Сидоров, но не знаем значение его поля snum, и хотим извлечь все заказы из таблицы Заказов. Имеется один способ чтобы сделать это
SELECT * FROM Orders WHERE snum = (SELECT snum FROM Salespeople WHERE sname = 'Сидоров');
Слайд 86подзапросы
Ограничения
SELECT * FROM Orders WHERE snum = ( SELECT snum
FROM Salespeople WHERE city = ‘Шимановск’ );
Поскольку мы имеем только
одного продавца в Шимановск — Петров, то подзапрос будет выбирать одиночное значение snum и следовательно будет принят. Но это — только в данном случае. Большинство SQL баз данных имеют многочисленных пользователей, и если другой пользователь добавит нового продавца из Шимановска в таблицу, подзапрос выберет два значения, и ваша команда потерпит неудачу.
Слайд 87подзапросы
DISTINCT С ПОДЗАПРОСАМИ
Вы можете, в некоторых случаях, использовать DISTINCT, чтобы
вынудить подзапрос генерировать одиночное значение. Предположим что мы хотим найти
все порядки кредитований для тех продавцов которые обслуживают Алексеева (cnum = 2008). Имеется один способ, чтобы сделать это:
SELECT * FROM Orders WHERE snum = ( SELECT DISTINCT snum Orders WHERE cnum = 2008 );
Слайд 88подзапросы
SELECT * FROM Orders WHERE snum IN ( SELECT snum
FROM Salespeople WHERE city = 'Благовещенск' );
ИСПОЛЬЗОВАНИЕ ПОДЗАПРОСОВ, КОТОРЫЕ ВЫДАЮТ
МНОГО СТРОК С ПОМОЩЬЮ ОПЕРАТОРА IN
Вы можете использовать подзапросы которые производят любое число строк если вы используете специальный оператор IN (операторы BETWEEN, LIKE, и IS NULL не могут использоваться с подзапросами). Мы можем использовать IN чтобы выполнить такой же подзапрос, который не будет работать с реляционным оператором, и найти все атрибуты таблицы Заказов для продавца в Благовещенске:
Слайд 89подзапросы
ИСПОЛЬЗОВАНИЕ АГРЕГАТНЫХ ФУНКЦИЙ В ПОДЗАПРОСАХ
Один тип функций, который автоматически может
производить одиночное значение для любого числа строк, конечно же, —
агрегатная функция. Любой запрос, использующий одиночную функцию агрегата без предложения GROUP BY, будет выбирать одиночное значение для использования в основном предикате. Например, вы хотите увидеть все порядки имеющие сумму приобретений выше средней на 10-е апреля:
SELECT * FROM Orders WHERE amt > ( SELECT AVG (amt) FROM Orders WHERE odate = '10.04.2012' );
Слайд 91exists
EXISTS — это оператор, который производит верное или неверное значение,
другими словами, выражение Буля. Это означает, что он может работать
автономно в предикате или в комбинации с другими выражениями Буля, использующими Булевы операторы AND, OR, и NOT. Он берет подзапрос как аргумент и оценивает его как верный, если тот производит любой вывод или как неверный, если тот не делает этого. Например, мы можем решить, извлекать ли нам некоторые данные из таблицы Заказчиков если, и только если, один или более заказчиков в этой таблице находятсяся в 'Благовещенске:
SELECT cnum, cname, city FROM Customers WHERE EXISTS (SELECT * FROM Customers WHERE city = 'Благовещенск' );
Слайд 92union
ОБЪЕДИНЕНИЕ МНОГОЧИСЛЕННЫХ ЗАПРОСОВ В ОДИН
Вы можете поместить многочисленые запросы вместе
и объединить их вывод, используя предложение UNION. Предложение UNION обьединяет
вывод двух или более SQL запросов в единый набор строк и столбцов. Например, чтобы получить всех продавцов и заказчиков размещенных в Благовещенске и вывести их как единое целое вы могли бы ввести:
SELECT snum, sname FROM Salespeople WHERE city = 'Благовещенск' UNION SELECT cnum, cname FROM Customers WHERE city = 'Благовещенск';
Слайд 93Соединение таблиц
Виды оператора JOIN
INNER JOIN
LEFT OUTER JOIN
RIGHT OUTER JOIN
FULL OUTER
JOIN
CROSS JOIN
Слайд 94Соединение таблиц
SELECT O.*, S.* FROM SALESPEOPLE S INNER JOIN ORDERS
O ON O.SNUM=S.SNUM where S.SNUM1001
SELECT O.*, S.* FROM SALESPEOPLE S
LEFT OUTER JOIN ORDERS O ON O.SNUM=S.SNUM where S.SNUM<>1001
Слайд 95Соединение таблиц
SELECT O.*, S.* FROM SALESPEOPLE S RIGHT OUTER JOIN
ORDERS O ON O.SNUM=S.SNUM where S.SNUM1001
SELECT O.*, S.* FROM SALESPEOPLE
S FULL OUTER JOIN ORDERS O ON O.SNUM=S.SNUM where S.SNUM<>1001
Слайд 96Соединение таблиц
SELECT O.*, S.* FROM SALESPEOPLE S CROSS JOIN ORDERS
O where S.SNUM1001
Слайд 98Команды модификации языка DML
Значения могут быть помещены и удалены из
полей, тремя командами языка DML (Язык Манипулирования Данными):
INSERT (ВСТАВИТЬ),
UPDATE (МОДИФИЦИРОВАТЬ),
DELETE
(УДАЛИТЬ).
Слайд 99Команды модификации языка DML
Все строки в SQL вводятся с использованием
команды модификации INSERT. В самой простой форме, INSERT использует следующий
синтаксис:
INSERT INTO
VALUES ( , . . .);
Так, например, чтобы ввести строку в таблицу Продавцов, вы можете использовать следующее условие:
INSERT INTO Salespeople
VALUES (1009, 'Лукашев', 'Белогорск', .16);
Команды DML не производят никакого вывода, но ваша программа должна дать вам некоторое подтверждение того, что данные были использованы.
Слайд 100Команды модификации языка DML
ВСТАВКА ПУСТЫХ УКАЗАТЕЛЕЙ (NULL)
Если вам нужно ввести
пустое значение (NULL), вы вводите его точно также как и
обычное значение. Предположим, что еще не имелось поля city для мистера Лукашев. Вы можете вставить его строку со значением=NULL в это поле, следующим образом:
INSERT INTO Salespeople VALUES (1001, 'Лукашев', NULL, .16);
Так как значение NULL — это специальный маркер, а не просто символьное значение, он не включяется в одиночные кавычки.
Если у нас есть триггер на вставку первичного ключа, то записываем:
INSERT INTO Salespeople VALUES (NULL, 'Лукашев', 'Белогорск', .16);
Слайд 101Команды модификации языка DML
ИМЕНОВАНИЕ СТОЛБЦА ДЛЯ ВСТАВКИ (INSERT)
Вы можете также
указывать столбцы, куда вы хотите вставить значение имени. Это позволяет
вам вставлять имена в любом порядке.
INSERT INTO Customers (city, cnamе, cnum) VALUES ('Шимановск', 'Пупкин', 2001);
Обратите внимание, что столбцы rating и snum — отсутствуют. Это значит, что эти строки автоматически установлены в значение по умолчанию. По умолчанию может быть введено или значение NULL или другое значение, определяемое как значение по умолчанию.
Если ограничение запрещает использование значения NULL в данном столбце, и этот столбец не установлен как по умолчанию, этот столбец должен быть обеспечен значением для любой команды INSERT, которая относится к таблице.
Слайд 102Команды модификации языка DML
ВСТАВКА РЕЗУЛЬТАТОВ ЗАПРОСА
Вы можете также использовать команду
INSERT чтобы получать или выбирать значения из одной таблицы и
помещать их в другую, чтобы использовать их вместе с запросом. Чтобы сделать это, вы просто заменяете предложение VALUES (из предыдущего примера) на соответствующий запрос:
INSERT INTO Blagastaff SELECT * FROM Salespeople WHERE city = 'Благовещенск';
Здесь выбираются все значения произведенные запросом — то-есть все строки из таблицы Продавцов со значениями city = "Благовещенск" — и помещаются в таблицу называемую Blagastaff.
Слайд 103Команды модификации языка DML
Чтобы это работало, таблица Blagastaff должна отвечать
следующим условиям:
Она должна уже быть создана командой CREATE TABLE.
Она должна
иметь четыре столбца которые совпадают с таблицей Продавцов в терминах типа данных;
то-есть первый, второй, и так далее, столбцы каждой таблицы, должны иметь одинаковый тип данных (причем они не должны иметь одинаковых имен).
Слайд 104Команды модификации языка DML
УДАЛЕНИЕ СТРОК ИЗ ТАБЛИЦ
Вы можете удалять строки
из таблицы командой модификации — DELETE. Она может удалять только
введеные строки, а не индивидуальные значения полей, так что параметр поля является необязательным или недоступным. Чтобы удалить все содержание таблицы Продавцов, вы можете ввести следующее условие:
DELETE FROM Salespeople;
Теперь, когда таблица пуста, ее можно окончательно удалить командой DROP TABLE (об этом позже).
Слайд 105Команды модификации языка DML
Обычно, вам нужно удалить только некоторые определенные
строки из таблицы. Чтобы определить какие строки будут удалены, вы
используете предикат, так же как вы это делали для запросов. Например, чтобы удалить продавца Сидоров из таблицы, вы можете ввести
DELETE FROM Salespeople WHERE snum = 1003;
Слайд 106Команды модификации языка DML
Вы можете также использовать DELETE с предикатом,
который бы выбирал группу строк, как показано в этом примере:
DELETE
FROM Salespeople WHERE city = 'Благовещенск';
Слайд 107Команды модификации языка DML
ИЗМЕНЕНИЕ ЗНАЧЕНИЙ ПОЛЯ
Эта команда содержит предложение UPDATE,
в котором указано имя используемой таблицы и предложение SET, которое
указывает на изменение, которое нужно сделать для определенного столбца. Например, чтобы изменить оценки всех заказчиков на 200, вы можете ввести
UPDATE Customers SET rating = 200;
Слайд 108Команды модификации языка DML
МОДИФИЦИРОВАНИЕ ТОЛЬКО ОПРЕДЕЛЕННЫХ СТРОК
Конечно, вы не всегда
захотите указывать все строки таблицы для изменения единственного значения, так
что UPDATE, наподобии DELETE, может брать предикаты. Вот как например можно выполнить изменение одинаковое для всех заказчиков продавца Андреев (имеющего snum=2001):
UPDATE Customers SET rating = 200 WHERE snum = 1001;
Слайд 109Команды модификации языка DML
С командами insert, update, delete можно использовать
подзапросы. Например:
INSERT INTO Sjpeople SELECT * FROM Salespeople
WHERE city =
'Шимановск';
DELETE FROM Salespeople WHERE 100 IN ( SELECT rating FROM Customers WHERE Salespeople.snum = Customers.snum);
UPDATE Salespeople SET comm = comm + .01 WHERE 2 <= ( SELECT COUNT (cnum) FROM Customers WHERE Customers.snum = Salespeople.snum );
Слайд 110Команды модификации языка DML
Напишите команду, которая бы удаляла всех заказчиков,
не имеющих текущих заказов.
2. Напишите команду которая бы увеличила на
двадцать процентов комиссионные всех продавцов, имеющих общие текущие заказы выше чем $3000.
Слайд 111Создание и изменение таблиц
Таблицы создаются командой CREATE TABLE. Эта команда
создает пустую таблицу — таблицу без строк. Значения вводятся с
помощью DML команды INSERT. Команда CREATE TABLE в основном определяет имя таблицы, в виде описания набора имен столбцов указанных в определенном порядке. Она также определяет типы данных и размеры столбцов. Каждая таблица должна иметь по крайней мере один столбец.
Синтаксис команды CREATE TABLE:
CREATE TABLE
( [()], [()] ... );
Слайд 112Создание и изменение таблиц
Например, ниже команда создаст таблицу Продавцов:
CREATE TABLE
Salespeople
( snum integer,
sname char (10),
city char (10),
comm
declmal );
Слайд 113Создание и изменение таблиц
Индекс — это упорядоченный (буквенный или числовой)
список столбцов или групп столбцов в таблице. Таблицы могут иметь
большое колличество строк, а, так как строки не находятся в каком-нибудь определенном порядке, на их поиск по указанному значению может потребовать время.
Синтаксис для создания индекса — обычно следующий (помните, что это не ANSI стандарт):
CREATE INDEX
ON
( [,]...);
Слайд 114Создание и изменение таблиц
Если, например, таблица Заказчиков будет наиболее часто
упоминаемой в запросах продавцов к их собственной клиентуре, было бы
правильно создать такой индекс в поле snum таблицы Заказчиков.
CREATE INDEX Clientgroup ON Customers (snum);
Теперь, тот продавец, который имеет отношение к этой таблице, сможет найти собственную клиентуру очень быстро.
Но этот индекс не уникальный!!!
Слайд 115Создание и изменение таблиц
Уникальность индекса будет создана если мы используем
ключевое слово UNIQUE перед ключевым словом INDEX. Поле сnum, в
качестве первичного ключа, станет первым кандидатом для уникального индекса:
CREATE UNIQUE INDEX Custid ON Customers (cnum)
ПРИМЕЧАНИЕ: эта команда будет отклонена, если уже имеются идентичные значения в поле cnum.
Слайд 116Создание и изменение таблиц
Удаление индексов
Синтаксис используемый для удаления индекса:
DROP INDEX
;
Удаление индекса не изменяет содержание полей.
Слайд 117Создание и изменение таблиц
Изменение таблицы
Типичный синтаксис чтобы добавить столбец к
таблице:
ALTER TABLE ADD ;
Столбец
будет добавлен со значением NULL для всех строк таблицы. Новый столбец станет последним по порядку столбцом таблицы.
Слайд 118Создание и изменение таблиц
УДАЛЕНИЕ ТАБЛИЦ
Вы должны быть собственником (т.е. быть
создателем) таблицы, чтобы иметь возможность удалить ее. Случайное разрушение данных
не возможно, SQL сначала потребует чтобы вы очистили таблицу прежде, чем удалит ее из базы данных.
Таблица с находящимися в ней строками, не может быть удалена.
Слайд 119Создание и изменение таблиц
Синтаксис для удаления вашей таблицы, если конечно
она является пустой, следующая:
DROP TABLE ;
При подаче этой команды,
имя таблицы больше не распознается и нет такой команды, которая могла быть дана этому объекту.
Вы должны убедиться, что эта таблица не ссылается внешним ключом к другой таблице и что она не используется в определении Представления.
Слайд 120Создание и изменение таблиц
Типы таблиц, с которыми вы имели дело
до сих пор, назывались — базовыми таблицами. Имеется другой вид
таблиц — представления.
Представления — это таблицы, чье содержание выбирается или получается из других таблиц. Они работают в запросах и операторах DML точно также как и основные таблицы, но не содержат никаких собственных данных.
Представления подобны окнам, через которые вы просматриваете информацию (как она есть, или в другой форме, как вы потом увидите), которая фактически хранится в базовой таблице.
Слайд 121Создание и изменение таблиц
Представление — это фактически запрос, который выполняется
всякий раз, когда представление становится темой команды. Вывод запроса при
этом в каждый момент становится содержанием представления.
КОМАНДА CREATE VIEW
Вы создаете представление командой CREATE VIEW. Она состоит из слов CREATE VIEW (СОЗДАТЬ ПРЕДСТАВЛЕНИЕ), имени представления, которое нужно создать, слова AS (КАК), и далее запроса, как в следующем примере:
CREATE VIEW Blagstaff AS SELECT * FROM Salespeople WHERE city = ‘Благовещенск';
Слайд 122Создание и изменение таблиц
Теперь Вы имеете представление, называемое Blagstaff.
Вы
можете использовать это представление точно так же, как и любую
другую таблицу. Она может быть запрошена, модифицирована, вставлена в, удалена из, и соединена с, другими таблицами и представлениями. Если сделать запрос такого представления:
SELECT *FROM Blagstaff;
Выводом этого представления будут две строки с данными из таблицы Salespeople где содержание поля city будет: Благовещенск
Слайд 124Использование специальных операторов в предикатах
Самостоятельная работа
Оператор LIKE
Символ подчеркивания _
Символ %
Символ
/ (экранирования)
2. АГРЕГАТНЫЕ ФУНКЦИИ
COUNT
AVG
MAX
MIN
3. УПОРЯДОЧЕНИЕ ВЫВОДА
Команда ORDER BY
Команда DESC
4. ПРЕДЛОЖЕНИЕ
GROUP BY
Обратная связь
Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:
Email: Нажмите что бы посмотреть
Что такое TheSlide.ru?
Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно хранить и делиться своими презентациями с другими пользователями.
Для правообладателей