2 points then;
1. Do you know SQL currently? Because your previous comments implied you don't
2. SQL is a bad implementation of the underlying relational model. And it's just bad in other ways. For one, it's bloody wordy:
select * from people
but as SQL is an expression language, why not?
people
From an answer of mine a few days ago (slightly modified here) to pick out differences:
(
select *
from t1
except
select * from t2
)
union
(
select *
from t2
except
select *
from t1
)
I'd prefer to write that crap as
(t1 \ t2) + (t2 \ t1)
or similar. If you write a lot of SQL, that matters.
SQL aggregates don't nest easily. Transactions are screwed up (https://news.ycombinator.com/item?id=23569513). SQL is poorly composable (https://news.ycombinator.com/item?id=23550420#23561301). For better or worse it has nulls therefore tristate logic. This causes errors! And more.
BTW. transactions don't work in the way you might think, atomically. Which is why MS added https://docs.microsoft.com/en-us/sql/t-sql/statements/set-xa... and I'm sure Pgres has similar. From the link:
"When SET XACT_ABORT is OFF, in some cases only the Transact-SQL statement that raised the error is rolled back and the transaction continues processing"
That peculiarity is from the standard BTW.
SQL is problematic. It could have been much better.