Как составлять SQL-запросы - подробные примеры. Основные команды SQL, которые должен знать каждый программист Ms sql создание запросов
Последнее обновление: 05.07.2017
В прошлой теме в SQL Management Studio была создана простенькая база данных с одной таблицей. Теперь определим и выполним первый SQL-запрос. Для этого откроем SQL Management Studio, нажмем правой кнопкой мыши на элемент самого верхнего уровня в Object Explorer (название сервера) и в появившемся контекстном меню выберем пункт New Query :
После этого в центральной части программы откроется окно для ввода команд языка SQL.
Выполним запрос к таблице, которая была создана в прошлой теме, в частности, получим все данные из нее. База данных у нас называется university , а таблица - dbo.Students , поэтому для получения данных из таблицы введем следующий запрос:
SELECT * FROM university.dbo.Students
Оператор SELECT позволяет выбирать данные. FROM указывает источник, откуда брать данные. Фактически этим запросом мы говорим "ВЫБРАТЬ все ИЗ таблицы university.dbo.Students". Стоит отметить, что для названия таблицы используется полный ее путь с указанием базы данных и схемы.
После ввода запроса нажмем на панели инструментов на кнопку Execute , либо можно нажать на клавишу F5 .
В результате выполнения запроса в нижней части программы появится небольшая таблица, которая отобразит результаты запроса - то есть все данные из таблицы Students.
Если необходимо совершить несколько запросов к одной и той же базе данных, то мы можем использовать команду USE , чтобы зафиксировать базу данных. В этом случае при запросах к таблицам достаточно указать их имя без имени бд и схемы:
USE university SELECT * FROM Students
В данном случае мы выполняем запрос в целом для сервера, мы можем обратиться к любой базе данных на сервере. Но также мы можем выполнять запросы только в рамках конкретной базы данных. Для этого необходимо нажать правой кнопкой мыши на нужную бд и в контекстном меню выбрать пункт New Query :
Если в этом случае мы захотим выполнить запрос к выше использованной таблице Students, то нам не пришлось бы указывать в запросе название базы данных и схему, так как эти значения итак уже были бы понятны.
Язык SQL или Structured Query Language (язык структурированных запросов) предназначен для управления данными в системе реляционных баз данных (RDBMS). В этой статье будет рассказано о часто используемых командах SQL, с которыми должен быть знаком каждый программист. Этот материал идеально подойдёт для тех, кто хочет освежить свои знания об SQL перед собеседованием на работу. Для этого разберите приведённые в статье примеры и вспомните, что проходили на парах по базам данных.
Обратите внимание, что в некоторых системах баз данных требуется указывать точку с запятой в конце каждого оператора. Точка с запятой является стандартным указателем на конец каждого оператора в SQL. В примерах используется MySQL, поэтому точка с запятой требуется.
Настройка базы данных для примеров
Создайте базу данных для демонстрации работы команд. Для работы вам понадобится скачать два файла: DLL.sql и InsertStatements.sql . После этого откройте терминал и войдите в консоль MySQL с помощью следующей команды (статья предполагает, что MySQL уже установлен в системе):
Mysql -u root -p
Затем введите пароль.
Выполните следующую команду. Назовём базу данных «university»:
CREATE DATABASE university;
USE university;
SOURCE Может понадобиться создать ограничения для определённых столбцов в таблице. При создании таблицы можно задать следующие ограничения: Можно задать больше одного первичного ключа. В этом случае получится составной первичный ключ. Создайте таблицу «instructor»: CREATE TABLE instructor (ID CHAR(5),
name VARCHAR(20) NOT NULL,
dept_name VARCHAR(20),
salary NUMERIC(8,2),
PRIMARY KEY (ID),
FOREIGN KEY (dept_name) REFERENCES department(dept_name));
Можно просмотреть различные сведения (тип значений, является ключом или нет) о столбцах таблицы следующей командой: DESCRIBE При добавлении данных в каждый столбец таблицы не требуется указывать названия столбцов. INSERT INTO SELECT используется для получения данных из определённой таблицы: SELECT Следующей командой можно вывести все данные из таблицы: SELECT * FROM В столбцах таблицы могут содержаться повторяющиеся данные. Используйте SELECT DISTINCT для получения только неповторяющихся данных. SELECT DISTINCT Можно использовать ключевое слово WHERE в SELECT для указания условий в запросе: SELECT В запросе можно задавать следующие условия: Попробуйте выполнить следующие команды. Обратите внимание на условия, заданные в WHERE: SELECT * FROM course WHERE dept_name=’Comp. Sci.’;
SELECT * FROM course WHERE credits>3;
SELECT * FROM course WHERE dept_name="Comp. Sci." AND credits>3;
Оператор GROUP BY часто используется с агрегатными функциями, такими как COUNT , MAX , MIN , SUM и AVG , для группировки выходных значений. SELECT Выведем количество курсов для каждого факультета: SELECT COUNT(course_id), dept_name
FROM course
GROUP BY dept_name;
Ключевое слово HAVING было добавлено в SQL потому, что WHERE не может быть использовано для работы с агрегатными функциями. SELECT Выведем список факультетов, у которых более одного курса: SELECT COUNT(course_id), dept_name
FROM course
GROUP BY dept_name
HAVING COUNT(course_id)>1;
ORDER BY используется для сортировки результатов запроса по убыванию или возрастанию. ORDER BY отсортирует по возрастанию, если не будет указан способ сортировки ASC или DESC . SELECT Выведем список курсов по возрастанию и убыванию количества кредитов: SELECT * FROM course ORDER BY credits;
SELECT * FROM course ORDER BY credits DESC;
BETWEEN используется для выбора значений данных из определённого промежутка. Могут быть использованы числовые и текстовые значения, а также даты. SELECT Выведем список инструкторов, чья зарплата больше 50 000, но меньше 100 000: SELECT * FROM instructor
WHERE salary BETWEEN 50000 AND 100000;
Оператор LIKE используется в WHERE , чтобы задать шаблон поиска похожего значения. Есть два свободных оператора, которые используются в LIKE: Выведем список курсов, в имени которых содержится «to» , и список курсов, название которых начинается с «CS-»: SELECT * FROM course WHERE title LIKE ‘%to%’;
SELECT * FROM course WHERE course_id LIKE "CS-___";
С помощью IN можно указать несколько значений для оператора WHERE: SELECT Выведем список студентов с направлений Comp. Sci., Physics и Elec. Eng.: SELECT * FROM student
WHERE dept_name IN (‘Comp. Sci.’, ‘Physics’, ‘Elec. Eng.’);
JOIN используется для связи двух или более таблиц с помощью общих атрибутов внутри них. На изображении ниже показаны различные способы объединения в SQL. Обратите внимание на разницу между левым внешним объединением и правым внешним объединением: SELECT Выведем список всех курсов и соответствующую информацию о факультетах: SELECT * FROM course
JOIN department
ON course.dept_name=department.dept_name;
Выведем список всех обязательных курсов и детали о них: SELECT prereq.course_id, title, dept_name, credits, prereq_id
FROM prereq
LEFT OUTER JOIN course
ON prereq.course_id=course.course_id;
Выведем список всех курсов вне зависимости от того, обязательны они или нет: SELECT course.course_id, title, dept_name, credits, prereq_id
FROM prereq
RIGHT OUTER JOIN course
ON prereq.course_id=course.course_id;
View - это виртуальная таблица SQL, созданная в результате выполнения выражения. Она содержит строки и столбцы и очень похожа на обычную SQL-таблицу. View всегда показывает самую свежую информацию из базы данных. Создадим view , состоящую из курсов с 3 кредитами: Эти функции используются для получения совокупного результата, относящегося к рассматриваемым данным. Ниже приведены общеупотребительные агрегированные функции: Вложенные подзапросы - это SQL-запросы, которые включают выражения SELECT , FROM и WHERE , вложенные в другой запрос. Найдём курсы, которые преподавались осенью 2009 и весной 2010 годов: SELECT DISTINCT course_id
FROM section
WHERE semester = ‘Fall’ AND year= 2009 AND course_id IN (SELECT course_id
FROM section
WHERE semester = ‘Spring’ AND year= 2010);
Запросы написаны без экранирующих кавычек, так как у MySQL
, MS SQL
и PostGree
они разные. Получаем список записей: ВСЕ страны и их население. Название нужных полей указываются через запятую. SELECT *
FROM table_name
* обозначает все поля. То есть, будут показы АБСОЛЮТНО ВСЕ
поля данных. Получаем список записей: страны, где находятся наши пользователи. Пользователей может быть много из одной страны. В этом случае это ваш запрос. Получаем список записей: страны, где количество людей больше 100 000 000. Получаем список записей: города в алфавитном порядке. В начале А, в конце Я. SELECT
id,
city_title
FROM table_name
ORDER BY city_title DESC
Получаем список записей: города в обратном (DESC
) порядке. В начале Я, в конце А. Получаем число (количество) записей в таблице. В данном случае НЕТ списка записей. Получаем 2 (вторую) и 3 (третью) запись из таблицы. Запрос полезен при создании навигации на WEB страницах. Вывод записей из таблицы по заданному условию с использованием логических операторов. Получаем список записей: города из России И
имеют доступ к нефти. Когда используется оператор AND
, то должны совпадать оба условия. Получаем список записей: все города из России ИЛИ
США. Когда используется оператор OR
, то должно совпадать ХОТЯ БЫ одно условие. Получаем список записей: все пользователи из России И
сделавших НЕ МЕНЬШЕ
7 комментариев. Получаем список записей: все пользователи, которые проживают в (IN
) (России, или Болгарии, или Китая) Получаем список записей: все пользователи, которые проживают не в (NOT IN
) (России или Китае). Получаем список записей: все пользователи, где status не определен. NULL это отдельная тема и поэтому она проверяется отдельно. SELECT
id,
user_login
FROM table_name
WHERE state IS NOT NULL
Получаем список записей: все пользователи, где status определен (НЕ НОЛЬ). Получаем список записей: пользователи, у которых фамилия начинается с комбинации «Иван». Знак % означает ЛЮБОЕ количество ЛЮБЫХ символов. Чтобы найти знак % требуется использовать экранирование «Иван\%». Получаем список записей: пользователи, которые получает зарплату от 25000 до 50000 включительно. Логических операторов ОЧЕНЬ много, поэтому детально изучите документацию по SQL серверу. Получаем список записей: пользователи, которые зарегистрированы в системе, а также те пользователи, которые зарегистрированы на форуме отдельно. Оператором UNION можно объединить несколько запросов. UNION действует как SELECT DISTINCT, то есть отбрасывает повторяющиеся значения. Чтобы получить абсолютно все записи, нужно использовать оператор UNION ALL. Это самые популярные команды. Рекомендуется, где это возможно, использовать для подсчета именно SQL запросы такого рода, так как ни одна среда программирования не сравнится в скорости обработки данных, чем сам SQL сервер при обработке своих же данных. Получаем список записей: с названием континента и с суммой площадей всех их стран. То есть, если есть справочник стран, где у каждой страны записана ее площадь, то с помощью конструкции GROUP BY можно узнать размер каждого континента (на основе группировки по континентам). Получаем список записей: заказы от покупателей, которые проживают только в Тюмени. На самом деле, при правильном запроектированной базе данных данного вида запрос является самым частым, поэтому в MySQL был введен специальный оператор, который работает в разы быстрее, чем выше написанный код. SELECT
o.order_no,
o.amount_paid,
z.company
FROM orders AS o
LEFT JOIN customer AS z ON (z.custno=o.custno)
Получаем одну запись: информацию о пользователе с максимальным окладом. Внимание!
Вложенные подзапросы являются одним из самых узких мест в SQL серверах. Совместно со своей гибкостью и мощностью, они также существенно увеличивают нагрузку на сервер. Что приводит к катастрофическому замедлению работы других пользователей. Очень часты случаи рекурсивных вызовов при вложенных запросах. Поэтому настоятельно рекомендую НЕ использовать вложенные запросы, а разбивать их на более мелкие. Либо использовать вышеописанную комбинацию LEFT JOIN. Помимо этого данного вида запросы являются повышенным очагом нарушения безопасности. Если решили использовать вложенные подзапросы, то проектировать их нужно очень внимательно и первоначальные запуски сделать на копиях баз (тестовые базы). Инструкция INSERT
позволяют вставлять записи в таблицу. Простыми словами, создать строчку с данными в таблице. В таблицу «table_name
» будет вставлено 2 (два) пользователя сразу. В этом есть свои преимущества и недостатки. В таблице «table_name
» в записи с номером id=1, будет изменены значения полей user_login и user_surname на указанные значения. В таблице table_name будет удалена запись с id номером 3. Данный материал является короткой справкой для повседневной работы и не претендует на супер мега авторитетный источник, коим является первоисточник SQL запросов той или иной базы данных. Табличными выражениями
называются подзапросы, которые используются там, где ожидается наличие таблицы. Существует два типа табличных выражений: производные таблицы; обобщенные табличные выражения. Эти две формы табличных выражений рассматриваются в следующих подразделах. Производная таблица (derived table)
- это табличное выражение, входящее в предложение FROM запроса. Производные таблицы можно применять в тех случаях, когда использование псевдонимов столбцов не представляется возможным, поскольку транслятор SQL обрабатывает другое предложение до того, как псевдоним станет известным. В примере ниже показана попытка использовать псевдоним столбца в ситуации, когда другое предложение обрабатывается до того, как станет известным псевдоним: USE SampleDb;
SELECT MONTH(EnterDate) as enter_month
FROM Works_on
GROUP BY enter_month; Попытка выполнить этот запрос выдаст следующее сообщение об ошибке: Msg 207, Level 16, State 1, Line 5
Invalid column name "enter_month".
(Сообщение 207: уровень 16, состояние 1, строка 5
Недопустимое имя столбца enter_month) Причиной ошибки является то обстоятельство, что предложение GROUP BY обрабатывается до обработки соответствующего списка инструкции SELECT, и при обработке этой группы псевдоним столбца enter_month неизвестен. Эту проблему можно решить, используя производную таблицу, содержащую предшествующий запрос (без предложения GROUP BY), поскольку предложение FROM исполняется перед предложением GROUP BY: USE SampleDb;
SELECT enter_month
FROM (SELECT MONTH(EnterDate) as enter_month
FROM Works_on)
AS m
GROUP BY enter_month; Результат выполнения этого запроса будет таким: Обычно табличное выражение можно разместить в любом месте инструкции SELECT, где может появиться имя таблицы. (Результатом табличного выражения всегда является таблица или, в особых случаях, выражение.) В примере ниже показывается использование табличного выражения в списке выбора инструкции SELECT: Результат выполнения этого запроса: Обобщенным табличным выражением (OTB) (Common Table Expression - сокращенно CTE)
называется именованное табличное выражение, поддерживаемое языком Transact-SQL. Обобщенные табличные выражения используются в следующих двух типах запросов: нерекурсивных; рекурсивных. Эти два типа запросов рассматриваются в следующих далее разделах. Нерекурсивную форму OTB можно использовать в качестве альтернативы производным таблицам и представлениям. Обычно OTB определяется посредством предложения WITH
и дополнительного запроса, который ссылается на имя, используемое в предложении WITH. В языке Transact-SQL значение ключевого слова WITH неоднозначно. Чтобы избежать неопределенности, инструкцию, предшествующую оператору WITH, следует завершать точкой с запятой. USE AdventureWorks2012;
SELECT SalesOrderID
FROM Sales.SalesOrderHeader
WHERE TotalDue > (SELECT AVG(TotalDue)
FROM Sales.SalesOrderHeader
WHERE YEAR(OrderDate) = "2005")
AND Freight > (SELECT AVG(TotalDue)
FROM Sales.SalesOrderHeader
WHERE YEAR(OrderDate) = "2005")/2.5; Запрос в этом примере выбирает заказы, чьи общие суммы налогов (TotalDue) большие, чем среднее значение по всем налогам, и плата за перевозку (Freight) которых больше чем 40% среднего значения налогов. Основным свойством этого запроса является его объемистость, поскольку вложенный запрос требуется писать дважды. Одним из возможных способов уменьшить объем конструкции запроса будет создать представление, содержащее вложенный запрос. Но это решение несколько сложно, поскольку требует создания представления, а потом его удаления после окончания выполнения запроса. Лучшим подходом будет создать OTB. В примере ниже показывается использование нерекурсивного OTB, которое сокращает определение запроса, приведенного выше: USE AdventureWorks2012;
WITH price_calc(year_2005) AS
(SELECT AVG(TotalDue)
FROM Sales.SalesOrderHeader
WHERE YEAR(OrderDate) = "2005")
SELECT SalesOrderID
FROM Sales.SalesOrderHeader
WHERE TotalDue > (SELECT year_2005 FROM price_calc)
AND Freight > (SELECT year_2005 FROM price_calc)/2.5; Синтаксис предложения WITH в нерекурсивных запросах имеет следующий вид: Параметр cte_name представляет имя OTB, которое определяет результирующую таблицу, а параметр column_list - список столбцов табличного выражения. (В примере выше OTB называется price_calc и имеет один столбец - year_2005.) Параметр inner_query представляет инструкцию SELECT, которая определяет результирующий набор соответствующего табличного выражения. После этого определенное табличное выражение можно использовать во внешнем запросе outer_query. (Внешний запрос в примере выше использует OTB price_calc и ее столбец year_2005, чтобы упростить употребляющийся дважды вложенный запрос.) В этом разделе представляется материал повышенной сложности. Поэтому при первом его чтении рекомендуется его пропустить и вернуться к нему позже. Посредством OTB можно реализовывать рекурсии, поскольку OTB могут содержать ссылки на самих себя. Основной синтаксис OTB для рекурсивного запроса выглядит таким образом: Параметры cte_name и column_list имеют такое же значение, как и в OTB для нерекурсивных запросов. Тело предложения WITH состоит из двух запросов, объединенных оператором UNION ALL
. Первый запрос вызывается только один раз, и он начинает накапливать результат рекурсии. Первый операнд оператора UNION ALL не ссылается на OTB. Этот запрос называется опорным запросом или источником. Второй запрос содержит ссылку на OTB и представляет ее рекурсивную часть. Вследствие этого он называется рекурсивным членом. В первом вызове рекурсивной части ссылка на OTB представляет результат опорного запроса. Рекурсивный член использует результат первого вызова запроса. После этого система снова вызывает рекурсивную часть. Вызов рекурсивного члена прекращается, когда предыдущий его вызов возвращает пустой результирующий набор. Оператор UNION ALL соединяет накопившиеся на данный момент строки, а также дополнительные строки, добавленные текущим вызовом рекурсивного члена. (Наличие оператора UNION ALL означает, что повторяющиеся строки не будут удалены из результата.) Наконец, параметр outer_query определяет внешний запрос, который использует OTB для получения всех вызовов объединения обеих членов. Для демонстрации рекурсивной формы OTB мы используем таблицу Airplane, определенную и заполненную кодом, показанным в примере ниже: USE SampleDb;
CREATE TABLE Airplane (ContainingAssembly VARCHAR(10),
ContainedAssembly VARCHAR(10),
QuantityContained INT,
UnitCost DECIMAL (6,2));
INSERT INTO Airplane VALUES ("Самолет", "Фюзеляж",1, 10);
INSERT INTO Airplane VALUES ("Самолет", "Крылья", 1, 11);
INSERT INTO Airplane VALUES ("Самолет", "Хвост",1, 12);
INSERT INTO Airplane VALUES ("Фюзеляж", "Салон", 1, 13);
INSERT INTO Airplane VALUES ("Фюзеляж", "Кабина", 1, 14);
INSERT INTO Airplane VALUES ("Фюзеляж", "Нос",1, 15);
INSERT INTO Airplane VALUES ("Салон", NULL, 1,13);
INSERT INTO Airplane VALUES ("Кабина", NULL, 1, 14);
INSERT INTO Airplane VALUES ("Нос", NULL, 1, 15);
INSERT INTO Airplane VALUES ("Крылья", NULL,2, 11);
INSERT INTO Airplane VALUES ("Хвост", NULL, 1, 12); Таблица Airplane состоит из четырех столбцов. Столбец ContainingAssembly определяет сборку, а столбец ContainedAssembly - части (одна за другой), которые составляют соответствующую сборку. На рисунке ниже приведена графическая иллюстрация возможного вида самолета и его составляющих частей: Таблица Airplane состоит из следующих 11 строк: В примере ниже показано применение предложения WITH для определения запроса, который вычисляет общую стоимость каждой сборки: USE SampleDb;
WITH list_of_parts(assembly1, quantity, cost) AS
(SELECT ContainingAssembly, QuantityContained, UnitCost
FROM Airplane
WHERE ContainedAssembly IS NULL
UNION ALL
SELECT a.ContainingAssembly, a.QuantityContained,
CAST(l.quantity * l.cost AS DECIMAL(6,2))
FROM list_of_parts l, Airplane a
WHERE l.assembly1 = a.ContainedAssembly)
SELECT assembly1 "Деталь", quantity "Кол-во", cost "Цена"
FROM list_of_parts; Предложение WITH определяет список OTB с именем list_of_parts, состоящий из трех столбцов: assembly1, quantity и cost. Первая инструкция SELECT в примере вызывается только один раз, чтобы сохранить результаты первого шага процесса рекурсии. Инструкция SELECT в последней строке примера отображает следующий результат. Каждый из нас регулярно сталкивается и пользуется различными базами данных. Когда мы выбираем адрес электронной почты, мы работаем с базой данных. Базы данных используют поисковые сервисы, банки для хранения данных о клиентах и т.д. Но, несмотря на постоянное использование баз данных, даже для многих разработчиков программных систем остается много «белых пятен» из-за разного толкования одних и тех же терминов. Мы дадим краткое определение основных терминов баз данных перед рассмотрением языка SQL. Итак. База данных
-
файл или набор файлов для хранения упорядоченных структур данных и их взаимосвязей. Очень часто базой данных называют систему управления - это только хранилище информации в определенном формате и может работать с различными СУБД. Таблица
-
представим себе папку, в которой хранятся документы, сгруппированные по определенному признаку, например список заказов за последний месяц. Это и есть таблица в компьютерной Отдельная таблица имеет свое уникальное имя. Тип данных
-
вид информации, разрешенной для хранения в отдельном столбце или строке. Это могут быть числа или текст определенного формата. Столбец и строка
- все мы работали с электронными таблицами, в которых также присутствуют строки и столбцы. Любая реляционная база данных работает с таблицами аналогичным образом. Строки иногда называют записями. Первичный ключ
- каждая строка таблицы может иметь один или несколько столбцов для ее уникальной идентификации. Без первичного ключа очень трудно производить обновление, изменение и удаление нужных строк. SQL
(англ. - язык структурированных запросов) был разработан только для работы с базами данных и в настоящий момент является стандартом для всех популярных СУБД. Синтаксис языка состоит из небольшого количества операторов и прост в изучении. Но, несмотря на внешнюю простоту, он позволяет создание sql запросов для сложных операций с БД любого размера. С 1992 г. существует общепринятый стандарт, называемый ANSI SQL. Он определяет базовый синтаксис и функции операторов и поддерживается всеми лидерами рынка СУБД, такими как ORACLE Рассмотреть все возможности языка в одной небольшой статье невозможно, поэтому мы кратко рассмотрим только основные SQL запросы. Примеры наглядно показывают простоту и возможности языка: Все столбцы в таблице базы данных хранят один тип данных. Типы данных в SQL такие же, как и в других языках программирования. Создавать новые базы, таблицы и другие запросы в SQL можно двумя способами: Создается новая база данных оператором CREATE DATABASE <наименование базы данных>;
. Как видим, синтаксис прост и лаконичен. Таблицы внутри базы данных создаем оператором CREATE TABLE со следующими параметрами: В качестве примера создадим таблицу Commodity со следующими столбцами: Создаем таблицу: CREATE TABLE Commodity
(commodity_id CHAR(15) NOT NULL,
vendor_id CHAR(15) NOT NULL,
commodity_name CHAR(254) NULL,
commodity_price DECIMAL(8,2) NULL,
commodity_desc VARCHAR(1000) NULL);
Таблица состоит из пяти столбцов. После наименования идет тип данных, столбцы разделяются запятыми. Значение столбца может принимать пустые значения (NULL) или должно быть обязательно заполнено (NOT NULL), и это определяется при создании таблицы. Оператор выборки данных - самые часто используемые SQL запросы. Для получения информации необходимо указать, что мы хотим выбрать из такой таблицы. Вначале простой пример: SELECT commodity_name FROM Commodity
После оператора SELECT указываем имя столбца для получения информации, а FROM определяет таблицу. Результатом выполнения запроса будут все строки таблицы со значениями Commodity_name в том порядке, в котором они были внесены в базу данных т.е. без всякой сортировки. Для упорядочивания результата используется дополнительный оператор ORDER BY. Для запроса по нескольким полям перечисляем их через запятую, как в следующем примере: SELECT commodity_id, commodity_name, commodity_price FROM Commodity
Есть возможность получить как результат запроса значение всех столбцов строки. Для этого используется знак «*»: SELECT * FROM Commodity
Для добавления строки в таблицу используются SQL запросы с оператором INSERT. Добавление может производиться тремя способами: Для добавления полной строки необходимо указать имя таблицы и значения столбцов (полей) новой строки. Приведем пример: INSERT INTO Commodity VALUES("106 ", "50", "Coca-Cola", "1.68", "No Alcogol ,)
Пример добавляет в таблицу новый товар. Значения указываются после VALUES для каждого столбца. Если нет соответствующего значения для столбца, то необходимо указывать NULL. Столбцы заполняются значениями в порядке, указанном при создании таблицы. В случае добавления только части строки необходимо явно указать наименования столбцов, как в примере: INSERT INTO Commodity (commodity_id, vendor_id, commodity_name)
VALUES("106 ", ‘50", "Coca-Cola",)
Мы ввели только идентификаторы товара, поставщика и его наименование, а остальные поля отставили пустыми. В основном INSERT используется для добавления строк, но может использоваться и для добавления результатов оператора SELECT. Для изменения информации в полях таблицы базы данных необходимо использовать оператор UPDATE. Оператор может применяться двумя способами: UPDATE состоит из трех основных элементов: Рассмотрим пример. Допустим, у товара с ID=106 изменилась стоимость, поэтому эту строку необходимо обновить. Пишем следующий оператор: UPDATE Commodity SET commodity_price = "3.2" WHERE commodity_id = "106"
Мы указали имя таблицы, в нашем случае Commodity, где будет производиться обновление, затем после SET - новое значение столбца и нашли нужную запись, указав в WHERE нужное значение ID. Для изменения нескольких столбцов после оператора SET указываются несколько пар столбец-значение, разделенных запятыми. Смотрим пример, в котором обновляется наименование и цена товара: UPDATE Commodity SET commodity_name=’Fanta’, commodity_price = "3.2" WHERE commodity_id = "106"
Для удаления информации в столбце можно присвоить ему значение NULL, если это позволяет структура таблицы. Необходимо помнить, что NULL - это именно «никакое» значение, а не нуль в виде текста или числа. Удалим описание товара: UPDATE Commodity SET commodity_desc = NULL WHERE commodity_id = "106"
SQL запросы на удаление строк в таблице выполняются оператором DELETE. Есть два варианта использования: Пример удаления одной строки из таблицы: DELETE FROM Commodity WHERE commodity_id = "106"
После DELETE FROM указываем имя таблицы, в которой будут удаляться строки. Оператор WHERE содержит условие, по которому будут выбираться строки для удаления. В примере мы удаляем строку товара с ID=106. Указывать WHERE очень важно т.к. пропуск этого оператора приведт к удалению всех строк в таблице. Это относится и к изменению значения полей. В операторе DELETE не указываются наименования столбцов и метасимволы. Он полностью удаляет строки, а удалить отдельный столбец он не может. Обычно используется в интерактивном режиме для создания таблиц, баз данных, для управления, изменения, анализа данных в базе данных и с целью внедрить запросы SQL Access через удобный интерактивный конструктор запросов (Query Designer), используя который можно построить и немедленно выполнить операторов SQL любой сложности. Также поддерживается режим доступа к серверу, при котором СУБД Access может использоваться как генератор SQL-запросов к любому ODBC источнику данных. Эта возможность позволяет приложениям Access взаимодействовать с любого формата. Поскольку SQL запросы не имеют всех возможностей процедурных языков программирования, таких как циклы, ветвления и т.д., производители СУБД разрабатывают свой вариант SQL с расширенными возможностями. В первую очередь это поддержка хранимых процедур и стандартных операторов процедурных языков. Наиболее распространенные диалекты языка: СУБД MySQL распространяется под свободной лицензией GNU General Public License. Имеется коммерческая лицензия с возможностью разработки заказных модулей. Как составная часть входит в наиболее популярные сборки Интернет-серверов, таких как XAMPP, WAMP и LAMP, и является самой популярной СУБД для разработки приложений в сети Интернет. Была разработана компанией Sun Microsystems и в настоящий момент поддерживается корпорацией Oracle. Поддерживаются базы данных размером до 64 терабайт, стандарт синтаксиса SQL:2003, репликация баз данных и облачных сервисов.Команды для работы с базами данных
1. Просмотр доступных баз данных
SHOW DATABASES;
2. Создание новой базы данных
CREATE DATABASE;
3. Выбор базы данных для использования
USE 4. Импорт SQL-команд из файла.sql
SOURCE 5. Удаление базы данных
DROP DATABASE Работа с таблицами
6. Просмотр таблиц, доступных в базе данных
SHOW TABLES;
7. Создание новой таблицы
CREATE TABLE Ограничения целостности при использовании CREATE TABLE
Пример
8. Сведения о таблице
9. Добавление данных в таблицу
INSERT INTO 10. Обновление данных таблицы
UPDATE 11. Удаление всех данных из таблицы
DELETE FROM 12. Удаление таблицы
DROP TABLE Команды для создания запросов
13. SELECT
14. SELECT DISTINCT
15. WHERE
Пример
16. GROUP BY
Пример
17. HAVING
Пример
18. ORDER BY
Пример
19. BETWEEN
Пример
20. LIKE
SELECT Пример
21. IN
Пример
22. JOIN
Пример 1
Пример 2
Пример 3
23. View
Создание
CREATE VIEW Удаление
DROP VIEW Пример
24. Агрегатные функции
25. Вложенные подзапросы
Пример
SQL запрос: получение указанных (нужных) полей из таблицы
SELECT
id,
country_title,
count_people
FROM table_name
SQL запрос: вывод записей из таблицы исключая дубликаты
SELECT DISTINCT
country_title
FROM table_name
SQL запрос: вывод записей из таблицы по заданному условию
SELECT
id,
country_title,
city_title
FROM table_name
WHERE count_people>100000000
SQL запрос: вывод записей из таблицы с упорядочиванием
SELECT
id,
city_title
FROM table_name
ORDER BY city_title
SQL запрос: подсчет количества записей
SELECT
COUNT(*)
FROM table_name
SQL запрос: вывод нужного диапазона записей
SELECT *
FROM table_name
LIMIT 2, 3
SQL запросы с условиями
SQL запрос: конструкция AND (И)
SELECT
id,
city_title
FROM table_name
WHERE country="Россия" AND oil=1
SQL запрос: конструкция OR (ИЛИ)
SELECT
id,
city_title
FROM table_name
WHERE country="Россия" OR country="США"
SQL запрос: конструкция AND NOT (И НЕ)
SELECT
id,
user_login
FROM table_name
WHERE country="Россия" AND NOT count_comments<7
SQL запрос: конструкция IN (В)
SELECT
id,
user_login
FROM table_name
WHERE country IN ("Россия", "Болгария", "Китай")
SQL запрос: конструкция NOT IN (НЕ В)
SELECT
id,
user_login
FROM table_name
WHERE country NOT IN ("Россия","Китай")
SQL запрос: конструкция IS NULL (пустые или НЕ пустые значения)
SELECT
id,
user_login
FROM table_name
WHERE status IS NULL
SQL запрос: конструкция LIKE
SELECT
id,
user_login
FROM table_name
WHERE surname LIKE "Иван%"
SQL запрос: конструкция BETWEEN
SELECT
id,
user_login
FROM table_name
WHERE salary BETWEEN 25000 AND 50000
Сложные SQL запросы
SQL запрос: объединение нескольких запросов
(SELECT id, user_login
FROM table_name1)
UNION
(SELECT id, user_login
FROM table_name2)
SQL запрос: подсчеты значений поля MAX, MIN, SUM, AVG, COUNT
Вывод одного, максимального значения счетчика в таблице:
SELECT
MAX(counter)
FROM table_name
Вывод одного, минимальный значения счетчика в таблице:
SELECT
MIN(counter)
FROM table_name
Вывод суммы всех значений счетчиков в таблице:
SELECT
SUM(counter)
FROM table_name
Вывод среднего значения счетчика в таблице:
SELECT
AVG(counter)
FROM table_name
Вывод количества счетчиков в таблице:
SELECT
COUNT(counter)
FROM table_name
Вывод количества счетчиков в цехе №1, в таблице:
SELECT
COUNT(counter)
FROM table_name
WHERE office="Цех №1"
SQL запрос: группировка записей
SELECT
continent,
SUM(country_area)
FROM country
GROUP BY continent
SQL запрос: использование нескольких таблиц через алиас (alias)
SELECT
o.order_no,
o.amount_paid,
c.company
FROM orders AS o, customer AS с
WHERE o.custno=c.custno AND c.city="Тюмень"
Вложенные подзапросы
SELECT *
FROM table_name
WHERE salary=(SELECT MAX(salary) FROM employee)
SQL запросы изменяющие данные
SQL запрос: INSERT
Вариант №1. Часто используется инструкция:
INSERT INTO table_name
(id, user_login)
VALUES
(1, "ivanov"),
(2, "petrov")
Вариант №2. Удобнее использовать стиль:
INSERT table_name SET
id=1,
user_login="ivanov";
INSERT table_name SET
id=2,
user_login="petrov";
Основные недостатки:
Основные преимущества:
SQL запрос: UPDATE
UPDATE table_name SET
user_login="ivanov",
user_surname="Иванов"
WHERE id=1
SQL запрос: DELETE
DELETE FROM table_name
WHERE id=3
Производные таблицы
Обобщенные табличные выражения
OTB и нерекурсивные запросы
OTB и рекурсивные запросы
Что такое SQL?
Типы данных SQL
Создаем таблицы и базы данных
Выборка данных из таблицы
Добавляем строку
Добавление результатов запроса
Изменение данных
Удаление строк
Использование SQL в Microsoft Access
Расширения SQL
SQL в Интернет