35133

Основные понятия SQL

Практическая работа

Информатика, кибернетика и программирование

Он используется для связи с такими системами управления базами данных как Orcle INGRES Informix Sybse SQLbse Microsoft SQL Server DB2 СУБД самой IBM продуктами SQL DC Prdox ccess pproch и многими другими. Обычно продукт базы данных включает не только СУБД. Собственно СУБД иногда ее называют исполнительной системой или исполнительным механизмом базы данных является рабочей лошадкой продукта. Она хранит данные осуществляет поиск и выборку данных а также записывает данные посредством исполнения операторов SQL В вычислительной...

Русский

2013-09-09

152.5 KB

28 чел.

Занятие 1

1.Основные понятия SQL

Разработанный в 1970 г. в компании IBM язык SQL (Structured Query Lanquage - Структурированный Язык Запросов) стал стандартным языком. Он используется для связи с такими системами управления базами данных, как Oracle, INGRES, Informix, Sybase, SQLbase, Microsoft SQL Server, DB2 (СУБД самой IBM), продуктами SQL/DC, Paradox, Access, Approach и многими другими. На сегодняшний день уже более 140 продуктов имеют в своем составе SQL-интерфейс.

Обычно продукт базы данных включает не только СУБД. Собственно СУБД (иногда ее называют исполнительной системой или исполнительным механизмом базы данных) является "рабочей лошадкой" продукта. Она хранит данные, осуществляет поиск и выборку данных, а также записывает данные посредством исполнения операторов SQL В вычислительной среде клиент/сервер СУБД обычно располагается на сервере. Кроме того, продукты баз данных обычно содержат различные инструментальные средства разработки интерфейса с пользователями, облегчающие связь с исполнительной системой и предоставляющие пользователю средства для использования данных, полученных из базы. Среди таких инструментов можно назвать генераторы форм и отчетов, языки программирования четвертого поколения (4GL), графические языки запросов, генераторы запросов пользователя, дополнительное программное обеспечение для мультимедиа и гипертекстовые системы, системы автоматизации проектирования и автоматизированные производства (CAD/CAM), электронные таблицы, и добротные классические "прямые" интерфейсы пользователя. Все эти средства используют язык SQL для обращения к базе данных во время исполнения различных операций. СУБД, в свою очередь, обеспечивает запись, организацию и поиск данных, гарантирует их целостность, защиту и позволяет избежать взаимного влияния при одновременной работе пользователей с данными. В данном руководстве освещаются вопросы, связанные с особенностями применения связи рабочих инструментов пользователей с исполнительной системой без рассмотрения внутренних устройств этих инструментов или деталей реализации самой СУБД.

Реализации языка SQL

В техническом смысле SQL является "подъязыком данных", который предназначен только для использования в качестве языка взаимодействия с базой данных. Сам по себе SQL не содержит тех средств, которые необходимы для разработки законченных программ, и может использоваться в виде одной из трех прикладных реализаций:

1. Интерактивный или автономный SQL дает возможность пользователям непосредственно извлекать информацию из базы данных или записывать ее в базу. Например, пользователь может запросить из БД список бухгалтерских операций за текущий месяц. Информация может быть выдана на экран, переадресована в файл или на принтер.

2. Статический SQL - фиксированный (исполняемый), записанный заранее, а не генерируемый во время выполнения программы код SQL, который обычно используется в приложениях.

3. Динамический SQL - код SQL, сгенерированный приложением во время исполнения. Он заменяет статический SQL в тех случаях, когда необходимый код SQL еще не может быть определен во время написания приложения, так как сам код зависит от того, какой выбор сделает пользователь (во время реализации приложения). Операторы динамического SQL часто генерируются такими средствами разработки, как, например, графические языки запросов (реализующие запросы пользователя).

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

Азбука реляционных баз данных

В основе реляционных баз данных (и стандарта SQL) лежит несколько простых правил и принципов:

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

2. Все данные в реляционной базе изображаются в форме двухмерных таблиц (на языке математики - "отношений"). Каждая таблица содержит некоторое число строк (в том числе 0), называемых "картежами" и один или несколько столбцов, называемых "атрибутами". Все строки в таблице имеют одну и ту же последовательность столбцов, в которых записаны различные значения, однако наборы значений в столбцах отличаются.

3. После того, как данные введены в БД, можно сравнивать значения в различных столбцах (в том числе и для разных таблиц) или объединять строки, в которых найдено совпадение. Это позволяет соотносить между собой строки и производить очень сложные операции обработки над всеми данными, находящимися в базе.

4. Все операции определяются только логикой, а не положением строки в таблице. Например, можно запросить все строки, где (х=3), и невозможно запросить первую, третью или пятую строку. Строки в реляционной базе данных расположены в произвольном порядке и порядок, в котором они записаны, необязательно соответствует тому порядку, в котором они были введены.

5. Поскольку невозможно определить строку по ее положению (порядку в таблице), необходимо иметь один или несколько столбцов с уникальным значением для идентификации каждой строки. Эти столбцы называются первичными ключами таблицы. В примере на рис. 1.1 это первый столбец.

Рассмотрим, что означают эти правила на практике. Одним из преимуществ реляционного подхода к построению БД является отсутствие необходимости заботиться о таких деталях, как способы представления данных или их физическое размещение в самой базе. Старые иерархические и сетевые базы данных, в которых приходилось иметь дело с подобными вопросами реализации, имели громоздкую структуру и были сложными в управлении.

Clients

ID_NUM

NAME

CITY

STATE

1809

Stoklas

San Francisco

CA

1996

Abril

New York

NY

1777

Vencera

Portland

OR

Рис. 1. Таблица простейшей реляционной базы данных

Создание базы данных

Одно из достоинств реляционного подхода - это его простота. Все данные могут быть представлены и переданы на любые устройства для вывода информации в одной и той же простой форме: в виде таблиц. Проблемы возникают тогда, когда подобным способом нужно смоделировать достаточно сложную ситуацию, однако такие случаи встречаются в современном мире достаточно редко.

Что же случится, если один столбец будет содержать несколько значений для одной строки? Предположим, мы хотим добавить в таблицу столбец с телефонным номером. Большинство людей имеет, как минимум, два телефона: дома и на работе. Человек может иметь и другие средства связи: факс, пейджер, электронную почту, автоответчик, устройство передачи сообщений и т.п. Одной из основных особенностей реляционной модели является требование, чтобы каждое значение в столбце являлось атомарной величиной, т.е. в каждом столбце для каждой строки может содержаться только одно значение. Если поместить несколько значений, они всегда будут обрабатываться СУБД, как единая величина.

Проблема использования дополнительных данных в БД может быть разрешена путем построения другой таблицы (например, таблицы Client_Phone - "телефоны клиентов") с несколькими столбцами. Один столбец будет отведен под номер телефона, другой - под расшифровку типа номера (домашний номер, факс, электронная почта и т.д.) и третий - под описание того, когда можно позвонить человеку по этому номеру. Конечно, мы должны связать телефонный номер с конкретным человеком, который находится на другом конце линии. Владелец номера представлен в нашей первой таблице и поэтому мы должны найти способ связать эти две таблицы.

Это можно сделать, записав первичный ключ (уникальный идентификатор столбца в таблице клиентов Clients) в таблицу Client_Phone. Поскольку это число уникально для каждого клиента, то всегда можно определить, какому клиенту соответствует данный номер. Колонка ID_NUM в таблице Client_Phone называется внешним ключом, и мы будем говорить, что он имеет ссылку на первичный ключ таблицы Clients. (В этом руководстве ключи, на которые ссылаются внешние ключи, носят название родительских ключей). Рис. 1.2 служит иллюстрацией таких отношений. Если все значения внешних ключей в таблице "Client Phone" имеют ссылку на значения, которые реально присутствуют в таблице Clients, то принято говорить, что система обладает свойством ссылочной целостности.

Если ссылочная целостность отсутствует, то это должно вызывать тревогу, так как означает, что в базе данных существуют телефонные номера для тех клиентов, которых нет в таблице Clients или которые не могут быть идентифицированы.

Кроме того, для таблицы Client_Phone также необходим первичный ключ, так как каждая таблица должна иметь первичный ключ. Для этой цели нельзя использовать номера в столбце ID_NUM, так как они не уникальны (у одного и того же клиента может быть несколько телефонных номеров). А может быть использовать для этой цели сам телефонный номер? Это уже лучше, но возможна ситуация, когда два клиента имеют один и тот же телефон дома или в офисе. Если такое случается, то возникает необходимость "проследить" отдельно каждый телефонный номер. В противном случае может потребоваться специальная трудноосуществимая обработка.

Client_Phone

ID_NUM

PHONE

TYPE

AVAIL

1809

415 555 8956

Home

After б pm

1809

510 555 6220

Work

9-5 mf

1996

212 555 0199

Work

app. 10-7

1996

212 555 7878

Beeper

Any

1777

503 555 2279

FAX

Any

1777

503 555 9188

Home

After 7

Рис. 2. Таблица Client_Phone

Первичный и внешний ключи необязательно должны основываться только на одном столбце. Мы можем скомбинировать столбцы ID_NUM и Phone (телефон). Эта комбинация должна всегда быть уникальной, потому что если мы встретим дважды один и тот же номер, относящийся к одному и тому же человеку, то это означает двойное вхождение, и одну из таких строк нужно отбросить. Таким образом, комбинация ID_NUM и Phone является логическим первичным ключом для таблицы Client_Phone. Ключ, который использует более одного столбца, иногда носит название многостолбцового, составного или конкатенированного.

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

Родительский ключ должен быть уникальным идентификатором, чтобы всегда можно было указать, на какую строку таблицы родительского ключа имеется ссылка во внешнем ключе. Внешний ключ будет иметь то же количество и тип данных столбцов, что и родительский ключ, хотя он может называться по-другому. Значения внешних ключей не обязаны быть (и обычно не бывают) уникальными в своей таблице. Это необходимо только для таблицы родительских ключей. Система обладает ссылочной целостностью, если все значения внешних ключей представлены в родительском ключе, на который они ссылаются.

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

Процесс, в результате которого достаточно сложные ситуации могут быть представлены с помощью простых таблиц, называется "нормализацией". При нормализации базы данных исключаются ее избыточность и повторяющиеся группы данных. Этот процесс гарантирует, что каждый столбец будет зависеть от значения первичного ключа и только от него.

Объединение или связывание таблиц

Теперь, когда стало ясно, как связать две таблицы, чтобы номера телефонов ассоциировались с информацией о клиентах, владеющих этими телефонами, встает вопрос: кто должен это сделать? Две таблицы остаются отдельными сущностями в базе данных. Однако, при извлечении содержащейся в них информации можно связать значение каждого внешнего ключа с родительским ключом и с содержимым других столбцов таблицы родительского ключа, которые необходимо просмотреть. Операция, с помощью которой информация извлекается из базы данных, называется запросом. Операция, которая извлекает информацию из нескольких таблиц одновременно, используя связь между столбцами двух таблиц, называется соединением. Соединение, в котором внешний ключ связан с родительским ключом, обычно называется естественным соединением, так как оно встроено в структуру базы данных. С помощью подобных соединений данных, находящихся в отдельных таблицах, и построена реляционная структура. Существуют и другие способы соединений о которых мы узнаем позднее.

Группа связанных таблиц, представляющих собой модель реального объекта, носит название схемы. Описание содержимого схемы (т.е. количество таблиц в схеме, количество столбцов в каждой таблице и так далее) отражено в специальной группе таблиц, называемой lnformation_Shema (информационной схемой) в официальном стандарте SQL. В некоторых продуктах для Информационной Схемы применяется термин "каталог", однако в данном стандарте этот термин используется несколько иначе. Информация подобного типа называется метаданными, так как это данные, используемые для описания других данных.

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

