Необходимо выбрать все
записи из таблицы teachers
SELECT * FROM teachers; |
Чтобы ограничить количество выбранных записей используется служебное слово LIMIT:
SELECT * FROM имя_таблицы LIMIT 2,3; |
В примере происходит
выборка 3 записей из таблицы, начиная со 2 записи.
Этот запрос особо необходим при создании блока страниц навигации.
Чтобы упорядочить поля результирующего набора, их следует перечислить через запятую в нужном порядке после слова SELECT:
SELECT name, zarplata FROM teachers; |
Выберет все значения полей name и zarplata в том же порядке (сначала name, затем zarplata)
SELECT name, zarplata, premia FROM teachers ORDER BY name DESC; |
Выберет значения полей name, zarplata, premia и отсортирует по полю name по убыванию
Пример БД «Институт»: требуется узнать возможные варианты размера премий. Если не использовать Distinct, в результате будет выдаваться два одинаковых значения. Удалить в sql повторяющиеся значения можно при введении Distinct — в результате дублирующиеся значения не повторяются.
1.
SELECT premia FROM teachers; |
2.
SELECT DISTINCT premia FROM teachers; |
1.
2.
Задание sql select 1_1. БД «Институт» Выполните запрос на выборку id и name из таблицы учителей. Отсортируйте фамилии учителей по убыванию
Задание sql select 1_2. БД «Институт» Выведите возможные варианты длины курсов (length) из таблицы курсов (courses), удалив повторяющиеся значения
Пример БД «Институт»: Выводить данные преподавателя из таблицы teachers, фамилия которого Иванов
SELECT * FROM `teachers` WHERE `name` = 'Иванов' |
Пример БД «Институт»: вывести код преподавателя, зарплата которого составляет 10000, а премия 500
SELECT * FROM `teachers` WHERE `zarplata`=10000 AND `premia`=500 |
Задание sql select 1_2. БД «Институт» Из таблицы courses вывести длину курса (length), название которого — «Программирование SQL»
Пример БД "Институт": Вывести фамилию и зарплату преподавателя, зарплата которого между 5000 и 10000.
SELECT name, zarplata FROM teachers WHERE (zarplata BETWEEN 5000 AND 10000); |
Пример БД "Институт": Вывести фамилию и зарплату преподавателя, зарплата которого не находится в диапазоне от 5000 до 10000.
SELECT name, zarplata FROM teachers WHERE (zarplata NOT BETWEEN 5000 AND 10000); |
Пример БД "Институт": вывести имена преподавателей, зарплата которых составляет 5000, 10000 или 11000
SELECT name, zarplata FROM teachers WHERE (zarplata IN (5000,10000,11000)); |
Пример БД "Институт": вывести имена преподавателей, зарплата которых не находится среди значений: 5000, 10000 или 11000
SELECT name, zarplata FROM teachers WHERE (zarplata NOT IN (5000,10000,11000)); |
Задание sql select 1_3. БД "Институт" Вывести фамилию, зарплату и премию учителей, премия которых от 2000 до 5000 рублей.
Пример БД «Институт»: Вывести фамилии учителей и их зарплаты, для тех преподавателей, у которых зарплата ниже 15000, переименовать поле zarplataна «низкая_зарплата»
Решение:
1 2 3 |
SELECT name, zarplata AS низкая_зарплата FROM teachers WHERE zarplata<15000; |
Результат:
Пример БД «Институт»: Из таблицы teachers вывести поле name и вычислить сумму зарплаты и премии, назвав поле «зарплата_премия»
Решение:
1 2 |
SELECT name, (zarplata+premia) AS zarplata_premia FROM teachers; |
Результат:
SQL As 2_1. БД Институт. Вывести фамилии учителей и разницу между их зарплатой и премией. Назвать вывод «зарплата_минус_премия»
Агрегатные функции в SQL
Для получения итоговых значений и вычисления выражений используются агрегатные функции в sql:
Функция |
Описание |
COUNT(*) |
Возвращает количество строк таблицы. |
COUNT(имя поля) |
Возвращает количество значений в указанном столбце. |
SUM(имя поля) |
Возвращает сумму значений в указанном столбце. |
AVG(имя поля) |
Возвращает среднее значение в указанном столбце. |
MIN(имя поля) |
Возвращает минимальное значение в указанном столбце. |
MAX(имя поля) |
Возвращает максимальное значение в указанном столбце. |
Все агрегатные функции возвращают единственное значение.
Функции COUNT, MIN и MAX применимы к любым типам данных.
Функции SUM и AVG используются
только для числовых полей.
Между функциями COUNT(*) и COUNT(<имя поля>) есть разница:
вторая при подсчете не учитывает NULL-значения.
Важно: при работе с агрегатными функциями в SQL используется служебное слово AS
Пример БД «Институт»: Получить значение самой большой зарплаты среди учителей, вывести итог как «макс_зп»
Решение:
SELECT MAX(zarplata) AS макс_зп FROM teachers; |
Результаты:
Agr func 2_2. БД Институт. Вывести минимальную и максимальную зарплату учителей
Agr func 2_3. БД Институт. Выберите название курса, уроки по которому не проводились и не запланированы проводиться. Дополните код:
1 2 3 4 5 6 |
SELECT `title` FROM `courses` WHERE `title` NOT IN ( ... ) |
Agr func 2_4. БД Институт. Измените предыдущее задание: Посчитайте количество тех курсов, уроки по которым не проводились и не запланированы проводиться. Выводите результат с именем «нет_уроков»
Оператор group by
в
sql обычно используется совместно с агрегатными функциями.
Агрегатные функции выполняются над всеми результирующими
строками запроса. Если запрос содержит оператор GROUP
BY
, каждый набор строк, заданных в предложении GROUP BY,
составляет группу, и агрегатные функции выполняются для каждой группы отдельно.
Рассмотрим пример с таблицей lessons
:
Пример:
1. Выдавать количество проведенных уроков учителем Иванов из таблицы lessons (порядковый номер Иванова 1 (tid)).
SELECT COUNT(tid) AS Иванов FROM lessons WHERE tid=1 |
Результат:
2. Выдавать количество проведенных уроков учителем Иванов по разным курсам из таблицы lessons
SELECT course, COUNT( tid ) AS Иванов FROM lessons WHERE tid =1 GROUP BY course |
Результат:
SQL
group by 2_5. БД Институт.
Посчитать количество уроков, проведенных одним и тем же учителем. Результат
должен выглядеть так:
В предложении FROM может использоваться явная операция соединения двух и более таблиц.
Разберем пример. Имеем две таблицы: teachers
(учителя)
и lessons
(уроки):
teachers |
lessons |
|
|
Пример: Выбрать имена учителей и проведенные уроки по курсам, которые они ведут
Решение:
Для этого необходимы обе таблицы:
SELECT t.name,t.code,l.course FROM teachers t INNER JOIN lessons l ON t.id=l.tid |
Результат:
В запросе буквы l
и t
являются
псевдонимами таблиц lessons
(l)
и teachers
(t).
Inner Join - это внутреннее объединение (JOIN
- с англ.
"объединение", ключевое слово INNER
можно опустить).
При внутреннем объединении выбираются только совпадающие данные из объединяемых таблиц.
Важно: Inner Join - выбираются значения только в случае присутствия в обеих таблицах
Sql left inner join 1. БД Институт. Вывести фамилии всех преподавателей, названия и длительность курсов,
которые они ведут (name
, title
, length
) из таблиц teachers
и courses
. Использовать внутреннее объединение
Запросы данного типа позволяют вставить строку в таблицу или
добавить информацию в таблицу БД (insert
—
«вставить» в переводе с английского).
Для вставки значений в конкретные поля таблицы используется конструкция:
INSERT INTO имя_таблицы(col1,col2) VALUES('value1','value2') |
Для вставки значений для всех полей сразу используется конструкция:
INSERT INTO имя_таблицы VALUES('value1','value2','value3' ...) |
Здесь необходимо перечислить значения всех полей в порядке их следования в таблице.
Важно: Для поля Auto Increment
(счетчик)
в качестве значения всегда указывается Null
Пример: В таблицу courses
вставить
запись для всех полей одновременно: tid
— 1, title
— Java, length
— 40
Решение:
Для работы в php результат будет выглядеть так:
1 2 3 4 5 6 7 8 9 |
$conn = mysql_connect ("localhost", "root", "") or die("Нет соединения: " . mysql_error()); print ("Удачно соединено"); mysql_select_db("institute", $conn); $sql="INSERT INTO courses VALUES(Null,1,'Java',40)" ; $sql= (string) $sql; $result = mysql_query($sql, $conn) or die ("no!".mysql_error()); |
Для работы в СУБД:
INSERT INTO courses VALUES(NULL,1,'Java',40) |
Пример: В таблицу courses
добавить
значения для следующих полей: title
— JavaScript, length
— 72
Решение:
Для работы в php результат будет выглядеть так:
1 2 3 4 5 6 7 8 9 |
$conn = mysql_connect ("localhost", "root", "") or die("Нет соединения: " . mysql_error()); print ("Удачно соединено"); mysql_select_db("institute", $conn); $sql="INSERT INTO courses (title,length) VALUES('JavaScript',72)" ; $sql= (string) $sql; $result = mysql_query($sql, $conn) or die ("no!".mysql_error()); |
Скачано с www.znanio.ru
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.