КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Командные средства SQL
Текст команд запроса хранится в его свойстве SQL, и этот текст можно откорректировать или ввести заново строчным редактором или сформировать в процессе выполнения программы (динамический запрос), если пользователь знает команды языка запросов SQL. Команда Select является мощным средством создания запросов на выборку информации. Приведем ее предварительный синтаксис. Select <поля, выражения или *> From <исходные таблицы> Where <условие отбора записей> Group By <поля для группировки> Having <условие отбора группы> Order bY <поля для сортировки> Рассмотрим фразы команды (не все фразы обязательны). Select [Distinct] <выражение> [As <псевдоним>] [,...] From <таблица> [<тип связи> Join <таблица> On <условие связи>],... Distinct ‑ дублирующие записи запроса не выводятся. Имя поля может быть составным, с включением имени таблицы, точки и самого имени таблицы. Если имя таблицы содержит пробелы, то оно заключается в апострофы. Вместо имени поля можно указать звездочку, если необходимо построить выборку из всех полей таблицы. Псевдоним задает наименование колонки (пробелы запрещены). Для связывания таблиц используется фраза Join. Тип связи задается словами: Left/Right (в запрос входят все записи из таблицы, стоящей в запросе слева/справа), Inner (входят только записи с совпадающими ключами связи). Пример задания базового запроса по нашей базе строек: SELECT Stroiki.Ns, Stroiki.Ds, Stroiki.Ss, Stroiki.Fs, Stroiki.M, Stroiki.Em, Podrjdhiki.Np, Zakazhiki.Nz FROM «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 (*)), что означает подсчет всех записей, попавших в выборку. В выражениях могут использоваться и другие функции, например: Upper(s)/Lower(s) ‑ преобразование строки S в прописные/строчные буквы. Trim(s) ‑ удаление пробелов в начале и в конце строки. SubString (S From n1 To n2) ‑ выделение подстроки из строки S, начиная c символа N1 и заканчивая N2. Cast (<выражение> As <тип>) ‑ перевод выражения к указанному типу. S1||S2 ‑ сцепление двух строк S1 и S2. Extract (<элемент>, From <выражение типа даты и времени>) - возвращается значение из выражения, соответствующего значению элемента: Year (год), Month (месяц), Day (день), Hour (час), Minute (минута), Second (сек.). Where<условие отбора> - условия отбора записей в запрос. В условиях допускается использование логических операторов And, Or, Not и круглых скобок. В условиях, кроме любых функций Pascal, могут содержаться следующие дополнительные операторы языка запросов SQL: <выражение> Like <шаблон>‑ позволяет построить условие сравнения по шаблону, набор символов: «_» (неопределенный символ), «%» (любые символы, например: Where Ns Like ‘Школа%’), [n‑k]% (любые символы из интервала от n до k, например: Like ‘[A‑D]%’); <выражение> Between <нижнее значение.> And <верхнее значение> ‑ проверяет, находится ли выражение в указанном диапазоне (Where [Ss] Between 0 And 1000000); <выражение> In (<выражение>,<выражение>,...) ‑проверяет, находится ли выражение, стоящее слева от слова IN, среди перечисленных справа от него (Where Kz In (1,2,6)). Group By<колонка>[,<колонка>... ] ‑ задаются колонки, по которым производится группирование выходных данных. Все записи таблицы, для которых значения колонок совпадают, отображаются в выборке единственной строкой. Группирование удобно для получения некоторых сводных характеристик (суммы, число записей, среднее) группы. Having<условие отбора группы> ‑ задает критерий отбора сформированных в процессе выборки групп. Order By<колонка> [Asc/Desc] [,<колонка> [Asc/Desc]...] ‑ опция задает упорядочение по колонкам по возрастанию (Asc) или убыванию (Desc). Колонка задается номером или именем поля (Order By Kp, Kz). Рассмотрим другие команды SQL. Create Table<имя таблицы> (<поле> <тип поля>,...) ‑ создание таблицы (Create Table Kadr (Tab Integer, Fam Char (30) Not Null Primary Key (Tab))). Основные типы полей в SQL: SmallInt (Short), Integer (Long Integer), Numeric(x,y), Float (x,y), Char (n), Data, Boolean, Time, Money, Autoinc. Alter Table<имя таблицы> Add <поле> <тип>, Drop <поле>,... ‑ изменение структуры таблицы: включение (Add) и удаление (Drop) полей таблицы (Alter Table Stroiki Add Gorod Integer Drop Kp). Update<таблица> Set <имя поля>=<новое значение>,... [Where <условие>] ‑ изменение значений полей (Update Kadr Set Oklad=1.5*Oklad Where Cex=«Цех N2»). Insert Into<имя таблицы>(<список полей>) {Values (<список значений>)| Select...} ‑ включение новой записи или группы записей из другой таблицы. Примеры: Insert Into Zakazhiki (Kz,Nz) Values (3,’ЗИЛ’); // включение одной записи Insert Into Podrjdhiki (Kp,Np) Select KPodr, NPodr From SpravPodr Where DSozd >01.01.80; //включение группы записей из таблицы SpravPodr Create Index<имя индекса>On<таблица> (<поле>,...) ‑ создание индекса (Create index indproba on stroiki (kz, kp)). Drop Table<имя> ‑ удаление таблицы (Drop Table Stroiki). Drop Index«<имя таблицы>«.<имя индекса> ‑ удаление индекса. Drop Index«<имя таблицы>«.Primary ‑ удаление главного индекса. Delete From<имя таблицы> [Where<условие>] ‑ удаление записей. В запросе любого типа может быть вложенный запрос, который называется подзапросом. Подзапрос ‑ это запрос, результат которого используется в условии отбора в выражении Where другого внешнего запроса. Подзапрос заключается в круглые скобки. Пример. Вывести крупные стройки со сметой выше средней по стройкам: Select * From Stroiki Where Ss > (Select Avg(Ss) From Stroiki). Статические SQL-запросы формируются при разработке приложения и не изменяются при выполнении приложения. В запросах можно использовать параметры, имена которых начинаются c двоеточия. Все параметры запроса сохраняются в его свойстве ‑ массиве Params. Для обращения к параметру во время выполнения программы указывается в квадратных скобках его номер (отсчет от нуля) в массиве Params. Тип параметра задается его свойством DataType, значение ‑ Value. Пример параметрического запроса Query1 с командой Select вида: Select* From Stroiki Where Kz=:Pkz//код заказчика задается параметром Pkz Procedure TForm1.Button1Click(Sender: TObject);//вывод запроса Begin Query1.Close; //закрытие запроса Query1.Params[0].Value:='2'; //значение параметра Pkz=2 //Query1.ParamByName('pkz').asInteger:=2; //другой вариант Pkz=2 Query1.Open; {вывод запроса} End; Динамические SQL-запросы формируются или изменяются в процессе выполнения приложения (изменяется свойство SQL). Пример. Разместим на форме компоненты: Query (со свойствами: DataBaseName=Stroiki, DataSource=Datamodule2.SourceStroiki), DataSource (DataSet=Query1), DBGrid (DataSource=DadaSource1, Visible=False) и кнопку Button с процедурой формирования динамического запроса: Procedure TForm1.Button1Click(Sender: TObject); //формирование запроса Begin Query1.close {закрытие запроса); Query1.SQL.Clear; {очистка текста} Query1.SQL.Add('Select ns As Cтройка, ss As Смета, fs As Факт,’+ ‘ ss-fs As Осталось From Stroiki.db'); //добавление строки с командой Select DBGrid1.Visible:=True; Query1.Open; {вывод запроса в таблицу} End;
Дата добавления: 2014-12-08; Просмотров: 417; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |