Файл: Практика - Элементы языка SQL.pdf

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

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

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

Добавлен: 03.04.2021

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

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

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

Глава 5. Элементы языка SQL 

В  данной  главе  рассматриваются  элементы  языка  SQL  (Structured  Query  Language). 
Текущая  версия  стандарта  языка  SQL  принята  в  1992  г.  (Официальное  название 
стандарта - Международный стандарт языка баз данных SQL (1992) (International Standart 
Database  Language  SQL),  неофициальное  название  -  SQL/92,  или  SQL-92,  или  SQL2). 
Документ,  описывающий  стандарт,  содержит  более  600  страниц.  Мы  дадим  только 
некоторые понятия языка. 

Язык  SQL  стал  фактически  стандартным  языком  доступа  к  базам  данных.  Все  СУБД, 
претендующие  на  название  "реляционные",  реализуют  тот  или  иной  диалект  SQL. 
Многие  нереляционные  системы  также  имеют  в  настоящее  время  средства  доступа  к 
реляционным  данным.  Целью  стандартизации  является  переносимость  приложений 
между различными СУБД. 

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

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

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

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

Операторы SQL 

Основу  языка  SQL  составляют  операторы,  условно  разбитые  не  несколько  групп  по 
выполняемым функциям. 

Можно выделить следующие группы операторов (перечислены не все операторы SQL): 

Операторы DDL (Data Definition Language) - операторы определения 
объектов базы данных 

 

CREATE SCHEMA - создать схему базы данных 

 

DROP SHEMA - удалить схему базы данных 

 

CREATE TABLE - создать таблицу 

 

ALTER TABLE - изменить таблицу 


background image

 

DROP TABLE - удалить таблицу 

 

CREATE DOMAIN - создать домен 

 

ALTER DOMAIN - изменить домен 

 

DROP DOMAIN - удалить домен 

 

CREATE COLLATION - создать последовательность 

 

DROP COLLATION - удалить последовательность 

 

CREATE VIEW - создать представление 

 

DROP VIEW - удалить представление 

Операторы DML (Data Manipulation Language) - операторы 
манипулирования данными 

 

SELECT - отобрать строки из таблиц 

 

INSERT - добавить строки в таблицу 

 

UPDATE - изменить строки в таблице 

 

DELETE - удалить строки в таблице 

 

COMMIT - зафиксировать внесенные изменения 

 

ROLLBACK - откатить внесенные изменения 

Операторы защиты и управления данными 

 

CREATE ASSERTION - создать ограничение 

 

DROP ASSERTION - удалить ограничение 

 

GRANT  -  предоставить  привилегии  пользователю  или  приложению  на 

манипулирование объектами 

 

REVOKE - отменить привилегии пользователя или приложения 

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

Наиболее  важными  для  пользователя  являются  операторы  манипулирования  данными 
(DML). 

Примеры использования операторов манипулирования данными 

INSERT - 

вставка строк в таблицу 

Пример 1. Вставка одной строки в таблицу: 

INSERT INTO 
  P (PNUM, PNAME) 
  VALUES (4, "

Иванов

"); 

Пример  2

.  Вставка  в  таблицу  нескольких  строк,  выбранных  из  другой  таблицы  (в 

таблицу  TMP_TABLE  вставляются  данные  о  поставщиках  из  таблицы  P,  имеющие 
номера, большие 2): 

INSERT INTO 
  TMP_TABLE (PNUM, PNAME) 


background image

  SELECT PNUM, PNAME 
    FROM P 
    WHERE P.PNUM>2; 

UPDATE - 

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

Пример 3

. Обновление нескольких строк в таблице: 

UPDATE P 
  SET PNAME = "

Пушников

  WHERE P.PNUM = 1; 

DELETE - 

удаление строк в таблице 

Пример 4. Удаление нескольких строк в таблице: 

DELETE FROM P 
  WHERE P.PNUM = 1; 

Пример 5

. Удаление всех строк в таблице: 

DELETE FROM P; 

Примеры использования оператора SELECT 

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

Оператор  SELECT  всегда  выполняется  над  некоторыми  таблицами,  входящими  в  базу 
данных. 

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

скрыты 

от 

пользователя. 

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

Отбор данных из одной таблицы 


background image

Пример  6.  Выбрать  все  данные  из  таблицы  поставщиков  (ключевые  слова 

SELECT

… 

FROM

…): 

SELECT * 
  FROM P; 

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

Пример 7

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

условию (ключевое слово 

WHERE

…): 

SELECT * 
  FROM P 
  WHERE P.PNUM > 2; 

Замечание.  В  качестве  условия  в  разделе  WHERE  можно  использовать  сложные 
логические выражения, использующие поля таблиц, константы, сравнения (>, <, = и т.д.), 
скобки, союзы AND и OR, отрицание NOT. 

Пример  8

.  Выбрать  некоторые  колонки  из  исходной  таблицы  (указание  списка 

отбираемых колонок): 

SELECT P.NAME 
  FROM P; 

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

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

будут 

строки с повторениями 

- дубликаты строк автоматически не отбрасываются. 

Пример  9

.  Выбрать  некоторые  колонки  из  исходной  таблицы,  удалив  из  результата 

повторяющиеся строки (ключевое слово 

DISTINCT

): 

SELECT DISTINCT P.NAME 
  FROM P; 

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

Пример 10

. Использование скалярных выражений и переименований колонок в запросах 

(ключевое слово 

AS

…): 

SELECT 
    TOVAR.TNAME, 
    TOVAR.KOL, 
    TOVAR.PRICE, 
    "=" AS EQU, 
    TOVAR.KOL*TOVAR.PRICE AS SUMMA 
  FROM TOVAR; 

В  результате  получим  таблицу  с  колонками,  которых  не  было  в  исходной  таблице 


background image

TOVAR: 

TNAM

KO

PRIC

EQ

SUMM

Болт 

10 

100 

1000 

Гайка 

20 

200 

4000 

Винт 

30 

300 

9000 

Пример 11

.Упорядочение результатов запроса (ключевое слово 

ORDER BY

…): 

SELECT 
    PD.PNUM, 
    PD.DNUM, 
    PD.VOLUME 
  FROM PD 
  ORDER BY DNUM; 

В результате получим следующую таблицу, упорядоченную по полю DNUM: 

PNU

DNU

VOLUM

100 

150 

1000 

200 

250 

300 

Пример 12

. Упорядочение результатов запроса по нескольким полям с возрастанием или 

убыванием (ключевые слова 

ASC

DESC

): 

SELECT 
    PD.PNUM, 
    PD.DNUM, 
    PD.VOLUME 
  FROM PD 
  ORDER BY  
    DNUM ASC, 
    VOLUME DESC; 

В  результате  получим  таблицу,  в  которой  строки  идут  в  порядке  возрастания  значения 
поля  DNUM,  а  строки,  с  одинаковым  значением  DNUM  идут  в  порядке  убывания 
значения поля VOLUME: 

PNU

DNU

VOLUM

1000 

150 

100 

250 

200