SlideShare ist ein Scribd-Unternehmen logo
1 von 162
Downloaden Sie, um offline zu lesen
Die Mutter aller Abfragesprachen:

SQL im 21. Jahrhundert
@MarkusWinand • @ModernSQL
http://www.almaden.ibm.com/cs/people/chamberlin/sequel-1974.pdf
Die Mutter aller Abfragesprachen:

SQL im 21. Jahrhundert
@MarkusWinand • @ModernSQL
http://www.almaden.ibm.com/cs/people/chamberlin/sequel-1974.pdf
1974 1992
SQL-92 — Tied to the Relational Idea
SQL-92 — Tied to the Relational Idea
Relational Data Model
‣“Atomic” types (domain)
SQL-92 — Tied to the Relational Idea
Relational Data Model
‣“Atomic” types (domain)
Atom image: https://commons.wikimedia.org/wiki/File:Stylised_atom_with_three_Bohr_model_orbits_and_stylised_nucleus.png
SQL-92 — Tied to the Relational Idea
Relational Data Model
‣“Atomic” types (domain)
A B C
Atom image: https://commons.wikimedia.org/wiki/File:Stylised_atom_with_three_Bohr_model_orbits_and_stylised_nucleus.png
SQL-92 — Tied to the Relational Idea
Relational Data Model
‣“Atomic” types (domain)
A B C
SQL-92 — Tied to the Relational Idea
Relational Data Model
‣“Atomic” types (domain)
‣Schema independent of

processing purposes
‣“Normalization”
A B C
SQL-92 — Tied to the Relational Idea
Relational Data Model
‣“Atomic” types (domain)
‣Schema independent of

processing purposes
‣“Normalization”
A B C C D B E
SQL-92 — Tied to the Relational Idea
Relational Data Model
‣“Atomic” types (domain)
‣Schema independent of

processing purposes
‣“Normalization”
Relational Operations
‣Transform data for

each particular

processing purposes
‣JOIN, UNION, nesting, …
A B C C D B E A B C D E
SQL-92 — Tied to the Relational Idea
Relational Data Model
‣“Atomic” types (domain)
‣Schema independent of

processing purposes
‣“Normalization”
Relational Operations
‣Transform data for

each particular

processing purposes
‣JOIN, UNION, nesting, …
A B C C D B E
A B C D E
A B E
SQL-92 — Tied to the Relational Idea
Relational Data Model
‣“Atomic” types (domain)
‣Schema independent of

processing purposes
‣“Normalization”
Relational Operations
‣Transform data for

each particular

processing purposes
‣JOIN, UNION, nesting, …
A B C C D B E
A B C D E
A B E
C D E
SQL-92 — Tied to the Relational Idea
Relational Data Model
‣“Atomic” types (domain)
‣Schema independent of

processing purposes
‣“Normalization”
Relational Operations
‣Transform data for

each particular

processing purposes
‣JOIN, UNION, nesting, …
A B C C D B E
A B C D E
A B E
C D E
1992 1999
https://www.wiscorp.com/DBMS_-_GreatNews-TheRelationalModelIsDead_-_paper_-_sam.pdf
SQL:1999 — Escaping the Relational Cage
To say that these SQL:1999 extensions are mere 

“extended interpretations” of the relational data model

is like saying that an intercontinental ballistic missile is

merely an “extended interpretation” of a spear.
https://www.wiscorp.com/DBMS_-_GreatNews-TheRelationalModelIsDead_-_paper_-_sam.pdf
SQL:1999 — Escaping the Relational Cage
To say that these SQL:1999 extensions are mere 

“extended interpretations” of the relational data model

is like saying that an intercontinental ballistic missile is

merely an “extended interpretation” of a spear.
With SQL/99 you can get the best of both worlds and

of course, you can get the worst of both worlds.

It’s up to the database practitioners to do the right thing.
https://www.wiscorp.com/DBMS_-_GreatNews-TheRelationalModelIsDead_-_paper_-_sam.pdf
SQL:1999 — Escaping the Relational Cage
Relational Model?
SQL:1999 — Escaping the Relational Cage
Relational Model?
Chris DateDate on Database: Writings 2000-2006
SQL:1999 — Escaping the Relational Cage
I was as confused as anyone else
Relational Model?
Chris DateDate on Database: Writings 2000-2006
SQL:1999 — Escaping the Relational Cage
?I was as confused as anyone else
Relational Model?
Chris DateDate on Database: Writings 2000-2006
SQL:1999 — Escaping the Relational Cage
?I was as confused as anyone else
By the early 1990s, however,

I’d seen the light
Relational Model?
Chris DateDate on Database: Writings 2000-2006
SQL:1999 — Escaping the Relational Cage
?I was as confused as anyone else
By the early 1990s, however,

I’d seen the light
Domains Can Contain Anything!
Relational Model?
‣Introduced rich types
Chris DateDate on Database: Writings 2000-2006
SQL:1999 — Escaping the Relational Cage
?I was as confused as anyone else
By the early 1990s, however,

I’d seen the light
Domains Can Contain Anything!
Relational Model?
‣Introduced rich types
Chris DateDate on Database: Writings 2000-2006
SQL:1999 — Escaping the Relational Cage
A
?I was as confused as anyone else
By the early 1990s, however,

I’d seen the light
Domains Can Contain Anything!
Relational Model?
‣Introduced rich types
‣arrays
Chris DateDate on Database: Writings 2000-2006
SQL:1999 — Escaping the Relational Cage
A B
[ , ]
[ ]
[]
?I was as confused as anyone else
By the early 1990s, however,

I’d seen the light
Domains Can Contain Anything!
Relational Model?
‣Introduced rich types
‣arrays
‣Nested tables (multiset)
Chris DateDate on Database: Writings 2000-2006
SQL:1999 — Escaping the Relational Cage
A B
[ , ]
[ ]
[]
C
C D
C D
C D
?I was as confused as anyone else
By the early 1990s, however,

I’d seen the light
Domains Can Contain Anything!
Relational Model?
‣Introduced rich types
‣arrays
‣Nested tables (multiset)
‣composite types (objects)
Chris DateDate on Database: Writings 2000-2006
SQL:1999 — Escaping the Relational Cage
A B C D
[ , ] {x: ,
y: }
[ ] {x: ,
y: }
[] {x: ,
y: }
C D
C D
C D
?I was as confused as anyone else
By the early 1990s, however,

I’d seen the light
Domains Can Contain Anything!
Relational Model?
‣Introduced rich types
‣arrays
‣Nested tables (multiset)
‣composite types (objects)
Non-Relational Operations
‣Introduced recursive

queries that process

their own output
‣Transitive closure
Chris DateDate on Database: Writings 2000-2006
SQL:1999 — Escaping the Relational Cage
?I was as confused as anyone else
By the early 1990s, however,

I’d seen the light
Domains Can Contain Anything!
SQL:1999 — Recursion CREATE	TABLE	t	(	
			id					INTEGER,	
			parent	INTEGER,	
)
SQL:1999 — Recursion CREATE	TABLE	t	(	
			id					INTEGER,	
			parent	INTEGER,	
)
SQL:1999 — Recursion CREATE	TABLE	t	(	
			id					INTEGER,	
			parent	INTEGER,	
)
SQL:1999 — Recursion
SQL:1999 — Recursion
SQL:1999 — Recursion
		SELECT	t.id,	t.parent	
				FROM	t	
			WHERE	t.id	=	?
SQL:1999 — Recursion
		SELECT	t.id,	t.parent	
				FROM	t	
			WHERE	t.id	=	?
UNION	ALL			
		SELECT	t.id,	t.parent	
				FROM	t	
			WHERE	t.parent	=	?
SQL:1999 — Recursion
		SELECT	t.id,	t.parent	
				FROM	t	
			WHERE	t.id	=	?
UNION	ALL			
		SELECT	t.id,	t.parent	
				FROM	t	
			WHERE	t.parent	=	?
SQL:1999 — Recursion
		SELECT	t.id,	t.parent	
				FROM	t	
			WHERE	t.id	=	?
UNION	ALL			
		SELECT	t.id,	t.parent	
				FROM	t	
			WHERE	t.parent	=	?
SQL:1999 — Recursion
WITH	RECURSIVE	prev	(id,	parent)	AS	(	
)

		SELECT	t.id,	t.parent	
				FROM	t	
			WHERE	t.id	=	?
UNION	ALL			
		SELECT	t.id,	t.parent	
				FROM	t	
				JOIN	prev	ON	t.parent	=	prev.id
SELECT	*	FROM	prev
SQL:1999 — Recursion
WITH	RECURSIVE	prev	(id,	parent)	AS	(	
)

		SELECT	t.id,	t.parent	
				FROM	t	
			WHERE	t.id	=	?
UNION	ALL			
		SELECT	t.id,	t.parent	
				FROM	t	
				JOIN	prev	ON	t.parent	=	prev.id
SELECT	*	FROM	prev
SQL:1999 — Recursion
WITH	RECURSIVE	prev	(id,	parent)	AS	(	
)

		SELECT	t.id,	t.parent	
				FROM	t	
			WHERE	t.id	=	?
UNION	ALL			
		SELECT	t.id,	t.parent	
				FROM	t	
				JOIN	prev	ON	t.parent	=	prev.id
