Перейти к содержимому

Sql как выбрать все записи из таблицы

  • автор:

Как выбрать все записи из таблицы sql

Чтобы получить все записи из таблицы, используется запрос SELECT .

SELECT * FROM cars; 

Мы получим все записи из таблицы cars . * в запросе означает, что нужно выбрать все столбцы из таблицы. Если нужны только какие-то определённые, то их можно перечислить:

SELECT brand, price FROM cars; 

Как вывести все записи из одной таблицы, встречающиеся определенное количество раз в другой таблице MsSQL

Есть 2 таблицы — t1, содержащая перечень названий и их id и t2, содержащая название событий, связанных с id из первой. Во второй таблице нет названий, только id. Подскажите, как вывести перечень названий из первой таблицы, которые встречаются во второй более определенного кол-ва раз. Если не использовать Having

Отслеживать
задан 15 авг 2022 в 17:18

Количества посчитать в подзапросе, а отбор и присоединение наименований сделать во внешнем запросе. Тогда будет не HAVING, а WHERE.

15 авг 2022 в 17:28

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

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

Вот запрос для вывода событий, произошедших более 5 раз:

SELECT t1.Id, Name FROM t1 JOIN ( SELECT t2.Id FROM t2 GROUP BY t2.Id HAVING COUNT(*) > 5 ) AS t2 ON t1.Id = t2.Id 

Отслеживать
ответ дан 16 авг 2022 в 2:33
Vitaliy Zlobin Vitaliy Zlobin
1,676 1 1 золотой знак 5 5 серебряных знаков 15 15 бронзовых знаков

Решение, о котором говорит @Akina

Скорее всего у автора вопроса нет необходимости оптимизировать запрос, а именно стоит конкретная задачка, без HAVING

DECLARE @NeedCount INT = 5 SELECT t1.Id, t1.Name FROM t1 INNER JOIN ( SELECT t2.Id, COUNT(*) AS cnt FROM t2 GROUP BY t2.Id ) AS t2 ON t1.Id = t2.Id WHERE t2.cnt > @NeedCount 

Отслеживать
ответ дан 16 авг 2022 в 9:49
Andrew Nikolaev Andrew Nikolaev
531 4 4 серебряных знака 9 9 бронзовых знаков
Тут видимо просто студенческая задача, потому такие условия. Иного не могу предположить)
16 авг 2022 в 13:13
Спасибо, люди добрые!! Да, дело именно в том, что задача была сделать без Хевинг)
17 авг 2022 в 15:48
@Den.di а почему нельзя использовать HAVING?
18 авг 2022 в 3:16

@Vitaliy Zlobin, вот Вы писали про оптимизатор, и то, что он может исходный запрос переписать по своему усмотрению. А есть возможность увидеть результат работы оптимизатора каким то образом? Или это незримая штука, которую можно понять только по плану выполнения?

18 авг 2022 в 7:58

@AndrewNikolaev нужно анализировать план, но не картинки, а свойство предиката для подзапроса. Либо сравнить оба плана выполнения — если одинаковые, значит оптимизатор догадался как лучше, но на него лучше не полагаться, т.е. завтра будет кривая статистика и план будет тоже другой и тоже кривой.

Предикаты ALL, DISTINCT, DISTINCTROW и TOP

Эти предикаты задают записи, выбираемые с помощью запросов SQL.

Синтаксис

SELECT [ALL | DISTINCT | DISTINCTROW | [TOP n [PERCENT]]]
FROM таблица

Инструкция SELECT, содержащая эти предикаты, состоит из следующих частей:

Используется по умолчанию, если вы не указываете ни один из предикатов. Ядро СУБД Microsoft Access выбирает все записи, которые удовлетворяют условиям в инструкции SQL. Следующие два примера эквивалентны и возвращает все записи из таблицы Employees:

SELECT ALL *
FROM Employees
ORDER BY EmployeeID;
SELECT *
FROM Employees
ORDER BY EmployeeID;

Исключает записи, содержащие повторяющиеся данные в выбранных полях. Для включения в результаты запроса значения каждого из полей, перечисленных в инструкции SELECT, должны быть уникальными. Например, у нескольких сотрудников, перечисленных в таблице Employees, могут быть одинаковые фамилии. Если две записи содержат «Глазков» в поле LastName, следующая инструкция SQL возвращает только одну запись, содержащую значение «Глазков»:

