Содержание

SQL-программирование: наиболее полный видеокурс

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

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

Во втором уроке речь пойдет об интерактивных, статических и динамических видах SQL. Интерактивный вид используется непосредственно при работе внутри ядра БД, а динамический и статический виды подключаются через стороннее ПО, сайты и т. д. После рассмотрения видов SQL вы перейдете к типам данных и синтаксису.

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

В четвертом видеоролике вы плавно переходите к практическому применению языка SQL. Автор рассматривает такие основные команды, как create, drop, insert и select. Урок проходит без явной подготовки, т. е. с полезными ошибками и подводными камнями, возникающими в ходе работы с MySQL.

Данный материал познакомит вас с углубленными основами применения оператора SELECT. Знать все ключевые слова этой команды (WHERE, FROM, AND, OR, LIKE) строго обязательно любому, кто изучает SQL-программирование, ведь это основополагающая структура любой СУБД.

Чтобы производить какие-либо изменения в таблицах MySQL, необходимо знать две основные команды: DELETE и UPDATE. Автор подробно расскажет вам, как и в каких случаях их применять, а также какие комбинации ключевых слов выгодно использовать.

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

Ччтобы изменить структуру таблицы MySQL, обычно применяется команда ALTER TABLE. Самые распространенные ключевые команды, применяемые для изменения таблиц, – это ADD COLUMN/PRIMARY KEY, DROP COLUMN, RENAME TO, CHANGE COLUMN. В практической части урока вы разберетесь с особенностями этих команд и научитесь их применять.

В SQL, как и в любом другом языке программирования, есть функции, выполняющие какие-либо операции. В девятой лекции рассматриваются строковые функции RIGHT/LEFT, UPPER/LOWER, SUBSTRING_INDEX и другие. Использование обработчиков строк сильно экономит время с большими и “хитрыми” запросами, поэтому знать ключевые строковые операторы полезно.

Чтобы расширить возможности команды и научиться уточнять различные условия при выполнении UPDATE, можно применять CASE и ORDER BY. В сложных сортировках, не использующих набор столбцов, можно комбинировать рассматриваемые операторы с командами WHEN, THEN, ELSE или END. Об этом и пойдет речь в данной лекции.

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

При создании предыдущих роликов некоторые моменты и хитрости могли быть упущены, поэтому в этом уроке вы освежите в памяти пройденный материал и дополните его новым. Среди полезностей SELECT AS, CREATE DEFAULT, INSERT VALUES и прочие.

Если в БД планируется много таблиц, появляется необходимость проектировать все заранее с учетом правильных связей между таблицами. Тип связи может быть таким: один к одному, один ко многим, многие ко многим. Для связи между таблицами будет использоваться внешний ключ (FOREIGN KEY). В этой лекции автор рассмотрит все нюансы многотабличности.

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

Продолжение лекции “Вспомнить все”, и на этот раз автор разберет еще один вариант применения JOIN-ов + приведет несколько примеров с вложенными SELECT.

Тема может показаться сложной, но ее важно освоить, поскольку профессиональное SQL-программирование без JOIN-ов не может существовать.

Если БД с таблицами были неправильно спроектированы, то может прослеживаться проседание производительности всего проекта и эффективности работы в целом. Чтобы исправить какие-либо недочеты, используется нормализация. В седьмой лекции речь шла о первой форме, а в шестнадцатой затронуты вторая и третья.

Представления (view) еще называют виртуальными таблицами. Виртуальная таблица не содержит информации: она извлекается из других таблиц в процессе обращения к виртуальной. Применение этой техники заметно повышает удобство настройки прав доступа и разделения логики.

Для удобного представления и манипулирования информацией в БД можно использовать не только терминал, но и специальную среду. В этой завершающей лекции курса автор расскажет, как установить, настроить и использовать MySQL Workbench.

proglib.io

Что такое SQL. Назначение и основа | Info-Comp.ru

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

Скриншот 1

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

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

Что такое база данных

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

Реляционная база данных – это упорядоченная информация, связанная между собой определёнными отношениями. Представлена она в виде таблиц, в которых и лежит вся эта информация. И это очень важно, так как теперь Вы должны представлять себе современную базу данных просто в виде таблиц (если говорить в контексте SQL), т.е. в общем смысле база данных – это набор таблиц. Безусловно, это сильно упрощенное определение, но оно дает некое практическое понимание базы данных.

Что такое SQL

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

И тут возникает главный вопрос:

а как к ней обратиться и получить необходимую нам информацию?

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

SQL (Structured Query Language) —  язык структурированных запросов, с помощью него пишутся специальные запросы (так называемые SQL инструкции) к базе данных с целью получения данных из базы данных или для манипулирования этими данными.

Также обязательно стоит отметить и то, что база данных, и в частности реляционная модель, основана на теории множеств, которая подразумевает объединение разных объектов в одно целое, под одним целым в базе данных как раз и имеется в виду таблица. Это важно, так как язык SQL работает именно со множеством, с набором данных, т.е. с таблицами.

Полезные материалы по теме:

Что такое СУБД

У Вас может возникнуть вопрос, если база данных это некая информация, которая хранится в таблицах, то как она выглядит физически? Как на нее посмотреть в целом?

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

Идем дальше, если база данных это файл в специальном формате, то как его создать или открыть? И тут возникает сложность, ведь просто так, без каких-либо инструментов создать такой файл, т.е. реляционную базу данных, нельзя, для этого нужен специальный инструмент, который мог бы создавать и управлять базой данных, иными словами, работать с этими файлами.

Таким инструментом как раз и выступает

СУБД – это система управления базами данных, сокращенно СУБД.

Какие СУБД бывают

На самом деле, существует достаточно много различных СУБД, некоторые из них платные и стоят немалых денег, если говорить о полнофункциональных версиях, но даже у самых, так скажем, «крутых» есть бесплатные редакции, которые, кстати, отлично подходят для обучения.

Среди всех по своим возможностям и популярности можно выделить следующие системы:

  • Microsoft SQL Server – это система управления базами данных от компании Microsoft. Она очень популярна в корпоративном секторе, особенно в крупных компаниях. И это не просто СУБД – это целый комплекс приложений, позволяющий хранить и модифицировать данные, анализировать их, осуществлять безопасность этих данных и многое другое;
  • Oracle Database – это система управления базами данных от компании Oracle. Это также очень популярная СУБД, и также среди крупных компаний. По своим возможностям и функциональности Oracle Database и Microsoft SQL Server сопоставимы, поэтому являются серьезными конкурентами друг другу, и стоимость их полнофункциональных версий очень высока;
  • MySQL – это система управления базами данных также от компании Oracle, но только она распространяется бесплатно. MySQL получила очень широкую популярность в интернет сегменте, т.е. именно на MySQL работают чуть ли не все сайты в интернете, иными словами, большинство сайтов в интернете используют эту СУБД как средство хранения данных;
  • PostgreSQL – эта система управления базами данных также является бесплатной, и она очень популярна и функциональна.

Полезные материалы по теме:

Диалекты языка SQL (расширения SQL)

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

Вот некоторые диалекты языка SQL:

  • Transact-SQL (сокращенно T-SQL) – используется в Microsoft SQL Server;
  • PL/SQL (Procedural Language / Structured Query Language) – используется в Oracle Database;
  • PL/pgSQL (Procedural Language/PostGres Structured Query Language) – используется в PostgreSQL.

Таким образом, от СУБД зависит, на каком расширении Вы будете писать SQL инструкции. Если говорить о простых SQL запросах, например,

  
  SELECT ProductId, ProductName
  FROM Goods


то, безусловно, во всех СУБД такие запросы работать будут, ведь SQL — это стандарт.

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

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

Например, лично я специализируюсь на языке T-SQL, и соответственно, работаю с Microsoft SQL Server, вот уже более 8 лет!

Хотя, конечно же, с другими СУБД я также работал, одно время я сопровождал два приложения, одно из которых работало с PostgreSQL, ну а второе, наверное, уже понятно, с Microsoft SQL Server.

С MySQL я работал, как, наверное, и многие, в рамках сопровождения сайтов и сервисов. Ну а с Oracle Database мне приходилось работать в рамках других проектов.

Весь свой накопленный опыт в части языка T-SQL я сгруппировал в одном месте и оформил в виде книг, поэтому, если у Вас есть желание изучить язык Transact-SQL (T-SQL), рекомендую почитать мои книги:

  • Путь программиста T-SQL – самоучитель по языку Transact-SQL для начинающих. В ней я подробно рассказываю обо всех конструкциях языка и последовательно перехожу от простого к сложному. Подходит для комплексного изучения языка T-SQL;
  • Стиль программирования на T-SQL – основы правильного написания кода. Книга, направленная на повышение качества T-SQL кода (для тех, кто уже знаком с языком T-SQL, т.е. знает хотя бы основы).

Надеюсь, теперь Вы понимаете, что такое SQL, и для чего он нужен, в следующих материалах я расскажу, как создавать SQL запросы, расскажу какие инструменты для этого необходимо использовать и для каких СУБД, так как у каждой СУБД есть свои инструменты, поэтому следите за выходом новых статей в моих группах в социальных сетях: ВКонтакте, Facebook, Одноклассники, Twitter и Tumblr. Подписывайтесь, и Вы не пропустите выход нового материала!

А на сегодня это все, удачи Вам, пока!

info-comp.ru

Практика по MS SQL. Получаем базовые знания и не только

Нередко в проектах встречается использование реляционной СУБД от Microsoft. Практика по MS SQL поможет быстро включиться в работу.

Данная практика по MS SQL рассчитана на специалистов, которые уже овладели теоретическими знаниями и навыками языка SQL и расширением Transact-SQL от Microsoft.

По итогам курса вы научитесь создавать БД для интернет-магазина с минимальным функционалом.

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

Триггер – это определенная процедура, срабатывающая при определенных событиях. В данном уроке будут использоваться триггеры DML, которые вешаются на события INSERT, UPDATE или DELETE и приводят в действие конкретную бизнес-логику проекта. В качестве примера будет приведен триггер, меняющий данные в одной таблице после удаления данных в другой, созданной ранее.

