Ответы пользователя по тегу SQL
  • Почему sql-оператор IN (в WHERE) плох с точки зрения оптимизации?

    @gsaw
    IN(1, 2, 4) не плох, если он постоянен. А если он от запроса к запросу меняется. В одном 3 значения к примеру, IN(A, B, C) а потом в следующем 2 значения IN(Z,V) то это разные запросы и оптимизатору надо под каждый такой запрос создавать свой план выполнения. Что может притормаживать выполнение запроса.

    По крайней мере меня так учили. Может в современных базах лучше стало с этим. Может это мелочи по сравнению с мировой революцией, потому что запрос у вас на два часа.
    Ответ написан
    Комментировать
  • Можно ли подключиться через pgAdmin к openserver?

    @gsaw
    Вы видимо не совсем понимаете как работает клиент серверная архитектура. База данных это сервер, а phpAdmin это клиент. Обычно к серверу базы данных подключаются по сети. Тоесть теоретически можно подключиться и со своего компьютера к базе данных на сервере. Если вы знаете как. Но обычно, серевер базы данных конфигурируется так, что вы только можете подключится клиентом, который работает на том же хосте. Судя по вашему описанию, вы не сами его настраивали и лучше пока вам это самому не делать.

    Самое простое в вашем случае и дальше использовать phppgAdmin предоставляемым хостером.

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


    Вы учитесь работать с базой данных не мышкой, а набирая команды. Разберитесь, что такое DDL и DML и тогда вам откроется чудесный мир баз данных. Где вы сможете делать что угодно в каком угодно клиенте. Если нет каких то типов данных, то наверняка есть их аналоги, которые просто по другому зовутся.

    primary и foreign keys это вообще стандарт и есть в любой базе данных. Для автоинкримента вам возможно понадобится sequence.

    https://info-comp.ru/what-is-ddl-dml-dcl-tcl
    https://postgrespro.ru/docs/postgrespro/10/datatype
    mech.math.msu.su/~shvetz/54/inf/databases/chSerial...
    Ответ написан
    1 комментарий
  • Как правильно составить SQL запрос?

    @gsaw
    select distinct фамилия from одна_таблица  as t0 
    where 10 <= (select count(1) from одна_таблица  as t1 where оценка = 5 and t0.фамилия = t1.фамилия)
    end exists ( select 1 from одна_таблица  as t1 where оценка = 2 and t0.фамилия = t1.фамилия)
    Ответ написан
  • Как посчитать дочерние элементы?

    @gsaw
    Select firms.id, firms.name, (select count(1) from phones where firms.id = phones.firma_id) as phone_cnt from firms
    Ответ написан
    Комментировать
  • Есть ли необходимость связывать сущности в БД, если я их связываю через spring data jpa в коде?

    @gsaw
    Если имеется ввиду, нужны ли констрейнты в базе данных, то нет, необязательно. Они нужны, что бы гарантировать целостность данных в базе данных ну и как средство документирования. Пока программа работает правильно, что они есть, что их нету. В один прекрасный момент ваша программа или сторонняя начнет писать мусор в базу данных, и с констрейнтами вы отловите это очень быстро. Без них начнет все сыпаться, так как JPA ожидает связанный объект а там null.

    Если имеется ввиду, нужны ли первичные и сторонние ключи в табличках, то скорее всего да.
    Ответ написан
    1 комментарий
  • Можно ли в sql сделать поле isactive, чтобы активной единовременно могла быть только одна запись?

    @gsaw
    Ничего такого специального нету. База данных только свалка данных. Ты можешь указать по каким правилам их туда сваливать, но логику твоего приложения база данных не знает и лучше если не узнает. Так как тогда привяжешься навсегда к одному вендору.

    А в данном случае можно обойтись одним запросом к базе, если я правильно понял. Типа того

    update mytable set isactive = case when id = :active_id then 1 else 0 end where search_criteria = :filter


    active_id это уникальный ключ, если id записи совпадает с заданным active_id, то isactive будет установленно в 1, для всех остальных записей удвлетворяющих условию в 0.
    Ответ написан