2.Язык SQL

SQL отличается от языков программирования высокого уровня несколькими признаками. Он относится к непроцедурным языкам. На языке типа COBOL или С можно записать для компьютера шаг за шагом все инструкции, необходимые для исполнения задания. SQL просто декларирует, что нужно делать, а исполнение возлагает на СУБД. Такой подход лежит в русле философии реляционных баз данных. СУБД в данном случае рассматривается как "черный ящик": что делается внутри него - пользователя не касается. Его интересует только получение правильного ответа из базы данных и внесение в нее необходимых изменений. Ограничивая пользователя в вопросах исполнения операторов, SQL позволяет упростить сами операции, обеспечивая гибкость при реализации баз данных.

Использование таблиц для выборки данных из таблиц

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

Формирование запроса

SQL символизирует структурированный язык запросов (Structured Query Language). Запросы являются наиболее часто используемым аспектом SQL. Есть категория пользователей SQL, которые используют язык только для формулировки запросов. Поэтому изучение SQL начинается с обсуждения запроса и того, как он выполняется в этом языке.

Что такое запрос? Это команда, которая формулируется для СУБД и требует предоставить определенную указанную информацию. Эта информация обычно выводится непосредственно на экран дисплея компьютера или используемый терминал, хотя в ряде случаев ее можно направить на принтер, сохранить в файле или использовать в качестве исходных данных для другой команды или процесса.

Как осуществляется связь запросов?

Все запросы в SQL конструируются на базе одной команды. Структура этой команды проста, потому что ее можно расширять для того, чтобы выполнить очень сложные вычисления и обработку данных. Эта команда называется SELECT.

3.Команда SELECT

В простейшей форме команда SELECT дает инструкцию базе данных для поиска информации в таблице. Например, можно получить таблицу Salespeople, введя с клавиатуры следующее:

SELECT snum, sname, city, comm FROM Salespeople;