Практика по MS SQL показывает, что в основном, при обращении к БД делаются выборки из нескольких таблиц. Это можно реализовать, если использовать оператор объединения JOIN. Урок построен на понятных примерах “из жизни”, которые демонстрируют возможности СУБД MS SQL при чередовании операторов выборки, объединения и фильтрации.

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

Views (представления) – это некие виртуальные таблицы, содержащие запросы, по которым динамически извлекаются необходимые данные. Использование views позволяет облегчить написание смешанных SQL-процедур, защитить информацию в таблице, а также предоставляет удобное форматирование вывода.

Использование процедур также улучшает “чистоту” и “понятность” кода. Если вам нужно выполнить несколько действий подряд в определенном порядке, то процедуры – это то, что вам необходимо.

Если вдруг у вас остались какие-либо вопросы, что-то не до конца понятно, или не хватает базовых знаний, мы рекомендуем посмотреть дополнительные видеоролики по MS SQL:

Но чтобы практика по MS SQL не казалась кинотеатром, предлагаем также несколько популярных и полезных книг:

  • Microsoft SQL Server 2012. Справочник администратора. В книге приведены инструкции по удаленному управлению, созданию и регистрации серверов. Рассматриваются примеры как с Server Management Studio, так и с Windows PowerShell.
  • Эффективное использование СУБД MS SQL Server. Это отличный учебник не только для бакалавров прикладной математики и информатики, но и для новичков в этой теме.
  • Microsoft SQL Server 2012. Основы T-SQL. Книга демонстрирует возможности дополнения T-SQL. Вы научитесь оперировать конструкциями языка SQL, поймете суть дополнения T-SQL, и в результате будете способны писать сложные запросы.

proglib.io

Основы программирования на T-SQL | Info-Comp.ru

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

Основы программирования на T-SQL

И начать хотелось бы с того, что на этом сайте мы с Вами уже достаточно много материала посвятили языку SQL и в частности его расширению Transact-SQL (как Вы понимаете T-SQL это сокращение от Transact-SQL). И даже составили небольшой справочник для начинающих по данному языку и, конечно же, рассмотрели множество примеров, но как таковое программирование на T-SQL там, например, переменные, условные конструкции, комментарии мы затрагивали, но не заостряли на этом внимания. Но так как у нас сайт для начинающих программистов я решил посвятить этот материал именно этим основам.

Язык программирования T-SQL

Transact-SQL (T-SQL) – расширение языка SQL от компании Microsoft и используется в SQL Server для программирования баз данных.

SQL Server включает много конструкций, компонентов, функций которые расширяют возможности языка SQL стандарта ANSI, в том числе и классическое программирование, которое отличается от обычного написания запросов.

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

Примечание! Код я буду писать в окне запроса среды SQL Server Management Studio, о том, как установить SQL Server и Management Studio в редакции Express мы с Вами разговаривали вот здесь.

Переменные в T-SQL

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

Существует две разновидности переменных в T-SQL — это локальные и глобальные. Локальные переменные существуют только в пределах сеанса, во время которого они были созданы, а глобальные используются для получения информации о SQL сервере или какой-то меняющейся информации в базе данных.

Локальные переменные объявляются с помощью ключевого слова DECLARE и начинаются со знака @. Как и во многих языках программирования, переменные в T-SQL должны иметь свой тип данных. Типов данных в SQL сервере достаточно много мы их подробно рассмотрели в справочнике, который я упоминал чуть выше.

Для присвоения значения переменной можно использовать команды SET или Select.

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

  • @@ROWCOUNT – хранит количество записей, обработанных предыдущей командой;
  • @@ERROR – возвращает код ошибки для последней команды;
  • @@SERVERNAME — имя локального SQL сервера;
  • @@VERSION — номер версии SQL Server;
  • @@IDENTITY — последнее значение счетчика, используемое в операции вставки (insert).

Теперь для примера давайте создадим две переменной с типом данных INT, присвоим им значения, первой с помощью команды SET, а второй с помощью команды Select, затем просто выведем на экран эти значения, а также выведем и значение переменной @@VERSION, т.е. узнаем версию SQL сервера.

Скриншот 1

   
   DECLARE @TestVar1 INT
   DECLARE @TestVar2 INT
   SET @TestVar1 = 1
   SELECT @TestVar2 = 2
   SELECT @TestVar1 AS [Переменная 1], 
           @TestVar2 AS [Переменная 2], 
           @@VERSION AS [Версия SQL Server]


Пакеты

Пакет в T-SQL — это команды или инструкции SQL, которые объединены в одну группу и при этом SQL сервер будет компилировать, и выполнять их как одно целое.

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

Локальные переменные будут видны только в пределах того пакета, в котором они были созданы, т.е. обратиться к переменной после завершения пакета Вы уже не сможете.

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

Скриншот 2

Т.е. мы видим, что у нас вышла ошибка, связанная с тем, что переменная @TestVar1 у нас не объявлена.

Условные конструкции

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

IF…ELSE

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

Скриншот 3

   
   DECLARE @TestVar1 INT
   DECLARE @TestVar2 VARCHAR(20)
   SET @TestVar1 = 5
   IF @TestVar1 > 0
        SET @TestVar2 = 'Больше 0'
   ELSE
        SET @TestVar2 = 'Меньше 0'
   SELECT @TestVar2 AS [Значение TestVar1]


