Работа с нулевыми( null ) значениями

Практическое занятие № 15

Использование SQL для извлечения информации из таблиц

 

ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ

Описание команды SELECT

Команда SELECT начинается с ключевого слова SELECT. После этого должен следовать список имен столбцов, которые необходимо вывести, отделяемые запятыми. Если необходимо вывести все столбцы таблицы, можно заменить этот список звездочкой (*). Ключевое слово FROM следующее далее, сопровождается пробелом и именем таблицы запрос к которой делается. В заключение, точка с запятой (;) должна использоваться чтобы закончить запрос и указать что команда готова к выполнению.

Просмотр только определенного столбца таблицы

Команда SELECT способна извлечь строго определенную информацию из таблицы. Можно предоставить возможность увидеть только определенные столбцы таблицы. Например, запрос

 SELECT sname, comm FROM Salespeople;

будет производить вывод только двух столбцов из таблицы.

Переупорядочение столбца

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

Удаление избыточных данных

DISTINCT (ОТЛИЧИЕ) - аргумент который обеспечивает возможность устранять двойные значения из предложения SELECT. Предположим, что необходимо знать, какие продавцы в настоящее время имеют свои порядки в таблице Порядков. (Под порядком здесь и далее будет пониматься запись в таблицу Порядков, регистрирующую приобретения сделанные в определенный день определенным заказчиком у определенного продавца на определенную сумму). Не нужно знать, сколько порядков имеет каждый; нужен только список номеров продавцов (snum). Поэтому можно написать запрос:

 SELECT snum FROM Orders;

для получения вывода показанного в таблице.

SELECT snum FROM Orders; с дублированием номеров продавцов
snum                                       
1007 1001 1004 1002 1007 1003 1002 1001 1002         1001

 

Для получения списка без дубликатов, для удобочитаемости, можно ввести следующий запрос:

SELECT DISTINCT snum FROM Orders;

SELECT DISTINCT snum FROM Orders; без дублирования номеров продавцов
snum                                       
1001 1002 1003 1004 1007

 

DISTINCT следит за тем, какие значения были ранее, так что бы они не были продублированы в списке. Это - полезный способ избежать избыточности данных.

Вместо DISTINCT, можно указать - ALL. Это будет иметь противоположный эффект, дублирование строк вывода сохранится. Так как это - тот же самый случай, когда не указывается ни DISTINCT, ни ALL, то ALL - скорее пояснительный, а не действующий аргумент.

 

 

Квалифицированный выбор при использовании предложений

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

WHERE - предложение команды SELECT, которое позволяет устанавливать предикаты, условие которых может быть или верным, или неверным для любой строки таблицы. Команда извлекает только те строки из таблицы для которой такое утверждение верно. Например, для вывода имён и комиссионных всех продавцов в Лондоне можно ввести такую команду:

SELECT sname, city FROM Salespeople WHERE city = "LONDON";

Реляционные операторы

Реляционный оператор - математический символ который указывает на определенный тип сравнения между двум значениями. Реляционные операторы которыми располагает SQL:

      = Равный к

      > Больше чем

      < Меньше чем

        >= Больше чем или равно

      <= Меньше чем или равно

      < > Не равно

Эти операторы имеют стандартные значения для числовых значений. Для значения символа, их определение зависит от формата преобразования, ASCII или EBCDIC. SQL сравнивает символьные значения в терминах основных номеров как определено в формате преобразования.

И в ASCII и в EBCDIC, символы - по значению: меньше чем все другие символы которым они предшествуют в алфавитном порядке и имеют один вариант (верхний или нижний). В ASCII, все символы верхнего регистра - меньше чем все символы нижнего регистра, поэтому "Z" < "a", а все номера - меньше чем все символы, поэтому "1" < "Z". То же относится и к EBCDIC.

Булевы операторы

Основные Булевы операторы также распознаются в SQL. Выражения Буля - являются или верными или неверными, подобно предикатам. Булевы операторы связывают одно или более верных/неверных значений и производят единственное верное/или/неверное значение. Стандартными операторами Буля распознаваемыми в SQL являются: AND, OR, и NOT.

