docs/persistence/sql/overview.md
:::{php:namespace} Atk4\Data\Persistence\Sql
:::
# Overview
DSQL is a dynamic SQL query builder. You can write multi-vendor queries in PHP
profiting from better security, clean syntax and most importantly – sub-query
support. With DSQL you stay in control of when queries are executed and what
data is transmitted. DSQL is easily composable – build one query and use it as
a part of other query.
## Goals of DSQL
- simple and concise syntax
- consistently scalable (e.g. 5 levels of sub-queries, 10 with joins and 15
parameters? no problem)
- "One Query" paradigm
- support for PDO vendors as well as NoSQL databases (with query language
similar to SQL)
- small code footprint (over 50% less than competing frameworks)
- free, licensed under MIT
- no dependencies
- follows design paradigms:
- "[PHP the Agile way](https://github.com/atk4/dsql/wiki/PHP-the-Agile-way)"
- "[Functional ORM](https://github.com/atk4/dsql/wiki/Functional-ORM)"
- "[Open to extend](https://github.com/atk4/dsql/wiki/Open-to-Extend)"
- "[Vendor Transparency](https://github.com/atk4/dsql/wiki/Vendor-Transparency)"
## DSQL by example
The simplest way to explain DSQL is by example:
```
$query = $connection->dsql();
$query->table('employees')
->where('birth_date', '1961-05-02')
->field('count(*)');
echo 'Employees born on May 2, 1961: ' . $query->getOne();
```
The above code will execute the following query:
```sql
select count(*) from `salary` where `birth_date` = :a
:a = "1961-05-02"
```
DSQL can also execute queries with multiple sub-queries, joins, expressions
grouping, ordering, unions as well as queries on result-set.
- See {ref}`quickstart` if you would like to start learning DSQL.
## DSQL is Part of Agile Toolkit
DSQL is a stand-alone and lightweight library with no dependencies and can be
used in any PHP project, big or small.
:::{figure} ../../images/agiletoolkit.png
:alt: Agile Toolkit Stack
:::
DSQL is also a part of [Agile Toolkit](https://atk4.org/) framework and works best with
[Agile Models](https://github.com/atk4/models). Your project may benefit from a higher-level data abstraction
layer, so be sure to look at the rest of the suite.