IF EXISTS

Данная конструкция позволяет определить наличие записей определенных условием. Например, мы хотим знать есть ли в таблице те или иные записи и при обнаружении первого совпадения обработка команды прекращается. По сути это то же самое, что и COUNT(*) > 0.

К примеру, мы хотим проверить есть ли записи со значение id >=0 в таблице test_table, и на основе этого мы будем принимать решение, как действовать дальше

Скриншот 4

   
   DECLARE @TestVar VARCHAR(20)
   IF EXISTS(SELECT * FROM test_table WHERE id > = 0)
        SET @TestVar = 'Записи есть'
   ELSE
        SET @TestVar = 'Записей нет'
   SELECT @TestVar AS [Наличие записей]


CASE

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

Скриншот 5

   
   DECLARE @TestVar1 INT
   DECLARE @TestVar2 VARCHAR(20)
   SET @TestVar1 = 1
   SELECT @TestVar2 = CASE @TestVar1
                                                WHEN 1 THEN 'Один'
                                                WHEN 2 THEN 'Два'
                                                ELSE 'Неизвестное'
                                        END
   SELECT @TestVar2 AS [Число]


BEGIN…END

Эта конструкция необходима для создания блока команд, т.е. например, если бы мы хотели выполнить не одну команду после блока IF, а несколько, то нам бы пришлось писать все команды внутри блока BEGIN…END.

Давайте модифицируем наш предыдущий пример (про IF EXISTS) так, чтобы при наличии записей id > = 0 в таблице test_table, мы помимо присвоения значения переменной @TestVar, выполним еще и update, т.е. обновление неких данных в этой же таблице, а также выведем количество строк, которые мы обновили, используя глобальную переменную @@ROWCOUNT.

Скриншот 6

   
   DECLARE @TestVar1 VARCHAR(20)
   DECLARE @TestVar2 INT
   SET @TestVar2 = 0
   IF EXISTS(SELECT * FROM test_table WHERE id > = 0)
        BEGIN
                SET @TestVar1 = 'Записи есть'
                UPDATE test_table SET column1 = 5 WHERE id > = 0
                SET @TestVar2 = @@ROWCOUNT 
        END
   ELSE
        SET @TestVar1 = 'Записей нет'
   SELECT @TestVar1 AS [Наличие записей],       
           @TestVar2 AS [Затронуто строк:]


Циклы T-SQL

Если говорить в общем о циклах, то они нужны для многократного повторения выполнения команд. В языке T-SQL есть один цикл WHILE с предусловием, это означает, что команды начнутся, и будут повторяться до тех пор, пока выполняется условие перед началом цикла, также выполнение цикла можно контролировать с помощью ключевых слов BREAK и CONTINUE.

Скриншот 7

   
   DECLARE @Cnt INT = 1, @result INT = 0, @CountRow INT
   SELECT @CountRow = COUNT(*) FROM test_table
   WHILE @Cnt <= @CountRow
          BEGIN
                  SET @Cnt += 1
                  SET @result += 1
                  IF @Cnt = 20
                        BREAK
                  ELSE
                        CONTINUE        
          END
   SELECT @result AS [Количество выполнений цикла:]


В данном примере мы сначала, конечно же, объявляем переменные (Cnt и result мы сразу инициализируем, таким способом можно задавать значения переменных, начиная с SQL Server 2008). Затем узнаем, сколько строк в таблице test_table и после этого проверяем, если количество строк в таблице больше или равно нашему счетчику, то входим в наш тестовый цикл. В цикле мы увеличиваем значение счетчика, записываем результат и снова проверяем, если наш счетчик достиг уже значения 20, то мы его принудительно завершим, если нет, то пусть работает дальше, до того как значение счетчика станет больше или равно количеству строк в таблице или до 20, если в таблице строк больше.

Комментарии

Они нужны для того, чтобы пояснять, делать заметки в коде, так как если код большой и сложный, то через некоторое время Вы можете просто забыть, почему именно так и для чего Вы написали тот или иной участок кода. В языке T-SQL бывают однострочные (—Текст) и многострочные комментарии (/*Текст*/).

Скриншот 8

Команды T-SQL

GOTO

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

Скриншот 9

   
   DECLARE @Cnt INT = 0
   Metka: --Устанавливаем метку
   SET @Cnt += 1 --Прибавляем к переменной 1
        if @Cnt < 10
                GOTO Metka --Если значение меньше 10, то переходим к метке
   SELECT @Cnt AS [Значение Cnt =]


WAITFOR

Команда может приостановить выполнение кода на время или до наступления заданного времени. Параметр DELAY делает паузу заданной длины, а TIME приостанавливает процесс до указанного времени. Значение параметров задается в формате hh:mi:ss

Скриншот 10

   
   DECLARE @TimeStart time, @TimeEnd time
   SET @TimeStart = CONVERT (time, GETDATE())--Узнаем время
   WAITFOR DELAY '00:00:05'--Пауза на 5 секунд
   SET @TimeEnd = CONVERT (time, GETDATE())--Снова узнаем время
   --Узнаем, сколько прошло времени в секундах
   SELECT DATEDIFF(ss, @TimeStart, @TimeEnd) AS [Прошло Секунд:]


RETURN

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

Скриншот 11

   
   DECLARE @Cnt INT = 1, @result varchar(15)
   /*Если значение Cnt меньше 0, то следующие команды не выполнятся,
   и Вы не увидите колонку [Результат :]*/
   IF @Cnt < 0
        RETURN
   SET @result = 'Cnt больше 0'
   SELECT @result AS [Результат:]


PRINT

Для передачи служебного сообщения можно использовать команду PRINT. В Management Studio это сообщение отобразится на вкладке «Сообщения» (Messages).

Скриншот 12

   
   DECLARE @Cnt INT = 10, @TestVar varchar(100)
   IF @Cnt > 0
        SET @TestVar = 'Значение переменной Cnt больше 0 и равняется ' 
                                        + CAST(@Cnt AS VARCHAR(10))
   ElSE
        SET @TestVar = 'Значение переменной Cnt меньше 0 и равняется ' 
                                        + CAST(@Cnt AS VARCHAR(10))
   PRINT @TestVar


Транзакции

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

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

Скриншот 13

   
   --Узнаем что у нас в таблице (id = IDENTITY)
   SELECT * FROM test_table
   --Начинаем транзакцию
   BEGIN TRAN
   --Сначала обновим все данные
   UPDATE test_table SET column1 = column1 - 5
   --Затем просто добавим строки с новыми значениями
   INSERT INTO test_table
        SELECT column1 FROM test_table
        --Если ошибка, то все отменяем
        IF @@error != 0
                BEGIN
                        ROLLBACK TRAN
                        RETURN
                END
   COMMIT TRAN
   --Смотрим что получилось
   SELECT * FROM test_table


В этом примере, если бы у нас в момент добавления данных (INSERT) возникла ошибка, то UPDATE бы отменился.

Обработка ошибок — конструкция TRY…CATCH

В процессе выполнения T-SQL кода может возникнуть непредвиденная ситуация, т.е. ошибка, которую необходимо обработать. В SQL сервере, начиная с SQL Server 2005, существует такая конструкция как TRY…CATCH, которая может отследить ошибку.

Скриншот 14

   
   BEGIN TRY
   DECLARE @TestVar1 INT = 10, @TestVar2 INT = 0, @result INT
   SET @result = @TestVar1 / @TestVar2
   END TRY
   BEGIN CATCH
        SELECT
        ERROR_NUMBER() AS [Номер ошибки],
        ERROR_MESSAGE() AS [Описание ошибки]
   END CATCH


В этом примере возникла ситуация что происходит деление на ноль (как Вы знаете делить на 0 нельзя) и так как наш блок кода был помещен в конструкцию TRY у нас возникло исключение, при котором мы просто получаем номер ошибки и ее описание.

Я думаю для основ этого достаточно, если Вы хотите более подробно изучить все конструкции языка T-SQL, то рекомендую прочитать мою книгу «Путь программиста T-SQL», в которой уже более подробно рассмотрен язык T-SQL, у меня все, удачи!

info-comp.ru

10 потенциальных SQL ошибок, которые делают программисты / Habr

Оригинал статьи носит название «10 SQL ошибок, которые делают Java разработчики», но, по большому счёту, приведённые в ней принципы можно отнести к любому языку.

Java программисты мешают объектно-ориентированное и императивное мышление в зависимости от их уровня:
— мастерства (каждый может программировать императивно)
— догмы (шаблон для применения шаблонов где-либо и их именование)
— настроения (применять истинный объектный подход немного сложнее чем императивный)

Но всё меняется, когда Java разработчики пишут SQL код.
SQL — это декларативный язык, который не имеет ничего общего с объектно-ориентированным или императивным мышлением. Очень легко выразить запрос в SQ, но довольно трудно выразить его корректно и оптимально. Разработчикам не только необходимо переосмыслить их парадигму программирования, им нужно ещё и думать в рамках теории множеств (set theory).

Ниже перечислены общие ошибки, которые делают Java разработчики, использующие SQL в JDBC или jOOQ (без определённого порядка). Для других 10 ошибок, смотрите эту статью.

1. Забыл о NULL

Непонимание NULL — это скорее всего самая большая ошибка, которую Java разработчик может сделать, когда пишет SQL. Это может быть потому, что NULL ещё называется UNKNOWN. Если бы он назывался просто UNKNOWN, его было бы проще понять. Другая причина в том, что при получении данных и связывании переменных JDBC отражает SQL NULL в Java null. Это может привести к тому, что NULL = NULL (SQL) будет вести себя так же, как и null == null (JAVA).

Один из самых ярких примеров заблуждения о NULL — это когда NULL предикаты используются со строковым выражением (row value expression).

Другая, более специфическая проблема появляется при отсутствии понимания значения NULL в NOT IN anti-joins.

Лекарство:
Тренируй себя. Ничего сложного — во время написания SQL всегда думай о NULL:
— Этот предикат корректен относительно NULL?
— Влияет ли NULL на результат этой функции?

2. Обработка данных в памяти Java

Не многие Java программисты знают SQL очень хорошо. Случайный JOIN, странный UNION и ладно. А оконные функции? Группирующие наборы? Многие Java разработчики загружают SQL данные в память, трансформируют их в какую-нибудь подходящую коллекцию и выполняют нужные вычисления на этих коллекциях с многословными циклическими структурами (по-крайней мере до улучшения коллекций в JAVA 8).

Но некоторые SQL базы данных поддерживают дополнительные (SQL стандарт!) OLAP функции, которые подходят для этого лучше и являются более простыми в написании. Один из примеров (не стандарт) — это отличный оператор MODEL от Oracle. Просто позволь БД сделать обработку и вытащить результаты в память Java. Потому что, в конце концов, какой-то умный парень уже оптимизировал эти дорогие продукты. Итак, используя OLAP в БД, ты получаешь две вещи:
— Простоту. Скорее всего, проще писать правильно на SQL, чем на Java.
— Производительность. БД скорее всего будут быстрее чем твой алгоритм. И, что важнее, тебе не придётся тянуть миллионы записей по проводам.

Лекарство:
Каждый раз когда ты пишешь ориентированный на данные алгоритм с помощью Java, спрашивай себя: «Есть ли возможность переложить эту работу на базу данных?»

3. Использование UNION вместо UNION ALL

Позор тому, что UNION ALL требует дополнительного слова относительно UNION. Было бы намного лучше, если бы SQL стандарт был определён поддерживать:
— UNION (позволяет дублирование)
— UNION DISTINCT (убирает дублирование)

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

Помни, что даже если SQL стандарт определяет INTERSECT ALL и EXCEPT ALL, не каждая БД может реализовывать эти мало используемые наборы операций.

Лекарство:
Думай, хотел ли ты написать UNION ALL каждый раз, когда пишешь UNION.

4. Использование JDBC для постраничной разбивки большой выборки

Большинство БД поддерживают какие-то средства для постраничной разбивки через LIMIT… OFFSET, TOP… START AT, OFFSET… FETCH операторов. В отсутствии поддержки этих операторов всё ещё есть возможность наличия ROWNUM (Oracle) или ROW_NUMBER() OVER() фильтрации (DB2, SQL Server 2008 и другие), которые намного быстрее разбивки в памяти. Это относится преимущественно к большим смещениям!

Лекарство:
Просто используйте эти операторы, или инструмент(такой, как jOOQ), который может имитировать эти операторы за вас.

5. Соединение данных в памяти Java

С ранних дней SQL и до сих пор некоторые Java программисты с тяжелым сердцем пишут JOINы. У них есть устаревший страх того, что JOINы выполняются медленно. Это может быть так, если оптимизатор накладных расходов выбирает сделать вложенный цикл, загружая целые таблицы в память перед созданием ячеек присоединённой таблицы. Но это случается редко. С нормальными предикатами, ограничениями, индексами, MERGE JOIN или HASH JOIN операции выполняются очень быстро — всё зависит от корректных метаданных (Tom Kyte хорошо написал об этом). Тем не менее, наверняка ещё остались немногие Java разработчики, которые загружают две таблицы двумя отдельными запросами и соединяют их в памяти Java тем или иным способом.

Лекарство:
Если бы выбираете из разных таблиц на различных этапах, подумайте ещё раз, вдруг вы можете выразить ваши запросы одним.

6. Использование DISTINCT или UNION для удаления дубликатов из случайного декартова произведения

Из-за сложных соединений (JOIN) любой разработчик может потерять след в значащих связях SQL запроса. Если конкретнее, то при использовании связи с составными внешними ключами можно забыть добавить значащие предикаты в JOIN… ON утверждения. Это может привести к дублированию строк всегда или только в исключительных ситуациях. Тогда некоторые разработчики могут добавить оператор DISTINCT для прекращения дублирования данных. Это не правильно по трём причинам:
— Это может излечить последствия, но не причину. А ещё это может не решить последствия при граничных условиях.
— Это медленно для больших выборок. DISTINCT выполняет ORDER BY операцию для удаления дублирования.
— Это медленно для больших декартовых произведений которые всё равно будут загружены в память.

Лекарство:
Как правило, если Вы получаете нежелательные дубликаты, пересмотрите свои JOIN предикаты. Вероятно там где-то образовалось небольшое декартово произведение.

7. Избегание оператора MERGE

На самом деле это не ошибка, но, возможно, это отсутствие знаний или страхи мощного оператора MERGE. Некоторые БД знают другие формы UPSERT оператора, например MySQL ON DUPLICATE KEY UPDATE. На самом деле MERGE очень мощен, особенно в БД, которые сильно расширяют SQL стандарт, таких как SQL Server.

Лекарство:
Если Вы делаете UPSERT, выстраивая цепочку из INSERT и UPDATE или SELECT… FOR UPDATE и INSERT/UPDATE, задумайтесь ещё раз. Вместо риска гонки за ресурсами, вы можете написать более простое MERGE запрос.

8. Использование агрегатных функций вместо оконных функций

Перед появлением оконных функций, единственным средством для агрегации данных в SQL было использование GROUP BY вместе с агрегатными функциями в проекции. Это хорошо работает в большинстве случаев, и если агрегированные данные должны быть наполнены обычными данными, то сгруппированный запрос может быть написан в присоединённом под запросе.
Но SQL:2003 определяет оконные функции, которые реализованы многими поставщиками БД. Оконные функции могут агрегировать данные на не группированных выборках. По факту, каждая оконная функция поддерживает свою собственную, независимую PARTITION BY операцию, которая является отличным инструментом для построения отчётов.

