Magento 2 How to create custom query that is the question sometime is popped up on your head. Here is how I create my own custom queries in Magento 2.
Currently, I figured out two ways :

1/ Take advantage of using Magento Resource Connection.

    $themeId=3;

    $this->_resources = \Magento\Framework\App\ObjectManager::getInstance()
        ->get('Magento\Framework\App\ResourceConnection');
    $connection= $this->_resources->getConnection();

    $select = $connection->select()
        ->from(
            ['o' =>  $this->_resources->getTableName('theme')]
        )->where('o.theme_id=?',$themeId);

    $result = $connection->fetchAll ($select);
    var_dump($result);

You can change the query to insert, update or delete according to zend framework. It’s just an example code, you should put $connection in a  property of a helper class and use it from this help class.

2/The other way is reusing Magento Object Manager to create a collection:

    $objectManager = \Magento\Framework\App\ObjectManager::getInstance();

    $productCollection = $objectManager->create('Magento\Catalog\Model\ResourceModel\Product\CollectionFactory');//insert your custom resource model

    $collection = $productCollection->create()
        ->addAttributeToSelect('*')
        ->load();

    foreach ($collection as $product){
        echo 'Name  =  '.$product->getName().'<br>';
    }

Happy coding !