среда, 24 апреля 2019 г.

sql 2008

Microsoft® SQL Server® 2008 Express

скачать бесплатно с сайта оригинала :

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




Функция SQL FIRST ()

 Функция SQL  FIRST ()

Функция FIRST ()

Функция FIRST () возвращает первое значение выбранного столбца.

SQL FIRST () Синтаксис

SELECT FIRST(column_name) FROM table_name;
Примечание.  Функция FIRST () поддерживается только в MS Access.

SQL FIRST () Обходной путь в SQL Server, MySQL и Oracle

Синтаксис SQL Server

SELECT TOP 1 column_name FROM table_nameORDER BY column_name ASC;

пример

SELECT TOP 1 CustomerName FROM Customers
ORDER BY CustomerID ASC;

Синтаксис MySQL

SELECT column_name FROM table_name
ORDER BY column_name ASC
LIMIT 1;

пример

SELECT CustomerName FROM Customers
ORDER BY CustomerID ASC
LIMIT 1;

Синтаксис Oracle

SELECT column_name FROM table_name
WHERE ROWNUM <=1
ORDER BY column_name ASC;

пример

SELECT CustomerName FROM Customers
WHERE ROWNUM <=1
ORDER BY CustomerID ASC;

Демо База данных

В этом уроке мы будем использовать хорошо известный пример базы данных Northwind.
Ниже приведен выбор из таблицы «Клиенты»:
CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico
4Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK
5Berglunds snabbköpChristina BerglundBerguvsvägen 8LuleåS-958 22Sweden

Пример SQL FIRST ()

Следующая инструкция SQL выбирает первое значение столбца «CustomerName» из таблицы «Customers»:

пример

SELECT FIRST(CustomerName) AS FirstCustomer FROM Customers;

Основы SQL на примере задачи

Основы SQL на примере задачи

  • В этом руководстве мы рассмотрим основные sql команды на примере небольшой задачи. При прочтении желательно сидеть за консолью mysql и вводить все запросы для большей наглядности.

Постановка задачи


Дана база данных, в ней 3 таблицы следующего вида:




table1: user_id (INT(5), PRIMARY KEY), username (VARCHAR(50), INDEX)
table2: phone_id (INT(5), PRIMARY KEY), user_id (INT(5), INDEX), phone_number (INT(10), INDEX)
table3: room_id (INT(5), PRIMARY KEY), phone_id (INT(5), INDEX), room_number(INT(4) INDEX)

Необходимо выбрать номер комнаты в которой сидит пользователь с ником qux…

Подготовка данных для задачи


Для создания баз данных и таблиц используются операторы CREATE DATABASE и CREATE TABLE, соответственно (для удаления DROP DATABASE и DROP TABLE). В конце каждой команды ставится точка с запятой (;). Сначала создадим базу с именем article:

CREATE DATABASE IF NOT EXISTS article;

Мы используем ключевые слова IF NOT EXISTS для того, чтобы не возникала ошибка, если указанная база данных или таблица уже существует (в дальнейшем IF NOT EXISTS для простоты будем опускать).
Теперь необходимо создать таблицы:

CREATE TABLE `table1` (`user_id` INT(5) NOT NULL AUTO_INCREMENT, `username` VARCHAR(50), PRIMARY KEY(`user_id`), INDEX(`username`));
CREATE TABLE `table2` (`phone_id` INT(5) NOT NULL AUTO_INCREMENT, `user_id` INT(5) NOT NULL, phone_number INT(10) NOT NULL, PRIMARY KEY (`phone_id`), INDEX(`user_id`, `phone_number`));
CREATE TABLE `table3` (`room_id` INT(5) NOT NULL AUTO_INCREMENT, `phone_id` INT(5) NOT NULL, `room_number` INT(4) NOT NULL, PRIMARY KEY(`room_id`), INDEX(`phone_id`, `room_number`));

Разберём эти команды по порядку. После CREATE TABLE указывается имя таблицы, далее в скобках следуют имена полей с типами и атрибутами, перечисленные через запятую и указания ключей. Первой командой мы создаём таблицу с именем table1 и полями user_id, username. Поле user_id имеет целочисленный тип (INT) и длину 5-ть знаков, не может равняться нулю и обладает атрибутом auto_increment (при создании каждой записи, значение в этом поле создаётся автоматически и увеличивается на единицу), к тому же оно является первичным ключём. [ Первичный ключ (primary key) представляет собой один из примеров уникальных индексов и применяется для уникальной идентификации записей таблицы. Никакие из двух записей таблицы не могут иметь одинаковых значений первичного ключа. ] Поле username имеет символьный тип (длина 255 символов) и является индексом. Вторая и третья команды аналогичны первой.

Для проверки какие таблицы есть у Вас в базе можно использовать команду:

SHOW TABLES; 

Теперь необходимо добавить данные в таблицы. Для добавления записей используется оператор INSERT.

INSERT INTO table1 (username) VALUE ('foo'); 

В поле user_id мы ничего не добавляем так как оно автоматически создаётся при каждом INSERT`е (вспоминаем про магический атрибут auto_increment). После названия таблицы в скобках (далее будем называть эти скобки кортежём) указывается список полей, которым мы будем присваивать значения. После VALUE указываются сами значения. Они должны стоять на соответствующих позициях в кортеже.
Такими же командами добавляем пользователей bar, baz, qux.
Для проверки используем команду:

[1]
SELECT * FROM table1; 

Саму команду SELECT мы рассмотрим подробнее позже.
Далее заполним таблицы table2 и table3.

[2]
INSERT INTO table2 (user_id, phone_number) VALUE ('2','200'); 

Здесь полю user_id присваивается значение 2, а полю phone_number — 200. Если поменять местами названия полей или значения в кортежах, то результат измениться. Например:

[3]
INSERT INTO table2 (user_id, phone_number) VALUE ('200','2'); 

Теперь полю user_id присваивается значение 200, а phone_number – 2.
Предположим, мы ошиблись при добавлении значений (использовали команду [3] вместо [2]), не надо рваться удалять таблицу или всю базу — значение можно изменить с помощью оператора UPDATE.

UPDATE table2 SET user_id='2', phone_number='200' WHERE phone_id='1';

После SET мы указываем поля, значения которых необходимо изменить, и соответственно новые значения через знак равно. Оператор WHERE мы видим впервые. Он необходимо для наложения ограничений на запрос. В данном случае изменения будут применяться не ко всем строкам таблицы, а только к тем у которых значение поля phone_id равно '1'.
Остальные данные добавляются по аналогии (что добавлять можно посмотреть вверху страницы).

Решение


Базу данных и таблицы мы создали. Теперь можно заняться решением самой задачи. Выборка в базе данных производится с помощью оператора SELECT, с которым мы немного знакомы по команде [1]. Рассмотрим его подробнее. В общем виде он выглядит так:
SELECT названия_полей FROM названия_таблиц WHERE условие [ORDER BY, LIMIT]
Где ORDER BY и LIMIT дополнительные опции.
Попробуем применить его. Выберем все значения поля username из таблицы table1.

SELECT username FROM table1;

и отсортируем их

SELECT username FROM table1 ORDER BY username;

Как видно, ORDER BY используется для сортировки по одному из полей, указанных после оператора SELECT. По умолчанию делается возрастающая сортировка, если хотим использовать сортировку в обратном порядке то после поля необходимо добавить DESC:

SELECT username FROM table1 ORDER BY username DESC;

Так как нам нужны все значения, то оператор WHERE можно не использовать. Ещё один пример: выбираем значения полей phone_id и user_id из таблицы table2, где phone_number равен '200'.

SELECT phone_id, user_id FROM table2 WHERE phone_number=200;
SELECT phone_id, user_id FROM table2 WHERE phone_number=200 LIMIT 1, 3;

LIMIT выводит строки в указанном диапазоне (нижняя граница не включается). Если первый аргумент не указан, то он считается равным 0.

Как мы можем видить, все три наши таблицы связаны. table1 и table2 через поле user_id, а table2 и table3 через phone_id. Для того, чтобы связать их в одно целое по указанным столбцам, необходимо воспользоваться оператором JOIN. JOIN, в переводе на великий и могучий, означает «объединять», то есть собирать из нескольких кусочков единое целое. В базе данных MySQL такими «кусочками» служат поля таблиц, которые можно объединять при выборке. Объединения позволяют извлекать данные из нескольких таблиц за один запрос. В зависимости от требований к результату, MySQL позволяет производить три разных типа объединения:
1. INNER JOIN (CROSS JOIN) — внутреннее (перекрёстное) объединение
2. LEFT JOIN — левостороннее внешнее объединение
3. RIGHT JOIN — правостороннее внешнее объединение

INNER JOIN позволяет извлекать строки, которые обязательно присутсвуют во всех объединяемых таблицах.
Попробуем написать запрос:

[4]
SELECT table3.room_number FROM table1 INNER JOIN table2 USING(user_id) INNER JOIN table3 USING(phone_id) WHERE table1.username = 'qux'; 

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

SELECT table3.room_number FROM table1 INNER JOIN table2 ON table1.user_id = table2.user_id INNER JOIN table3 ON table2.phone_id = table3.phone_id WHERE table1.username = 'qux';

LEFT/RIGHT JOIN позволяют извлекать данные из таблицы, дополняя их по возможности данными из другой таблицы. Чтобы показать разницу с INNER JOIN нам сначала необходимо будет добавить ещё одно поле в таблицу table1.

INSERT INTO table1 (username) VALUE ('quuz');

А теперь используем команду [4], только заменим INNER JOIN на LEFT JOIN, а qux на quuz:

SELECT table3.room_number FROM table1 LEFT JOIN table2 USING(user_id) LEFT JOIN table3 USING(phone_id) WHERE table1.username = 'quuz';

Мы получим следующий результат:


Новый пользователь получил user_id=5. Это значение отсутствует в других таблицах, поэтому в результате мы получили NULL. При INNER JOIN результат был бы пустой, так как выводятся только значения, которые есть во всех таблицах. Здесь же таблицы table1 и table2 дополняются значением из table3, даже если его и нет.

Аппендикс


Ниже приводятся примеры команд с небольшими пояснениями:

Удалить строку с user_id равным 1 из таблицы table1:
DELETE FROM table1 WHERE user_id = 1; 

Переименовываем таблицу table1 в nya:
RENAME TABLE table1 TO nya; 

Переименовать поле user_id в id (таблица table1):
ALTER TABLE table1 CHANGE user_id id INT; 

Меняем тип и атрибут поля phone_number:
ALTER TABLE table2 MODIFY phone_number VARCHAR(100) NOT NULL; 

Просмотр описания таблицы table1:
DESCRIBE table1; 

Добавляем поле abra типа DATE:
ALTER TABLE table3 ADD abra  DATE; 

Выбираем из table3 все значения поля room_id, для которых room_number начинается с цифры 3 (% означает любое количество любых символов; like проверяет совпадение символьной строки с заданным шаблоном):
SELECT room_id FROM table3 WHERE room_number LIKE '3%';


P.S.


1. Часть материала про join`ы взята из статьи MySQL немного о JOIN'ах.
2. Задача встретилась на одном из собеседований, которые я проходил. Она достаточно синтетическая, но хорошо подходит для описания материала.
3. Описания конструкций операторов намеренно упрощены для более лёгкого восприятия новичками. Для всех остальных есть Справочное руководство по MySQL

