Файл: Тема концепция управления данными в современных информационных системах Цель лекции.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 24.11.2023

Просмотров: 239

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
ТЕМА 7. Язык SQL: команды языка манипулирования данными
Цель лекции: изучить команды языка манипулирования данными

Ключевые слова: оператор, добавление, удаление, обновление, выбор, вставка, предложение, таблица, строка, сортировка, группировка, запрос, поле, ключевое слово.
План лекции

1. Подмножество языка DML: операторы SELECT, INSERT, UPDATE, DELETE

2. Сортировка и группировка в операторе SELECT

3. Составление запросов
1. Оператор SELECT читает данные из базы данных и возвращает их в виде таблицы результата запроса.

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

SELECT column-list FROM table-list [WHERE where-clause] [ORDER BY order-by-clause]

Операторы SELECT должны содержать слова SELECT и FROM; другие ключевые слова, такие как WHERE или ORDER BY, являются необязательными. К необязательным также относятся GROUP BY, HAVING.

Ключевые слова – это так называемые предложения (clause) – специфические кодовые слова, формирующие наиболее важные блоки внутри оператора SELECT.

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

Изменение данных в SQL выполняются операторами INSERT, DELETE и UPDATE, которые осуществляют соответственно добавле­ние в таблицу новых строк, удаление строк из таблицы, обновление данных в таблице.

Оператор INSERT

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

INSERT [INTO] table ( [column_list] { VALUES ( { DEFAULT | NULL | expression } } [, …] )

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

INSERT INTO Customers (CustomerID, CompanyName) VALUES (‘XYZFO’, ‘XYZ Deli’) 

Оператор INSERT состоит из двух пред­ложений - INTO и VALUES. В предложении INTO указывается таб­лица, в которую добавляется новая строка, а в предложении VALUES содержатся значения данных для новой строки. Кроме того, в предло­жении INTO может быть указан список столбцов, в которые заносятся данные, перечисленные в предложении VALUES. Количество и типы констант, указанных в предложении VALUES, должны соответство­вать этим столбцам. Если список столбцов в предложении INTO не указывается, то подразумеваются все столбцы таблицы и в предложе­нии VALUES константы задаются для всей строки.


Пример

В таблицу Salespeople добавить запись об агенте Nancy, проживаю­щей в городе Atlanta, и присвоить ей код 1005, код менеджера - 1003

INSERT INTO Salespeople VALUES(1005, 'Nancy', 'Atlanta',1003)

Список стол­бцов в запрашиваемой таблице и список столбцов, указываемый в команде INSERT, должны соответствовать друг другу, как по коли­честву, так и по типам.

Пример

В таблицу Salespeople добавить таблицу Customers INSERT INTO Salespeople

SELECT Cnum, Cname, City, 0 FROM Customers.

Оператор DELETE

Для удаления строк из таблиц следует использовать оператор DELETE, синтаксис которого имеет вид:

DELETE FROM table [WHERE criteria]

В предложении FROM указывается таблица, содержащая стро­ки, которые требуются удалить. Оператор DELETE может содер­жать предложение WHERE, где задаются условия отбора удаляе­мых строк, аналогичное условию поиска в операторе SELECT. Если предложения WHERE нет в операторе DELETE, то удаляются все строки исходной таблицы.

Пример

Из таблицы Salespeople удалить запись об агенте с кодом 1005

DELETE FROM Salespeople WHERE Snum=1005.

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

DELETE FROM Products WHERE Discontinued = 1

Отметим, что полезно использовать оператор SELECT с тем же синтаксисом, что и оператор DELETE, чтобы проверить, какие именно записи будут удалены, прежде чем действительно их удалять. Ниже показан оператор SELECT для приведенного выше запроса на удаление данных:

SELECT ProductName FROM Products WHERE Discontinued = 1

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

SELECT CompanyName FROM Customers WHERE Customers. CustomerID NOT IN (SELECT CustomerID FROM Orders WHERE OrderDate > 01/01/15).

А затем заменить оператор SELECT на оператор DELETE:

DELETE FROM Customers WHERE Customers.CustomerID NOT IN (SELECT CustomerID FROM Orders WHERE OrderDate > 01/01/15).

Оператор UPDATE

Для изменения значений в одной или нескольких колонках таблицы применяется оператор UPDATE. Синтакcис этого оператора имеет вид:

UPDATE tableSET column1 = expression1 [, column2 = expression2] [,…] [WHERE criteria].

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

UPDATE Products SET UnitPrice = UnitPrice * 1.1 WHERE UnitPrice < 10.

Оператор UPDATE с предложением SET представляет собой список операций присваивания, где в каждой операции

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

Пример

В таблице Customers у заказчика с кодом 2003 изменить адрес на 'Chicago'

UPDATE Customers SET City='Chicago' WHERE Cnum=2003
2. Предложение ORDER BY

Предложение ORDER BY (необязательное) применяется для сортировки результирующего набора данных по одной или нескольким колонкам. Для определения порядка сортировки используются ключевые слова ASC (по возрастанию) или DESC (по убыванию). По умолчанию данные сортируются по возрастанию. Синтаксис предложения ORDER BY имеет вид:

ORDER BY column1 [{ASC | DESC}] [, column2 [{ASC | DESC}] [,…].

Например, для сортировки сотрудников по фамилии и затем по имени следует использовать следующий SQL-запрос:

SELECT LastName, FirstName, Title FROM Employees ORDER BY LastName, FirstName.

Если сортировка данных требуется в убывающем порядке (например, требуется список продуктов в порядке убывания цен), используется ключевое слово DESC:

SELECT ProductName, UnitPrice FROM Products ORDER BY UnitPrice DESC.
Предложение GROUP BY

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

GROUP BY {column1} [, …]

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

SELECT Customers.CustomerID, COUNT (Orders.OrderID) FROM Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID GROUP BY Customers.CustomerID.

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



3.SELECT является наиболее часто используемым оператора языка SQL. Это команда задает «вопросы» базе данных – вот почему SQL называется «языком запросов».

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


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

SELECT SNUM, SFAM, SIMA, SOTCH, STIP FROM STUDENTS;


SNUM

SFAM

SIMA

SOTCH

STIP

3412

Поляков

Анатолий

Алексеевич

25.50

3413

Старова

Любовь

Михайловна

17.00

3414

Гриценко

Владимир

Николаевич

0.00

3415

Котенко

Анатолий

Николаевич

0.00

3416

Нагорный

Евгений

Васильевич

25.50


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

Детально поясним каждую часть этой команды:

SELECT - ключевое слово, которое сообщает БД, что эта команда является запросом, т.е. все запросы начинаются этим словом.

SNUM, SFAM, S1MA, SOTCH, STIP - список полей из табли­цы, которые выбираются запросом. Поля, не перечисленные здесь, не будут включены в вывод команды, но это, разумеется, не означает, что они будут удалены или информация в них будет стерта из таблиц. Запрос не воздействует на информацию в таб­лицах; он только показывает данные.

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


Точка с запятой (;) используется во всех интерактивных ко­мандах SQL для сообщения БД, что команда заполнена и готова выполниться, а в некоторых системах наклонная черта (\) в стро­ке является индикатором конца команды.

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

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

SELECT * FROM­_STUDENTS;

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

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

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

SELECT SNUM, SFAM, STIP FROM_STUDENTS;

будет производить следующий вывод:


SNUM

SFAM

STIP

3412

Поляков

25,50

3413

Сшарова

17.00

3414

Гриценко

0.00

3415

Котенко

0.00

3416

Нагорный

25.50