SELECT	*	FROM	prev
SQL:1999 — Recursion
1999
2001
2003
2005
2007
2009
2011
2013
2015
2017
5.1 10.2 MariaDB
8.0 MySQL
8.4 PostgreSQL
3.8.3[0]
SQLite
7.0 DB2 LUW
11gR2 Oracle
2005 SQL Server
[0]
Only for top-level SELECT statements
LATERAL
SQL:1999 — LATERAL
[0] Neglecting row values and other workarounds here; [1] https://en.wikipedia.org/wiki/Scalar
Select-list sub-queries must be scalar[0]:
SELECT	…	
					,	(SELECT	column_1	
										FROM	t1	
									WHERE	t1.x	=	t2.y	
							)	AS	c	
		FROM	t2	
				…											
(an atomic quantity that can hold only one value at a time[1])
SQL:1999 — LATERAL
[0] Neglecting row values and other workarounds here; [1] https://en.wikipedia.org/wiki/Scalar
Select-list sub-queries must be scalar[0]:
SELECT	…	
					,	(SELECT	column_1	
										FROM	t1	
									WHERE	t1.x	=	t2.y	
							)	AS	c	
		FROM	t2	
				…											
(an atomic quantity that can hold only one value at a time[1])
✗,	column_2
More than

one column?
Syntax error
SQL:1999 — LATERAL
[0] Neglecting row values and other workarounds here; [1] https://en.wikipedia.org/wiki/Scalar
Select-list sub-queries must be scalar[0]:
SELECT	…	
					,	(SELECT	column_1	
										FROM	t1	
									WHERE	t1.x	=	t2.y	
							)	AS	c	
		FROM	t2	
				…											
(an atomic quantity that can hold only one value at a time[1])
✗,	column_2
More than

one column?
Syntax error
}
More than

one row?
Runtime error!
SQL:1999 — LATERAL
Lateral derived tables lift both limitations and can be correlated:
SELECT	…	
					,	ldt.*	
		FROM	t2	
	CROSS	JOIN	LATERAL	(SELECT	column_1,	column_2	
																							FROM	t1	
																						WHERE	t1.x	=	t2.y	
																				)	AS	ldt	
			…
SQL:1999 — LATERAL
Lateral derived tables lift both limitations and can be correlated:
SELECT	…	
					,	ldt.*	
		FROM	t2	
	CROSS	JOIN	LATERAL	(SELECT	column_1,	column_2	
																							FROM	t1	
																						WHERE	t1.x	=	t2.y	
																				)	AS	ldt	
			…											
“Derived table” means

it’s in the

FROM/JOIN clause
SQL:1999 — LATERAL
Lateral derived tables lift both limitations and can be correlated:
SELECT	…	
					,	ldt.*	
		FROM	t2	
	CROSS	JOIN	LATERAL	(SELECT	column_1,	column_2	
																							FROM	t1	
																						WHERE	t1.x	=	t2.y	
																				)	AS	ldt	
			…											
“Derived table” means

it’s in the

FROM/JOIN clause
Still
“correlated”
SQL:1999 — LATERAL
Lateral derived tables lift both limitations and can be correlated:
SELECT	…	
					,	ldt.*	
		FROM	t2	
	CROSS	JOIN	LATERAL	(SELECT	column_1,	column_2	
																							FROM	t1	
																						WHERE	t1.x	=	t2.y	
																				)	AS	ldt	
			…											
“Derived table” means

it’s in the

FROM/JOIN clause
Still
“correlated”
Regular join
semantics
SQL:1999 — LATERAL
SQL:1999 — LATERAL
‣ Top-N per group


inside a lateral derived table

FETCH	FIRST (or LIMIT, TOP)

applies per row from left tables.
SQL:1999 — LATERAL
‣ Top-N per group


inside a lateral derived table

FETCH	FIRST (or LIMIT, TOP)

applies per row from left tables.
		
	FROM	t	
	JOIN	LATERAL	(SELECT	…	
																	FROM	…	
																WHERE	t.c=…	
																ORDER	BY	…	
																LIMIT	10	
														)	derived_table
SQL:1999 — LATERAL
‣ Top-N per group


inside a lateral derived table

FETCH	FIRST (or LIMIT, TOP)

applies per row from left tables.
Add proper index

for Top-N query
https://use-the-index-luke.com/sql/partial-results/top-n-queries
		
	FROM	t	
	JOIN	LATERAL	(SELECT	…	
																	FROM	…	
																WHERE	t.c=…	
																ORDER	BY	…	
																LIMIT	10	
														)	derived_table
SQL:1999 — LATERAL
‣ Top-N per group


inside a lateral derived table

FETCH	FIRST (or LIMIT, TOP)

applies per row from left tables.
‣ Also useful to find most recent
news from several subscribed
topics (“multi-source top-N”).
Add proper index

for Top-N query
https://use-the-index-luke.com/sql/partial-results/top-n-queries
		
	FROM	t	
	JOIN	LATERAL	(SELECT	…	
																	FROM	…	
																WHERE	t.c=…	
																ORDER	BY	…	
																LIMIT	10	
														)	derived_table
SQL:1999 — LATERAL
‣ Top-N per group


inside a lateral derived table

FETCH	FIRST (or LIMIT, TOP)

applies per row from left tables.
‣ Also useful to find most recent
news from several subscribed
topics (“multi-source top-N”).
‣ Table function arguments


(TABLE often implies LATERAL)

Add proper index

for Top-N query
https://use-the-index-luke.com/sql/partial-results/top-n-queries
		
	FROM	t	
	JOIN	TABLE	(your_func(t.c))
		
	FROM	t	
	JOIN	LATERAL	(SELECT	…	
																	FROM	…	
																WHERE	t.c=…	
																ORDER	BY	…	
																LIMIT	10	
														)	derived_table
SQL:1999 — LATERAL
1999
2001
2003
2005
2007
2009
2011
2013
2015
2017
5.1 MariaDB
8.0.14 MySQL
9.3 PostgreSQL
SQLite
9.1 DB2 LUW
11gR1[0]
12cR1 Oracle
2005[1]
SQL Server
[0]
Undocumented. Requires setting trace event 22829.
[1]
LATERAL is not supported as of SQL Server 2016 but [CROSS|OUTER]	APPLY can be used for the same effect.
1999 2003
http://www.acm.org:80/sigmod/record/issues/0206/standard.pdf (via Wayback machine)
SQL:2003 — Schemaless & Analytical
Schemaless
‣Introduced XML
‣Non-uniform

documents in

a single column
SQL:2003 — Schemaless & Analytical
Schemaless
‣Introduced XML
‣Non-uniform

documents in

a single column
Later:
‣ JSON added with SQL:2016
‣ Proprietary JSON support:
‣ 2012: PostgreSQL
‣ 2014: Oracle
‣ 2015: MySQL
‣ 2016: SQL Server
SQL:2003 — Schemaless & Analytical
Analytical
‣Introduced

window functions
‣Accessing other rows

of the current result
Schemaless
‣Introduced XML
‣Non-uniform

documents in

a single column
Later:
‣ JSON added with SQL:2016
‣ Proprietary JSON support:
‣ 2012: PostgreSQL
‣ 2014: Oracle
‣ 2015: MySQL
‣ 2016: SQL Server
SQL:2003 — Schemaless & Analytical
Analytical
‣Introduced

window functions
‣Accessing other rows

of the current result
Schemaless
‣Introduced XML
‣Non-uniform

documents in

a single column
Later:
‣ Extended in SQL:2011
‣ Popular among “New SQLs”
‣ 2013: BigQuery, Hive
‣ 2014: Impala
‣ 2015: Spark SQL
‣ 2016: NuoDB, MemSQL,
Cockroach DB, VoltDB
Later:
‣ JSON added with SQL:2016
‣ Proprietary JSON support:
‣ 2012: PostgreSQL
‣ 2014: Oracle
‣ 2015: MySQL
‣ 2016: SQL Server
SELECT	id,	value	
		FROM	t
id
1
2
3
4
5
6
value
+10
+20
-10
+50
-30
-20
SQL:2003 — Analytical
SELECT	id,	value	
		FROM	t
id
1
2
3
4
5
6
value
+10
+20
-10
+50
-30
-20
bal
SQL:2003 — Analytical
SELECT	id,	value	
		FROM	t
id
1
2
3
4
5
6
value
+10
+20
-10
+50
-30
-20
bal
SQL:2003 — Analytical
+10
SELECT	id,	value	
		FROM	t
id
1
2
3
4
5
6
value
+10
+20
-10
+50
-30
-20
bal
SQL:2003 — Analytical
+10
+30
+20
+70
+40
+20
SELECT	id,	value	
		FROM	t
id
1
2
3
4
5
6
value
+10
+20
-10
+50
-30
-20
bal
SQL:2003 — Analytical
					,	SUM(value)	
							OVER	(	
							
							)	bal
+10
+30
+20
+70
+40
+20
SELECT	id,	value	
		FROM	t
id
1
2
3
4
5
6
value
+10
+20
-10
+50
-30
-20
bal
SQL:2003 — Analytical
ORDER	BY	id
					,	SUM(value)	
							OVER	(	
							
							)	bal
+10
+30
+20
+70
+40
+20
SELECT	id,	value	
		FROM	t
id
1
2
3
4
5
6
value
+10
+20
-10
+50
-30
-20
bal
SQL:2003 — Analytical
ORDER	BY	id
					,	SUM(value)	
							OVER	(	
							
							)	bal
+10
+30
+20
+70
+40
+20
SELECT	id,	value	
		FROM	t
id
1
2
3
4
5
6
value
+10
+20
-10
+50
-30
-20
bal
SQL:2003 — Analytical
ORDER	BY	id
ROWS	BETWEEN	
					UNBOUNDED	PRECEDING
					,	SUM(value)	
							OVER	(	
							
							)	bal
+10
+30
+20
+70
+40
+20
SELECT	id,	value	
		FROM	t
id
1
2
3
4
5
6
value
+10
+20
-10
+50
-30
-20
bal
SQL:2003 — Analytical
ORDER	BY	id
ROWS	BETWEEN	
					UNBOUNDED	PRECEDING
					,	SUM(value)	
							OVER	(	
							
							)	bal
+10
+30
+20
+70
+40
+20
SELECT	id,	value	
		FROM	t
id
1
2
3
4
5
6
value
+10
+20
-10
+50
-30
-20
bal
SQL:2003 — Analytical
ORDER	BY	id
ROWS	BETWEEN	
					UNBOUNDED	PRECEDING
AND	CURRENT	ROW
					,	SUM(value)	
							OVER	(	
							
							)	bal
+10
+30
+20
+70
+40
+20
SELECT	id,	value	
		FROM	t
id
1
2
3
4
5
6
value
+10
+20
-10
+50
-30
-20
bal
SQL:2003 — Analytical
ORDER	BY	id
ROWS	BETWEEN	
					UNBOUNDED	PRECEDING
AND	CURRENT	ROW
					,	SUM(value)	
							OVER	(	
							
							)	bal
+10
+30
+20
+70
+40
+20
SELECT	id,	value	
		FROM	t
id
1
2
3
4
5
6
value
+10
+20
-10
+50
-30
-20
bal
SQL:2003 — Analytical
ORDER	BY	id
ROWS	BETWEEN	
					UNBOUNDED	PRECEDING
AND	CURRENT	ROW
					,	SUM(value)	
							OVER	(	
							
							)	bal
+10
+30
+20
+70
+40
+20
SELECT	id,	value	
		FROM	t
id value bal
1 +10
2 +20
3 -10
4 +50
5 -30
6 -20
SQL:2003 — Analytical
ORDER	BY	id
ROWS	BETWEEN	
					UNBOUNDED	PRECEDING
AND	CURRENT	ROW
					,	SUM(value)	
							OVER	(	
							
							)	bal
+10
+30
+20
+70
+40
+20
SELECT	id,	value	
		FROM	t
id value bal
1 +10
2 +20
3 -10
4 +50
5 -30
6 -20
SQL:2003 — Analytical
ORDER	BY	id
ROWS	BETWEEN	
					UNBOUNDED	PRECEDING
AND	CURRENT	ROW
					,	SUM(value)	
							OVER	(	
							
							)	bal
+10
+30
+20
+70
+40
+20
SELECT	id,	value	
		FROM	t
id value bal
1 +10
2 +20
3 -10
4 +50
5 -30
6 -20
SQL:2003 — Analytical
ORDER	BY	id
ROWS	BETWEEN	
					UNBOUNDED	PRECEDING
AND	CURRENT	ROW
					,	SUM(value)	
							OVER	(	
							
							)	bal
+10
+30
+20
+70
+40
+20
SELECT	id,	value	
		FROM	t
id value bal
1 +10
2 +20
3 -10
4 +50
5 -30
6 -20
SQL:2003 — Analytical
ORDER	BY	id
ROWS	BETWEEN	
					UNBOUNDED	PRECEDING
AND	CURRENT	ROW
					,	SUM(value)	
							OVER	(	
							
							)	bal
+10
+30
+20
+70
+40
+20
SELECT	id,	value	
		FROM	t
id value bal
1 +10
2 +20
3 -10
4 +50
5 -30
6 -20
SQL:2003 — Analytical
ORDER	BY	id
ROWS	BETWEEN	
					UNBOUNDED	PRECEDING
AND	CURRENT	ROW
					,	SUM(value)	
							OVER	(	
							
							)	bal
+10
+30
+20
+70
+40
+20
SQL:2003 — Analytical
1999
2001
2003
2005
2007
2009
2011
2013
2015
2017
5.1 10.2 MariaDB
8.0 MySQL
8.4 PostgreSQL
3.25.0 SQLite
7.0 DB2 LUW
8i Oracle
2005[0]
2012 SQL Server
[0]
No framing
SQL:2003 — Analytical (Median)
SELECT	d1.val	
		FROM	data	d1	
		JOIN	data	d2	
				ON	(d1.val	<	d2.val	
							OR	(d1.val=d2.val	AND	d1.id<d2.id))	
	GROUP	BY	d1.val	
HAVING	count(*)	=		
							(SELECT	FLOOR(COUNT(*)/2)	
										FROM	data	d3)
SQL:2003 — Analytical (Median)
SELECT	d1.val	
		FROM	data	d1	
		JOIN	data	d2	
				ON	(d1.val	<	d2.val	
							OR	(d1.val=d2.val	AND	d1.id<d2.id))	
	GROUP	BY	d1.val	
HAVING	count(*)	=		
							(SELECT	FLOOR(COUNT(*)/2)	
										FROM	data	d3)
Number rows
SQL:2003 — Analytical (Median)
SELECT	d1.val	
		FROM	data	d1	
		JOIN	data	d2	
				ON	(d1.val	<	d2.val	
							OR	(d1.val=d2.val	AND	d1.id<d2.id))	
	GROUP	BY	d1.val	
HAVING	count(*)	=		
							(SELECT	FLOOR(COUNT(*)/2)	
										FROM	data	d3)
Number rows
Pick middle one
SQL:2003 — Analytical (Median)
SELECT	d1.val	
		FROM	data	d1	
		JOIN	data	d2	
				ON	(d1.val	<	d2.val	
							OR	(d1.val=d2.val	AND	d1.id<d2.id))	
	GROUP	BY	d1.val	
HAVING	count(*)	=		
							(SELECT	FLOOR(COUNT(*)/2)	
										FROM	data	d3)
Number rows
Pick middle one
SQL:2003 — Analytical (Median)
SELECT	d1.val	
		FROM	data	d1	
		JOIN	data	d2	
				ON	(d1.val	<	d2.val	
							OR	(d1.val=d2.val	AND	d1.id<d2.id))	
	GROUP	BY	d1.val	
HAVING	count(*)	=		
							(SELECT	FLOOR(COUNT(*)/2)	
										FROM	data	d3)
Number rows
Pick middle one
SQL:2003 — Analytical (Median)
SQL:2003 — Analytical (Median)
SELECT	PERCENTILE_DISC(0.5)	WITHIN	GROUP	(ORDER	BY	val)	
		FROM	data
SQL:2003 — Analytical (Median)
SELECT	PERCENTILE_DISC(0.5)	WITHIN	GROUP	(ORDER	BY	val)	
		FROM	data
Median
SQL:2003 — Analytical (Median)
SELECT	PERCENTILE_DISC(0.5)	WITHIN	GROUP	(ORDER	BY	val)	
		FROM	data
Median
Which value?
SQL:2003 — Analytical (Median)
SELECT	PERCENTILE_DISC(0.5)	WITHIN	GROUP	(ORDER	BY	val)	
		FROM	data
SQL:2003 — Analytical (Median)
SELECT	PERCENTILE_DISC(0.5)	WITHIN	GROUP	(ORDER	BY	val)	
		FROM	data
Two variants:
‣for discrete values

(categories)
‣for continuous values

(linear interpolation)
SQL:2003 — Analytical (Median)
1
2
3
4
0 0.25 0.5 0.75 1
1
2
3
4
SELECT	PERCENTILE_DISC(0.5)	WITHIN	GROUP	(ORDER	BY	val)	
		FROM	data
Two variants:
‣for discrete values

(categories)
‣for continuous values

(linear interpolation)
SQL:2003 — Analytical (Median)
1
2
3
4
0 0.25 0.5 0.75 1
1
2
3
4
0 0.25 0.5 0.75 1
1
2
3
4
PERCENTILE_DISC
SELECT	PERCENTILE_DISC(0.5)	WITHIN	GROUP	(ORDER	BY	val)	
		FROM	data
Two variants:
‣for discrete values

(categories)
‣for continuous values

(linear interpolation)
SQL:2003 — Analytical (Median)
1
2
3
4
0 0.25 0.5 0.75 1
1
2
3
4
0 0.25 0.5 0.75 1
1
2
3
4
PERCENTILE_DISC
0 0.25 0.5 0.75 1
1
2
3
4
PERCENTILE_DISC
SELECT	PERCENTILE_DISC(0.5)	WITHIN	GROUP	(ORDER	BY	val)	
		FROM	data
Two variants:
‣for discrete values

(categories)
‣for continuous values

(linear interpolation)
SQL:2003 — Analytical (Median)
1
2
3
4
0 0.25 0.5 0.75 1
1
2
3
4
0 0.25 0.5 0.75 1
1
2
3
4
PERCENTILE_DISC
0 0.25 0.5 0.75 1
1
2
3
4
PERCENTILE_DISC
0 0.25 0.5 0.75 1
1
2
3
4
PERCENTILE_DISC(0.5)
SELECT	PERCENTILE_DISC(0.5)	WITHIN	GROUP	(ORDER	BY	val)	
		FROM	data
