Имя: Пароль:
IT
Админ
как попрактиковаться в SQL?
,
0 1сПупс
 
17.09.22
14:14
хочется потестить запросы, поучиться делать запросы к скулю на домашнем пк, без установки sql, есть варик?
1 1сПупс
 
17.09.22
14:17
нашел https://sqliteonline.com в принципе как вариант но хотелось бы поработать без сети
2 Kassern
 
17.09.22
14:18
(0) это как научиться ездить на велосипеде без велосипеда)
3 1сПупс
 
17.09.22
14:19
(2) what do you mean? надо ставить скуль?
4 Aleksey
 
17.09.22
14:20
Т.е. ты хочешь дома установить эмулятор скуля чтобы потестить запросы?
А не проще ли поставить скуль, тем более версия для разработчиков мелокмягкие бесплатно раздают
5 Aleksey
 
17.09.22
14:20
(3) Он имеет ввиду что пятница была вчера
6 1сПупс
 
17.09.22
14:21
(4) а он встанет на 10 окне?
7 Kassern
 
17.09.22
14:21
(6) встанет
8 Aleksey
 
17.09.22
14:23
(6) ну у меня стоит, вот сейчас залил рабочую базу под 300 гигов, сижу играюсь.

Только учти база должна быть на ссд, так как современные hdd с их передовой системой хранения данных "черепицой" захлёбываются под напором скуля
9 1сПупс
 
17.09.22
14:24
10 1сПупс
 
17.09.22
14:24
у меня буквально 3 таблицы и до 10 строк в каждой будет
11 1сПупс
 
17.09.22
14:26
есть еще полная версия https://www.microsoft.com/en-us/sql-server/sql-server-downloads не знаю какую качать?
12 Aleksey
 
17.09.22
14:27
(9) нет
Выпуск Developer
SQL Server 2019 Developer — это бесплатный выпуск с полным набором функций, лицензируемый для использования в качестве базы данных для разработки и тестирования и не предназначенный для применения в рабочей среде.
https://www.microsoft.com/ru-ru/sql-server/sql-server-downloads

У експресса есть ограничения на размеры таблиц. Хотя поиграться и экспресса хватит
13 Aleksey
 
17.09.22
14:28
тут в кратце расказаны какие и для чего бывают редакции
https://xn----1-bedvffifm4g.xn--p1ai/news/2022-03-25-6-editions-of-ms-sql/
14 1сПупс
 
17.09.22
14:28
(12) а что думаете про постгре? или он только для линукса?
15 Aleksey
 
17.09.22
14:29
(14) кто сказал?
16 1сПупс
 
17.09.22
14:30
PostgreSQL Version начиная с 11 версии не встает на windows 10(((
17 1сПупс
 
17.09.22
14:30
18 Aleksey
 
17.09.22
14:31
(16) ну если тебе все равно что ставить поставь SQLite
19 Aleksey
 
17.09.22
14:31
Там тоже можно запросы писать
20 Aleksey
 
17.09.22
14:34
21 1сПупс
 
17.09.22
15:01
создал базу:

CREATE TABLE author(
    id    INTEGER PRIMARY KEY,
    -- создать колонку с названием id, в ней будут ЦЕЛЫЕ ЧИСЛА,
    -- в этой колонке будут храниться УНИКАЛЬНЫЕ КЛЮЧИ записей
    name  TEXT NOT NULL,
    -- создать колонку с названием name, в ней будет ТЕКСТ
    -- и НЕ МОЖЕТ БЫТЬ ПУСТОЙ
    birth_year INTEGER
    -- создать колонку с названием birth_year, в ней будут ЦЕЛЫЕ ЧИСЛА
);

вношу значение

INSERT INTO author (name, birth_year) VALUES ('Человек без селезёнки', 1860);
-- ВСТАВИТЬ строку В ТАБЛИЦУ author
-- заполнить поля (name, birth_year) ЗНАЧЕНИЯМИ 'Человек без селезёнки', 1860 соответственно

ошибка:

Сообщение 515, уровень 16, состояние 2, строка 1
Не удалось вставить значение NULL в столбец "id", таблицы "master.dbo.author"; в столбце запрещены значения NULL. Ошибка в INSERT.
Выполнение данной инструкции было прервано.

Что делать?
22 1сПупс
 
17.09.22
15:05
Пусть база сама присваивает номера уникальных ключей, для поля id передавать значения мы не будем.
23 Aleksey
 
17.09.22
16:44
Это в какой базе?
SQLite попробуй
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL
24 Кирпич
 
17.09.22
20:44
(0) https://www.sql-ex.ru/
выполни все задачки и станешь гуру
25 NorthWind
 
18.09.22
12:49
(22) изучи вопрос чуть глубже. В разных субд это реализовано по-разному - где-то есть тип "счетчик", где-то нужно модифицировать целое под автоинкремент, где-то написать триггер на строку чтобы бралось новое значение из последовательности.
26 Said_We
 
28.09.22
11:23
(0) + к (24) есть по проще SQL ACADEMY.
Гуру может и не станешь, но попрактикуешься.

https://sql-academy.org/ru/
27 mistеr
 
28.09.22
11:26
(8) Во-первых, не захлебываются. Во-вторых, для обучения это самое то, непосредственно ощущать разницу между эффективными и кривыми запросами.
28 mistеr
 
28.09.22
11:27
(11) Для изучения Express более чем достаточно. Качай его плюс SSMS отдельно.
29 2mugik
 
28.09.22
19:08
(28)Зачем этот обрезок когда есть Developer бесплатный и специально для этих целей.
30 1сПупс
 
28.09.22
20:29
открыл сайт потискать:
https://sql-academy.org/ru/trainer/tasks/3

SELECT id
FROM trip
WHERE town_from = 'Moscow'

пишет ответ неверный, что не так то?
31 vbus
 
28.09.22
20:39
Поля в результирующей таблице:
*
32 Aleksey
 
28.09.22
20:46
select * from Trip where town_from = 'Moscow'
33 1сПупс
 
28.09.22
20:55
спасибо, я ему и дал номера рейсов, а он всю инфу хочет...
34 Aleksey
 
28.09.22
20:57
(33) ну так сказано, нужно все поля, а не только ID
35 Said_We
 
28.09.22
21:17
#1 Вывести имена всех когда-либо обслуживаемых пассажиров авиакомпаний.

Текст запроса какой получился?
36 Said_We
 
29.09.22
18:29
(35) Не получился значит.... :-)
37 VladZ
 
29.09.22
18:41
(0) Ставь developer edition и практикуйся.
38 VladZ
 
29.09.22
18:43
(14) Постгри нужно "уметь готовить".
39 1сПупс
 
29.09.22
19:00
(35) SELECT NAME FROM PASSANGER
40 1сПупс
 
29.09.22
19:04
Может кто сталкивался, как загрузить csv файл в sql developer?
41 Said_We
 
29.09.22
19:12
(39) "когда-либо обслуживаемых" - что означает.
(40) В SQLite есть возможность загрузить с помощью "DB Browser".
42 VladZ
 
29.09.22
20:13
(40) Загугли. Очень распространенный вопрос
43 bolder
 
29.09.22
20:38
44 Said_We
 
30.09.22
12:38
(39) "когда-либо обслуживаемых" - что означает?
45 Мультук
 
гуру
30.09.22
12:46
(30)

Отличный сайт. С молоду приучает -- ставь *, сервер железный, фигли ему будет.
46 Смотрящий
 
30.09.22
13:19
(30) SELECT *
Решение верно
;)
47 Said_We
 
30.09.22
13:22
(45) (46) (39) "когда-либо обслуживаемых" - что означает?
48 mistеr
 
30.09.22
13:28
(47) Означает, что есть данные о полетах этого пассажира
49 Said_We
 
30.09.22
13:31
(48) Наверное не о полетах, а хотя бы о купленных билетах. Обслужили - продали билет.
А это означает, что должна анализироваться таблица "Pass_in_trip"?
50 1сПупс
 
30.09.22
13:47
ломаю голову над https://sql-academy.org/ru/trainer/tasks/13
Вывести имена людей, у которых есть полный тёзка среди пассажиров

id    name
1    Bruce Willis
2    George Clooney
3    Kevin Costner
4    Donald Sutherland
5    Jennifer Lopez
6    Ray Liotta
7    Samuel L. Jackson
8    Nikole Kidman
9    Alan Rickman
10    Kurt Russell
11    Harrison Ford
12    Russell Crowe
13    Steve Martin
14    Michael Caine
15    Angelina Jolie
16    Mel Gibson
17    Michael Douglas
18    John Travolta
19    Sylvester Stallone
20    Tommy Lee Jones
21    Catherine Zeta-Jones
22    Antonio Banderas
23    Kim Basinger
24    Sam Neill
25    Gary Oldman
26    ClINT Eastwood
27    Brad Pitt
28    Johnny Depp
29    Pierce Brosnan
30    Sean Connery
31    Bruce Willis
37    Mullah Omar
51 1сПупс
 
30.09.22
13:49
в голову пришло только это:

SELECT
name  
FROM Passenger
GROUP by name
HAVING count(*)>1
LIMIT 1
52 Said_We
 
30.09.22
14:06
(51)
SELECT
     name  
FROM
     Passenger
GROUP by
     name
HAVING
     count(name)>1
53 Said_We
 
30.09.22
14:09
(51) Но правильной бы формулировкой было бы вывести всех пассажиров и поля ID и Name. Отсортировать по полю name.
А так получается что по факту считается правильным вывод ФИО двойников, а не вывод пассажиров.
54 1сПупс
 
30.09.22
14:09
да, а если бы там много полных совпадений имен пассажиров, лимит не нужен.
55 1сПупс
 
30.09.22
14:10
(53) вы предлагаете изменить условие задачи?
56 Мультук
 
гуру
30.09.22
14:10
(51)

select t1.name from passenger as t1, passenger as t2
where t1.name = t2.name and t1.id > t2.id
57 Said_We
 
30.09.22
14:11
(54) Могут быть и три и четыре полных тезки.
Смотреть (47) (49). С формулировками заданий на SQL Academy есть проблемы.
58 Said_We
 
30.09.22
14:12
(56) Декартово произведение тут очень лишнее. Ну нужно так.
59 Мультук
 
гуру
30.09.22
14:12
(58)

Чудо тренажёр говорит, что так тоже правильно

select t1.name from passenger as t1
where t1.id = 31
60 1сПупс
 
30.09.22
14:14
(59) а если элементов было бы 304928340923 тоже бы вручную искал?
61 Said_We
 
30.09.22
14:14
(59) Он проверяет итоговый результат. Это нормально. Не нормально, что нельзя сравнить по скорости выполнения и видеть, что твой результат на много медленнее чем у остальных.
62 Мультук
 
гуру
30.09.22
14:15
(60)
Я говорю о том, что есть варианты, которые сайт примет.
А на самом  деле они не работают. Или не работают на других условиях.

И в простых случаях типа, можно легко понять "кто дурак".
А вот дальше...
63 1сПупс
 
30.09.22
14:15
вообще сервис неплохой, а https://www.sql-ex.ru/ получше, кто щупал?
64 Said_We
 
30.09.22
14:16
(59) Что бы такие залипухи не работали обычно делают несколько баз и проверяют результаты на разных базах. И правильным считается если на всех тестовых базах с очень разными данными получился правильный результат.
65 Said_We
 
30.09.22
14:17
(63)  https://www.sql-ex.ru/
Это наверное лучший сервис на сегодня из условно бесплатных.
66 1сПупс
 
30.09.22
14:18
(65) хорошо, спасибо!
67 Said_We
 
30.09.22
14:19
К (65) если решишь все 161 заданий, то считай что попрактиковался. Если будешь искать готовые решения и будешь не сам писать, то забанят аккаунт.
68 Said_We
 
30.09.22
16:33
(55) Первое задание формулировку обещали поменять.
В данном случае если кто предложат поменять, то думаю задумаются.

На обоих ресурсах достаточно быстро и адекватно реагируют. Просто SQL Academy очень молодой ресурс. Он ещё развивается. Как и куда он разовьётся пока не понятно.
У  https://www.sql-ex.ru/ главная цель не коммерческая. Академически сделан грамотно.
69 mistеr
 
30.09.22
19:18
(65) +1
70 1сПупс
 
01.10.22
15:36
делаю 14 задание https://sql-academy.org/ru/trainer/tasks/14
В какие города летал Bruce Willis:

как будет более правильно?:

Вариант1:
SELECT town_to FROM Trip, Passenger, Pass_in_trip
WHERE Passenger.id = Pass_in_trip.passenger AND Pass_in_trip.trip = Trip.id and name = 'Bruce Willis'

Вариант2:
SELECT town_to FROM Trip
LEFT JOIN Pass_in_trip ON Trip.id = Pass_in_trip.trip
LEFT JOIN Passenger ON Pass_in_trip.passenger = Passenger.id
WHERE name = 'Bruce Willis'

Или это одинаково с точки зрения производительности?
71 1сПупс
 
02.10.22
11:17
up
72 AMur
 
02.10.22
11:57
На работе сейчас использую MS Office Excel 2013. База данных в таблицах. Запросы на SQL в VBA к этим таблицам работают. Отчеты можно оформить в Word или в Excel. Сначала потренировался в запросах , а сейчас экономлю кучу времени!
73 Aleksey
 
02.10.22
19:24
(70) это разные запросы с точки зрения полученного результата
в первом случае у тебя перекрестное соединение CROSS JOIN (или его аналог в 1С ПОЛНОЕ СОЕДИНЕНИЕ)
А во втором левое соединение LEFT JOIN

Т.е. на выходе в общем случае будут разные результате (что не исключает в неком частном случае совпадение результатов)
74 DES
 
02.10.22
20:47
ИР (инструменты разработчика) советовали уже?
75 Said_We
 
03.10.22
11:32
(74) Ему не 1С.
1С обрезан сильно.
76 Said_We
 
03.10.22
11:47
(70) Можно и так:

SELECT
    town_to
FROM
    trip
WHERE
    id in (SELECT
                trip
            FROM
                Pass_in_trip
            WHERE
                passenger IN (SELECT
                                    id
                                FROM
                                    passenger
                                WHERE
                                    name = "Bruce Willis"
                              )
            )
GROUP BY
    town_to
Независимо от того, куда вы едете — это в гору и против ветра!