Что такое субд

Содержание

Параметризация запросов

Последнее обновление: 31.10.2015

Ранее для отправки запросов мы напрямую добавляли данные в выражение sql. Например, для отправки запроса на добавление данных в БД применялось следующее выражение:

string sqlExpression = String.Format("INSERT INTO Users (Name, Age) VALUES ('{0}', {1})", name, age);

В данном случае предполагается, что значения для переменных name и age вводит пользователь.


Что если переменная name получит следующее значение:

name = "Tom',10);INSERT INTO Users (Name, Age) VALUES('Hack";

В этом случае sql-выражение в итоге будет выглядеть следующим образом:

INSERT INTO Users (Name, Age) VALUES ('Tom',10);INSERT INTO Users (Name, Age) VALUES('Hack,{1})";

В итоге в базу данных будет добавлено два объекта. Это относительно безобидный вид подмены sql-выражения, но реальные возможности встраивания зловредных скриптов таковы, что можно вообще потерять данные в БД, если предоставить пользователям подобным образом добавлять данные.

Чтобы выйти из этой ситуации, в sql-командах используются параметры:

string connectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=usersdb;Integrated Security=True";
int age = 23;
string name = "T',10);INSERT INTO Users (Name, Age) VALUES('H";
string sqlExpression = "INSERT INTO Users (Name, Age) VALUES (@name, @age)";
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    SqlCommand command = new SqlCommand(sqlExpression, connection);
	// создаем параметр для имени
    SqlParameter nameParam = new SqlParameter("@name", name);
	// добавляем параметр к команде
    command.Parameters.Add(nameParam);
	// создаем параметр для возраста
	SqlParameter ageParam = new SqlParameter("@age", age);
	// добавляем параметр к команде
    command.Parameters.Add(ageParam);

    int number = command.ExecuteNonQuery();
    Console.WriteLine("Добавлено объектов: {0}", number); // 1
}

Для определения параметров используется объект SqlParameter. Этот объект имеет ряд конструкторов, но в данном случае передается название параметра и его значение. Причем название параметров начинается со знака @ и должно совпадать с тем названием, которое используется в sql-выражении (то есть в «INSERT INTO Users (Name, Age) VALUES (@name, @age)»). После определения параметра он добавляется в коллекцию параметров команды.

При выполнении команды на место параметров в sql-выражении подставляются их значения

При этом не важно, что параметр @name в значении определяет еще одну команду INSERT — все его значение будет добавлено в столбец name в таблице Users

НазадВперед

Типизация результатов SqlDataReader

Последнее обновление: 31.10.2015

В прошлой теме для получения результатов SqlDataReader использовался метод , который возвращал значение определенного столбца в текущей ячейки в виде объекта типа object. Однако в ряде случаев такой способ не является оптимальным. Например, мы знаем, что в третьем столбце хранится возраст пользователя, который представляет целое число, и в программе мы хотели бы его использовать как целое число. Так как GetValue возвращает объект типа object, то, чтобы его использовать, к примеру, как число, нам надо его привести к типу int. Однако мы моем выбрать другой путь — использовать типизированные методы. Итак, изменим код программы следующим образом:

static void Main(string[] args)
{
    string connectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=usersdb;Integrated Security=True";

    string sqlExpression = "SELECT * FROM Users";
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();
        SqlCommand command = new SqlCommand(sqlExpression, connection);
        SqlDataReader reader = command.ExecuteReader();

        if(reader.HasRows) // если есть данные
        {
            // выводим названия столбцов
            Console.WriteLine("{0}\t{1}\t{2}", reader.GetName(0), reader.GetName(1), reader.GetName(2));

            while (reader.Read()) // построчно считываем данные
            {
                int id = reader.GetInt32(0);
                string name = reader.GetString(1);
                int age = reader.GetInt32(2);

                Console.WriteLine("{0} \t{1} \t{2}", id, name, age);
            }
        }
        
        reader.Close();
    }
            
    Console.Read();
}

Для получения данных здесь теперь используются методы и , которые возвращают объекты типа int и string соответственно. Причем поскольку мы знаем, что в столбце id хранится число, то мы можем получить его именно с помощью метода GetInt32, но никак не GetString. И также в этот метод передается номер столбца в таблице (нумерация опять же начинается с нуля).

Для получения данных каждого примитивного типа есть свой метод:

Тип sql

Тип .NET

Метод

bigint

Int64

GetInt64

binary

Byte[]

GetBytes

bit

Boolean

GetBoolean

char

String и Char[]

GetString и GetChars

datetime

DateTime

GetDateTime

decimal

Decimal

GetDecimal

float

Double

GetDouble

image и long varbinary

Byte[]

GetBytes и GetStream

int

Int32

GetInt32

money

Decimal

GetDecimal


nchar

String и Char[]

GetString и GetChars

ntext

String и Char[]

GetString и GetChars

numeric

Decimal

GetDecimal

nvarchar

String и Char[]

GetString и GetChars

real

Single (float)

GetFloat

smalldatetime

DateTime

GetDateTime

smallint

Intl6

GetIntl6

smallmoney

Decimal

GetDecimal

sql variant

Object

GetValue

long varchar

String и Char[]

GetString и GetChars

timestamp

Byte[]

GetBytes

tinyint

Byte

GetByte

uniqueidentifier

Guid

GetGuid

varbinary


Byte[]

GetBytes

varchar

String и Char[]

GetString и GetChars

НазадВперед

Выполнение запросов

По умолчанию, если вы не устанавливали дополнительные программы, у MySQL нет графического интерфейса пользователя. Это значит, что единственный способ работы с ней — это использование командной строки.

  1. Откройте командную строку (Выполнить: cmd.exe).
  2. Перейдите в каталог с установленной MySQL: .
  3. Выполните: .
  4. Введите пароль, заданный при установке.

Если вы всё выполнили верно, то в командной строке запустится клиент для работы с MySQL (вы поймете это по строке приглашения «mysql>»). С этого момента можно вводить любые SQL запросы, но каждый запрос обязательно должен заканчиваться точкой с запятой

Работа с SQL

Последнее обновление: 31.10.2015

В большинстве случаев разработчики смогут создать эффективные запросы с помощью методов и операторов LINQ. Однако в Entity Framework доступно также прямое выполнение sql-запросов.

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

using(PhoneContext db = new PhoneContext())
{
    Console.WriteLine(db.Database.Connection.ConnectionString);
}

Непосредственно для создания запроса нам надо использовать метод SqlQuery, который принимает в качестве параметра sql-выражение.

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

class PhoneContext : DbContext
{
    public PhoneContext() :base("DefaultConnection")
    {}

    public DbSet<Company> Companies { get; set; }
    public DbSet<Phone> Phones { get; set; }
}
	
public class Company
{
    public int Id { get; set; }
    public string Name { get; set; }

    public ICollection<Phone> Phones { get; set; }
    public Company()
    {
        Phones = new List<Phone>();
    }
}

public class Phone
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Price { get; set; }

    public int CompanyId { get; set; }
    public Company Company { get; set; }
}

Итак, получим все модели из таблицы Companies:

using(PhoneContext db = new PhoneContext())
{
    var comps = db.Database.SqlQuery<Company>("SELECT * FROM Companies");
    foreach (var company in comps)
        Console.WriteLine(company.Name);
}

Выражение извлекает данные из таблицы. Так как эта таблица сопоставляется с моделью Company и хранит объекты этой модели, то данный вызов типизируется классом Company:

Другая версия метода позволяет использовать параметры. Например, выберем из бд все модели, которые в названии имеют подстроку «Samsung»:

using(PhoneContext db = new PhoneContext())
{
    System.Data.SqlClient.SqlParameter param = new System.Data.SqlClient.SqlParameter("@name", "%Samsung%");
    var phones = db.Database.SqlQuery<Phone>("SELECT * FROM Phones WHERE Name LIKE @name",param);
    foreach (var phone in phones)
        Console.WriteLine(phone.Name);
}

Класс SqlParameter из пространства имен System.Data.SqlClient позволяет задать параметр, который затем передается в запрос sql.

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

// вставка
int numberOfRowInserted = db.Database.ExecuteSqlCommand("INSERT INTO Companies (Name) VALUES ('HTC')");
// обновление
int numberOfRowUpdated = db.Database.ExecuteSqlCommand("UPDATE Companies SET Name='Nokia' WHERE Id=3");
// удаление
int numberOfRowDeleted = db.Database.ExecuteSqlCommand("DELETE FROM Companies WHERE Id=3");

НазадВперед

MySQL

Существует множество различных реляционных СУБД. Самая известная СУБД — это Microsoft Access, входящая в состав офисного пакета приложений Microsoft Office. Нет никаких препятствий для использования в качестве СУБД MS Access, но для задач веб-программирования гораздо лучше подходит альтернативная программа — MySQL. В отличие от MS Access, MySQL абсолютно бесплатна, может работать на серверах с Linux, обладает гораздо большей производительностью и безопасностью, что делает её идеальным кандидатом на роль базы данных в веб-разработке. Подавляющее большинство сайтов и приложений на PHP используют в качестве СУБД именно MySQL.

ПримерыExamples

A.A. Создание очереди без параметровCreating a queue with no parameters

В следующем примере создается очередь, готовая к приему сообщений.The following example creates a queue that is available to receive messages. Для очереди не указана хранимая процедура активации.No activation stored procedure is specified for the queue.

Б.B. Создание недоступной очередиCreating an unavailable queue

В следующем примере создается очередь, недоступная для приема сообщений.The following example creates a queue that is unavailable to receive messages. Для очереди не указана хранимая процедура активации.No activation stored procedure is specified for the queue.

Г.D. Создание очереди для указанной файловой группыCreating a queue on a specific filegroup

В следующем примере создается очередь на основании файловой группы .The following example creates a queue on the filegroup .

Д.E. Создание очереди с несколькими параметрамиCreating a queue with multiple parameters

В следующем примере создается очередь на основании файловой группы .The following example creates a queue on the filegroup. Очередь недоступна для приема сообщений.The queue is unavailable. Сообщения хранятся в очереди до завершения диалога, которому они принадлежат.Messages are retained in the queue until the conversation that they belong to ends. При переключении очереди в состояние готовности к приему сообщений с помощью инструкции ALTER QUEUE в очереди активируется хранимая процедура для обработки сообщений.When the queue is made available through ALTER QUEUE, the queue starts the stored procedure to process messages. Хранимая процедура выполняется в контексте пользователя, выполнившего инструкцию .The stored procedure executes as the user who ran the statement. Очередь запускает не более экземпляров хранимой процедуры.The queue starts a maximum of instances of the stored procedure.

Команды для создания запросов

13. SELECT

используется для получения данных из определённой таблицы:

Следующей командой можно вывести все данные из таблицы:

14. SELECT DISTINCT

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

15. WHERE

Можно использовать ключевое слово в для указания условий в запросе:

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

  • сравнение текста;
  • сравнение численных значений;
  • логические операции AND (и), OR (или) и NOT (отрицание).

Попробуйте выполнить следующие команды

Обратите внимание на условия, заданные в :

16. GROUP BY

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

Выведем количество курсов для каждого факультета:

17. HAVING

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

Выведем список факультетов, у которых более одного курса:

18. ORDER BY

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

Выведем список курсов по возрастанию и убыванию количества кредитов:

19. BETWEEN

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

Выведем список инструкторов, чья зарплата больше 50 000, но меньше 100 000:

20. LIKE

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

Хакатон Tour.Hack

Ивент перенесён на 26–27 сентября, Новосибирск, беcплатно

tproger.ru

События и курсы на tproger.ru

Есть два свободных оператора, которые используются в :

  • (ни одного, один или несколько символов);
  • (один символ).

Выведем список курсов, в имени которых содержится , и список курсов, название которых начинается с :

21. IN

С помощью можно указать несколько значений для оператора :

Выведем список студентов с направлений Comp. Sci., Physics и Elec. Eng.:

22. JOIN


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

Обратите внимание на разницу между левым внешним объединением и правым внешним объединением:

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

23. View

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

Создадим , состоящую из курсов с 3 кредитами:

24. Агрегатные функции

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

  • — возвращает количество строк;
  • — возвращает сумму значений в данном столбце;
  • — возвращает среднее значение данного столбца;
  • — возвращает наименьшее значение данного столбца;
  • — возвращает наибольшее значение данного столбца.

Заполнение таблиц даннымиPopulate the tables with data

В Обозреватель сервера или Обозреватель объектов SQL Serverразверните узел образца базы данных.In Server Explorer or SQL Server Object Explorer, expand the node for the sample database.

Откройте контекстное меню для узла таблицы , выберите Обновить, а затем разверните узел таблицы .Open the shortcut menu for the Tables node, select Refresh, and then expand the Tables node.

Откройте контекстное меню таблицы Customers и выберите команду отобразить данные таблицы.Open the shortcut menu for the Customers table, and then select Show Table Data.

Добавьте необходимые данные для некоторых клиентов.Add whatever data you want for some customers. Можно указать любые пять символов как ИД клиентов, но хотя бы один нужно выбрать и запомнить для дальнейшего использования в этой процедуре.You can specify any five characters you want as the customer IDs, but choose at least one that you can remember for use later in this procedure.

Откройте контекстное меню таблицы Orders и выберите пункт отобразить данные таблицы.Open the shortcut menu for the Orders table, and then select Show Table Data.

Добавление данных для некоторых заказов.Add data for some orders.

Важно! Убедитесь, что все идентификаторы заказов и количества заказов — целые числа, и каждый идентификатор клиента соответствует значению, указанному в столбце CustomerID таблицы клиентов.Make sure that all order IDs and order quantities are integers and that each customer ID matches a value that you specified in the CustomerID column of the Customers table.

В строке меню выберите файл > сохранить все.On the menu bar, select File > Save All.

Оператор join: объединение записей из двух таблиц

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

Поменяем запрос на показ погодных записей, чтобы он объединял две таблицы, а в поле города показывалось его название, а не идентификатор:

Важно усвоить три самых главных момента:

  1. При чтении из объединённых таблиц, в перечислении полей после SELECT нужно явно указывать в поле имени также имя таблицы, с которой производится объединение.
  2. Всегда есть основная таблица (тб1), из которой читается большинство полей и присоединяемая (тб2), имя которой определяется после оператора JOIN.
  3. Помимо указания имени второй таблицы, обязательно следует указать условие, по которому будет происходить объединение. В этом примере таким условием будет соответствие идентификатора города из тб1 (weather_log.city_id) первичному ключу города из тб2 (cities.id).

SQL syntax used

User’s queries are executed by SQL server that brings some limitations to the syntax of SQL statements. Now we use Microsoft SQL Server 2019 (15.0) on the rating stages, and MariaDB-10.4 (compatible with MySQL 8), PostgreSQL 12.3, and Oracle Database 11g on the learn stage in addition. That is why You should follow the syntax of these realizations when building queries. It should be noted that SQL syntax, implemented in Microsoft SQL Server, is close to that of SQL-92 standard. But there are some distinctions, among them is absence of NATURAL JOIN of tables. Supplied help on SQL Data Manipulation Language is held in accordance with SQL-92 standard and contains information necessary for solving the exercises. In the same place it is possible to find features of used realization (SQL Server 2005).

РазрешенияPermissions

Объект, предоставляющий разрешение (или участник, указанный параметром AS), должен иметь либо само разрешение, выданное с помощью параметра GRANT OPTION, либо разрешение более высокого уровня, которое неявно включает предоставляемое.The grantor (or the principal specified with the AS option) must have either the permission itself with GRANT OPTION, or a higher permission that implies the permission being granted.

При использовании параметра AS налагаются следующие дополнительные требования.If you are using the AS option, the following additional requirements apply.

ASAS Необходимо дополнительное разрешениеAdditional permission required
пользователь базы данных;Database user Разрешение IMPERSONATE для пользователя, членство в предопределенной роли базы данных db_securityadmin, членство в предопределенной роли базы данных db_owner или членство в предопределенной роли сервера sysadmin.IMPERSONATE permission on the user, membership in the db_securityadmin fixed database role, membership in the db_owner fixed database role, or membership in the sysadmin fixed server role.
пользователь базы данных, сопоставленный с именем входа Windows;Database user mapped to a Windows login Разрешение IMPERSONATE для пользователя, членство в предопределенной роли базы данных db_securityadmin, членство в предопределенной роли базы данных db_owner или членство в предопределенной роли сервера sysadmin.IMPERSONATE permission on the user, membership in the db_securityadmin fixed database role, membership in the db_owner fixed database role, or membership in the sysadmin fixed server role.
Пользователь базы данных, сопоставленный группе WindowsDatabase user mapped to a Windows Group Членство в группе Windows, членство в предопределенной роли базы данных db_securityadmin, членство в предопределенной роли базы данных db_owner или членство в предопределенной роли сервера sysadmin.Membership in the Windows group, membership in the db_securityadmin fixed database role, membership in the db_owner fixed database role, or membership in the sysadmin fixed server role.
пользователь базы данных, сопоставленный с сертификатом;Database user mapped to a certificate Членство в предопределенной роли базы данных db_securityadmin, членство в предопределенной роли базы данных db_owner или членство в предопределенной роли сервера sysadmin.Membership in the db_securityadmin fixed database role, membership in the db_owner fixed database role, or membership in the sysadmin fixed server role.
пользователь базы данных, сопоставленный с асимметричным ключом;Database user mapped to an asymmetric key Членство в предопределенной роли базы данных db_securityadmin, членство в предопределенной роли базы данных db_owner или членство в предопределенной роли сервера sysadmin.Membership in the db_securityadmin fixed database role, membership in the db_owner fixed database role, or membership in the sysadmin fixed server role.
Пользователь базы данных, не сопоставленный ни с одним участником на уровне сервераDatabase user not mapped to any server principal Разрешение IMPERSONATE для пользователя, членство в предопределенной роли базы данных db_securityadmin, членство в предопределенной роли базы данных db_owner или членство в предопределенной роли сервера sysadmin.IMPERSONATE permission on the user, membership in the db_securityadmin fixed database role, membership in the db_owner fixed database role, or membership in the sysadmin fixed server role.
роль базы данных;Database role Разрешение ALTER на роль, членство в предопределенной роли базы данных db_securityadmin, предопределенной роли базы данных db_owner или предопределенной роли сервера sysadmin.ALTER permission on the role, membership in the db_securityadmin fixed database role, membership in the db_owner fixed database role, or membership in the sysadmin fixed server role.
Роль приложенияApplication role Разрешение ALTER на роль, членство в предопределенной роли базы данных db_securityadmin, предопределенной роли базы данных db_owner или предопределенной роли сервера sysadmin.ALTER permission on the role, membership in the db_securityadmin fixed database role, membership in the db_owner fixed database role, or membership in the sysadmin fixed server role.

Создание базы данных

Последнее обновление: 26.06.2017

Базу данных часто отождествляют с набором таблиц, которые хранят данные. Но это не совсем так. Лучше сказать, что база данных представляет хранилище объектов. Основные из них:

  • Таблицы: хранят собственно данные

  • Представления (Views): выражения языка SQL, которые возвращают набор данных в виде таблицы

  • Хранимые процедуры: выполняют код на языке SQL по отношению к данным к БД (например, получает данные или изменяет их)

  • Функции: также код SQL, который выполняет определенную задачу

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

Системные базы данных

В MS SQL Server по умолчанию создается четыре системных баз данных:

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

  • model: эта база данных представляет шаблон, на основе которого создаются другие базы данных. То есть когда мы создаем через SSMS свою бд, она создается как копия базы model.

  • msdb: хранит информацию о работе, выполняемой таким компонентом как планировщик SQL. Также она хранит информацию о бекапах баз данных.

  • tempdb: эта база данных используется как хранилище для временных объектов. Она заново пересоздается при каждом запуске сервера.

Все эти базы можно увидеть через SQL Server Management Studio в узле Databases -> System Databases:

Эти базы данных не следует изменять, за исключением бд model.

Если на этапе установки сервера был выбран и установлен компонент PolyBase, то также на сервере по умолчанию будут расположены еще три базы данных, которые используется этим компонентом: DWConfiguration, DWDiagnostics, DWQueue.

Создание базы данных в SQL Management Studio

Теперь создадим свою базу данных. Для этого мы можем использовать скрипт на языке SQL, либо все сделать с помощью графических средств в SQL Management Studio. В данном случае мы выберем второй способ. Для этого откроем SQL Server Management Studio и нажмем правой кнопкой мыши на узел Databases. Затем в появившемся контекстном меню выберем пункт New Database:

После этого нам открывается окно для создания базы данных:

В поле Database необходимо ввести название новой бд. Пусть у нас база данных называется university.

Следующее поле Owner задает владельца базы данных. По умолчанию оно имеет значение <defult>, то есть владельцем будет тот, кто создает эту базу данных. Оставим это поле без изменений.

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

  • Logical Name: логическое имя, которое присваивается файлу базы данных.

  • File Type: есть несколько типов файлов, но, как правило, основная работа ведется с файлами данных (ROWS Data) и файлом лога (LOG)

  • Filegroup: обозначет группу файлов. Группа файлов может хранить множество файлов и может использоваться для разбиения базы данных на части для размещения в разных местах.

  • Initial Size (MB): устанавливает начальный размер файлов при создании (фактический размер может отличаться от этого значения).

  • Autogrowth/Maxsize: при достижении базой данных начального размера SQL Server использует это значение для увеличения файла.

  • Path: каталог, где будут храниться базы данных.

  • File Name: непосредственное имя физического файла. Если оно не указано, то применяется логическое имя.

После ввода названия базы данных нажмем на кнопку ОК, и бд будет создана.

После этого она появится среди баз данных сервера. Если эта бд впоследствии не потребуется, то ее можно удалить, нажав на нее правой кнопкой мыши и выбрав в контекстном меню пункт Delete:

НазадВперед

FAQ — ответы на часто задаваемые вопросы

Что такое SQL?

SQL — язык программирования (или по-другому язык запросов) для создания, хранения и извлечения баз данных.

Где используется SQL?

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

Зачем мне нужен язык SQL?

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

Сколько я смогу зарабатывать после прохождения этих курсов?

По данным Trud.com, средняя зарплата SQL-программиста — от 80 до 100 000 рублей в месяц.

Какой курс по SQL самый лучший для изучения языка?

Самый лучший платный курс по SQL — онлайн-курс от beONmax.Самый лучший бесплатный курс по SQL — курс Гоши Дударя.

Для кого ты собрал эти курсы?

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

На сегодня всё.

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

Обещанный сюрприз: «ТОП-700+ Лучших Бесплатных Онлайн-Курсов на Русском Языке с Выдачей Сертификата и без».

Бесплатные SQL Server и R книги

SQL Server:

  • Avesome Red Gate ebooks
  • Microsoft huge collection
  • Microsoft large collection
  • Microsoft MVA Free ebooks
  • OnlineVideoLectures ebooks
  • Brent Ozar ebooks
  • E-books SQL Server Directory
  • TOAD SQL Server ebooks
  • Syncfusion Techportal
  • Modern Storage Strategies for SQL Server
  • Migrating SQL Server Databases to Azure
  • SQL Sentry Free eBooks

R:

  • FreeComputerBooks R EBooks
  • Effective Graphs with Microsoft R Open
  • Little Book of R for Time Series (by Avril Coghlan)
  • Little Book of R for Biomedical Statistics (by Avril Coghlan)
  • Little Book of R for Multivariate Analysis (by Avril Coghlan)

Update 2016-07-21: Добавлены SQLFiddle и sql-ex.ruUpdate 2016-07-19: Добавлен russianVC, спасибо @AlanDentonUpdate 2016-07-19: Исправлены ссылки Backwards Compatibility (и добавлена для SQL Server 2016), спасибо @Tsyoma

Оператор update: обновление информации в БД

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

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

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

Запрос на обновление:

Ресурсы SQL Server

  • Блоги
    • SQL Central Blog Scripts
    • SQL Central Blog Articles
    • SQL Central Blog Stairways
    • MSSQLTips
    • BRENT OZAR scripts, videos and articles
    • Simple-talk Articles
    • SQLSentry Blog
    • Glenn Berry’s SQL Server Performance
    • Kenneth Fisher SQLStudies Blog
    • Best SQL Server Perfomance Blog
    • Weblogs SQLTeam Blogs
    • SQLMag
    • SQLShack
    • SQLPass
    • Vertabelo Blog
    • Midnightdba Blog
    • Madeiradata Blog
    • SQL Server Performance Articles
    • SQL and more with KRUTI Blog
    • SQL Authority
    • TECHNET SQL Server Blog
    • SQL Server Database Engine Blog
    • SQL Server BI Blog
    • Andy Yun SQLBeck Blog
    • Curated SQL
    • Blog do Ezequiel
    • SQLHA Blog
    • SQLSecurity Blog
    • SQL.ru SQL Server (Русский)
  • Безопасность (огромное спасибо Troy Hunt)
    • SQL injection
      • sqlmap – Инструмент для мониторинга SQL injection тестовых атак для работающего сайта
      • Drupal 7 SQL injection flaw of 2014
      • Ethical Hacking: SQL Injection – Подробрный курс по SQL Injection (Платно)
    • Exploit databases and breach coverage
      • seclists.org – Подборка уязвимостей с разных ресурсов
      • Exploit Database – Солидная подборка уязвимостей баз данных
      • PunkSPIDER – Большой список уязвимостей всех типов для веб ресурсов
      • Data Loss DB – Хороший список уязвимостей для баз данных
      • Information is Beautiful: World’s Biggest Data Breaches – Интересная географическая визуализация произошедших уязвимостей
  • Бесплатные видео
    • IDERA Resource Center
    • MSSQLTips SQL Server Webcasts and Videos
    • SQL Server Videos
    • TECHNET How do I Videos
    • Veeam Learn Microsoft SQL Server
    • MidnightDBA ITBookWorm Video
    • SQL Server Hangouts (by Boris Hristov, Cathrine Wilhelmsen)
    • Youtube russianVC (Русский)
  • Бесплатные подкасты (на английском)
    • SQL Server Radio (by Guy Glantser and Matan Yungman)
    • SQL Data Partners (by Carlos L Chacon, César Oviedo and Adrian Miranda)
    • Away from the Keyboard (by Cecil Phillip and Richie Rump)
    • RunAs Radio (by Richard Campbell and Greg Hughes)
    • People Talking Tech (by Denny Cherry)
    • NET Rocks! (by Richard Campbell and Carl Franklin)
    • SQL Down Under Podcast (by Greg Low)
    • Free sql server video tutorials for beginners (by PRAGIM Technologies)
  • Курсы
    • Бесплатные
      • Codecademy Learn SQL (Бесплатно)
      • Codecademy SQL: Table Transformation (Бесплатно)
      • Codecademy SQL: Analyzing Business Metrics (Бесплатно)
      • MVA SQL Server Courses (Бесплатно)
    • Платные
      • Lynda Courses (Платно)
      • Veeam Free Courses (Платно)
      • SQLSkills Trainings (Платно)
      • Brent Ozar Team Trainings (Платно)
      • Pluralsight Courses (Платно)
  • Обратная Совместимость
    • 2016 Backwards Compatibility
    • 2014 Backwards Compatibility
    • 2012 Backwards Compatibility
    • 2008 R2 Backwards Compatibility
    • 2008 Backwards Compatibility
    • 2005 Backwards Compatibility
  • Другое
    • SQL Server Management Studio
    • Лучшее решение для бэкапов и управления индексами Ola Maintenance Solution
    • SQL Server First Responder Kit
    • SQL# CLR functions (by Sql Quantum Leap)
    • SSIS Performance Benchmarks
    • Statistic Parser (by Richie Rump)
    • Using Excel to parse Set Statistics IO output (by Vicky Harp)
    • SQL Generator (by Richie Rump)
    • Columnstore Indexes Scripts Library (by Niko Neugebauer)
    • Stackoverflow SQL Server
    • DBA Stackexchange SQL Server
    • BIMLScript Learn resource
    • SQL Server Connection Strings
    • SQL Injection Cheat Sheet (by Ferruh Mavituna)
    • RSS Most Recent SQL Server KBs
    • Stackoverflow SQL Anti Patterns
    • SQL Server Latch Classes Library (by Paul S. Randal)
    • Azure Speed (by Blair Chen)
    • SQLFiddle
    • Practical skills of SQL language (Русский)

С этим читают