Two variants:
‣for discrete values

(categories)
‣for continuous values

(linear interpolation)
SQL:2003 — Analytical (Median)
1
2
3
4
0 0.25 0.5 0.75 1
1
2
3
4
0 0.25 0.5 0.75 1
1
2
3
4
PERCENTILE_DISC
0 0.25 0.5 0.75 1
1
2
3
4
PERCENTILE_DISC
0 0.25 0.5 0.75 1
1
2
3
4
PERCENTILE_DISC(0.5)
0 0.25 0.5 0.75 1
1
2
3
4
PERCENTILE_CONT
PERCENTILE_DISC(0.5)
SELECT	PERCENTILE_DISC(0.5)	WITHIN	GROUP	(ORDER	BY	val)	
		FROM	data
Two variants:
‣for discrete values

(categories)
‣for continuous values

(linear interpolation)
SQL:2003 — Analytical (Median)
1
2
3
4
0 0.25 0.5 0.75 1
1
2
3
4
0 0.25 0.5 0.75 1
1
2
3
4
PERCENTILE_DISC
0 0.25 0.5 0.75 1
1
2
3
4
PERCENTILE_DISC
0 0.25 0.5 0.75 1
1
2
3
4
PERCENTILE_DISC(0.5)
0 0.25 0.5 0.75 1
1
2
3
4
PERCENTILE_CONT
PERCENTILE_DISC(0.5)
0 0.25 0.5 0.75 1
1
2
3
4
PERCENTILE_CONT(0.5)
PERCENTILE_DISC(0.5)
SELECT	PERCENTILE_DISC(0.5)	WITHIN	GROUP	(ORDER	BY	val)	
		FROM	data
Two variants:
‣for discrete values

(categories)
‣for continuous values

(linear interpolation)
SQL:2003 — Analytical (Median)
SQL:2003 — Analytical (Median)
1999
2001
2003
2005
2007
2009
2011
2013
2015
2017
5.1 10.3.7[0]
MariaDB
MySQL
9.4 PostgreSQL
SQLite
DB2 LUW
9iR1 Oracle
2012[0]
SQL Server
[0]
Only as window function (OVER required).
2003 2016
SQL:2016 — JSON
http://standards.iso.org/ittf/PubliclyAvailableStandards/c067367_ISO_IEC_TR_19075-6_2017.zip
SQL:2016 — JSON
[	
		{	
				"id":	42,	
				"a1":	"foo"	
		},	
		{	
				"id":	43,	
				"a1":	"bar"	
		}	
]
http://standards.iso.org/ittf/PubliclyAvailableStandards/c067367_ISO_IEC_TR_19075-6_2017.zip
SQL:2016 — JSON
id a1
42 foo
43 bar
[	
		{	
				"id":	42,	
				"a1":	"foo"	
		},	
		{	
				"id":	43,	
				"a1":	"bar"	
		}	
]
http://standards.iso.org/ittf/PubliclyAvailableStandards/c067367_ISO_IEC_TR_19075-6_2017.zip
SELECT	*	
		FROM	JSON_TABLE	
							(	?	
							,	'$[*]'	
									COLUMNS	
									(	id	INT								PATH	'$.id'	
									,	a1	VARCHAR(…)	PATH	'$.a1'	
									)	
							)	r				
SQL:2016 — JSON_TABLE
[	
		{	
				"id":	42,	
				"a1":	"foo"	
		},	
		{	
				"id":	43,	
				"a1":	"bar"	
		}	
]
id a1
42 foo
43 bar
SELECT	*	
		FROM	JSON_TABLE	
							(	?	
							,	'$[*]'	
									COLUMNS	
									(	id	INT								PATH	'$.id'	
									,	a1	VARCHAR(…)	PATH	'$.a1'	
									)	
							)	r				
SQL:2016 — JSON_TABLE
[	
		{	
				"id":	42,	
				"a1":	"foo"	
		},	
		{	
				"id":	43,	
				"a1":	"bar"	
		}	
]
id a1
42 foo
43 bar
Bind
Parameter
SELECT	*	
		FROM	JSON_TABLE	
							(	?	
							,	'$[*]'	
									COLUMNS	
									(	id	INT								PATH	'$.id'	
									,	a1	VARCHAR(…)	PATH	'$.a1'	
									)	
							)	r				
SQL:2016 — JSON_TABLE
[	
		{	
				"id":	42,	
				"a1":	"foo"	
		},	
		{	
				"id":	43,	
				"a1":	"bar"	
		}	
]
id a1
42 foo
43 bar
SQL/JSON Path
‣ Query language to
select elements from
a JSON document
‣ Defined in the

SQL standard
Bind
Parameter
SELECT	*	
		FROM	JSON_TABLE	
							(	?	
							,	'$[*]'	
									COLUMNS	
									(	id	INT								PATH	'$.id'	
									,	a1	VARCHAR(…)	PATH	'$.a1'	
									)	
							)	r				
SQL:2016 — JSON_TABLE
[	
		{	
				"id":	42,	
				"a1":	"foo"	
		},	
		{	
				"id":	43,	
				"a1":	"bar"	
		}	
]
id a1
42 foo
43 bar
SQL/JSON Path
‣ Query language to
select elements from
a JSON document
‣ Defined in the

SQL standard
Bind
Parameter
SELECT	*	
		FROM	JSON_TABLE	
							(	?	
							,	'$[*]'	
									COLUMNS	
									(	id	INT								PATH	'$.id'	
									,	a1	VARCHAR(…)	PATH	'$.a1'	
									)	
							)	r				
SQL:2016 — JSON_TABLE
[	
		{	
				"id":	42,	
				"a1":	"foo"	
		},	
		{	
				"id":	43,	
				"a1":	"bar"	
		}	
]
id a1
42 foo
43 bar
SQL/JSON Path
‣ Query language to
select elements from
a JSON document
‣ Defined in the

SQL standard
Bind
Parameter
SQL:2016 — JSON_TABLE — Use Case
SELECT	*	
		FROM	JSON_TABLE	
							(	?	
							,	'$[*]'	
									COLUMNS	
									(	id	INT								PATH	'$.id'	
									,	a1	VARCHAR(…)	PATH	'$.a1'	
									)	
							)	r
SQL:2016 — JSON_TABLE — Use Case
SELECT	*	
		FROM	JSON_TABLE	
							(	?	
							,	'$[*]'	
									COLUMNS	
									(	id	INT								PATH	'$.id'	
									,	a1	VARCHAR(…)	PATH	'$.a1'	
									)	
							)	r				
INSERT	INTO	target_table
SQL:2016 — JSON_TABLE
1999
2001
2003
2005
2007
2009
2011
2013
2015
2017
MariaDB
8.0 MySQL
PostgreSQL
SQLite
DB2 LUW
12cR1 Oracle
SQL Server
MATCH_RECOGNIZE

(Row Pattern Recognition)
Time
30 minutes
Example: Logfile
SQL:2016 — Pattern Matching
Example: Logfile
Time
30 minutes
Session 1 Session 2
Session 3
Session 4
SQL:2016 — Pattern Matching
Time
30 minutes
SQL:2016 — Pattern Matching
SELECT	count(*)	sessions,	avg(duration)	avg_duration	
		FROM	(SELECT	MAX(ts)	-	MIN(ts)	duration	
										FROM	(SELECT	ts,	SUM(grp_start)	OVER(ORDER	BY	ts)	session_no	
																		FROM	(SELECT	ts,	CASE	WHEN	ts	>=	LAG(	ts,	1,	DATE'1900-01-01'	)	
																																																			OVER(	ORDER	BY	ts	)	
																																																			+	INTERVAL	'30'	minute	
																																								THEN	1	
																																				END	grp_start	
																										FROM	log	
																							)	tagged	
															)	numbered	
									GROUP	BY	session_no	
							)	grouped
Time
30 minutes
SQL:2016 — Pattern Matching
SELECT	count(*)	sessions,	avg(duration)	avg_duration	
		FROM	(SELECT	MAX(ts)	-	MIN(ts)	duration	
										FROM	(SELECT	ts,	SUM(grp_start)	OVER(ORDER	BY	ts)	session_no	
																		FROM	(SELECT	ts,	CASE	WHEN	ts	>=	LAG(	ts,	1,	DATE'1900-01-01'	)	
																																																			OVER(	ORDER	BY	ts	)	
																																																			+	INTERVAL	'30'	minute	
																																								THEN	1	
																																				END	grp_start	
																										FROM	log	
																							)	tagged	
															)	numbered	
									GROUP	BY	session_no	
							)	grouped
Time
30 minutes
Start-of-group
tags
SQL:2016 — Pattern Matching
SELECT	count(*)	sessions,	avg(duration)	avg_duration	
		FROM	(SELECT	MAX(ts)	-	MIN(ts)	duration	
										FROM	(SELECT	ts,	SUM(grp_start)	OVER(ORDER	BY	ts)	session_no	
																		FROM	(SELECT	ts,	CASE	WHEN	ts	>=	LAG(	ts,	1,	DATE'1900-01-01'	)	
																																																			OVER(	ORDER	BY	ts	)	
																																																			+	INTERVAL	'30'	minute	
																																								THEN	1	
																																				END	grp_start	
																										FROM	log	
																							)	tagged	
															)	numbered	
									GROUP	BY	session_no	
							)	grouped