SELECT DISTINCT LastName
FROM Employees;

Если опустить DISTINCT, этот запрос возвратит обе записи с фамилией «Глазков».

Если предложение SELECT содержит несколько полей, запись будет включена в результаты только в том случае, если сочетание значений всех таких полей уникально.

Выходные данные запроса, использующего DISTINCT, не является обновляемыми и не отражают изменения, внесенные другими пользователями.

Данные не просто повторяют поля, но и не повторяются. Например, можно создать запрос, который соединяет таблицы Customers и Orders по полю CustomerID. Таблица «Клиенты» не содержит повторяют поля CustomerID, но таблица Orders содержит, так как у каждого клиента может быть множество заказов. В следующей SQL показано, как использовать DISTINCTROW для создания списка компаний, у кого есть хотя бы один заказ, но нет сведений об этих заказах:

SELECT DISTINCTROW CompanyName
FROM Customers INNER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID
ORDER BY CompanyName;

Если опустить DISTINCTROW, этот запрос создаст несколько строк для каждой компании, от которой поступало более одного заказа.

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

TOP n [PERCENT]

Возвращает записи, относящиеся к верхней или нижней части диапазона, заданного предложением ORDER BY. Предположим, что вы хотите получить имена 25 лучших студентов из группы 1994 г.:

SELECT TOP 25
FirstName, LastName
FROM Students
WHERE GraduationYear = 2003
ORDER BY GradePointAverage DESC;

Если не включить предложение ORDER BY, запрос вернет из таблицы Students произвольный набор, включающий 25 записей, которые удовлетворяют предложению WHERE.

Предикат TOP не выбирает между равными значениями. Если в предыдущем примере двадцать пятый и двадцать шестой средний балл совпадают, запрос вернет 26 записей.

Вы также можете использовать зарезервированное слово PERCENT для возвращения определенного процента записей из верхней или нижней части диапазона, заданного предложением ORDER BY. Предположим, что вместо 25 лучших студентов вы хотите получить 10 процентов худших студентов группы:

SELECT TOP 10 PERCENT
FirstName, LastName
FROM Students
WHERE GraduationYear = 2003
ORDER BY GradePointAverage ASC;

Предикат ASC позволяет вернуть нижние значения. Значение после TOP должно быть целым числом без знака.

TOP не влияет на возможность обновления запроса.

Имя таблицы, из которой извлекаются записи.

#5 — Выборка данных из БД. Where, Order, Limit

#5 - Выборка данных из БД. Where, Order, Limit

Для выборки данных из БД используется оператор Select. При его использовании вы можете указать какие поля необходимо выбрать. При выборе вы можеет установить условие (where), сортировку (Order) и ограничение по выборке (Limit).

Видеоурок

Команда Select

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

-- Выбор всех записей SELECT * FROM table; -- Выбор всех записей, но лишь некоторые поля SELECT id, title FROM table; -- Выбор лишь некоторых записей SELECT * FROM table WHERE id > 6 AND id < 8;

Выборка по параметру

Для выборки лишь некоторых записей используется оператор Where . В нем указывается условие и лишь подходящие под это условие элементы будут выбраны.

SELECT * FROM table WHERE name = 'Alex'; SELECT * FROM table WHERE name = 'Alex' AND id > 88;

Сортировка

Сортировка данных происходит через команду Order By . В ней вы указываете по какому полю идет сортировка и в каком порядке она будет.

SELECT * FROM table ORDER BY id; -- Сортировка по убыванию SELECT * FROM table ORDER BY id DESC; -- Сортировка вместе с оператором Where SELECT * FROM table WHERE id > 9 ORDER BY id DESC;

Лимит по выбору

Вывод записей можно лимитировать. Для этого используйте команду Limit .

-- Вывод лишь одной записи SELECT * FROM table ORDER BY id LIMIT 1; -- Вывод 5 последних записей SELECT * FROM table ORDER BY id LIMIT 5; -- Пропуск первых 7 записей и вывод последующих 8 SELECT * FROM table ORDER BY id DESC LIMIT 7, 8;

Задание к уроку

Необходимо оформить подписку на проект, чтобы получить доступ ко всем домашним заданиям

Большое задание по курсу

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *