Skip to content
create table IF NOT EXISTS "Users" (
id INT GENERATED ALWAYS AS IDENTITY,
name varchar(255) not null,
PRIMARY KEY(id)
);

create table if not exists "Contacts"(
id int generated always as identity,
"customerId" INT,
"contactName" VARCHAR(255) not null,
phone VARCHAR(15),
email VARCHAR(255),
primary key(id),
constraint fk_customer
foreign key("customerId")
references "Users"(id)
);




insert into "Users"(name) values
('Petya'),
('Vasya'),
('Katya');


insert into "Contacts"("customerId","contactName",phone,email) values
(1,'First','12345672222222','email@kkk.ru'),
(1,'Second','2221234567','email1@kkk.ru'),
(3,'Main','3331234567','email2@kkk.ru');


select * from "Users" u left join "Contacts" c ON c."customerId" = u.id;
select * from "Users" u right join "Contacts" c ON c."customerId" = u.id;
select * from "Users" u inner join "Contacts" c ON c."customerId" = u.id;
select * from "Users" u join "Contacts" c ON c."customerId" = u.id;

select * from "Users" u cross join "Contacts";


join

![[Pasted image 20240922060439.png]]

получить все имена таблиц из базы

SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';

удаление данных из всех таблиц

    //удаляет каскадом все таблицы в базе данных
public void deleteAll(){
//здесь лучше создать запрос подтверждения действия от пользвателя...
    while(!_deleteAll()) System.out.println("its deleteAll!");
}

public boolean _deleteAll(){
        boolean itsdone=true;

        try(Statement stmt = this.connect.conn.createStatement()) {

            // SQL-запрос для получения имен всех таблиц
            String sql = "SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'";
            ResultSet resultSet = stmt.executeQuery(sql);

            // Выводим имена таблиц
            while (resultSet.next()) {
                String tableName = resultSet.getString("table_name");
                // Если эта таблица зависит от кого-то метод вернёт её же имя
//                if (!getDependentTables(tableName).isEmpty())
                //если таблица не пустая побуем её удалить, если не получается пробуем следующую
                if (!this.select.isEmptyTable(tableName))
                {

                    itsdone=false;
                    System.out.println(tableName);
                    //чтобы не закрывался текущий ResultSet
                    try (Statement deleteStmt = this.connect.conn.createStatement()) {
                        deleteStmt.execute("DELETE FROM \"" + tableName + "\";");

//                        deleteStmt.execute("truncate table \"" + tableName + "\";");
                    } catch (SQLException e){
                        //если невозможно отчистить таблицу значит на неё кто-то ещё ссыается.
                        //берём следующую таблицу
                        continue;
                    }
                } else {
                    //если это родительская таблица пробуем её отчистить
                    try{
                        try (Statement deleteStmt = this.connect.conn.createStatement()) {
                            deleteStmt.execute("DELETE FROM \"" + tableName + "\";");

//                            deleteStmt.execute("truncate table \"" + tableName + "\";");
                        }
                    }catch (RuntimeException e){
                        System.out.println(e);
                        //если не удалось значит ещё есть дочерние таблицы
                       itsdone=false;
                    }
                }
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
//            System.out.println(e);
        }
        return itsdone;
    }

public String wrapTwoQuot(String str){
    StringBuilder newStr=new StringBuilder();
    return (newStr.append("\"").append(str).append("\"")).toString();
}



Проверьте код Java: Убедитесь, что вы правильно передаете SQL-запрос в метод executeQuery(). Вот исправленный пример кода:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class PostgreSQLTablesExample {
    public static void main(String[] args) {
        String url = "jdbc:postgresql://localhost:5432/your_database"; // Замените на ваш URL
        String user = "your_username"; // Замените на ваше имя пользователя
        String password = "your_password"; // Замените на ваш пароль

        try (Connection connection = DriverManager.getConnection(url, user, password);
             Statement statement = connection.createStatement()) {

            // SQL-запрос для получения имен всех таблиц
            String sql = "SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'";
            ResultSet resultSet = statement.executeQuery(sql);

            // Выводим имена таблиц
            while (resultSet.next()) {
                String tableName = resultSet.getString("table_name");
                System.out.println("Table: " + tableName);
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}