Time
30 minutes
Start-of-group
tags
SQL:2016 — Pattern Matching
SELECT	count(*)	sessions,	avg(duration)	avg_duration	
		FROM	(SELECT	MAX(ts)	-	MIN(ts)	duration	
										FROM	(SELECT	ts,	SUM(grp_start)	OVER(ORDER	BY	ts)	session_no	
																		FROM	(SELECT	ts,	CASE	WHEN	ts	>=	LAG(	ts,	1,	DATE'1900-01-01'	)	
																																																			OVER(	ORDER	BY	ts	)	
																																																			+	INTERVAL	'30'	minute	
																																								THEN	1	
																																				END	grp_start	
																										FROM	log	
																							)	tagged	
															)	numbered	
									GROUP	BY	session_no	
							)	grouped
Time
30 minutes
number
sessions
SQL:2016 — Pattern Matching
SELECT	count(*)	sessions,	avg(duration)	avg_duration	
		FROM	(SELECT	MAX(ts)	-	MIN(ts)	duration	
										FROM	(SELECT	ts,	SUM(grp_start)	OVER(ORDER	BY	ts)	session_no	
																		FROM	(SELECT	ts,	CASE	WHEN	ts	>=	LAG(	ts,	1,	DATE'1900-01-01'	)	
																																																			OVER(	ORDER	BY	ts	)	
																																																			+	INTERVAL	'30'	minute	
																																								THEN	1	
																																				END	grp_start	
																										FROM	log	
																							)	tagged	
															)	numbered	
									GROUP	BY	session_no	
							)	grouped
