diff --git a/src/Lunr/Gravity/Database/MariaDB/MariaDBSimpleDMLQueryBuilder.php b/src/Lunr/Gravity/Database/MariaDB/MariaDBSimpleDMLQueryBuilder.php
index 313dfff4f28f3c17c32b617bd0e1477df5198f66..f1d0cd4c43b48cda1613e55ea6522700f94cc98f 100644
--- a/src/Lunr/Gravity/Database/MariaDB/MariaDBSimpleDMLQueryBuilder.php
+++ b/src/Lunr/Gravity/Database/MariaDB/MariaDBSimpleDMLQueryBuilder.php
@@ -66,6 +66,34 @@ class MariaDBSimpleDMLQueryBuilder extends MySQLSimpleDMLQueryBuilder
         return $this;
     }
 
+    /**
+     * Define a EXCEPT, EXCEPT ALL or EXCEPT DISTINCT clause of the SQL statement.
+     *
+     * @param string $sql_query SQL query reference
+     * @param string $type      Type of EXCEPT operation to perform.
+     *
+     * @return MySQLDMLQueryBuilder $self Self reference
+     */
+    public function except($sql_query, $type = NULL)
+    {
+        $this->builder->except($this->escaper->query_value($sql_query), $type);
+        return $this;
+    }
+
+    /**
+     * Define a INTERSECT, INTERSECT ALL or INTERSECT DISTINCT clause of the SQL statement.
+     *
+     * @param string $sql_query SQL query reference
+     * @param string $type      Type of INTERSECT operation to perform.
+     *
+     * @return MySQLDMLQueryBuilder $self Self reference
+     */
+    public function intersect($sql_query, $type = NULL)
+    {
+        $this->builder->intersect($this->escaper->query_value($sql_query), $type);
+        return $this;
+    }
+
 }
 
 ?>
diff --git a/src/Lunr/Gravity/Database/MariaDB/Tests/MariaDBSimpleDMLQueryBuilderSelectTest.php b/src/Lunr/Gravity/Database/MariaDB/Tests/MariaDBSimpleDMLQueryBuilderSelectTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..793103aab47fe1146635eee1d39842ae2d9a1e5f
--- /dev/null
+++ b/src/Lunr/Gravity/Database/MariaDB/Tests/MariaDBSimpleDMLQueryBuilderSelectTest.php
@@ -0,0 +1,146 @@
+<?php
+
+/**
+ * This file contains the MariaDBSimpleDMLQueryBuilderSelectTest class.
+ *
+ * @package    Lunr\Gravity\Database\MySQL
+ * @author     David Cova <d.cova@m2mobi.com>
+ * @copyright  2013-2018, M2Mobi BV, Amsterdam, The Netherlands
+ * @license    http://lunr.nl/LICENSE MIT License
+ */
+
+namespace Lunr\Gravity\Database\MySQL\Tests;
+
+use Lunr\Gravity\Database\MariaDB\Tests\MariaDBSimpleDMLQueryBuilderTest;
+
+/**
+ * This class contains select tests for the MariaDBSimpleDMLQueryBuilder class.
+ *
+ * @covers Lunr\Gravity\Database\MariaDB\MariaDBSimpleDMLQueryBuilder
+ */
+class MariaDBSimpleDMLQueryBuilderSelectTest extends MariaDBSimpleDMLQueryBuilderTest
+{
+
+     /**
+     * Test except().
+     *
+     * @covers Lunr\Gravity\Database\MariaDB\MariaDBSimpleDMLQueryBuilder::except
+     */
+    public function testExcept(): void
+    {
+        $this->escaper->expects($this->once())
+                      ->method('query_value')
+                      ->with('query')
+                      ->willReturn('(query)');
+
+        $this->builder->expects($this->once())
+                      ->method('except')
+                      ->with('(query)')
+                      ->willReturnSelf();
+
+        $this->class->except('query');
+    }
+
+     /**
+     * Test intersect().
+     *
+     * @covers Lunr\Gravity\Database\MariaDB\MariaDBSimpleDMLQueryBuilder::intersect
+     */
+    public function testIntersect(): void
+    {
+        $this->escaper->expects($this->once())
+                      ->method('query_value')
+                      ->with('query')
+                      ->willReturn('(query)');
+
+        $this->builder->expects($this->once())
+                      ->method('intersect')
+                      ->with('(query)')
+                      ->willReturnSelf();
+
+        $this->class->intersect('query');
+    }
+
+    /**
+     * Test except() ALL.
+     *
+     * @covers Lunr\Gravity\Database\MariaDB\MariaDBSimpleDMLQueryBuilder::except
+     */
+    public function testExceptAll(): void
+    {
+        $this->escaper->expects($this->once())
+                      ->method('query_value')
+                      ->with('query')
+                      ->willReturn('(query)');
+
+        $this->builder->expects($this->once())
+                      ->method('except')
+                      ->with('(query)', 'ALL')
+                      ->willReturnSelf();
+
+        $this->class->except('query', 'ALL');
+    }
+
+     /**
+     * Test except() DISTINCT.
+     *
+     * @covers Lunr\Gravity\Database\MariaDB\MariaDBSimpleDMLQueryBuilder::except
+     */
+    public function testExceptDistinct(): void
+    {
+        $this->escaper->expects($this->once())
+                      ->method('query_value')
+                      ->with('query')
+                      ->willReturn('(query)');
+
+        $this->builder->expects($this->once())
+                      ->method('except')
+                      ->with('(query)', 'DISTINCT')
+                      ->willReturnSelf();
+
+        $this->class->except('query', 'DISTINCT');
+    }
+
+     /**
+     * Test intersect() ALL.
+     *
+     * @covers Lunr\Gravity\Database\MariaDB\MariaDBSimpleDMLQueryBuilder::intersect
+     */
+    public function testIntersectAll(): void
+    {
+        $this->escaper->expects($this->once())
+                      ->method('query_value')
+                      ->with('query')
+                      ->willReturn('(query)');
+
+        $this->builder->expects($this->once())
+                      ->method('intersect')
+                      ->with('(query)', 'ALL')
+                      ->willReturnSelf();
+
+        $this->class->intersect('query', 'ALL');
+    }
+
+     /**
+     * Test intersect() DISTINCT.
+     *
+     * @covers Lunr\Gravity\Database\MariaDB\MariaDBSimpleDMLQueryBuilder::intersect
+     */
+    public function testIntersectDistinct(): void
+    {
+        $this->escaper->expects($this->once())
+                      ->method('query_value')
+                      ->with('query')
+                      ->willReturn('(query)');
+
+        $this->builder->expects($this->once())
+                      ->method('intersect')
+                      ->with('(query)', 'DISTINCT')
+                      ->willReturnSelf();
+
+        $this->class->intersect('query', 'DISTINCT');
+    }
+
+}
+
+?>
diff --git a/src/Lunr/Gravity/Database/SQLDMLQueryBuilder.php b/src/Lunr/Gravity/Database/SQLDMLQueryBuilder.php
index df6913a85513764c9431aa2de3ceec5e9f89918d..e816287633f8df27a9bd2d1484f43b9910d57b11 100644
--- a/src/Lunr/Gravity/Database/SQLDMLQueryBuilder.php
+++ b/src/Lunr/Gravity/Database/SQLDMLQueryBuilder.php
@@ -530,6 +530,34 @@ abstract class SQLDMLQueryBuilder extends DatabaseDMLQueryBuilder
         return $this;
     }
 
+    /**
+    * Define a EXCEPT, EXCEPT DISTINCT or EXCEPT ALL clause of the SQL statement.
+    *
+    * @param string $sql_query SQL query reference
+    * @param string $operator  UNION operation to perform
+    *
+    * @return SQLDMLQueryBuilder $self Self reference
+    */
+    public function except($sql_query, $operator = NULL)
+    {
+        $this->sql_compound($sql_query, 'EXCEPT', strtoupper($operator));
+        return $this;
+    }
+
+    /**
+    * Define a INTERSECT, INTERSECT DISTINCT or INTERSECT ALL clause of the SQL statement.
+    *
+    * @param string $sql_query SQL query reference
+    * @param string $operator  UNION operation to perform
+    *
+    * @return SQLDMLQueryBuilder $self Self reference
+    */
+    public function intersect($sql_query, $operator = NULL)
+    {
+        $this->sql_compound($sql_query, 'INTERSECT', strtoupper($operator));
+        return $this;
+    }
+
     /**
      * Set logical connector 'AND'.
      *
diff --git a/src/Lunr/Gravity/Database/Tests/DatabaseDMLQueryBuilderQueryPartsTest.php b/src/Lunr/Gravity/Database/Tests/DatabaseDMLQueryBuilderQueryPartsTest.php
index 380c040646bade691337dba7e17fd8c956b1bd71..413d819a67438189508686ce5c3c2b7a20d96daa 100644
--- a/src/Lunr/Gravity/Database/Tests/DatabaseDMLQueryBuilderQueryPartsTest.php
+++ b/src/Lunr/Gravity/Database/Tests/DatabaseDMLQueryBuilderQueryPartsTest.php
@@ -23,7 +23,7 @@ class DatabaseDMLQueryBuilderQueryPartsTest extends DatabaseDMLQueryBuilderTest
 {
 
     /**
-     * Test specifying the UNION part of a query.
+     * Test specifying a compound query.
      *
      * @param string $types     Compound query operator
      *
@@ -46,7 +46,7 @@ class DatabaseDMLQueryBuilderQueryPartsTest extends DatabaseDMLQueryBuilderTest
      *
      * @covers Lunr\Gravity\Database\DatabaseDMLQueryBuilder::sql_compound
      */
