Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
бд / Лекция 5 - Запросы.docx
Скачиваний:
27
Добавлен:
14.05.2015
Размер:
97.54 Кб
Скачать

Часто используемые строковые функции:

UPPER (строка) - возвращает символьное выражение, в котором символы нижнего регистра преобразованы в символы верхнего регистра.

LOWER (строка) - возвращает символьное выражение после преобразования символов верхнего регистра в символы нижнего регистра.

REPLACE(строка, что_меняем, на_что_меняем) - заменяет все вхождения указанного строкового значения другим строковым значением, например:

select REPLACE('Кот','о','и')

--------------------------------------------------------------

Кит

(строк обработано: 1)

SUBSTRING(строка, начальная_позиция, длина) - возвращает фрагмент строки, например:

select SUBSTRING('Базы данных',1,4)

----

Базы

(строк обработано: 1)

LTRIM (строка) - возвращает символьное выражение после удаления начальных пробелов.

RTRIM (строка) - возвращает символьное выражение после удаления пробелов в конце строки.

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

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

TOP n – возвращает указанное количество строк, TOP n PERCENT - возвращает указанный процент строк.

Например, отобразить 40% всех строк можно следующей инструкцией:

SELECT TOP 40 PERCENT sNameSt+' '+nameSt+' '+lNameSt as [Фамилия, имя, отчество]

FROM Student;

Кроме этого, можно избавиться от повторяющихся строк. Например,

SELECT nameGroup

FROM Student

что равнозначно

SELECT ALL nameGroup

FROM Student

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

SELECT DISTINCT nameGroup

FROM Student

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

Desc – по убыванию, asc – по возрастанию.

SELECT sNameSt+' '+nameSt+' '+lNameSt as [ФИО]

FROM Student

ORDER BY [ФИО] DESC;

SELECT sNameSt, nameSt, lNameSt

FROM Student

ORDER BY sNameSt DESC, nameSt ASC;

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

В предложении WHERE может быть:

  • Сравнение (=,<>, <, >, <=,>=), например:

SELECT *

FROM Student

WHERE placeB ='г. Белгород'

  • Проверка на принадлежность диапазону (BETWEEN… AND ….), например:

SELECT *

FROM Student

WHERE sumOpl BETWEEN 0 AND 30000

  • Проверка на членство в множестве (IN, NOT IN)

SELECT *

FROM Student

WHERE snameSt IN ('Иванова','Семенова')

  • Проверка на соответствие шаблону - LIKE

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

Символ-шаблон

Описание

Пример

%

Любая строка длиной от нуля и более символов.

Инструкция WHERE Название LIKE '%компьютер%' выполняет поиск и выдает все названия книг, содержащие слово «компьютер».

_ (подчеркивание)

Любой одиночный символ.

Инструкция WHERE фамилия_автора LIKE '_етров' выполняет поиск и выдает все имена, состоящие из шести букв и заканчивающиеся сочетанием «етров» (Петров, Ветров и т.п.).

[ ]

Любой одиночный символ, содержащийся в диапазоне ([a-f]) или наборе ([abcdef]).

Инструкция WHERE Фамилия_автора LIKE '[Л-С]омов' выполняет поиск и выдает все фамилии авторов, заканчивающиеся на «омов» и начинающиеся на любую букву в промежутке от «Л» до «С», например Ломов, Ромов, Сомов и т.п. При выполнении операции поиска в диапазоне символы, включенные в диапазон, могут изменяться в зависимости от правил сортировки параметров сортировки.

[^]

Любой символ, содержащийся в диапазоне ([^a-f]) или наборе ([^abcdef]).

Инструкция WHERE Фамилия_автора LIKE 'ив[^а]%' выполняет поиск и выдает все фамилии, начинающиеся на «ив», в которых третья буква отличается от «а».

NOT LIKE позволяет найти строки, которые не соответствуют шаблону.

Например:

SELECT *

FROM Student

WHERE sNameSt like 'С%'

SELECT *

FROM Student

WHERE placeB like '%Белгород%'

  • Проверка на равенство значению NULL (is NULL, is not NULL)

SELECT *

FROM Student

WHERE placeB is NULL

  • Составные условия отбора при помощи логических операторов AND, OR, NOT.

SELECT *

FROM Student

WHERE placeB like '%Белгород%' AND nameGroup='ИС-11'

Группировка данных

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

Для группировки используется предложение GROUP BY.

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

Например, запрос, который возвращает список групп с указанием количества студентов в каждой группе:

SELECT nameGroup, count(nameSt) as [Количество студентов]

FROM Student

GROUP BY nameGroup

nameGroup Количество студентов

-------------------------------------------------- --------------------

ИС-11 2

ИС-21 2

ИС-31 1

(строк обработано: 4)

В данном запросе используется агрегатная функция COUNT, но существуют и другие:

  • SUM - вычисляет арифметическую сумму всех значений колонки

  • AVG - вычисляет среднее арифметическое всех значений

  • MAX - определяет наибольшее из всех выбранных значений

  • MIN - определяет наименьшее из всех выбранных значений

  • COUNT - производит подсчет строк, удовлетворяющих условию запроса

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

Предложение HAVING всегда должно следовать ПОСЛЕ предложение GROUP BY и ПЕРЕД ORDER BY, если оно имеется в запросе.

Например, следующий запрос возвращает только те группы, в которых количество студентов больше 2.

SELECT nameGroup, count(nameSt) as [Количество студентов]

FROM Student

GROUP BY nameGroup

HAVING count(nameSt)>2