Часто используемые строковые функции:
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