-    public function testCompoundQueryWhenCompoundIsSet(): void
+    public function testCompoundQueryWhenCompoundIsSetWithUnion(): void
     {
         $this->set_reflection_property_value('compound', 'QUERY');
 
@@ -57,6 +57,38 @@ class DatabaseDMLQueryBuilderQueryPartsTest extends DatabaseDMLQueryBuilderTest
         $this->assertPropertyEquals('compound', 'QUERY UNION (sql query)');
     }
 
+    /**
+     * Test specifying the EXCEPT part of a query, when compound is set.
+     *
+     * @covers Lunr\Gravity\Database\DatabaseDMLQueryBuilder::sql_compound
+     */
+    public function testCompoundQueryWhenCompoundIsSetWithExcept(): void
+    {
+        $this->set_reflection_property_value('compound', 'QUERY');
+
+        $method = $this->get_accessible_reflection_method('sql_compound');
+
+        $method->invokeArgs($this->class, [ '(sql query)', 'EXCEPT' ]);
+
+        $this->assertPropertyEquals('compound', 'QUERY EXCEPT (sql query)');
+    }
+
+    /**
+     * Test specifying the INTERSECT part of a query, when compound is set.
+     *
+     * @covers Lunr\Gravity\Database\DatabaseDMLQueryBuilder::sql_compound
+     */
+    public function testCompoundQueryWhenCompoundIsSetWithIntersect(): void
+    {
+        $this->set_reflection_property_value('compound', 'QUERY');
+
+        $method = $this->get_accessible_reflection_method('sql_compound');
+
+        $method->invokeArgs($this->class, [ '(sql query)', 'INTERSECT' ]);
+
+        $this->assertPropertyEquals('compound', 'QUERY INTERSECT (sql query)');
+    }
+
     /**
      * Test creating a simple order by statement.
      *
diff --git a/src/Lunr/Gravity/Database/Tests/SQLDMLQueryBuilderSelectTest.php b/src/Lunr/Gravity/Database/Tests/SQLDMLQueryBuilderSelectTest.php
index 0bbeca299ef30cf02f3b506aa480d0e6b5ead5db..3e123a5f9dca0afd8240a14201f0d34d5048d2a7 100644
--- a/src/Lunr/Gravity/Database/Tests/SQLDMLQueryBuilderSelectTest.php
+++ b/src/Lunr/Gravity/Database/Tests/SQLDMLQueryBuilderSelectTest.php
@@ -171,7 +171,7 @@ class SQLDMLQueryBuilderSelectTest extends SQLDMLQueryBuilderTest
      */
     public function testUnion(): void
     {
-        $return = $this->class->union('QUERY');
+        $this->class->union('QUERY');
 
         $this->assertPropertyEquals('compound', 'UNION QUERY');
     }
@@ -184,7 +184,7 @@ class SQLDMLQueryBuilderSelectTest extends SQLDMLQueryBuilderTest
      */
     public function testUnionDistinct(): void
     {
-        $return = $this->class->union('QUERY', 'DISTINCT');
+        $this->class->union('QUERY', 'DISTINCT');
 
         $this->assertPropertyEquals('compound', 'UNION DISTINCT QUERY');
     }
@@ -197,13 +197,13 @@ class SQLDMLQueryBuilderSelectTest extends SQLDMLQueryBuilderTest
      */
     public function testUnionAll(): void
     {
-        $return = $this->class->union('QUERY', 'ALL');
+        $this->class->union('QUERY', 'ALL');
 
         $this->assertPropertyEquals('compound', 'UNION ALL QUERY');
     }
 
     /**
-     * Test fluid interface of the union method.
+     * Test fluid interface of the UNION method.
      *
      * @covers Lunr\Gravity\Database\SQLDMLQueryBuilder::union
      */
@@ -215,4 +215,108 @@ class SQLDMLQueryBuilderSelectTest extends SQLDMLQueryBuilderTest
         $this->assertSame($this->class, $return);
     }
 