ms sql

Скачать установщик MySQL бесплатно

Материалы для скачивания 




Оригинальный сайт: 

Тест знаний SQL - Основы

Введение в тест SQL

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

Целевая аудитория и предварительный требования

Подразумевается, что перед прохождением теста вы уже знаете основные понятия такие как "таблица", "запрос", "колонка" и т.д.
Данный тест позволит вам закрепить знания SQL. Возможно вас также заинтересует более сложный тест "Реляционные базы данных", в котором упор смещен с SQL на объекты баз данных.

Структура теста по SQL

Все вопросы данного теста условно можно разделить на следующие группы:
  • Структура таблицы: эти вопросы покрывают такие понятия как таблица, колонка, индекс, первичные и внешние ключи. В этом разделе также рассматривается создание таблиц с помощью SQL;
  • Выборка данных (select): использование конструкций сравнения (in, like, between), агрегационных функций, и прочих ключевых слов и конструкций (distinct, group by, order by) в выборках из базы данных с помощью оператора select;
  • Выражения insert/update/delete: вопросы этой тематики посвящены манипуляциям данными в базах данных;
  • Другое: вопросы этой тематики проверяют знание терминологии, аббревиатур и т.д.
Важно: Обращаем Ваше внимание, что вопросы теста составлены в соответствии со стандартом SQL 92. В противном случае версия стандарта будет явно указана в тексте вопроса.