Использование оконных функций позволит:
— Построить более читаемый SQL (меньше выделенных GROUP BY выражений в под запросах)
— Улучшить производительность т.к. RDBMS может легче оптимизировать оконные функции

Лекарство:
Когда вы пишите GROUP BY выражение в под запросе, задумайтесь, может ли он быть выражен оконной функцией?

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

Оператор ORDER BY поддерживает множество типов выражений, включая CASE, который может быть очень полезен при определении параметра сортировки. Вам никогда не следует сортировать данные в памяти Java только потому, что:
— SQL сортировка слишком медленная.
— SQL сортировка не может сделать этого.

Лекарство:
Если вы сортируете какие-либо SQL данные в памяти Java, задумайтесь, возможно ли перенести эту сортировку в БД? Это отлично сочетается со страничной разбивкой в БД.

10. Поочерёдная вставка множества записей

JDBC знает, что такое пакет (batch), и Вам следует использовать это. Не делайте INSERT тысяч записей одной за другой, создавая новый PreparedStatement каждый раз. Если все ваши записи идут в одну таблицу, создайте партию INSERT запросов с одним SQL запросом и несколькими связываемыми наборами данных. В зависимости от вашей БД и её конфигурации, что бы сохранить UNDO лог чистым, Вам может потребоваться делать commit спустя какое-то количество вставленных записей.

Лекарство:
Всегда используйте пакетную вставку больших наборов данных.

Несколько интересных книг на тему

— SQL Antipatterns by Bill Karwin
— SQL Performance Explained by Markus Winand

habr.com

5 сайтов для оттачивания навыков написания SQL-запросов

Одним из ключевых навыков при работе с базами данных является умение писать sql-запросы. Мы отобрали 5 лучших сайтов для оттачивания этого навыка.

Два сайта указаны вместе, так как представляют собой один ресурс. sql-tutorial — это интерактивный онлайн-учебник по изучению SQL, где подробно и структурировано расписана вся необходимая теория, а в конце каждой главы прилагаются уже разобранные упражнения по данной теме с описанием типичных ошибок и способов решения. sql-ex полностью ориентирован на задачи по базам данных. Также стоит отметить возможность приобретения сертификата (платно) и то, что весь материал изложен на русском языке.

Как следует из названия, этот сайт является задачником по написанию запросов, используя синтаксис Postgre DB. Упражнения делятся по тематикам. Рассматриваются такие вещи, как рекурсия, строки, использование aggregate функций и join’ов, работа с датами и подзапросами. Для желающих предоставляем ссылку на документацию.

Интерактивный туториал по изучению SQL. Рекомендуется для новичков и тех, кто желает освежить свои знания. Здесь нет типичного деления на практику и теорию, информация подаётся в формате уроков. Уроки состоят из необходимой теории с примерами, а в конце предлагается несколько задач по только что прочитанному материалу. Вводных уроков 18, разбираются такие темы, как ограничения, join’ы, выражения, агрегаты и действия с таблицами и со строками. Однако если вы уже прилично разбираетесь в написании запросов, то, возможно, вам стоит обратить внимание на более «продвинутые» источники.

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

Сайт, который исповедует принцип соревновательного программирования. Справки нет, упражнения делятся по темам, сложности и максимальному количеству баллов за безупречное решение задачи. Ресурс всемирный, и предоставляет возможность также посоревноваться в решении задач на C++, Python, Java и PHP. Рекомендуется тем, кто уже неплохо разбирается в базах данных.

NoSQL базы данных: работаем с данными правильно

NoSQL базы данных: хранилища и доступность данных

proglib.io

Язык программирования SQL