Команда просто выводит все данные из таблицы в столбцах snum, sname, city, comm. Некоторые программы допускают тщательное форматирование выходных данных, но это лежит за пределами спецификаций стандарта. Далее приводится объяснение каждой части этой команды:

  •  SELECT - ключевое слово, которое сообщает базе данных, что команда является запросом. Все запросы начинаются с этого ключевого слова, за которым следует пробел.
  •  snum, sname, … - список столбцов таблицы, которые должны быть представлены в результате выполнения запроса. Столбцы, имена которых не представлены в списке, не включаются в состав выходных данных команды. Это, однако, не приводит к удалению из таблиц таких столбцов или содержащейся в них информации, потому что запрос не воздействует на информацию, представленную в таблицах: он только извлекает данные.
  •  FROM Sales - FROM, так же как и SELECT, является ключевым словом, которое должно быть представлено в каждом запросе. За ним следует пробел, а затем - имя таблицы, которая используется как источник информации для запроса. В приведенном примере это таблица Salespeople.
  •  Символ "точка с запятой" (; ) используется во всех интерактивных командах SQL для сообщения базе данных, что команда сформулирована и готова к выполнению. В некоторых системах этот символ заменен на символ "слэш обратный" ("\") в строке, которая непосредственно следует за концом команды.

Стоит заметить, что запрос по своей природе не обязательно упорядочивает выходные данные каким-либо определенным образом. Одна и та же команда, выполненная над одними и теми же данными в различные моменты времени, в результате выдает данные, упорядоченные по-разному. Обычно строки выдаются в том порядке, в котором они представлены в таблице, но этот порядок может быть совершенно произвольным. Необязательно, что данные в результате выполнения запроса будут представлены в том порядке, в котором они вводятся или хранятся. Можно упорядочить выходные данные непосредственно с помощью SQL-команд, указав специальное предложение. Позже будет объяснено, как это сделать. Сейчас же просто констатируем факт отсутствия какого-либо порядка в представлении выходных данных.

Выбор чего-либо простейшим способом

Если необходимо увидеть каждую колонку таблицы, существует упрощенный вариант сделать это. Можно использовать символ "*"  ("звездочка"), который заменяет полный список столбцов.

SELECT * FROM Salespeople;

Результат выполнения этой команды тот же, что и для рассмотренной ранее.

SELECT в общем виде

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

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

Мощность команды SELECT заключается в ее свойстве извлекать из таблицы лишь определенную информацию. Надо отметить возможность просмотра только указанных столбцов таблицы. Для этого достаточно пропустить столбцы, которые нет необходимости просматривать, в части команды SELECT. Например, по запросу:

SELECT sname, comm FROM Salespeople;

получаются выходные данные только по двум указанным столбцам.

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

Перестановка столбцов

Колонки таблицы упорядочены по определению, но это не значит, что их нужно извлекать в том же порядке. Звездочка (*) извлечет столбцы в соответствии с их порядком, но если указать столбцы раздельно, они выстраиваются в любом желаемом порядке. В таблице Orders зададим такой порядок столбцов: сначала разместим столбец "дата заказа" (odate), за ним - столбец "номер продавца" (snum), затем - "номер заказа" (onum) и "количество" (amt):

SELECT odate, snum, onum, amt FROM Orders;

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

DISTINCT - аргумент, дающий возможность исключить дублирующиеся значения из результата выполнения предложения SELECT. Предположим, необходимо узнать, какие продавцы имеют в настоящее время заказы в таблице Orders. Не имеет значения количество заказов каждого из продавцов, нужен лишь список номеров продавцов (snum). Необходимо ввести:

SELECT snum FROM Orders;

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

SELECT DISTINCT snum FROM Orders;

DISTINCT отслеживает, какие значения появились в списке выходных данных, и исключает из него дублирующиеся значения. Это полезный способ исключить избыточные данные. Если таковых нет, не следует использовать DISTINCT, поскольку он может скрыть проблемы. Предположим, все имена покупателей различны. Если кто-то введет второго покупателя с фамилией Clemens в таблицу Customers при использовании SELECT DISTINCT, можно не заметить, что имеются дублирующиеся данные. Будут получены ошибочные сведения о Clemens, поскольку в этом случае нет информации об избыточности данных.

Параметры DISTINCT можно задать только один раз для данного предложения SELECT. Если SELECT извлекает множество полей, то он исключает строки, в которых все выбранные поля идентичны. Строки, в которых некоторые значения одинаковы, а другие - различны, включаются в результат. DISTINCT, фактически, действует на всю выходную строку, а не на отдельное поле, исключая возможность их повторения.

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

Определение выборки – предложение WHERE

Таблицы бывают достаточно большими с тенденцией к увеличению по мере добавления строк. В данный момент времени интересны только некоторые строки таблицы. SQL дает возможность задать критерий определения строк, которые следует включить в состав выходных данных. Предложение WHERE команды SELECT позволяет определить предикат, условие, которое может быть либо истинным, либо ложным для каждой строки таблицы. Команда извлекает только те строки из таблицы, для которых предикат имеет значение "истина". Предположим, необходимо узнать имена всех продавцов в Лондоне (London). В этом случае можно ввести следующую команду:

SELECT sname, city FROM Salespeople WHERE city = 'London';

При наличии предложения WHERE программа обработки базы данных просматривает таблицу строка за строкой и для каждой строки проверяет, истинен ли на ней предикат.

Столбец city включен в результат не потому, что он указан в предложении WHERE, а потому, что имя этого столбца указано в предложении SELECT. Совершенно необязательно, чтобы столбец, используемый в предложении WHERE, был представлен в числе тех столбцов, которые необходимо видеть среди выходных данных.

Можно рассмотреть пример с использованием числового поля в предложении WHERE. Поле rating таблицы Customers предназначено для того, чтобы разделить покупателей на группы по некоторому критерию в соответствии с этим номером. Это своего рода оценка кредита или оценка, основанная на значении предыдущих покупок. Такие цифровые коды могут быть полезны в реляционных базах данных как способ обобщения сложной информации. Можно выбрать всех покупателей (Customers) с рейтингом (rating) 100 следующим образом:

SELECT * FROM Customers WHERE rating = 100;

Здесь не используются одиночные кавычки, поскольку поле rating является числовым. К предложению WHERE относятся все комментарии, сделанные в этом разделе ранее. Т.е. можно использовать номера столбцов, исключать повторяющиеся строки или переставлять столбцы в командах SELECT, использующих WHERE.

Итоги

Мы выяснили, что существует несколько способов получения представленной в таблице информации в том виде, который вас интересует. Например, можно переставлять или исключать столбцы таблицы, а также сохранять или исключать повторяющиеся строки.

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

4.Использование реляционных и булевых операторов

Из предыдущего раздела выяснилось, что предикаты могут приписывать предложениям с равенством значения "истина" или "ложь", а также оценивать операторы равнения отличные от равенства. В этом разделе студентам предлагается рассмотреть и другие операторы сравнения, применяемые в SQL, и показано, как можно использовать булевы операторы для изменения и комбинирования значений предиката. В булевом выражении единственный предикат может содержать любое количество условий, что позволяет получить очень мощные предикаты. Здесь также объясняется применение круглых скобок для структурирования сложных предикатов.

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

Реляционный оператор - это математический символ, который задает определенный тип сравнения между двумя значениями. Уже известно как применяются равенства, такие как 2 +3= 5 или city = 'London'. Однако существуют и другие операторы сравнения. Предположи, необходимо вычислить продавцов (Salespeople), комиссионные (commissions) которых превышают заданное значение. В этом случае следует воспользоваться сравнением типа "больше или равно". SQL распознает следующие операторы сравнения:

  •  = - равно;
  •  > - больше, чем;
  •  < - меньше, чем;
  •  >= - больше или равно;
  •  <= - меньше или равно;
  •  <> - неравно.

Эти операторы имеют стандартное значение для числовых величин. Их определение для символьных значений зависит от используемого формата представления (ASCII или EBCDIC). SQL сравнивает символьные значения в терминах соответствующих чисел, определенных в формате преобразования.

Символьные значения, представляющие числа, например, 1, необязательно равны тому числу, которое они представляют.

Операторы сравнения можно применять для того, чтобы представить алфавитный порядок; например, 'а' < 'п' означает, что 'а' предшествует 'п' в алфавитном порядке, но эта процедура ограничена параметрами формата преобразования. Как в ASCII, так и в EBCDIC, сохранен алфавитный порядок предшествования символов, представленных в одном и том же регистре. В ASCII все заглавные символы меньше, чем все строчные, значит 'Z' < 'а', а все цифры меньше, чем все символы, значит 1' < 'Z'.  В EBCDIC все наоборот. Для простоты рассмотрения, предположим, что используется формат ASCII. Если точно неизвестно, с каким форматом идет работа или как работает формат, то следует обратиться к документации.

Значения, которые здесь сравниваются, называются скалярными значениями. Скалярные значения получаются из скалярных выражений: 1 + 2 является скалярным выражением, которое дает скалярное значение 3. Скалярные значения могут быть символами или числами, хотя только числа используются с арифметическими операторами, такими как + или *. Предикаты обычно сравнивают скалярные значения, используя операторы сравнения или специальные SQL-операторы, для того, чтобы проверить является ли результат сравнения истинным.

Предположим, необходимо увидеть всех  покупателей (Customers) с рейтингом (rating) более 200. Поскольку 200 - это скалярное значение, как и все значения столбца rating, для их сравнения можно использовать оператор отношения:

SELECT * FROM Customers WHERE rating > 200;

При необходимости увидеть всех покупателей, рейтинг (rating) которых больше или равен 200, следовало бы использовать предикат:

rating >= 200

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

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

  •  AND - берет два булевых выражения (в виде A AND В) в качестве аргументов и дает в результате истину, если они оба истинны;
  •  OR - два булевых выражения (в виде A OR В) в качестве аргументов и оценивает результат как истину,  если хотя бы один из них истинен;
  •  NOT - берет единственное булево выражение (в виде NOT А) в качестве аргумента и изменяет его значение с истинного на ложное или с ложного на истинное.

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

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

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

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

NOT дает  возможность  получить отрицание (противоположное значение) булева выражения. Вот пример запроса с использованием NOT:

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

Заметим, что оператор NOT должен предшествовать булеву выражению, значение которого он должен изменить, но не может располагаться непосредственно перед оператором сравнения, как это можно сделать во фразе на английском языке. Таким образом некорректно вводить:

rating NOT > 200

в качестве предиката, несмотря на то, что эту фразу можно легко сформулировать по-английски. Отсюда следует ряд проблем. Например, как SQL оценит следующее?

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

Применяется ли NOT к выражению city = 'San Jose' или к двум выражениям: тому, что указано, и выражению rating > 200? В соответствии с приведенной записью правильным является первый вариант. SQL применяет NOT только к тому булеву выражению, которое непосредственно следует за ним. Можно получить другой результат по следующей команде:

SELECT * FROM Customers WHERE NOT (city = 'San Jose' OR rating > 200);

SQL понимает круглые скобки следующим образом: все то, что расположено внутри круглых скобок, вычисляется прежде всего и рассматривается как единственное выражение по отношению к тому, что расположено за пределами круглых скобок (это соответствует стандартной интерпретации в математике). Другими словами, SQL извлекает каждую строку и определяет, выполняется ли для нее условие city = 'San Jose' или rating > 200. Если одно из этих выражений истинно, то булево выражение, расположенное в круглых скобках, тоже истинно. Однако, если булево выражение в круглых скобках истинно, предикат в целом ложен, поскольку NOT превращает истину в ложь и наоборот.

Вот преднамеренно усложненный пример. Проследим его логику:

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

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

Дадим детальное объяснение оценки рассмотренного выше примера. Наибольшую глубину вхождения в булево выражение имеет предикат: odate = 10/03/1990 and snum > 1002, со связкой AND, образующий булево выражение, которое оценивается как истинное для всех тех строк, которые удовлетворяют каждому из этих условий. Это составное булево выражение (которое мы назовем булево выражение номер 1 или, для краткости, В 1) соединено с amt > 2000.00 (выражение В2) с помощью OR и образует третье выражение (ВЗ), которое является истинным для данной строки в том случае, если либо В1 либо В2 истинны для этой строки. ВЗ полностью содержится в круглых скобках, которым предшествует NOT, и образует заключительное булево выражение (В4), которое является условием предиката. Следовательно, В4 - предикат запроса - истинен, если ВЗ ложен и наоборот. ВЗ ложен, если ложен каждый из В 1 и В2. В1 ложен для строк, в которых либо order date не совпадает с заданным значением 10/03/1990, либо значение snum не превышает 1002. В2 ложен для всех строк, в которых значение поля amount не превосходит 2000.00. Любая строка с суммой,  превышающей 2000.00, делает В2 истинным, отсюда ВЗ тоже истинно, а В4 - ложно. Следовательно, все такие строки исключаются из числа выходных данных. Остающиеся строки от 3 октября 1990 года с snum, превышающим 1002, делают В1 истинным, следовательно, и ВЗ истинно, а значит предикат ложен. Эти записи также исключаются из рассмотрения.

Итоги

В этом разделе более полно представлены сведения из области предикатов. Показано, как можно найти значения, которые связаны с данным значением любым количеством способов, заданных с помощью различных реляционных операторов, как применяются булевы операторы AND и OR для комбинации сложных условий, каждое из которых может рассматриваться как единственный предикат. Булев оператор NOT изменяет на противоположное значение условия или группы условий. Все булевы выражения и операторы отношения управляются с помощью круглых скобок, которые определяют порядок выполнения операции. Эти операции могут иметь любой уровень сложности. Было рассмотрено,  как можно разложить записанное сложное выражение на составные части, каждая из которых является простой.

5.Использование специальных операторов в "условиях "

Кроме булевых операторов и операторов сравнения SQL использует специальные операторы IN, BETWEEN и IS NULL. Вы научитесь применять их, подобно операторам сравнения, для получения более выразительных и мощных предикатов. Обсуждение IS NULL касается значений пропускаемых данных и NULL-значений, фиксирующих отсутствие данных.

Оператор IN

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

SELECT * FROM Salespeople WHERE city = 'Barcelona' OR city = 'London';

Однако существует более простой способ получить ту же самую информацию:

SELECT * FROM Salespeople WHERE city IN ("Barcelona', 'London');

IN определяет множество, элементы которого точно перечисляются в круглых скобках и разделяются запятыми. Если в поле, имя которого указано слева от IN, есть одно из перечисленных в списке значений (требуется точное совпадение), то предикат считается истинным. Если элементы множества имеют числовой, а не символьный тип, то одиночные кавычки непосредственно слева и справа от значения необходимо опустить. Можно найти всех покупателей, обслуживаемых продавцами 1001, 1007, 1004.

SELECT * FROM Customers WHERE snum IN (1001,1007,1004);

Оператор BETWEEN

Оператор BETWEEN сходен с IN. Вместо перечисления элементов множества, как это делается в IN, BETWEEN задает границы, в которые должно попадать значение, чтобы предикат был истинным. Используется ключевое слово BETWEEN, за которым следуют начальное значение, ключевое слово AND и конечное значение.  Также как и IN, BETWEEN чувствителен к порядку: первое значение в предложении должно быть первым в соответствии с алфавитным или числовым порядком. (В отличие от английского языка в SQL не говорят: значение расположено между ("is BETWEEN") значением и значением, но просто значение между ("BETWEEN") значением и значением.) Следующий запрос позволит извлечь из таблицы Salespeople всех продавцов (salespeople), комиссионные которых имеют величину в диапазоне .10  и .12:

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

Оператор BETWEEN является включающим, т.е. граничные значения (в дан ном примере это .10 и .12) делают предикат истинным. SQL непосредственно не поддерживает исключающий BETWEEN. Необходимо сформулировать граничные значения так, чтобы включающая интерпретация была справедлива либо сделать примерно следующую запись:

SELECT * FROM Salespeople WHERE (comm BETWEEN .10, AND .12) AND NOT comm IN (.10, .12);

Пусть эта запись и неуклюжа, но она показывает, как новые операторы можно комбинировать с булевыми операторами для получения более сложных предикатов. Значит, IN и BETWEEN используются, как и операторы сравнения для сопоставления значений, одно из которых является множеством (для IN) или диапазоном (для BETWEEN).

Аналогично всем операторам сравнения, BETWEEN действует на символьных полях, представленных в двоичном (ASCII) эквиваленте, т.е. для выборки можно воспользоваться алфавитным порядком.

Работа с NULL-значениями

Часто в таблице встречаются записи с незаданными значениями какого-либо из полей, потому что значение поля неизвестно или его просто нет. В таких случаях SQL позволяет указать в поле NULL-значение. Строго говоря, NULL-значение вовсе не представлено в поле. Когда значение поля есть NULL это значит, что программа базы данных специальным образом помечает поле, как не содержащее какого-либо значения для данной строки (записи). Дело обстоит не так в случае простого приписывания полю значения "нуль" или "пробел",  которые база данных трактует как любое другое значение. Поскольку NULL не является значением как таковым, он не имеет типа данных. NULL может размещаться в поле любого типа. Тем не менее, NULL, как NULL-значение, часто используется в SQL.

Предположим, появился покупатель, которому еще не назначен продавец. Чтобы констатировать этот факт, нужно ввести значение NULL в поле snum, а реальное значение включить туда позже, когда данному покупателю будет назначен продавец.

Оператор IS NULL

Поскольку NULL фиксирует пропущенные значения, результат любого сравнения при наличии NULL-значений неизвестен. Когда NULL-значение сравнивается с любым значением, даже с NULL-значением, результат просто неизвестен. Булево значение "неизвестно" ведет себя также, как "ложь" - строка, на которой предикат принимает значение "неизвестно", не  включается в результат запроса - при одном важном исключении: NOT от лжи есть истина (NOT (false)=true), тогда как NOT от неизвестного значения есть также неизвестное значение. Следовательно, такое выражение как "city = NULL" или "city IN (NULL)" является неизвестным  независимо от значения city.

Часто необходимо различать false и unknown - строки, содержащие значения столбца, не удовлетворяющие предикату, и строки, которые содержат NULL. Для этой цели SQL располагает специальным оператором IS, который используется с ключевым словом NULL для локализации NULL-значения. Для нахождения всех записей со значениями NULL в таблице Customers в столбце city следует ввести:

SELECT * FROM Customers WHERE city IS NULL;

Использование NOT со специальными операторами

Специальные операторы, которые были рассмотрены в этом разделе, могут непосредственно предшествовать булеву оператору NOT. Этим они отличаются от операторов сравнения, которые должны содержать NOT перед всем выражением. Например, если не осуществляется поиск NULL-значений, а, напротив, необходимо исключить их из выходных данных, то нужно использовать NOT для того, чтобы придать предикату противоположное значение:

SELECT * FROM Customers WHERE city IS NOT NULL;

Если NULL-значения отсутствуют, то в результате выполнения этого запроса будет получена вся таблица Customers, что эквивалентно вводу:

SELECT * FROM Customers WHERE NOT city IS NULL;

что тоже приемлемо.

Можно также использовать NOT и IN:

SELECT * FROM Salespeople WHERE city NOT IN ('London', 'San Jose');

Другой способ выразить то же самое:

SELECT * FROM Salespeople WHERE NOT city IN ('London', 'San Jose');

Итоги

Теперь вы научились конструировать предикаты в терминах отношений, специально определенных для SQL, искать значения в определенном диапазоне (BETWEEN) или значения, принадлежащие определенному множеству (IN).

Вы поняли, как SQL реагирует на пропуски данных ( вполне реальная ситуация для мира баз данных) с помощью NULL-значений. Вы умеете извлекать NULL-значения или исключать их из выходных данных, применяя оператор IS NULL (или IS NOT NULL). Полный набор стандартных математических функций и специальных операторов позволяет переходить к специальным функциям SQL, которые оперируют целыми группами, а не на единичными значениями.

6.Функции агрегирования

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

Что такое функции агрегирования?

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

  •  COUNT - определяет количество строк или значений поля,  выбранных посредством запроса и не являющихся NULL-значениями;
  •  SUM - вычисляет арифметическую сумму всех выбранных значений данного поля;
  •  AVG вычисляет среднее значение для всех выбранных значений данного поля;
  •  МАХ - вычисляет наибольшее из всех выбранных значений данного поля;
  •  MIN  вычисляет наименьшее из всех выбранных значений данного поля.

Как используются функции агрегирования?

Функции агрегирования используются как имена полей в предложении запроса SELECT с одним исключением: имена полей применяются как аргументы. Для SUM и AVG могут использоваться только цифровые поля. Для COUNT, МАХ и MIN - цифровые и символьные поля. При употреблении с символьными полями МАХ и MIN применяются к ASCII-эквивалентам: MIN предполагает минимальное (первое), а МАХ - максимальное (последнее) значения в соответствии с алфавитным порядком.

Чтобы найти сумму (SUM) всех заявок из таблицы Orders, можно ввести следующий запрос:

SELECT SUM(amt) FROM Orders;

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

Похожей операцией является поиск среднего значения:

SELECT AVG(amt) FROM Orders;

Специальные атрибуты в COUNT

Функция COUNT отличается от предыдущих тем, что подсчитывает количество значений в данном столбце или количество строк в таблице. Когда подсчитываются значения по столбцу, в команде используется DISTINCT для подсчета числа различных значений данного поля. Можно использовать его, например, для подсчета количества продавцов, имеющих в настоящее время заказы в таблице Orders:

SELECT COUNT (DISTINCT snum) FROM Orders;

В данном примере DISTINCT вместе со следующим за ним именем поля, к которому он применяется, заключен в круглые скобки и не следует непосредственно за SELECT. Такая форма применения DISTINCT с COUNT к отдельным столбцам предписывается стандартом ANSI, но многие программы не придерживаются этого требования. Указанным способом DISTINCT можно применять с любой функцией агрегирования, но чаще всего он используется с COUNT. Применение его с МАХ и MIN бесполезно; а используя SUM и AVG, необходимо включение в выходные данные повторяющихся значений, так как они влияют на сумму и среднее для значений всех столбцов.

Использование COUNT со строками, а не со значениями. Для подсчета общего количества строк в таблице следует использовать функцию COUNT со звездочкой вместо имени поля так, как показано в следующем примере:

SELECT COUNT (*) FROM Customers;

COUNT со звездочкой включает как NULL-значения, так и повторяющиеся значения, значит DISTINCT в этом случае не применим. По этой причине в результате получается число, превышающее COUNT для отдельного поля, который исключает из этого поля все избыточные строки или NULL-значения. DISTINCT исключен для COUNT(*), поскольку он не имеет смысла для хорошо спроектированной и управляемой базы данных. В такой базе данных не должно быть ни строк, содержащих в каждом поле только NULL-значения, ни полностью повторяющихся строк (поскольку первые не содержат никаких данных, а последние полностью избыточны). С другой стороны, если имеются избыточные или содержащие одни NULL-значения строки, то нет необходимости применять COUNT для избавления от этой информации.

Использование дубликатов в агрегатных функциях. Агрегатные функции могут также (во многих реализациях) иметь аргумент ALL, который размещается перед именем поля, как и DISTINCT, но обозначает противоположное: включить дубликаты. Требования ANSI не допускают подобного для COUNT, но многие реализации игнорируют это ограничение. Различие между ALL и * при использовании COUNT заключается в следующем:

  •  ALL использует имя поля в качестве аргумента;
  •  ALL не подсчитывает NULL-значения.

Поскольку * является единственным аргументом, который включает NULLзначения и используется только с COUNT, функции, отличные от COUNT, игнорируют NULL-значения в любом случае. Следующая команда осуществляет подсчет количества значений поля rating, отличных от NULL-значений, в таблице Customers (включая повторения):

SELECT COUNT (ALL rating) FROM Customers;

Агрегаты, построенные на скалярных выражениях. До сих пор были использованы агрегатные функции с одним полем в качестве аргумента. Можно использовать агрегатные функции с аргументами, которые состоят из скалярных выражений, включающих одно поле или большее количество полей. (При этом не разрешается применять DISTINCT.) Предположим, таблица Orders содержит дополнительный столбец с величиной предыдущего баланса (bine) для каждого покупателя. Можно найти текущий баланс, добавив значение поля amount (amt) к значению поля bine. Можно найти наибольшее значение текущего баланса:

SELECT МАХ (bine + amt) FROM Orders;

В процессе выполнения этого запроса для каждой строки таблицы выполняется сложение значений двух указанных полей записи и выбирается наибольшее из полученных значений. Конечно, поскольку покупатели могут иметь несколько заказов, их окончательный баланс в данном случае оценивается отдельно для каждого заказа. Предполагается, что последняя заявка имеет наибольшее значение баланса данного покупателя. В противном случае в предыдущем примере мог быть выбран старый баланс. В SQL можно часто использовать скалярное выражение вместе с полями или вместо них.

Предложение GROUP BY

Предложение GROUP BY позволяет определять подмножество значений отдельного поля в терминах другого поля и применять функции агрегирования к полученному подмножеству. Это дает возможность комбинировать поля и агрегатные функции в одном предложении SELECT. Например, предположим, что нужно найти наибольший заказ из тех, что получил каждый из продавцов. Можно сделать отдельный запрос на каждого продавца, выбрав МАХ (amt) для таблицы Orders для каждого значения поля snum и используя GROUP BY, однако, возможно объединить все в одной команде:

SELECT snum, MAX(amt) FROM Orders GROUP BY snum;

GROUP BY применяет агрегатные функции отдельно к каждой серии групп, которые определяются общим значением поля. В данном случае каждая группа состоит из всех тех строк, которые имеют одно и то же значение snum, а функция МАХ применяется отдельно к каждой такой группе.

Это означает, что поле, к которому применяется GROUP BY по определению имеет на выходе только одно значение на каждую группу,  что соответствует применению агрегатных функций. Такая совместимость результатов и позволяет комбинировать агрегаты с полями указанным способом. Можно также применять GROUP BY с многозначными полями. Обращаясь к предыдущему примеру, можно предположить, что необходимо увидеть наибольший заказ, сделанный каждому продавцу на каждую дату. Для этого нужно сгруппировать данные таблицы Orders по дате (date) внутри одного и того же поля salesperson и применить функцию МАХ к каждой группе. В результате будет получено:

SELECT snum, odate, MAX(amt) FROM Orders GROUP BY snum, odate;

Пустые группы, т.е. даты, когда данный продавец не получал заказов, в результате не представлены.

Предложение НАVING

Обращаясь к предыдущему примеру, можно предположить, что интересны только покупки, превышающие $3000.00. Однако использовать агрегатные функции в предложении WHERE нельзя (если только не применяется подзапрос, который будет объяснен позднее), поскольку предикаты оцениваются в терминах единственной строки, тогда как агрегатные функции оцениваются в терминах групп строк. Это значит, что нельзя формулировать запрос следующим образом:

SELECT snum, odate, MAX(amt) FROM Orders WHERE MAX(amt) > 3000.00 GROUP BY snum, odate;

Это неприемлемо с точки зрения точной интерпретации ANSI. Чтобы увидеть максимальную покупку, превышающую $3000.00, следует использовать предложение HAVING. Оно определяет критерий, согласно которому определенные группы исключаются из числа выходных данных, так же, как предложение WHERE делает это для отдельных строк. Правильная команда выглядит так:

SELECT snum, odate, MAX(amt) FROM Orders GROUP BY snum, odate HAVING MAX(amt) > 3000.00;

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

SELECT snum, MAX(amt) FROM Orders GROUP BY snum HAVING odate = 10/03/1988;

В предложении HAVING нельзя указывать поле odate, поскольку оно может иметь (и действительно имеет) более одного значения для каждой выходной группы. HAVING должно относиться только к агрегатам и полям, выбранным по GROUP BY. Вот корректный способ формулировки приведенного запроса:

SELECT snum, MAX(amt) FROM Orders WHERE odate = 10/03/1990 GROUP BY snum;

Контрольные вопросы

  1.  Сформируйте соответствующий запрос, который позволит Вам отобразить всю информацию из таблицы, например DEPARTMENT
  2.  Сформируйте соответствующий запрос, который позволит Вам отобразить значения конкретных полей в заданном порядке
  3.  Сформируйте запрос, который позволит отобразить данные любого из полей заданной таблицы и при этом повторные значения не должны отображаться.
  4.  Сформируйте запрос, который позволит отобразить строки заданной таблицы, в которой значение определенного поля не превышают (меньше или равно) конкретного установленного значения.
  5.  Сформируйте запрос, который позволит отобразить строки заданной таблицы, в которой значение определенного поля находятся в заданном диапазоне всеми возможными способами.
  6.  Продемонстрируйте работу оператора IN.
  7.  Продемонстрируйте работу оператора NOT.
  8.  Сформируйте запрос, который позволит отобразить строки заданной таблицы, в которой значение определенного поля имеем значение NULL и не NULL
  9.  Используя функцию агрегирования, сформируйте запрос, который позволит Вам получить общую сумму значений заданного поля конкретной таблицы.
  10.  Используя функцию агрегирования, сформируйте запрос, который позволит Вам получить максимальное (минимальное, среднее) значение заданного поля конкретной таблицы.
  11.  Сформируйте запрос, который позволит Вам получить количество строк, в которых значение конкретного поля заданной таблицы разное.
  12.  Продемонстрируйте и объясните работу операторов GROUP BY и HAVING


 

А также другие работы, которые могут Вас заинтересовать

44739. Основы психологии и педагогики 615 KB
  Основной целью изучения учебной дисциплины «Основы психологии и педагогики» является формирование у будущих специалистов универсальных психолого-педагогических компетенций, обеспечивающих эффективное решение широкого круга социально-личностных и профессиональных задач в сфере любой профессии.
44740. Горная выработка. Проведение горных выработок 446.5 KB
  Горнодобывающая промышленность является одной из отраслей экономики России, на основе которой развиваются металлургия, химическая промышленность, машиностроение, электродобывающая и другие отрасли.
44741. Минимизация и факторизация булевой функции 896.5 KB
  При переходе от кубической записи булевой функции к функциональной схеме переменные одного куба объединяются знаком конъюнкции, т.е. являются входами одной схемы И, все кубы объединяются друг с другом знаком дизъюнкции
44742. Экранирование магнитного поля 119 KB
  Конструкторно-технологические мероприятия по локализации возможности образования условий возникновения каналов утечки информации за счет побочных электромагнитных излучений и наводок в технических средствах обработки и передачи информации сводятся к рациональным конструкторно-технологическим решениям
44743. Cинус, косинус и тангенс острого угла прямоугольного треугольника 1.24 MB
  Цели урока: Образовательные: Проверить знания умения и навыки учащихся по темам Применение теории подобия треугольников при решении задач и Соотношение между сторонами и углами прямоугольного треугольника.
44744. Cинус, косинус и тангенс острого угла прямоугольного треугольника 10.57 MB
  Тип урока: подготовка к контрольной работе. Вид урока: традиционный Цели урока: Образовательные: Совершенствование навыков решения задач на применение теории подобия треугольников и соотношений между сторонами и углами прямоугольного треугольника; подготовить учащихся к контрольной работе.
44745. Значение синуса, косинуса и тангенса для углов 30, 45 и 60 градусов 3.18 MB
  Тип урока: комбинированный изучение нового материала закрепление изученного Вид урока: традиционный Цели урока: Образовательные: Научить учащихся вычислять значения синуса косинуса и тангенса углов 300 450 и 600; формировать навыки решения прямоугольных треугольников используя синус косинус и тангенс острого угла. Оборудование урока: доска с меловыми записями рабочие тетради учебник Геометрия 79 кл.
44746. Значение синуса, косинуса и тангенса для углов 30, 45 и 60 градусов. Часть 2 9.42 MB
  Формировать мировоззрение (правильные представления), связанное с ролью математики в науке, исследовании закономерностей реального мира, общностью математических абстракций, общностью отражения материального мира в математических понятиях
44747. Умножение десятичных дробей 36 KB
  Формировать умения умножать десятичные дроби, выполнять умножение десятичных дробей на 0,1; 0,01; 0,001; продолжить работу формированием навыка выполнять умножение десятичных дроби