+    /**
+     * Test specifying a EXCEPT statement.
+     *
+     * @depends Lunr\Gravity\Database\Tests\DatabaseDMLQueryBuilderQueryPartsTest::testCompoundQuery
+     * @covers  Lunr\Gravity\Database\SQLDMLQueryBuilder::except
+     */
+    public function testExcept(): void
+    {
+        $this->class->except('QUERY');
+
+        $this->assertPropertyEquals('compound', 'EXCEPT QUERY');
+    }
+
+    /**
+     * Test specifying a EXCEPT DISTINCT statement.
+     *
+     * @depends Lunr\Gravity\Database\Tests\DatabaseDMLQueryBuilderQueryPartsTest::testCompoundQuery
+     * @covers  Lunr\Gravity\Database\SQLDMLQueryBuilder::except
+     */
+    public function testExceptDistinct(): void
+    {
+        $this->class->except('QUERY', 'DISTINCT');
+
+        $this->assertPropertyEquals('compound', 'EXCEPT DISTINCT QUERY');
+    }
+
+    /**
+     * Test specifying a EXCEPT ALL statement.
+     *
+     * @depends Lunr\Gravity\Database\Tests\DatabaseDMLQueryBuilderQueryPartsTest::testCompoundQuery
+     * @covers  Lunr\Gravity\Database\SQLDMLQueryBuilder::except
+     */
+    public function testExceptAll(): void
+    {
+        $this->class->except('QUERY', 'ALL');
+
+        $this->assertPropertyEquals('compound', 'EXCEPT ALL QUERY');
+    }
+
+    /**
+     * Test fluid interface of the EXCEPT method.
+     *
+     * @covers Lunr\Gravity\Database\SQLDMLQueryBuilder::except
+     */
+    public function testExceptReturnsSelfReference(): void
+    {
+        $return = $this->class->except('QUERY');
+
+        $this->assertInstanceOf('Lunr\Gravity\Database\SQLDMLQueryBuilder', $return);
+        $this->assertSame($this->class, $return);
+    }
+
+    /**
+     * Test specifying a INTERSECT statement.
+     *
+     * @depends Lunr\Gravity\Database\Tests\DatabaseDMLQueryBuilderQueryPartsTest::testCompoundQuery
+     * @covers  Lunr\Gravity\Database\SQLDMLQueryBuilder::intersect
+     */
+    public function testIntersect(): void
+    {
+        $this->class->intersect('QUERY');
+
+        $this->assertPropertyEquals('compound', 'INTERSECT QUERY');
+    }
+
+    /**
+     * Test specifying a INTERSECT DISTINCT statement.
+     *
+     * @depends Lunr\Gravity\Database\Tests\DatabaseDMLQueryBuilderQueryPartsTest::testCompoundQuery
+     * @covers  Lunr\Gravity\Database\SQLDMLQueryBuilder::intersect
+     */
+    public function testIntersectDistinct(): void
+    {
+        $this->class->intersect('QUERY', 'DISTINCT');
+
+        $this->assertPropertyEquals('compound', 'INTERSECT DISTINCT QUERY');
+    }
+
+    /**
+     * Test specifying a INTERSECT ALL statement.
+     *
+     * @depends Lunr\Gravity\Database\Tests\DatabaseDMLQueryBuilderQueryPartsTest::testCompoundQuery
+     * @covers  Lunr\Gravity\Database\SQLDMLQueryBuilder::intersect
+     */
+    public function testIntersectAll(): void
+    {
+        $this->class->intersect('QUERY', 'ALL');
+
+        $this->assertPropertyEquals('compound', 'INTERSECT ALL QUERY');
+    }
+
+    /**
+     * Test fluid interface of the INTERSECT method.
+     *
+     * @covers Lunr\Gravity\Database\SQLDMLQueryBuilder::intersect
+     */
+    public function testIntersectReturnsSelfReference(): void
+    {
+        $return = $this->class->intersect('QUERY');
+
+        $this->assertInstanceOf('Lunr\Gravity\Database\SQLDMLQueryBuilder', $return);
+        $this->assertSame($this->class, $return);
+    }
+
 }
diff --git a/tests/phpunit.xml b/tests/phpunit.xml
index 43b21b2e2edcc223b3ce150480fe18cf71009fb9..acc48e5ea7a3a9fcf37a490f070493b248cd5bf7 100644
--- a/tests/phpunit.xml
+++ b/tests/phpunit.xml
@@ -164,6 +164,7 @@
             <file>../src/Lunr/Gravity/Database/MariaDB/Tests/MariaDBSimpleDMLQueryBuilderBaseTest.php</file>
             <file>../src/Lunr/Gravity/Database/MariaDB/Tests/MariaDBSimpleDMLQueryBuilderDeleteTest.php</file>
             <file>../src/Lunr/Gravity/Database/MariaDB/Tests/MariaDBSimpleDMLQueryBuilderBaseTest.php</file>
+            <file>../src/Lunr/Gravity/Database/MariaDB/Tests/MariaDBSimpleDMLQueryBuilderSelectTest.php</file>
             <file>../src/Lunr/Gravity/Database/SQLite3/Tests/LunrSQLite3Test.php</file>
             <file>../src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3ConnectionBaseTest.php</file>
             <file>../src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3ConnectionSetTest.php</file>
