что возвращает запрос select from students
SQL SELECT
Не многие владеют в совершенстве языками, а если говорит о языках программирования, то большая часть знает о них только то, что изучали в школе. Однако в полной мере об используемых языках, для управления компьютерными программами, можно почерпнуть только при глубоком изучении материала, в высших учебных заведениях и путем самостоятельного обучения.
Огромное количество программ позволяют выбирать данные для финансовых и других отчетов в считанные минуты. Одна из самых простых и к тому же удобных — SQL SELECT. При знакомстве с ней любой программист сможет без проблем рассказать о том, что SQL – это язык программирования, помогающий структурировать все необходимые запросы, а SELECT – это команда, используемая в комбинации с SQL. Безусловно, в сочетании SQL SELECT позволяют проводить все необходимые действия, изложенные на примерах данной страницы. В связи, с чем нижеизложенный материал более подробно и наглядно характеризует возможности SQL SELECT. Поэтому, установив программу, используемую SQL SELECT, вы сэкономите время своих сотрудников, а также деньги предприятия.
С помощью запроса SQL SELECT можно выполнять выборку данных из таблицы. Следующие примеры запросов SQL SELECT используются в таких SQL СУБД как MySQL, Oracle, Access и других.
Для выполнения следующих SQL запросов SELECT нам необходимо прежде всего изучить структуру таблиц.
Имя таблицы | Имя поля | Тип поля | Примечание |
---|---|---|---|
FAKULTET | KOD_F | Integer | PRIMARY KEY |
NAZV_F | Char, 30 | ||
SPEC | KOD_S | Integer | PRIMARY KEY |
KOD_F | Integer | ||
NAZV_S | Char, 50 | ||
STUDENT | KOD_STUD | Integer | PRIMARY KEY |
KOD_S | Integer | ||
FAM | Char, 30 | ||
IM | Char, 15 | ||
OT | Char, 15 | ||
STIP | Decimal, 3 | ||
BALL | Decimal, 3 |
Примеры запросов SELECT на языке SQL:
SQL Пример SELECT №1
Выбрать студентов, получающих стипендию, равную 150.
SELECT fname FROM STUDENT WHERE STIP=150;
С помощью данного SQL запроса SELECT выбираются все значения из таблицы STUDENT, поле STIP которых строго равно 150.
SQL Пример SELECT №2
Выбрать студентов, имеющих балл от 82 до 90. Студенты должны быть отсортированы в порядке убывания балла.
SELECT FAM FROM STUDENT WHERE BALL BETWEEN 81 AND 91 ORDER BY BALL DESC;
Как видно из SQL примера, чтобы выбрать студентов, которые имеют балл от 82 до 90, мы используем условие BETWEEN. Чтобы отсортировать в убывающем порядке DESC.
SQL Пример SELECT №3
Выбрать студентов, фамилии которых начинаются с буквы «А».
Для того, чтобы выбрать фамилии, начинающиеся с буквы «А», мы используем оператор SQL LIKE для поиска значений по образцу.
SQL SELECT Пример №4
Подсчитать средний балл на каждом факультете.
SELECT NAZV_F As Название, ROUND(AVG(BALL), 2) As СредБалл FROM FAKULTET, SPEC, STUDENT WHERE STUDENT.KOD_S=SPEC.KOD_S AND SPEC.KOD_F=FAKULTET.KOD_F GROUP BY NAZV_F;
Пример запроса SQL SELECT показывает нам использование функции SQL AVG для вычисления среднего значения, ROUND для округления значения, раздела GROUP BY для группировки столбцов.
SQL SELECT. Пример №5.
Подсчитать количество студентов, обучающихся на каждом факультете. Вывести в запросе название факультета, комментарий – «обучается», количество студентов, комментарий «человек».
SELECT NAZV_F||’ обучается ‘||COUNT(STUDENT.BALL)||’ человек’ As CountStudOnFakultet FROM FAKULTET, SPEC, STUDENT WHERE STUDENT.KOD_S=SPEC.KOD_S AND SPEC.KOD_F=FAKULTET.KOD_F GROUP BY NAZV_F;
SQL SELECT. Пример №6.
Упорядочить студентов по факультетам, специальностям, фамилиям.
SELECT NAZV_F, NAZV_S, FAM FROM FAKULTET, SPEC, STUDENT WHERE STUDENT.KOD_S=SPEC.KOD_S AND SPEC.KOD_F=FAKULTET.KOD_F ORDER BY NAZV_F, NAZV_S, FAM;
SQL SELECT. Пример №7.
Определить, кто учится на специальности, к которой относится студент «Асанов».
SELECT FAM FROM STUDENT WHERE STUDENT.KOD_S=(SELECT KOD_S FROM STUDENT WHERE FAM=’Асанов’);
В данном SQL примере мы используем подзапрос SQL SELECT, который возвращает код специальности, на которой учится студент по фамилии Асанов.
SQL SELECT. Пример №8.
Показать, какие специальности встречаются в таблице STUDENT. Дубликаты исключить. Вывести в запросе названия специальностей.
SELECT DISTINCT NAZV_S FROM SPEC, STUDENT WHERE STUDENT.KOD_S=SPEC.KOD_S;
Здесь мы с помощью SQL ограничения DISTINCT выводим только различные значения.
SQL SELECT. Пример №9.
Извлечь из базы данных все данные по сотрудникам, принятым на работу после 01.01.1980 г. в формате “Сотрудник принят на работу ”.
SELECT CONCAT(CONCAT(CONCAT(‘Сотрудник ‘, sname), CONCAT(SUBSTR(fname, 0, 1), SUBSTR(otch, 0, 1))), CONCAT(‘принят на работу ‘, acceptdate)) FROM employees WHERE acceptdate > to_date(‘01.01.80′,’dd.mm.yyyy’);
В данном SQL SELECT, используя SQL функцию CONCAT мы выводим все поля таблицы в одну строчку. SQL функция to_date возвращает привычное для СУБД значение даты.
SQL SELECT. Пример №10.
Извлечь из базы данных перечень должностей, которые имеют сотрудники следующих отделов: ‘БИОТЕХНОЛОГИЙ’, ‘ИНЖЕНЕРНОЙ ЭКОЛОГИИ’. В запросе использовать названия отделов.
SELECT pname FROM posts, departments, employees WHERE posts.pid = employees.pid AND employees.did = departments.did AND (departments.dname = ‘БИОТЕХНОЛОГИЙ’ OR departments.dname = ‘ИНЖЕНЕРНОЙ ЭКОЛОГИИ’);
Пояснение: posts — таблица должностей, departments — таблица отделов, employees — таблица сотрудников, pname — название должности.
SQL SELECT. Пример №11.
Извлечь из базы данных значение максимального личного шифра и фамилию сотрудника с этим номером в формате “Максимальный личный шифр имеет сотрудник ”.
SELECT ‘Максимальный личный шифр ‘||eid||’ имеет сотрудник ‘||sname||’ ‘||SUBSTR(fname, 0, 1)||’. ‘||SUBSTR(otch, 0, 1)||’.’ As Максимальный_личный_шифр FROM employees WHERE eid = (SELECT MAX(eid) from employees);
Для вывода максимального личного шифра мы устанавливаем условие в WHERE так, чтобы шифр был равен полученному максимальному шифру из подзапроса SELECT, используя функцию MAX.
SQL SELECT. Пример №12.
Получить из базы данных значение числа записей в таблице данных о сотрудниках в формате “Таблица данных о сотрудниках содержит записей”.
SELECT ‘Таблица данных о сотрудниках содержит ‘||COUNT(*)||’ записей’ FROM employees;
Используя SQL функцию COUNT, выводим количество записей таблицы employees.
SQL SELECT. Пример №13.
Получить единым запросом список отделов и должностей предприятия.
SELECT pname FROM posts UNION SELECT dname FROM departments;
С помощью UNION мы объединяем два запроса SQL SELECT и выводим их как один.
SQL SELECT. Пример №14.
Вывести 30 комментариев начиная с 5 комментария из таблицы replies, кроме комментариев автора ‘Вася’. Данные сортируются по дате добавления комментария в убывающем порядке.
SELECT * FROM replies WHERE author!=’Вася’ ORDER BY date DESC LIMIT 5, 30;
SQL SELECT. Пример №15.
Получить из SQL таблицы news одну новость с пометкой «Важные новости».
SELECT * FROM news WHERE status=’Важные новости’ LIMIT 1;
В данном SQL примере мы выбираем все столбцы поля, у которого столбец status равен ‘Важные новости’. SQL ограничение LIMIT 1 означает, что выбираем только одну запись.
SQL SELECT. Пример №16.
Получить имя письма с идентификатором 1565.
SELECT name FROM mail_inbox WHERE >
SQL SELECT. Пример №17.
Получить название рекламного пакета с идентификатором 24.
SELECT title FROM ad_packages WHERE >
SQL SELECT. Пример №18.
Вывести столбцы id, title, price, c_type с сортировкой по идентификатору в возрастающем порядке.
SELECT id, title, price, c_type FROM ad_packages ORDER BY id ASC;
SQL SELECT. Пример №19.
Вывести все записи из SQL таблицы actions с идентификатором 1234567890.
SELECT * actions WHERE uid=’1234567890′;
SQL SELECT. Пример №20.
SELECT * FROM buypts ORDER BY c_type DESC, price DESC;
SQL SELECT. Пример №21.
SELECT uid FROM refs WHERE rid=’19’;
SQL SELECT. Пример №22.
SELECT * FROM sellpts ORDER BY price ASC;
SQL SELECT. Пример №23.
SELECT * FROM useronline WHERE uid=’1′;
SQL SELECT. Пример №24.
SELECT * FROM mail_inbox WHERE uid=’4590′ AND status=’unread’;
SQL SELECT. Пример №25.
SELECT * FROM buyref WHERE rid!=’5′ ORDER BY dateStamp DESC;
MySQL SQL SELECT. Пример №26.
SELECT id FROM replies WHERE nid=’5′;
MySQL SQL SELECT. Пример №27.
SELECT id, dateStamp, title, text FROM news WHERE dateStamp=’1232342412′;
Oracle SQL SELECT. Пример №28.
SELECT id, dateStamp, author, text, remote_addr FROM replies WHERE nid=’45’ ORDER BY dateStamp ASC;
Извлечение данных, команда SELECT
Наиболее важной и часто используемой командой языка манипулирования данными SQL является команда SELECT. Формат команды SELECT в языке SQL:
SELECT поля FROM таблицы WHERE условие;
Операция выборки позволяет получить все либо часть строк таблицы:
SELECT * FROM Student; – Получить все строки таблицы Student.
SELECT * FROM Student WHERE Kurs=2; – Получить подмножество строк таблицы, удовлетворяющих условию Kurs=2. Точка с запятой является стандартным признаком конца команды.
В общем виде синтаксис этой команды выглядит следующим образом:
SELECT[DISTINCT]
FROM [JOIN ON ]
[WHERE ]
[GROPUP BY [HAVING ] ]
[ORDER BY ]
В квадратных скобках указаны необязательные элементы команды. Ключевые слова SELECT и FROM должны присутствовать всегда. Список столбцов содержит перечень имен столбцов таблицы, которые должны быть включены в результат. Имена, если их несколько, отделяются друг от друга запятой:
SELECTTabNumFROMEmployees
SELECTTabNum,NameFROMEmployees
Звездочка (*) на месте списка столбцов обозначает все столбцы таблицы:
SELECT*FROMEmployees
При выборке столбцов с одинаковыми именами из нескольких таблиц перед именем каждого столбца надо указать через точку имя таблицы:
SELECTEmployees.Name,Departments.NameFROM …
Если в результирующем наборе данных встречаются одинаковые строки (значения всех полей совпадают), можно от них избавиться, указав ключевое слово DISTINCT перед списком столбцов. Приведенный ниже запрос вернет уникальный список должностей, существующих в организации:
SELECT DISTINCTPositionFROMEmployees
Перечень таблиц, из которых производится выборка данных, указывается в секции FROM. Выборка возможна как из одной таблицы, так и из нескольких взаимосвязанных (табл. 2.4.). Логическая взаимосвязь осуществляется с помощью подсекции JOIN. На каждую логическую связь пишется отдельная подсекция. Внутри подсекции указывается условие связи двух таблиц (обычно по условию равенства первичных и вторичных ключей).
Модель данных Сотрудники – Отделы – Города.
Сотрудники | ||||
TabNum | Name | | DeptNum | Salary |
Иванов | Начальник | |||
Петров | Инж. | |||
Сидоров | Менеджер |
Отделы | ||
| City | Name |
Произв. отдел | ||
Отдел продаж |
Города | |
City | Name |
Минск | |
Москва |
SELECTEmployees.TabNum, Employees.Name,Departments.Name
FROMEmployees
JOINDepartmentsONEmployees.DeptNum =
Результат запроса будет выглядеть следующим образом:
Иванов | Производственный отдел |
Петров | Производственный отдел |
Сидоров | Отдел продаж |
SELECTEmployees.TabNum, Employees.Name, Departments.Name, Cities.Name
FROMEmployees
JOINDepartmentsONEmployees.DeptNum = Departments.DeptNum
JOINCitiesONDepartments.City = Cities.City
Результат запроса будет выглядеть следующим образом:
Иванов | Производственный отдел | Минск |
Петров | Производственный отдел | Минск |
Сидоров | Отдел продаж | Москва |
Пример связывания таблиц по нескольким полям:
SELECTTable1.Field1, Table2.Field2
FROM Table1
JOINTable2
ONTable2.ID1 =Table1.ID1
ANDTable2.ID2 =Table1.ID2
AND ….
Существует несколько типов связывания:
Тип | Результат |
JOIN | Внутреннее соединение. В результирующем наборе присутствуют только записи, значения связанных полей в которых совпадают |
LEFT JOIN | Левое внешнее соединение. В результирующем наборе присутствуют все записи из Table1 и соответствующие им записи из Table2. Если соответствия нет – поля из Table2 будут пустыми |
RIGHT JOIN | Правое внешнее соединение. В результирующем наборе присутствуют все записи из Table2 и соответствующие им записи из Table1. Если соответствия нет – поля из Table1 будут пустыми |
FULL JOIN | Полное внешнее соединение. Комбинация двух предыдущих. В результирующем наборе присутствуют все записи из Table1 и соответствующие им записи из Table2. Если соответствия нет – поля из Table2 будут пустыми. Записи из Table2, которым не нашлось пары в Table1, тоже будут присутствовать в результирующем наборе. В этом случае поля из Table1 будут пустыми. |
CROSS JOIN | Результирующий набор содержит все варианты комбинации строк из Table1 и Table2. Условие соединения при этом не указывается. |
Проиллюстрируем каждый тип примерами. Модель данных:
Table1 | |
Key1 | Field1 |
A | |
B | |
C |
Table2 | |
Key2 | Field2 |
AAA | |
BBB | |
CCC | |
DDD |
SELECT Table1.Field1, Table2.Field2
FROM Table1
JOIN Table2 ON Table1.Key1 = Table2.Key2
A | AAA |
B | BBB |
B | CCC |
SELECT Table1.Field1, Table2.Field2
FROM Table1
LEFT JOIN Table2 ON Table1.Key1 = Table2.Key2
A | AAA |
B | BBB |
B | CCC |
C |
SELECT Table1.Field1, Table2.Field2
FROM Table1
RIGHT JOIN Table2 ON Table1.Key1 = Table2.Key2
A | AAA |
B | BBB |
B | CCC |
DDD |
SELECT Table1.Field1, Table2.Field2
FROM Table1
FULL JOIN Table2 ON Table1.Key1 = Table2.Key2
A | AAA |
B | BBB |
B | CCC |
DDD | |
C |
SELECT Table1.Field1, Table2.Field2
FROM Table1
CROSS JOIN Table2
A | AAA |
A | BBB |
A | CCC |
A | DDD |
B | AAA |
B | BBB |
B | CCC |
B | DDD |
C | AAA |
C | BBB |
C | CCC |
C | DDD |
Секция WHERE. Директива WHERE содержит условия отбора (предикат). Синтаксис WHERE выглядит следующим образом:
WHERE[NOT] [AND |OR ]
Запрос возвращает только строки, для которых предикат имеет значение true. Типы предикатов, используемых в предложении WHERE:
SELECT * FROM Table WHERE Field1 1000
Важно понимать, что секции HAVING и WHERE взаимно дополняют друг друга. Сначала с помощью ограничений WHERE формируется итоговая выборка, затем выполняется разбивка на группы по значениям полей, заданных в GROUP BY. Далее по каждой группе вычисляется групповая функция и в заключение накладывается условие HAVING.
Команда INSERT. Добавление новых записей в таблицу осуществляется посредством команды INSERT. Она имеет следующий синтаксис:
INSERT INTO [( )]
VALUES( )
Например, для внесения сведений о новом работнике необходимо выполнить следующую команду:
INSERT INTOEmployees(TabNum, Name,Position,DeptNum,
Salary)VALUES(45, ‘Сергеев’, ‘Старший менеджер’,15,850)
После выполнения команды таблица Employees будет выглядеть следующим образом:
Employees | ||||
TabNum | Name | Position | DeptNum | Salary |
Иванов | Начальник | |||
Петров | Инженер | |||
Сидоров | Менеджер | |||
Сергеев | Старший менеджер |
Если какая-либо колонка в списке будет опущена при вставке – в соответствующее поле записи автоматически будет занесено пустое значение (NULL):
INSERT INTO Employees(TabNum, Name, DeptNum, Salary)
VALUES(45, ‘Сергеев’, 15, 850)
После выполнения команды таблица Employees будет выглядеть следующим образом:
Employees | ||||
TabNum | Name | Position | DeptNum | Salary |
Иванов | Начальник | |||
Петров | Инженер | |||
Сидоров | Менеджер | |||
Сергеев |
Количество констант в секции VALUES всегда должно соответствовать количеству колонок. Список колонок в команде INSERT может быть опущен целиком, в этом случае список констант в секции VALUES должен точно соответствовать описанию колонок таблицы в словаре данных СУБД, иначе команда будет отвергнута ядром БД. Пример правильной команды:
INSERT INTO Employees VALUES(45, ‘Сергеев’,
‘Старший менеджер’, 15, 850)
INSERT INTO Employees VALUES(45, ‘Сергеев’, 15, 850)
завершится ошибкой, так как количество констант не соответствует реальному количеству колонок в таблице. В колонку можно в явном виде внести пустое значение посредством ключевого слова NULL. Последний запрос можно переписать следующим образом:
INSERT INTO Employees VALUES(45, ‘Сергеев’, NULL, 15, 850)
В этом случае команда вставки отработает корректно и в поле Position будет внесено пустое значение. Очевидно, что к аналогичному результату приведет и следующая команда:
INSERT INTO Employees(TabNum, Name, Position, DeptNum,
VALUES(45, ‘Сергеев’, NULL, 15, 850)
Кроме простого добавления новых записей команда INSERT позволяет осуществлять пакетную перекачку данных из таблицы в таблицу. Синтаксис подобной команды следующий:
INSERT INTO [( )]
INSERT INTO Table1(Field1, Field2)
SELECT Field3, (Field4 + 5) FROM Table2
Чтобы удалить ненужные записи из таблицы, следует использовать команду DELETE:
DELETE FROM [WHERE ]
Если опустить секцию WHERE, из таблицы будут удалены все записи. Иначе – только записи, удовлетворяющие критериям поиска. Примеры команды DELETE:
DELETE FROM Employees
DELETE FROM Employees WHERE TabNum = 45
Изменить ранее внесенные командой INSERT данные можно с помощью команды UPDATE:
UPDATE
WHERE ]
При отсутствии секции WHERE обновлены будут все строки таблицы. Иначе – только подходящие под заданные условия. Примеры:
UPDATE Employees SET Salary = Salary + 100
UPDATE Employees
SET Position = ‘Старший менеджер’, Salary = 1000
WHERE TabNum = 45 AND Position IS NULL
Для создания новых таблиц используется команда CREATE TABLE. В общем виде ее синтаксис следующий:
CREATE TABLE
CREATE TABLE Departments
(DeptNum int NOT NULL PRIMARY KEY,
Name varchar(80) NOT NULL)
CREATE TABLE Employees
TabNum int NOT NULL PRIMARY KEY,
Name varchar(100) NOT NULL,
Position varchar(200),
DeptNum int,
Salary decimal(10, 2) DEFAULT0,
CONSTRAINT FK_DEPARTMENT FOREIGN KEY (DeptNum)
REFERENCES Departments(DeptNum)
Созданную таблицу можно изменить с помощью команды ALTER TABLE. Команда ALTER TABLE позволяет добавлять новые колонки и ограничения целостности, удалять их, менять типы колонок, переименовывать колонки. Примеры различных вариантов:
ALTER TABLE Departments ADD COLUMN City int
ALTER TABLE Departments DROP COLUMN City
Удаление ранее созданной таблицы производится командой DROP TABLE:
DROP TABLE Departments
Система управления базой данных MySQL. Многопользовательский, многопоточный сервер базы данных. Имеет хорошую скорость и гибкость, если использовать его для хранения изображений и файлов. MySQL соответствует спецификации ANSI 92 SQL. Основные достоинства MySQL – скорость, устойчивость и легкость в работе. Другие преимущества:
поддержка нескольких одновременных запросов (многопоточность);
возможность записи фиксированной, а также переменной длины;
оптимизация связей с присоединением многих данных за один проход;
гибкая система паролей и доступов;
ODBC драйвер в комплекте с исходником;
интерфейс с языками C и perl;
легко управлять таблицей (включая добавление и удаление ключей и полей);
поддержка ключевых полей, а также специальных полей в операторе CREATE. До 16 ключей в таблице (в каждом ключе до 15 полей);
поддержка чисел длинной от 1 до 4 байт (ints, float, double, fixed), строк переменной длины и меток времени;
утилита проверки и ремонта таблицы (isamchk);
быстрая система памяти, основанная на потоках;
псевдонимы применимы не только к таблицам, но также к отдельным колонкам в таблице;
все поля имеют значение по умолчанию. INSERT можно использовать на любом подмножестве полей.