Time
30 minutes
number
sessions
2222 2 33 3 44 42 3 4
1
SQL:2016 — Pattern Matching
.S*
SQL:2016 — Pattern Matching
.S*
Regular Expression
SQL:2016 — Pattern Matching
any character non-white space
.S*
{
Rail track diagram by regexper.com
SQL:2016 — Pattern Matching
any character non-white space
.S*
{
{ Rail track diagram by regexper.com
SQL:2016 — Pattern Matching
any character non-white spaceany character non-white space
.S*
{
{{
Rail track diagram by regexper.com
SQL:2016 — Pattern Matching
SELECT	COUNT(*)	sessions,	AVG(duration)	avg_duration	
		FROM	log	
							MATCH_RECOGNIZE(	
								ORDER	BY	ts	
								MEASURES	
									LAST(ts)	-	FIRST(ts)	AS	duration	
								ONE	ROW	PER	MATCH	
								PATTERN	(	any	cont*	)	
								DEFINE	cont	AS	ts	<	PREV(ts)	
																										+	INTERVAL	'30'	MINUTE		
							)	t
Time
30 minutes
Oracle doesn’t support avg on intervals — query doesn’t work as shown
SQL:2016 — Pattern Matching
SELECT	COUNT(*)	sessions,	AVG(duration)	avg_duration	
		FROM	log	
							MATCH_RECOGNIZE(	
								ORDER	BY	ts	
								MEASURES	
									LAST(ts)	-	FIRST(ts)	AS	duration	
								ONE	ROW	PER	MATCH	
								PATTERN	(	any	cont*	)	
								DEFINE	cont	AS	ts	<	PREV(ts)	
																										+	INTERVAL	'30'	MINUTE		
							)	t
Time
30 minutes
define

continued
Oracle doesn’t support avg on intervals — query doesn’t work as shown
SQL:2016 — Pattern Matching
SELECT	COUNT(*)	sessions,	AVG(duration)	avg_duration	
		FROM	log	
							MATCH_RECOGNIZE(	
								ORDER	BY	ts	
								MEASURES	
									LAST(ts)	-	FIRST(ts)	AS	duration	
								ONE	ROW	PER	MATCH	
								PATTERN	(	any	cont*	)	
								DEFINE	cont	AS	ts	<	PREV(ts)	
																										+	INTERVAL	'30'	MINUTE		
							)	t
Time
30 minutes
any number

of “cont”

rows
Oracle doesn’t support avg on intervals — query doesn’t work as shown
SQL:2016 — Pattern Matching
SELECT	COUNT(*)	sessions,	AVG(duration)	avg_duration	
		FROM	log	
							MATCH_RECOGNIZE(	
								ORDER	BY	ts	
								MEASURES	
									LAST(ts)	-	FIRST(ts)	AS	duration	
								ONE	ROW	PER	MATCH	
								PATTERN	(	any	cont*	)	
								DEFINE	cont	AS	ts	<	PREV(ts)	
																										+	INTERVAL	'30'	MINUTE		
							)	t
Time
30 minutes
Very much

like GROUP BY
Oracle doesn’t support avg on intervals — query doesn’t work as shown
SQL:2016 — Pattern Matching
SELECT	COUNT(*)	sessions,	AVG(duration)	avg_duration	
		FROM	log	
							MATCH_RECOGNIZE(	
								ORDER	BY	ts	
								MEASURES	
									LAST(ts)	-	FIRST(ts)	AS	duration	
								ONE	ROW	PER	MATCH	
								PATTERN	(	any	cont*	)	
								DEFINE	cont	AS	ts	<	PREV(ts)	
																										+	INTERVAL	'30'	MINUTE		
							)	t
Time
30 minutes
Very much

like SELECT
Oracle doesn’t support avg on intervals — query doesn’t work as shown
SQL:2016 — Pattern Matching
SQL:2016 — Pattern Matching
1999
2001
2003
2005
2007
2009
2011
2013
2015
2017
MariaDB
MySQL
PostgreSQL
SQLite
DB2 LUW
12cR1 Oracle
SQL Server
2011 2016
SQL:2011 — Time Travelling
http://cs.ulb.ac.be/public/_media/teaching/infoh415/tempfeaturessql2011.pdf
SQL:2011 — Time Travelling
Application Versioning
‣Dedicated syntax added
‣When did something

happen in the

real world?
http://cs.ulb.ac.be/public/_media/teaching/infoh415/tempfeaturessql2011.pdf
SQL:2011 — Time Travelling
Application Versioning
‣Dedicated syntax added
‣When did something

happen in the

real world?
New syntax (excerpt)
‣ FOR	PORTION	OF in

UPDATE and DELETE
‣ WITHOUT	OVERLAPS in UNIQUE
constraints & PRIMARY	KEYS	
‣ [IMMEDIATELY]	PRECEDES,	
OVERLAPS in WHERE,HAVING,…
SQL:2011 — Time Travelling
System Versioning
‣Fully automatic and

(almost) transparent
‣When did we learn

about something
Application Versioning
‣Dedicated syntax added
‣When did something

happen in the

real world?
New syntax (excerpt)
‣ FOR	PORTION	OF in

UPDATE and DELETE
‣ WITHOUT	OVERLAPS in UNIQUE
constraints & PRIMARY	KEYS	
‣ [IMMEDIATELY]	PRECEDES,	
OVERLAPS in WHERE,HAVING,…
SQL:2011 — Time Travelling
System Versioning
‣Fully automatic and

(almost) transparent
‣When did we learn

about something
Application Versioning
‣Dedicated syntax added
‣When did something

happen in the

real world?
New syntax (excerpt)
‣ FOR	PORTION	OF in

UPDATE and DELETE
‣ WITHOUT	OVERLAPS in UNIQUE
constraints & PRIMARY	KEYS	
‣ [IMMEDIATELY]	PRECEDES,	
OVERLAPS in WHERE,HAVING,…	
Transparent changes,
new syntax for queries
‣ INSERT, UPDATE & DELETE

use the system time
automatically
‣ SELECT can use FOR	
SYSTEM_TIME	AS	OF
SQL:2011 — Application Time Periods
SQL:2011 — Application Time Periods
CREATE	TABLE	t	(	
			...	
	,	from	TIMESTAMP(9)		
	,	till	TIMESTAMP(9)	
	,	PERIOD	FOR	a	(from,	till)	
)
SQL:2011 — Application Time Periods
ID Data From Till
1 X 10:00:00 12:00:00
INSERT	t	(id,	data,	from.					,	till.					)			

		VALUES	(	1,		'X',	'10:00:00',	'12:00:00')
SQL:2011 — Application Time Periods
UPDATE	t

			FOR	PORTION	OF	a	FROM	'10:30:00'	TO	'11:30:00'	
			SET	DATA	=	'Y'
ID Data From Till
1 X 10:00:00 10:30:00
1 Y 10:30:00 11:30:00
1 X 11:30:00 12:00:00
ID Data From Till
1 X 10:00:00 12:00:00
INSERT	t	(id,	data,	from.					,	till.					)			

		VALUES	(	1,		'X',	'10:00:00',	'12:00:00')
SQL:2011 — Application Time Periods
1999
2001
2003
2005
2007
2009
2011
2013
2015
2017
5.1 MariaDB
MySQL
PostgreSQL
SQLite
10.5 DB2 LUW
Oracle
SQL Server
SQL:2011 — Application Time Periods
1999
2001
2003
2005
2007
2009
2011
2013
2015
2017
5.1 MariaDB
MySQL
PostgreSQL
SQLite
10.5 DB2 LUW
Oracle
SQL Server
SQL:2011 — System Versioning
SQL:2011 — System Versioning
CREATE	TABLE	t	(	
			...	
	,	from	TIMESTAMP(9)	GENERATED	ALWAYS

																					AS	ROW	START	
	,	till	TIMESTAMP(9)	GENERATED	ALWAYS

																					AS	ROW	END

	,	PERIOD	FOR	SYSTEM_TIME	(from,	till)	
)	WITH	SYSTEM	VERSIONING
SQL:2011 — System Versioning
SQL:2011 — System Versioning
INSERT	INTO	t	(id,	data)

							VALUES	(1	,	'X'	)
id data from till
1 X 10:00
SQL:2011 — System Versioning
INSERT	INTO	t	(id,	data)

							VALUES	(1	,	'X'	)
id data from till
1 X 10:00
UPDATE	t	
			SET	data	=	'Y'	
	WHERE	id	=	1
id data from till
1 X 10:00 11:00
1 Y 11:00
SQL:2011 — System Versioning
INSERT	INTO	t	(id,	data)

							VALUES	(1	,	'X'	)
id data from till
1 X 10:00
UPDATE	t	
			SET	data	=	'Y'	
	WHERE	id	=	1
id data from till
1 X 10:00 11:00
1 Y 11:00
DELETE	FROM	t	
	WHERE	id	=	1
id data from till
1 X 10:00 11:00
1 Y 11:00 12:00
SQL:2011 — System Versioning
id data from till
1 X 10:00 11:00
1 Y 11:00 12:00
SQL:2011 — System Versioning
id data from till
1 X 10:00 11:00
1 Y 11:00 12:00
SELECT	*	
		FROM	t
id data from till
SQL:2011 — System Versioning
id data from till
1 X 10:00 11:00
1 Y 11:00 12:00
SELECT	*	
		FROM	t
id data from till
SELECT	*	
		FROM	t	
			FOR	SYSTEM_TIME	AS	OF

			TIMESTAMP'…10:30:00'
id data from till
1 X 10:00 11:00
SQL:2011 — System Versioning
1999
2001
2003
2005
2007
2009
2011
2013
2015
2017
5.1 10.3 MariaDB
MySQL
PostgreSQL
SQLite
10.1 DB2 LUW
10gR1[0]
11gR1[1]
Oracle
2016 SQL Server
[0]
Short term using Flashback.
[1]
Flashback Archive. Proprietery syntax.
https://webstore.iec.ch/publication/59685
A lot has

happened
since SQL-92
SQL has evolved

beyond
the relational idea
A lot has

happened
since SQL-92
SQL has evolved

beyond
the relational idea
If you use SQL for
CRUD operations only,
you are doing it wrong
A lot has

happened
since SQL-92
SQL has evolved

beyond
the relational idea
If you use SQL for
CRUD operations only,
you are doing it wrong
A lot has

happened
since SQL-92
https://modern-sql.com

@ModernSQL by @MarkusWinand
Training:

https://winand.at/

Weitere ähnliche Inhalte

Ähnlich wie Dev Day 2019: Markus Winand – Die Mutter aller Abfragesprachen: SQL im 21. Jahrhundert

From Key-Value To Multi-Model: Guy Korland
From Key-Value To Multi-Model: Guy KorlandFrom Key-Value To Multi-Model: Guy Korland
From Key-Value To Multi-Model: Guy KorlandRedis Labs
 
Working with complex data types in BigQuery
Working with complex data types in BigQueryWorking with complex data types in BigQuery
Working with complex data types in BigQueryBirger Halfmeier
 
A Little SPARQL in your Analytics
A Little SPARQL in your AnalyticsA Little SPARQL in your Analytics
A Little SPARQL in your AnalyticsDr. Neil Brittliff
 
L1 Intro to Relational DBMS LP.pdfIntro to Relational .docx
L1 Intro to Relational DBMS LP.pdfIntro to Relational .docxL1 Intro to Relational DBMS LP.pdfIntro to Relational .docx
L1 Intro to Relational DBMS LP.pdfIntro to Relational .docxDIPESH30
 
SQL-RISC: New Directions in SQLi Prevention - RSA USA 2013
SQL-RISC: New Directions in SQLi Prevention - RSA USA 2013SQL-RISC: New Directions in SQLi Prevention - RSA USA 2013
SQL-RISC: New Directions in SQLi Prevention - RSA USA 2013Nick Galbreath
 
Normalization: A Workshop for Everybody Pt. 1
Normalization: A Workshop for Everybody Pt. 1Normalization: A Workshop for Everybody Pt. 1
Normalization: A Workshop for Everybody Pt. 1Command Prompt., Inc
 
To SQL or NoSQL, that is the question
To SQL or NoSQL, that is the questionTo SQL or NoSQL, that is the question
To SQL or NoSQL, that is the questionKrishnakumar S
 
Overview of running R in the Oracle Database
Overview of running R in the Oracle DatabaseOverview of running R in the Oracle Database
Overview of running R in the Oracle DatabaseBrendan Tierney
 
ExpLOD: a framework for explaining recommendations based on the Linked Open D...
ExpLOD: a framework for explaining recommendations based on the Linked Open D...ExpLOD: a framework for explaining recommendations based on the Linked Open D...
ExpLOD: a framework for explaining recommendations based on the Linked Open D...Fedelucio Narducci
 
SQL For PHP Programmers
SQL For PHP ProgrammersSQL For PHP Programmers
SQL For PHP ProgrammersDave Stokes
 
Cassandra Tutorial
Cassandra TutorialCassandra Tutorial
Cassandra Tutorialmubarakss
 
NoSQL Intro with cassandra
NoSQL Intro with cassandraNoSQL Intro with cassandra
NoSQL Intro with cassandraBrian Enochson
 
Cassandra Deep Diver & Data Modeling
Cassandra Deep Diver & Data ModelingCassandra Deep Diver & Data Modeling
Cassandra Deep Diver & Data ModelingBrian Enochson
 
A hands on overview of the semantic web
A hands on overview of the semantic webA hands on overview of the semantic web
A hands on overview of the semantic webMarakana Inc.
 
Tutorial On Database Management System
Tutorial On Database Management SystemTutorial On Database Management System
Tutorial On Database Management Systempsathishcs
 
Mongodbworkshop I: get started
Mongodbworkshop I: get startedMongodbworkshop I: get started
Mongodbworkshop I: get startedVivian S. Zhang
 
The evolution of DBaaS - israelcloudsummit
The evolution of DBaaS - israelcloudsummitThe evolution of DBaaS - israelcloudsummit
The evolution of DBaaS - israelcloudsummitGuy Korland
 

Ähnlich wie Dev Day 2019: Markus Winand – Die Mutter aller Abfragesprachen: SQL im 21. Jahrhundert (20)

From Key-Value To Multi-Model: Guy Korland
From Key-Value To Multi-Model: Guy KorlandFrom Key-Value To Multi-Model: Guy Korland
From Key-Value To Multi-Model: Guy Korland
 
Working with complex data types in BigQuery
Working with complex data types in BigQueryWorking with complex data types in BigQuery
Working with complex data types in BigQuery
 
A Little SPARQL in your Analytics
A Little SPARQL in your AnalyticsA Little SPARQL in your Analytics
A Little SPARQL in your Analytics
 
L1 Intro to Relational DBMS LP.pdfIntro to Relational .docx
L1 Intro to Relational DBMS LP.pdfIntro to Relational .docxL1 Intro to Relational DBMS LP.pdfIntro to Relational .docx
L1 Intro to Relational DBMS LP.pdfIntro to Relational .docx
 
SQL-RISC: New Directions in SQLi Prevention - RSA USA 2013
SQL-RISC: New Directions in SQLi Prevention - RSA USA 2013SQL-RISC: New Directions in SQLi Prevention - RSA USA 2013
SQL-RISC: New Directions in SQLi Prevention - RSA USA 2013
 
Normalization: A Workshop for Everybody Pt. 1
Normalization: A Workshop for Everybody Pt. 1Normalization: A Workshop for Everybody Pt. 1
Normalization: A Workshop for Everybody Pt. 1
 
NCompass Live: RDA: Are We There Yet?
NCompass Live: RDA: Are We There Yet?NCompass Live: RDA: Are We There Yet?
NCompass Live: RDA: Are We There Yet?
 
To SQL or NoSQL, that is the question
To SQL or NoSQL, that is the questionTo SQL or NoSQL, that is the question
To SQL or NoSQL, that is the question
 
Overview of running R in the Oracle Database
Overview of running R in the Oracle DatabaseOverview of running R in the Oracle Database
Overview of running R in the Oracle Database
 
ExpLOD: a framework for explaining recommendations based on the Linked Open D...
ExpLOD: a framework for explaining recommendations based on the Linked Open D...ExpLOD: a framework for explaining recommendations based on the Linked Open D...
ExpLOD: a framework for explaining recommendations based on the Linked Open D...
 
SQL For PHP Programmers
SQL For PHP ProgrammersSQL For PHP Programmers
SQL For PHP Programmers
 
Oracle's Take On NoSQL
Oracle's Take On NoSQLOracle's Take On NoSQL
Oracle's Take On NoSQL
 
Cassandra Tutorial
Cassandra TutorialCassandra Tutorial
Cassandra Tutorial
 
NoSQL Intro with cassandra
NoSQL Intro with cassandraNoSQL Intro with cassandra
NoSQL Intro with cassandra
 
Cassandra Deep Diver & Data Modeling
Cassandra Deep Diver & Data ModelingCassandra Deep Diver & Data Modeling
Cassandra Deep Diver & Data Modeling
 
A hands on overview of the semantic web
A hands on overview of the semantic webA hands on overview of the semantic web
A hands on overview of the semantic web
 
Tutorial On Database Management System
Tutorial On Database Management SystemTutorial On Database Management System
Tutorial On Database Management System
 
Mongodbworkshop I: get started
Mongodbworkshop I: get startedMongodbworkshop I: get started
Mongodbworkshop I: get started
 
MongoDB Workshop
MongoDB WorkshopMongoDB Workshop
MongoDB Workshop
 
The evolution of DBaaS - israelcloudsummit
The evolution of DBaaS - israelcloudsummitThe evolution of DBaaS - israelcloudsummit
The evolution of DBaaS - israelcloudsummit
 

Mehr von DevDay Dresden

The Architecture of Uncertainty - Kevlin Henney
The Architecture of Uncertainty - Kevlin HenneyThe Architecture of Uncertainty - Kevlin Henney
The Architecture of Uncertainty - Kevlin HenneyDevDay Dresden
 
Dev Day 2021 - Stephan Pirnbaum - Anwendungsmodernisierung
Dev Day 2021 - Stephan Pirnbaum - AnwendungsmodernisierungDev Day 2021 - Stephan Pirnbaum - Anwendungsmodernisierung
Dev Day 2021 - Stephan Pirnbaum - AnwendungsmodernisierungDevDay Dresden
 
Tobias Nebel - Herausforderungen und Changen in Full-Stack-IoT-Projekten
Tobias Nebel - Herausforderungen und Changen in Full-Stack-IoT-ProjektenTobias Nebel - Herausforderungen und Changen in Full-Stack-IoT-Projekten
Tobias Nebel - Herausforderungen und Changen in Full-Stack-IoT-ProjektenDevDay Dresden
 
Andreas Roth - GraphQL erfolgreich im Backend einsetzen
Andreas Roth - GraphQL erfolgreich im Backend einsetzenAndreas Roth - GraphQL erfolgreich im Backend einsetzen
Andreas Roth - GraphQL erfolgreich im Backend einsetzenDevDay Dresden
 
Alexander Reelsen - Seccomp for Developers
Alexander Reelsen - Seccomp for DevelopersAlexander Reelsen - Seccomp for Developers
Alexander Reelsen - Seccomp for DevelopersDevDay Dresden
 
DevDay 19 Accessibility: Praxistipps für Entwickler
DevDay 19 Accessibility: Praxistipps für EntwicklerDevDay 19 Accessibility: Praxistipps für Entwickler
DevDay 19 Accessibility: Praxistipps für EntwicklerDevDay Dresden
 
Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns
Dev Day 2019: Phillip Krenn – Aggregierte Logging PatternsDev Day 2019: Phillip Krenn – Aggregierte Logging Patterns
Dev Day 2019: Phillip Krenn – Aggregierte Logging PatternsDevDay Dresden
 
Dev Day 2019: Mirko Seifert – Next Level Integration Testing mit Docker und T...
Dev Day 2019: Mirko Seifert – Next Level Integration Testing mit Docker und T...Dev Day 2019: Mirko Seifert – Next Level Integration Testing mit Docker und T...
Dev Day 2019: Mirko Seifert – Next Level Integration Testing mit Docker und T...DevDay Dresden
 
Dev Day 2019: Nathan Mattes – Kommunikation ist wichtig, scheiße wichtig und ...
Dev Day 2019: Nathan Mattes – Kommunikation ist wichtig, scheiße wichtig und ...Dev Day 2019: Nathan Mattes – Kommunikation ist wichtig, scheiße wichtig und ...
Dev Day 2019: Nathan Mattes – Kommunikation ist wichtig, scheiße wichtig und ...DevDay Dresden
 
Dev Day 2019: Stephan Birnbaum – Die Glaskugel hat ausgedient, wir machen Sof...
Dev Day 2019: Stephan Birnbaum – Die Glaskugel hat ausgedient, wir machen Sof...Dev Day 2019: Stephan Birnbaum – Die Glaskugel hat ausgedient, wir machen Sof...
Dev Day 2019: Stephan Birnbaum – Die Glaskugel hat ausgedient, wir machen Sof...DevDay Dresden
 
Dev Day 2019: Kay Grebenstein – Wie wir müssen das noch testen? - design for ...
Dev Day 2019: Kay Grebenstein – Wie wir müssen das noch testen? - design for ...Dev Day 2019: Kay Grebenstein – Wie wir müssen das noch testen? - design for ...
Dev Day 2019: Kay Grebenstein – Wie wir müssen das noch testen? - design for ...DevDay Dresden
 
Dev Day 2019: Kathrin Friedrich/Michael Kunze – Design better together - Styl...
Dev Day 2019: Kathrin Friedrich/Michael Kunze – Design better together - Styl...Dev Day 2019: Kathrin Friedrich/Michael Kunze – Design better together - Styl...
Dev Day 2019: Kathrin Friedrich/Michael Kunze – Design better together - Styl...DevDay Dresden
 
Dev Day 2019: Benjamin Wolf – "Some fixes" - Commit Message 101
Dev Day 2019: Benjamin Wolf – "Some fixes" - Commit Message 101Dev Day 2019: Benjamin Wolf – "Some fixes" - Commit Message 101
Dev Day 2019: Benjamin Wolf – "Some fixes" - Commit Message 101DevDay Dresden
 
Dev Day 2019: Lucas Fiedler – DevOps-Dashboard: Transparenz für DevOps-Teams
Dev Day 2019: Lucas Fiedler – DevOps-Dashboard: Transparenz für DevOps-TeamsDev Day 2019: Lucas Fiedler – DevOps-Dashboard: Transparenz für DevOps-Teams
Dev Day 2019: Lucas Fiedler – DevOps-Dashboard: Transparenz für DevOps-TeamsDevDay Dresden
 
Dev Day 2019: Ulrich Deiters – Offene Daten und IT-Lösungen für den Radverkehr
Dev Day 2019: Ulrich Deiters – Offene Daten und IT-Lösungen für den RadverkehrDev Day 2019: Ulrich Deiters – Offene Daten und IT-Lösungen für den Radverkehr
Dev Day 2019: Ulrich Deiters – Offene Daten und IT-Lösungen für den RadverkehrDevDay Dresden
 
Dev Day 2019: Alexander Lichter - JAMstack - Eine neuartige Webanwendungs-Arc...
Dev Day 2019: Alexander Lichter - JAMstack - Eine neuartige Webanwendungs-Arc...Dev Day 2019: Alexander Lichter - JAMstack - Eine neuartige Webanwendungs-Arc...
Dev Day 2019: Alexander Lichter - JAMstack - Eine neuartige Webanwendungs-Arc...DevDay Dresden
 
Dev Day 2019: Martin Schurz - Manual Work Is A Bug!
Dev Day 2019: Martin Schurz - Manual Work Is A Bug!Dev Day 2019: Martin Schurz - Manual Work Is A Bug!
Dev Day 2019: Martin Schurz - Manual Work Is A Bug!DevDay Dresden
 
Dev Day 2019: Stefan Schleyer: How to build an cloud-based IoT application“
Dev Day 2019: Stefan Schleyer: How to build an cloud-based IoT application“Dev Day 2019: Stefan Schleyer: How to build an cloud-based IoT application“
Dev Day 2019: Stefan Schleyer: How to build an cloud-based IoT application“DevDay Dresden
 
Dev Day 2019: Mirko Zeibig – "Hallo " <> "Elixir"
Dev Day 2019: Mirko Zeibig – "Hallo " <> "Elixir"Dev Day 2019: Mirko Zeibig – "Hallo " <> "Elixir"
Dev Day 2019: Mirko Zeibig – "Hallo " <> "Elixir"DevDay Dresden
 
Dev Day 2019: Mike Sperber – Software Design für die Seele
Dev Day 2019: Mike Sperber – Software Design für die SeeleDev Day 2019: Mike Sperber – Software Design für die Seele
Dev Day 2019: Mike Sperber – Software Design für die SeeleDevDay Dresden
 

Mehr von DevDay Dresden (20)

The Architecture of Uncertainty - Kevlin Henney
The Architecture of Uncertainty - Kevlin HenneyThe Architecture of Uncertainty - Kevlin Henney
The Architecture of Uncertainty - Kevlin Henney
 
Dev Day 2021 - Stephan Pirnbaum - Anwendungsmodernisierung
Dev Day 2021 - Stephan Pirnbaum - AnwendungsmodernisierungDev Day 2021 - Stephan Pirnbaum - Anwendungsmodernisierung
Dev Day 2021 - Stephan Pirnbaum - Anwendungsmodernisierung
 
Tobias Nebel - Herausforderungen und Changen in Full-Stack-IoT-Projekten
Tobias Nebel - Herausforderungen und Changen in Full-Stack-IoT-ProjektenTobias Nebel - Herausforderungen und Changen in Full-Stack-IoT-Projekten
Tobias Nebel - Herausforderungen und Changen in Full-Stack-IoT-Projekten
 
Andreas Roth - GraphQL erfolgreich im Backend einsetzen
Andreas Roth - GraphQL erfolgreich im Backend einsetzenAndreas Roth - GraphQL erfolgreich im Backend einsetzen
Andreas Roth - GraphQL erfolgreich im Backend einsetzen
 
Alexander Reelsen - Seccomp for Developers
Alexander Reelsen - Seccomp for DevelopersAlexander Reelsen - Seccomp for Developers
Alexander Reelsen - Seccomp for Developers
 
DevDay 19 Accessibility: Praxistipps für Entwickler
DevDay 19 Accessibility: Praxistipps für EntwicklerDevDay 19 Accessibility: Praxistipps für Entwickler
DevDay 19 Accessibility: Praxistipps für Entwickler
 
Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns
Dev Day 2019: Phillip Krenn – Aggregierte Logging PatternsDev Day 2019: Phillip Krenn – Aggregierte Logging Patterns
Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns
 
Dev Day 2019: Mirko Seifert – Next Level Integration Testing mit Docker und T...
Dev Day 2019: Mirko Seifert – Next Level Integration Testing mit Docker und T...Dev Day 2019: Mirko Seifert – Next Level Integration Testing mit Docker und T...
Dev Day 2019: Mirko Seifert – Next Level Integration Testing mit Docker und T...
 
Dev Day 2019: Nathan Mattes – Kommunikation ist wichtig, scheiße wichtig und ...
Dev Day 2019: Nathan Mattes – Kommunikation ist wichtig, scheiße wichtig und ...Dev Day 2019: Nathan Mattes – Kommunikation ist wichtig, scheiße wichtig und ...
Dev Day 2019: Nathan Mattes – Kommunikation ist wichtig, scheiße wichtig und ...
 
Dev Day 2019: Stephan Birnbaum – Die Glaskugel hat ausgedient, wir machen Sof...
Dev Day 2019: Stephan Birnbaum – Die Glaskugel hat ausgedient, wir machen Sof...Dev Day 2019: Stephan Birnbaum – Die Glaskugel hat ausgedient, wir machen Sof...
Dev Day 2019: Stephan Birnbaum – Die Glaskugel hat ausgedient, wir machen Sof...
 
Dev Day 2019: Kay Grebenstein – Wie wir müssen das noch testen? - design for ...
Dev Day 2019: Kay Grebenstein – Wie wir müssen das noch testen? - design for ...Dev Day 2019: Kay Grebenstein – Wie wir müssen das noch testen? - design for ...
Dev Day 2019: Kay Grebenstein – Wie wir müssen das noch testen? - design for ...
 
Dev Day 2019: Kathrin Friedrich/Michael Kunze – Design better together - Styl...
Dev Day 2019: Kathrin Friedrich/Michael Kunze – Design better together - Styl...Dev Day 2019: Kathrin Friedrich/Michael Kunze – Design better together - Styl...
Dev Day 2019: Kathrin Friedrich/Michael Kunze – Design better together - Styl...
 
Dev Day 2019: Benjamin Wolf – "Some fixes" - Commit Message 101
Dev Day 2019: Benjamin Wolf – "Some fixes" - Commit Message 101Dev Day 2019: Benjamin Wolf – "Some fixes" - Commit Message 101
Dev Day 2019: Benjamin Wolf – "Some fixes" - Commit Message 101
 
Dev Day 2019: Lucas Fiedler – DevOps-Dashboard: Transparenz für DevOps-Teams
Dev Day 2019: Lucas Fiedler – DevOps-Dashboard: Transparenz für DevOps-TeamsDev Day 2019: Lucas Fiedler – DevOps-Dashboard: Transparenz für DevOps-Teams
Dev Day 2019: Lucas Fiedler – DevOps-Dashboard: Transparenz für DevOps-Teams
 
Dev Day 2019: Ulrich Deiters – Offene Daten und IT-Lösungen für den Radverkehr
Dev Day 2019: Ulrich Deiters – Offene Daten und IT-Lösungen für den RadverkehrDev Day 2019: Ulrich Deiters – Offene Daten und IT-Lösungen für den Radverkehr
Dev Day 2019: Ulrich Deiters – Offene Daten und IT-Lösungen für den Radverkehr
 
Dev Day 2019: Alexander Lichter - JAMstack - Eine neuartige Webanwendungs-Arc...
Dev Day 2019: Alexander Lichter - JAMstack - Eine neuartige Webanwendungs-Arc...Dev Day 2019: Alexander Lichter - JAMstack - Eine neuartige Webanwendungs-Arc...
Dev Day 2019: Alexander Lichter - JAMstack - Eine neuartige Webanwendungs-Arc...
 
Dev Day 2019: Martin Schurz - Manual Work Is A Bug!
Dev Day 2019: Martin Schurz - Manual Work Is A Bug!Dev Day 2019: Martin Schurz - Manual Work Is A Bug!
Dev Day 2019: Martin Schurz - Manual Work Is A Bug!
 
Dev Day 2019: Stefan Schleyer: How to build an cloud-based IoT application“
Dev Day 2019: Stefan Schleyer: How to build an cloud-based IoT application“Dev Day 2019: Stefan Schleyer: How to build an cloud-based IoT application“
Dev Day 2019: Stefan Schleyer: How to build an cloud-based IoT application“
 
Dev Day 2019: Mirko Zeibig – "Hallo " <> "Elixir"
Dev Day 2019: Mirko Zeibig – "Hallo " <> "Elixir"Dev Day 2019: Mirko Zeibig – "Hallo " <> "Elixir"
Dev Day 2019: Mirko Zeibig – "Hallo " <> "Elixir"
 
Dev Day 2019: Mike Sperber – Software Design für die Seele
Dev Day 2019: Mike Sperber – Software Design für die SeeleDev Day 2019: Mike Sperber – Software Design für die Seele
Dev Day 2019: Mike Sperber – Software Design für die Seele
 

Kürzlich hochgeladen

Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonLeveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonApplitools
 
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...Bert Jan Schrijver
 
Pros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdf
Pros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdfPros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdf
Pros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdfkalichargn70th171
 
What’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesWhat’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesVictoriaMetrics
 
Understanding Plagiarism: Causes, Consequences and Prevention.pptx
Understanding Plagiarism: Causes, Consequences and Prevention.pptxUnderstanding Plagiarism: Causes, Consequences and Prevention.pptx
Understanding Plagiarism: Causes, Consequences and Prevention.pptxSasikiranMarri
 
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingOpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingShane Coughlan
 
Zer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdfZer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdfmaor17
 
Strategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero resultsStrategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero resultsJean Silva
 
Mastering Project Planning with Microsoft Project 2016.pptx
Mastering Project Planning with Microsoft Project 2016.pptxMastering Project Planning with Microsoft Project 2016.pptx
Mastering Project Planning with Microsoft Project 2016.pptxAS Design & AST.
 
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shardsChristopher Curtin
 
The Ultimate Guide to Performance Testing in Low-Code, No-Code Environments (...
The Ultimate Guide to Performance Testing in Low-Code, No-Code Environments (...The Ultimate Guide to Performance Testing in Low-Code, No-Code Environments (...
The Ultimate Guide to Performance Testing in Low-Code, No-Code Environments (...kalichargn70th171
 
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxThe Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxRTS corp
 
VictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News UpdateVictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News UpdateVictoriaMetrics
 
Effectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorEffectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorTier1 app
 
Best Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITBest Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITmanoharjgpsolutions
 
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...OnePlan Solutions
 
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...OnePlan Solutions
 
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfEnhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfRTS corp
 
Keeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldKeeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldRoberto Pérez Alcolea
 
SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?Alexandre Beguel
 

Kürzlich hochgeladen (20)

Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonLeveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
 
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
 
Pros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdf
Pros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdfPros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdf
Pros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdf
 
What’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesWhat’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 Updates
 
Understanding Plagiarism: Causes, Consequences and Prevention.pptx
Understanding Plagiarism: Causes, Consequences and Prevention.pptxUnderstanding Plagiarism: Causes, Consequences and Prevention.pptx
Understanding Plagiarism: Causes, Consequences and Prevention.pptx
 
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingOpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
 
Zer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdfZer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdf
 
Strategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero resultsStrategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero results
 
Mastering Project Planning with Microsoft Project 2016.pptx
Mastering Project Planning with Microsoft Project 2016.pptxMastering Project Planning with Microsoft Project 2016.pptx
Mastering Project Planning with Microsoft Project 2016.pptx
 
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards
 
The Ultimate Guide to Performance Testing in Low-Code, No-Code Environments (...
The Ultimate Guide to Performance Testing in Low-Code, No-Code Environments (...The Ultimate Guide to Performance Testing in Low-Code, No-Code Environments (...
The Ultimate Guide to Performance Testing in Low-Code, No-Code Environments (...
 
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxThe Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
 
VictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News UpdateVictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News Update
 
Effectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorEffectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryError
 
Best Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITBest Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh IT
 
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
 
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
 
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfEnhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
 
Keeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldKeeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository world
 
SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?
 

Dev Day 2019: Markus Winand – Die Mutter aller Abfragesprachen: SQL im 21. Jahrhundert