Существуют другие, более сложные, операторы Буля (типа "исключенный или"), но они могут быть сформированы из этих трех простых операторов - AND, OR, NOT. Булева логика основана на цифровой компьютерной операции; и фактически, весь SQL(или любой другой язык) может быть сведен до уровня Булевой логики.

Операторы Буля и как они работают:

* AND - логическое умножение (конъюнкция);

* OR - логическое сложение (дизъюнкция);

* NOT - отрицание.

Предположим, необходимо увидеть всех заказчиков в San Jose которые имеют оценку (рейтинг) выше 200. Для этого можно написать следующий запрос:

SELECT * FROM Customers WHERE city = "San Jose" AND rating > 200;

Если же использовать OR, то можно получить всех заказчиков, которые находились в San Jose или (OR) которые имели оценку выше 200:

SELECT * FROM Customers WHERE city = "San Jose" OR rating > 200;

SELECT * FROM Customers WHERE city = "San Jose" AND rating > 200;

SELECT * FROM Customers WHERE city = "San Jose" OR rating > 200;

сnum cname city rating snum сnum cname city rating snum
2008 Cirneros San Jose 300 1007 2003 2004 2008 Liu Grass Cirneros San Jose   San Jose 200 300 300 1002   1007

 

Ещё один запрос:

SELECT * FROM Orders WHERE NOT ((odate = 10/03/1990 AND
snum >1002) OR amt > 2000.00);

Результат его выполнения - в таблице:

SELECT * FROM Orders

WHERE NOT ((odate = 10/03/1990 AND snum >1002) OR amt > 2000.00);

onum       amt      odate      cnum     snum 
3003 3009 3007  3010     767.19  1713.23  75.75  1309.95 10/03/1990 10/04/1990 10/04/1990 10/06/1990   2001     2002     2004     2004     1001  1003  1002  1002 

 

SQL использует специальные операторы IN, BETWEEN, LIKE, и IS NULL.


Оператор IN

Оператор IN определяет набор значений, в который входит данное значение. Если необходимо найти всех продавцов, которые размещены в Barcelona или в London, можно использовать следующий запрос:

 SELECT * FROM Salespeople

WHERE city = 'Barcelona' OR city = 'London';

Имеется и более простой способ получить ту же информацию:

SELECT * FROM Salespeople

WHERE city IN ('Barcelona', 'London');

Оператор BETWEEN

Оператор BETWEEN похож на оператор IN. BETWEEN определяет диапазон, в которое входит искомое значение. BETWEEN чувствителен к порядку, и первое значение в предложении должно быть первым по алфавитному или числовому порядку.

Для извлечения из таблицы Продавцов всех продавцов с комиссионными между.10 и.12 можно записать следующий запрос:

SELECT * FROM Salespeople WHERE comm BETWEEN.10 AND.12;

Оператор BETWEEN предполагает совпадение значений с любым из двух значений границы (в этом случае,.10 и.12).

Оператор LIKE

LIKE применим только к полям типа CHAR или VARCHAR, с которыми он используется, чтобы находить подстроки. В качестве условия он использует специальные символы (wildkards):

* символ подчеркивания (_) замещает любой одиночный символ. Например, 'b_t' будет соответствовать словам 'bat' или 'bit', но не будет соответствовать 'brat'.

* знак процента (%) замещает последовательность любого числа символов (включая символ нуль). Например '%p%t' будет соответствовать словам 'put', 'posit', или 'opt', но не 'spite'.

Запрос для нахождения всех заказчиков, чьи имена начинаются с G:

SELECT FROM Customers WHERE cname LIKE 'G%';

Работа с нулевыми(null) значениями

Когда значение поля равно NULL, это означает, что программа базы данных специально промаркировала это поле как не имеющее никакого значения для этой строки (или записи).

NULL оператор

Когда NULL сравнивается с любым значением, с другим таким же NULL, результат будет неизвестен. Следовательно, выражение типа 'city = NULL' или 'city IN (NULL)' будет неизвестно, независимо от значения city. Для работы с такими полями SQL предоставляет специальный оператор IS, который используется с ключевым словом NULL, для размещения значения NULL. Найдем все записи в нашей таблице Заказчиков с NULL значениями в city столбце:

SELECT * FROM Customers WHERE city IS NULL;


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: