Select является мощным средством создания запросов на выборку информации. Приведем ее предварительный Синтаксис:
Select < поля, выражения или*> From < исходные таблицы>
Where < условие отбора записей> Group By < поля для группировки>
Having < условие отбора группы> Order By < поля для сортировки>\
Рассмотрим фразы команды (не все фразы обязательны).
Select < выражение > [ < псевдоним > ][,…]
From [ Join On ]…
Distinct – дублирующие записи запроса не выводятся. Имя поля может быть составным, с включением имени таблицы, точки и самого имени таблицы. Если имя таблицы содержит пробелы, то оно заключается в апострофы. Вместо имени поля можно указать звездочку, если необходимо построить выборку из всех полей таблицы.
Псевдоним – задает наименование колонки (пробелы запрещены). Для связывания таблиц используется фразаJoin . Тип связи задается словами:Left / Right (в запрос входят все записи из таблицы, состоящей в запросе слева/справа),Inner (входят только записи с совпадающими ключами связи).
Пример задания базового запроса по базе строек:
SelectStroiki.Ds,Stroiki.Ss,Stroiki.Fs,Stroiki.M,Stroiki.Em,Podrjdhiki.Np,Zakazhiki.NzFROM“stroiki.DB”Stroiki
Inner Join “zakazhiki.db” Zakazhiki ON (Stroiki.Kz = Zakazhiki.Kz)
Inner Join “podrjdhiki.db” Podrjdhiki ON (Stroiki.Kp = Podrjdhiki.Kp)
В результате выполнения запроса получается совокупность колонок, в заголовках которых могут находиться имена полей. Если вас не устраивают имена, формируемые по умолчанию, то можно назначить свои (псевдонимы), указав их после слова AS. В выражении могут использоваться специальные арифметические функции, действующие «по вертикали»: среднее значение по группе(Avg ), минимальное(Min ), максимальное(Max ), сумма(Sum ), число записей в группе(Count ). Функция может иметь в качестве аргумента звездочку(Count (*)), что означает подсчет всех записей, попавших в выборку.
Where - условие отбора записей в запрос. В условиях допускается использование логических операторовAnd, Or, Not и круглых скобок. В условиях, кроме любых функций Pascal, могут содержаться следующие операторы SQL:
Like позволяет построить условие сравнения по шаблону, набор символов: "_" (неопределенный символ), "%" (любые символы, например: Where Ns Like "Школа%"), % (любые символы из интервала от п до k, например: Like "%");
Between And проверяет, находится ли выражение в указанном диапазоне (Where Between 0 And 1000000);
In (,,...) проверяет, находится ли выражение, стоящее слева от слова IN, среди перечисленных справа от него (Where Kz In (1,2,6)).
Group By [,...] - задаются колонки, по которым производится группирование выходных данных. Все записи таблицы, для которых значения колонок совпадают, отображаются в выборке единственной строкой. Группирование удобно для получения некоторых сиодных характеристик (суммы, число записей, среднее) группы.
Пример. Вывести число сотрудников, максимальную, среднюю, минимальную и итоговую зарплату по подразделениям (поле Pord) по таблице SOTRUDNIKI.
Select podr, Count(*),Min (zarpl), Avg (zarpl), Max(zarpl), Sum (/nipl)
From Sotrudniki Group By podr Order By podr
Having задает кртерий отбора сформированных в процессе выборки групп.
Order By [Аsc/Desc] [,колонка> …] - опция, которая задаст упорядочение по возрастанию (Desc). Колонка задается номером или именем поля (Order By Кр, Kz).
Рассмотрим другие команды SQL.
Create Table < имя таблицы > (< поле > < тип поля > ,...) - создание таблицы (Create Table Kadr (Tab Integer, Fam Char (30) Not Null Primary Key (Tab))). Обязательное присутствие значения в поле задается параметром Not Null. Основные типы полей в SQL в Delphi: Smalllnt (Short), Integer (Long Integer), Numeric(x,y), Float (x,y), Char (n), Data, Boolean, Time, Money, Autoinc. Для других СУБД типы полей могут быть другими.
Create View [(,...)] As - создание представления с новыми именами столбцов (Create View NameStroek As Select Stroiki.Ns FROM Stroiki).
Alter Table {Add \ Modify \ Drop} [] - изменение значений полей (Update Kadr Set Oklad=1.5*Oklad Where Сех="Цех N2").
Insert Into() {Values ()\ Select...} - включение новой записи или группы записей из другой таблицы.
Insert Into Zakazhiki (Kz.Nz) Values (3,"ЗИЛ1); // включение одной записи Insert Into Podrjdhiki (Kp.Np) Select KPodr, NPodr From SpravPodr Where DSozd >01.01.80; //включение группы записей из таблицы SpravPodr
Create Index On ( [{dsc\esc}],...) - создание индекса (Create index indproba on stroiki (kz, kp)).
Drop Table/View - удаление таблицы/представления (Drop Table Stroiki).
Drop Index ["".] - удаление индекса.
Drop Index [“".] Primary - удаление главного индекса.
Delete From < имя таблицы > - удаление записей.
В запросе любого типа может быть вложенный запрос, который называется подзапросом. Подзапрос - это запрос, результат которого используется в условии отбора в выражении Where другого внешнего запроса. Подзапрос заключается в круглые скобки.
Пример. Вывести крупные стройки со сметой выше средней по стройкам: Select * From Stroiki Where Ss > (Select Avg(Ss) From Stroiki).
Выделяют следующие группы команд SQL :
Команды языка определения данныхКоманды языка определения данных
DDL
(Data Definition Language
, язык определения данных) — это подмножество SQL
, используемое для определения и модификации различных структур данных.
К данной группе относятся команды предназначенные для создания, изменения и удаления различных объектов базы данных. Команды CREATE
(создание), ALTER
(модификация) и DROP
(удаление) имеют большинство типов объектов баз данных (таблиц, представлений, процедур, триггеров, табличных областей, пользователей и др.). Т.е. существует множество команд DDL
, например, CREATE TABLE
, CREATE VIEW
, CREATE PROCEDURE
, CREATE TRIGGER
, CREATE USER
, CREATE ROLE
и т.д.
Некоторым кажется, что применение DDL является прерогативой администраторов базы данных, а операторы DML должны писать разработчики, но эти два языка не так-то просто разделить. Сложно организовать аффективный доступ к данным и их обработку, не понимая, какие структуры доступны и как они связаны. Также сложно проектировать соответствующие структуры, не зная, как они будут обрабатываться.
Команды языка управления даннымиС помощью команд языка управления данными (DCL (Data Control Language)) можно управлять доступом пользователей к базе данных. Операторы управления данными включают в себя применяемые для предоставления и отмены полномочий команды GRANT и REVOKE , а также команду SET ROLE , которая разрешает или запрещает роли для текущего сеанса.
Команды языка управления транзакциямиКоманды языка управления транзакциями
(TCL (Тгаnsасtiоn Соntrol Language)) команды позволяют определить исход транзакции.
Команды управления транзакциями управляют изменениями в базе данных, которые осуществляются командами манипулирования данными.
Транзакция
(или логическая единица работы) – неделимая с точки зрения воздействия на базу данных последовательность операторов манипулирования данными (чтения, удаления, вставки, модификации) такая, что либо результаты всех операторов, входящих в транзакцию, отображаются в БД
, либо воздействие всех этих операторов полностью отсутствует.
COMMIT
— заканчивает («подтверждает») текущую транзакцию и делает постоянными (сохраняет в базе данных) изменения, осуществленные этой транзакцией. Также стирает точки сохранения этой транзакции и освобождает ее блокировки. Можно также использовать эту команду для того, чтобы вручную подтвердить сомнительную распределенную транзакцию.
ROLLBACK
— выполняет откат транзакции, т.е. отменяет все изменения, сделанные в текущей транзакции. Можно также использовать эту команду для того, чтобы вручную отменить работу, проделанную сомнительной распределенной транзакцией.
Понятие транзакции имеет непосредственную связь с понятием целостности базы данных. Очень часто база данных может обладать такими ограничениями целостности, которые просто невозможно не нарушить, выполняя только один оператор изменения БД
. Например, невозможно принять сотрудника в отдел, название и код которого отсутствует в базе данных.
В системах с развитыми средствами ограничения и контроля целостности каждая транзакция начинается при целостном состоянии базы данных и должна оставить это состояние целостными после своего завершения. Несоблюдение этого условия приводит к тому, что вместо фиксации результатов транзакции происходит ее откат (т.е. вместо оператора COMMIT
выполняется оператор ROLLBACK
), и база данных остается в таком состоянии, в котором находилась к моменту начала транзакции, т.е. в целостном состоянии.
В связи со свойством сохранения целостности БД
транзакции являются подходящими единицами изолированности пользователей, т.е., если с каждым сеансом работы с базой данных ассоциируется транзакция, то каждый пользователь начинает работу с согласованным состоянием базы данных, т.е. с таким состоянием, в котором база данных могла бы находиться, даже если бы пользователь работал с ней в одиночку.
Команды языка манипулирования данными DML (Data Manipulation Language) позволяют пользователю перемещать данные в базу данных и из нее:
- INSERT - осуществляет вставку строк в таблицу.
- DELETE - осуществляет удаление строк из таблицы.
- UPDATE - осуществляет модификацию данных в таблице.
- SELECT - осуществляет выборку данных из таблиц по запросу.
Каждый, кто работает с SQL в среде Oracle , должен вооружиться книгами: справочником по языку SQL, таким как «Oracle SQL: The Essential Reference? (O’Reilly), руководством по оптимизации производительности, например «Oracle SQL Tuning Pocket Reference» (O’Reilly).
Каждая команда SQL начинается с ключевого слова – глагола, описывающего действие, выполняемое командой, например CREATE (создать). В команде может быть одно или несколько предложений. Предложение описывает данные, с которыми работает команда, или содержит уточняющую информацию о действии, выполняемом командой. Каждое предложение начинается с ключевого слова, например WHERE(где).Одни предложения в команде являются обязательными, другие – нет. Некоторые предложения могут содержать дополнительные ключевые слова, выражения. Многие предложения включают имена таблиц или полей. Имена должны содержать от 1 до 18 символов, начинаться с буквы и не содержать пробелы и специальные символы пунктуации. В качестве имен нельзя использовать ключевые слова.
52. SQL (Structured Query Language) – Структурированный Язык Запросов – это стандартный язык запросов по работе с реляционными базами данных.
SQL не содержит традиционных операторов, управляющих ходом выполнения программ, он содержит только набор стандартных операторов доступа к данным, хранящимся в базе данных.
Язык SQL можно использовать для доступа к базе данных в двух режимах: при интерактивной работе и в прикладных программах .
С помощью SQL пользователь может в интерактивном режиме быстро получить ответы на любые, в том числе достаточно сложные запросы, тогда как для реализации этих запросов на другом языке пришлось бы разрабатывать соответствующую программу. В прикладных программах, написанных на определенных языках программирования, SQL используются как встроенный язык для обращения к базе данных.
Характеризуя язык SQL в целом, можно выделить следующие его черты:
· высокоуровневая структура, напоминающая английский язык;
· независимость от конкретных СУБД;
· наличие развивающихся стандартов;
· возможность выполнения интерактивных запросов извлечения данных и модификации их структуры;
· обеспечение программного доступа к базам данных;
· поддержка архитектуры клиент/сервер;
· расширяемость и поддержка объектно-ориентированных технологий;
· возможность доступа к данным в среде Интернет.
Основные функции языка SQL:
· SQL – язык интерактивных запросов . Пользователи вводят команды SQL в интерактивном режиме для выборки данных и отображения их на экране, а также для внесения изменений в базу данных;
· SQL – язык программирования баз данных . Чтобы получить доступ к базе данных, в прикладные программы вставляются команды SQL;
· SQL – язык администрирования баз данных . Администратор базы данных может использовать SQL для определения структуры базы данных и управления доступом к данным;
· SQL – язык создания приложений клиент/сервер . В прикладных программах SQL используется как средство организации связи по локальной сети с сервером баз данных, в которой хранятся совместно используемые данные и др.
55. Возможности зыка Язык SQL, соответствующий последним стандартам SQL:2003, SQL:1999 представляет собой очень богатый и сложный язык, все возможности которого трудно сразу осознать и тем более понять. Поэтому приходится разбивать язык на уровни. В одной из классификаций, предусмотренных стандартом SQL, этот язык разбивается на «базовый» (entry), «промежуточный» (intermediate) и «полный» (full) уровни. Базовый уровень содержит около сорока команд, которые можно сгруппировать в категории по их функциональному назначению.
CREATE TABLE Сведения (НОМЗ INT, ФИО CHAR(15), ГОД INT, ПОЛ CHAR(3))
DROP TABLE Сведения
ALTER TABLE Сведения (СЕМПОЛ CHAR(10))
CREATE VIEW УспеваемостьМ1 AS SELECT *FROM УспеваемостьWHERE ГРУП= "М-1"
INSERT INTO Сведения VALUES (980101, "ИВАНОВ И. И.", 1980, "МУЖ")
DELETE FROM Сведения WHERE НОМЗ=980201
UPDATE Сведения SET ФИО = "КРАВЦОВА И. И." WHERE НОМЗ=980201
SELECT * FROM Сведения WHERE ФИО="СИДОРОВ С. С." OR ФИО="ПЕТРОВ П. П."
54. Типы данных и выражения Для обращения к реляционной таблице в языке SQL необходимо написать (задать) команду. SELECT (выбрать) – ключевое слово сообщает СУБД, какое действие будет выполнять данная команда. Команды запросы начинаются ключевым словом. Кроме SELECT это могут быть слова CREATE- создать, INSERT -вставить, DELETE - удалить,COMMIT –завершить и д.р..
FROM – ключевое слово, подобно SELECT, которое присутствует в каждой команде. Оно сопровождается пробелом, а затем именем таблиц, используемых в качестве источников информации. Имена таблиц, полей должны содержать от 1 до 18 символов, начинаться с буквы и не содержать пробелов или специальных символов.
WHERE – ключевое слово, за которым следует предикат –условие, налагаемое на запись в таблице, которому она должна удовлетворять, чтобы пропасть в выборку.
ORDER BY – сортировка выводимых записей (Asc – по возрастанию, Desc – по убыванию. Если не указан вид сортировки, то происходит сортировка по возрастанию).
CHAR(длина) СHARACTER(длина) Строки символов постоянной длины
INTEGER INT Целые числа
SMALLINT Малое целое число
NUMERIC(точность, степень) DECIMAL(точность, степень DEC(точность, степень) Число с фиксированной запятой
FLOAT (точность) Число с плавающей запятой
Double precision числа с плав зап высок точн
Выражения в SQL используются для задания критериев выбора данных или выполнения операций над значениями, которые считаны из базы данных. Выражения представляют собой определенную последовательность полей базы данных, констант, функций, соединенных операторами.
Константы используются для указания конкретных значений данных. Константы с фиксированной запятой , например: 21 -375.18 62.3
Константы с плавающей запятой, например: 1.5Е7 -3.14Е9 2.5Е-6 0.783Е24
Строковые константы должны быть заключены в одинарные кавычки. Примеры таких констант: "Минск" "New York" "Иванов И. И."
Отсутствующее значение (NULL). SQL поддерживает обработку отсутствующих данных с помощью понятия «отсутствующее значение».
Большинство SQL-ориентированных СУБД поддерживает так называемые агрегатные (итоговые) функции . К часто используемым агрегатным функциям можно отнести следующие:
· COUNT – количество значений в столбце таблицы;
· SUM – сумма значений в столбце;
· AVG – среднее арифметическое значений в столбце;
· MAX – максимальное значение в столбце;
· MIN – минимальное значение в столбце.
В выражениях можно использовать следующие типы операторов :
· арифметические : + (сложение), - (вычитание), * (умножение), / (деление);
· отношения : = (равно), > (больше), < (меньше), >= (больше или равно), SET { | } .,. .< COLUMN name> = < VALUE expresslon> [ WHERE < predlcate> | WHERE CURRENT OF < cursor name> (* только для вложения* ) ] ; UPDATE peers SET zone= "voip" ; # обновить все строки в столбце zone таблицы peers UPDATE stat SET whp= "13x13x13" WHERE id = 1 ; UPDATE countries SET nm_ukr= ( SELECT del_countries. ukrainian FROM del_countries WHERE countries. nm_en= del_countries. english ) ;
WordPress использование, настройка : в таблице wp_posts удалить все вхождения строки
UPDATE wp_posts SET post_content = REPLACE (post_content, "" , "" ) ;DELETE FROM