Structured Query Language (структурированный язык запросов) или SQL — это декларативный язык программирования для использования в квази-реляционных баз данных. Многие из оригинальных черт SQL были взяты для кортежных исчислений , но последние расширения SQL включают все больше реляционной алгебры.
SQL изначально создан IBM , но многие производители разработали собственные диалекты. Он была принят в качестве стандарта американским Национальным институтом стандартов (ANSI) в 1986 и ISO в 1987 . В стандарте языка программирования SQL, ANSI заявил, что официальный произношение SQL является «эс кью эль». Тем не менее, многие специалисты базы данных употребляли «сленговое» произношение «Сиквель», что отражает первоначальное название языка, Sequel, которое было изменено позже из-за возникшего конфликта торговых марок и наименований у компании IBM. Программирование для начинающих.
Язык программирования SQL был пересмотрен в 1992 , и эта версия известна как SQL-92 в. Потом было вновь пересмотрено 1999 , чтобы стать SQL: 1999 (AKA SQL3). Программирование для чайников. SQL 1999 поддерживает объекты, которые ранее не поддерживается и в других версиях, но только в конце 2001 года лишь несколько систем управления базами данных поддерживали SQL реализации: 1999.
SQL, хотя определяется как ANSI и ISO, имеет множество вариаций и расширений, большинство из которых имеют собственные характеристики, такие как реализация корпорации Oracle «PL / SQL» или реализация Sybase и Microsoft под названием «Transact-SQL», что может запутать знакрмящегося с основами программирования. Также не редкость для коммерческих реализаций опустить поддержку основных особенностей стандарта, такие типы данных как дата и время, предпочитая какой-то их собственный вариант. Как результат, в отличие от ANSI C или ANSI Fortran которые обычно можно портирована с платформы на платформу без серьезных структурных изменений, запросы языка программирования SQL редко могут быть перенесены между разными системами баз данных без существенных модификаций. Большинство людей в области баз данных считают, что это отсутствие совместимости является намеренным, с тем чтобы обеспечить каждого разработчика собственной системой управления базами данных и привязать покупателя к конкретной базе данных.
Как следует из названия, язык программирования SQL предназначен для конкретных, ограниченных целей — запросов данных, содержащихся в реляционной базе данных. Как таковой, он представляет собой набор инструкций языка программирования для создания выборок данных, а не процедурный язык, такой как C или BASIC , которые предназначены для решения гораздо более широкого круга проблем. Расширения языка, таких как «PL / SQL» предназначены для решения этого ограничения, добавив процедурные элементы для SQL при сохранении преимуществ SQL. Другой подход заключается в том, что позволяется в зопросы SQL встраивать команды процедурного языка программирования и взаимодействовать с базой данных. Например, Oracle и другие поддерживают язык Java в базе данных, в то время как PostgreSQL позволяет писать функции на Perl, Tcl, или С.
Один анекдот про SQL: «SQL не является ни структурированным, ни языком.» Суть шутки состоит в том, что SQL не является языком Тьюринга. .

Таблица ‘T’ Запрос SQL Результат
 
Select * from T
 
 
Select C1 from T
 
 
Select * from T where C1=1
 

Учитывая таблицу T, запрос Select * from T выведет на экран все элементы всех строк таблицы.
Из той же таблицы, запрос Select C1 from T выведет на экран элементы из столбца C1 всех строк таблицы.
Из той же таблицы, запрос Select * from T where C1=1 выведет на экран все элементы всех строк, где значение колонки С1 равно «1».

SQL ключевые слова

SQL слова делятся на ряд групп.

Первая — это Data Manipulation Language или DML (язык управления данными). DML является подмножеством языка, используемого для запроса к базам данных, добавления, обновления и удаления данных.

  • SELECT является одной из наиболее часто используемых команд DML и позволяет пользователю задать запрос как описание желаемого результата в виде множества. В апросе не указано, каким образом результаты должны быть расположены — перевод запроса в форму, которая может быть выполнена в базе данных, является работой системы баз данных, более конкретно оптимизатора запросво.
  • INSERT используется для добавления строк (формального набора) для существующей таблицы.
  • UPDATE используется для изменения значений данных в существующей строке таблицы.
  • DELETE определение существующих строк, которые будут удалены из таблицы.

Три другие ключевых слова, можно сказать, что попадают в группу DML:

  • BEGIN WORK (или START TRANSACTION, в зависимости от диалекта SQL) могут быть использованы, чтобы отметить начало транзакции базы данных, которые либо выполнятся все полностью или вообще не выполнятся.
  • COMMIT устанавливает, что все изменения данных в после совершения операций сохраняются.
  • ROLLBACK определяет, что все изменения данных после последней фиксации или отката должны быть уничтожены, до того момента, который был зафиксирован в БД как «откат».

COMMIT и ROLLBACK применяются в таких областях, как контроль транзакций и блокировки. Обе инструкции завершают все текущие транзакции (наборы операций над БД) и снимают все блокировки на изменение данных в таблицах. Присутствие или отсутствие BEGIN WORK или аналогичного заявления зависит от конкретной реализации SQL.

Вторая группа ключевых слов относится к группе Data Definition Language или DDL ( язык определения данных). DDL позволяет пользователю определять новые таблицы и связанные с ними элементы. Большинство коммерческих баз данных SQL имеют собственные расширения в DDL, которые позволяют осуществлять контроль над нестандартныыми, но обычно жизненно важными элементами конкретной системы.
Основные пункты DDL являются команды создавать и удалять.

  • CREATE определяет объекты ( например, таблицы), которые будут созданы в базе данных.
  • DROP определяет, какие существующие объекты в базе данных будут удалены, как правило, безвозвратно.
  • Некоторые системы баз данных также поддерживают команду ALTER, которая позволяет пользователю изменять существующий объект по-разному — например, так можно произвести добавление столбцов в существующую таблицу.

Третьей группой ключевых слов SQL является Data Control Language или DCL(язык контроля данных). DCL отвечает за права доступа к данным и позволяет пользователю контролировать, кто имеет доступ, чтобы просматривать или манипулировать данными в базе данных. Здесь два основных ключевых слова:

  • GRANT — разрешает пользователю выполнять операции
  • REVOKE — удаляет или ограничивает возможность пользователю выполнять операции.

Системы баз данных с использованием SQL

  • DB2
  • InterBase
  • MySQL
  • Oracle
  • PostgreSQL
  • SQL Server

Как стать профессионалом по разработке сайтов и начать зарабатывать? Недорогие видео курсы с ознакомительным введением.

                  

www.progaprosto.ru