\documentclass[10pt,a4paper]{article} % Packages \usepackage{fancyhdr} % For header and footer \usepackage{multicol} % Allows multicols in tables \usepackage{tabularx} % Intelligent column widths \usepackage{tabulary} % Used in header and footer \usepackage{hhline} % Border under tables \usepackage{graphicx} % For images \usepackage{xcolor} % For hex colours %\usepackage[utf8x]{inputenc} % For unicode character support \usepackage[T1]{fontenc} % Without this we get weird character replacements \usepackage{colortbl} % For coloured tables \usepackage{setspace} % For line height \usepackage{lastpage} % Needed for total page number \usepackage{seqsplit} % Splits long words. %\usepackage{opensans} % Can't make this work so far. Shame. Would be lovely. \usepackage[normalem]{ulem} % For underlining links % Most of the following are not required for the majority % of cheat sheets but are needed for some symbol support. \usepackage{amsmath} % Symbols \usepackage{MnSymbol} % Symbols \usepackage{wasysym} % Symbols %\usepackage[english,german,french,spanish,italian]{babel} % Languages % Document Info \author{matiwan} \pdfinfo{ /Title (postgresql.pdf) /Creator (Cheatography) /Author (matiwan) /Subject (PostgreSQL Cheat Sheet) } % Lengths and widths \addtolength{\textwidth}{6cm} \addtolength{\textheight}{-1cm} \addtolength{\hoffset}{-3cm} \addtolength{\voffset}{-2cm} \setlength{\tabcolsep}{0.2cm} % Space between columns \setlength{\headsep}{-12pt} % Reduce space between header and content \setlength{\headheight}{85pt} % If less, LaTeX automatically increases it \renewcommand{\footrulewidth}{0pt} % Remove footer line \renewcommand{\headrulewidth}{0pt} % Remove header line \renewcommand{\seqinsert}{\ifmmode\allowbreak\else\-\fi} % Hyphens in seqsplit % This two commands together give roughly % the right line height in the tables \renewcommand{\arraystretch}{1.3} \onehalfspacing % Commands \newcommand{\SetRowColor}[1]{\noalign{\gdef\RowColorName{#1}}\rowcolor{\RowColorName}} % Shortcut for row colour \newcommand{\mymulticolumn}[3]{\multicolumn{#1}{>{\columncolor{\RowColorName}}#2}{#3}} % For coloured multi-cols \newcolumntype{x}[1]{>{\raggedright}p{#1}} % New column types for ragged-right paragraph columns \newcommand{\tn}{\tabularnewline} % Required as custom column type in use % Font and Colours \definecolor{HeadBackground}{HTML}{333333} \definecolor{FootBackground}{HTML}{666666} \definecolor{TextColor}{HTML}{333333} \definecolor{DarkBackground}{HTML}{5CA339} \definecolor{LightBackground}{HTML}{F4F9F2} \renewcommand{\familydefault}{\sfdefault} \color{TextColor} % Header and Footer \pagestyle{fancy} \fancyhead{} % Set header to blank \fancyfoot{} % Set footer to blank \fancyhead[L]{ \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{C} \SetRowColor{DarkBackground} \vspace{-7pt} {\parbox{\dimexpr\textwidth-2\fboxsep\relax}{\noindent \hspace*{-6pt}\includegraphics[width=5.8cm]{/web/www.cheatography.com/public/images/cheatography_logo.pdf}} } \end{tabulary} \columnbreak \begin{tabulary}{11cm}{L} \vspace{-2pt}\large{\bf{\textcolor{DarkBackground}{\textrm{PostgreSQL Cheat Sheet}}}} \\ \normalsize{by \textcolor{DarkBackground}{matiwan} via \textcolor{DarkBackground}{\uline{cheatography.com/33684/cs/15210/}}} \end{tabulary} \end{multicols}} \fancyfoot[L]{ \footnotesize \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{LL} \SetRowColor{FootBackground} \mymulticolumn{2}{p{5.377cm}}{\bf\textcolor{white}{Cheatographer}} \\ \vspace{-2pt}matiwan \\ \uline{cheatography.com/matiwan} \\ \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Cheat Sheet}} \\ \vspace{-2pt}Not Yet Published.\\ Updated 29th March, 2018.\\ Page {\thepage} of \pageref{LastPage}. \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Sponsor}} \\ \SetRowColor{white} \vspace{-5pt} %\includegraphics[width=48px,height=48px]{dave.jpeg} Measure your website readability!\\ www.readability-score.com \end{tabulary} \end{multicols}} \begin{document} \raggedright \raggedcolumns % Set font size to small. Switch to any value % from this page to resize cheat sheet text: % www.emerson.emory.edu/services/latex/latex_169.html \footnotesize % Small font. \begin{multicols*}{3} \begin{tabularx}{5.377cm}{x{0.9954 cm} x{3.9816 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Objects}} \tn % Row 0 \SetRowColor{LightBackground} Table & The table is used to store the data. A special feature of PostgreSQL table is inheritance. \tn % Row Count 3 (+ 3) % Row 1 \SetRowColor{white} Schema & A schema is a logical container of tables and other objects inside a database. \tn % Row Count 6 (+ 3) % Row 2 \SetRowColor{LightBackground} \seqsplit{Tablespace} & A tablespace is where PostgreSQL stores the data. \tn % Row Count 8 (+ 2) % Row 3 \SetRowColor{white} View & The view is a virtual table that is used to simplify complex queries and to apply security for a set of records. \tn % Row Count 12 (+ 4) % Row 4 \SetRowColor{LightBackground} \seqsplit{Function} & The function is a block reusable SQL code that returns a scalar value of a list of records. In PostgreSQL, functions can also return composite objects. \tn % Row Count 17 (+ 5) % Row 5 \SetRowColor{white} Cast & Casts enable you to convert one data type into another data type. Casts actually backed by functions to perform the conversion. \tn % Row Count 21 (+ 4) % Row 6 \SetRowColor{LightBackground} \seqsplit{Sequence} & Sequences are used to manage auto-increment columns that defined in a table as a serial column. \tn % Row Count 24 (+ 3) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{1.09494 cm} x{3.88206 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Other}} \tn % Row 0 \SetRowColor{LightBackground} {\bf{CAST}} & convert explicit a value from one data type to another.\{\{nl\}\} CAST( expression AS datatype )\{\{ac\}\} \tn % Row Count 4 (+ 4) % Row 1 \SetRowColor{white} {\bf{BETWEEN}} & value BETWEEN low AND high (include equal). Used with WHERE \tn % Row Count 6 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Subquery}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{A subquery is a query nested inside another query such as SELECT, INSERT, DELETE and UPDATE.% Row Count 2 (+ 2) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{GROUP and HAVING}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{The GROUP BY clause divides the rows returned from the SELECT statement into groups.} \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{The HAVING clause sets the condition for group rows created by the GROUP BY clause after the GROUP BY clause applies while the WHERE clause sets the condition for individual rows before GROUP BY clause applies.} \tn % Row Count 7 (+ 5) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{1.34379 cm} x{3.63321 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{String operations}} \tn % Row 0 \SetRowColor{LightBackground} \seqsplit{Concatenate} & first\_name || ' ' || last\_name \tn % Row Count 2 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{SELECT}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{{\bf{SELECT}} \newline % Row Count 1 (+ 1) column\_name \newline % Row Count 2 (+ 1) {\bf{FROM}} \newline % Row Count 3 (+ 1) table\_name \newline % Row Count 4 (+ 1) {\bf{ORDER BY}} \newline % Row Count 5 (+ 1) column\_name ASC (DESC);% Row Count 6 (+ 1) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{LIKE (case sensitive)}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{\textbackslash{}\textasciitilde{}\textasciitilde{} is equivalent to LIKE} \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{\textbackslash{}\textasciitilde{}\textasciitilde{}* is equivalent to ILIKE} \tn % Row Count 2 (+ 1) % Row 2 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{!\textasciitilde{}\textasciitilde{} is equivalent to NOT LIKE} \tn % Row Count 3 (+ 1) % Row 3 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{!\textasciitilde{}\textasciitilde{}* is equivalent to NOT ILIKE} \tn % Row Count 4 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{1.39356 cm} x{3.58344 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{WHERE operators}} \tn % Row 0 \SetRowColor{LightBackground} Operator & Description \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} = & Equal \tn % Row Count 2 (+ 1) % Row 2 \SetRowColor{LightBackground} \textgreater{} & Greater than \tn % Row Count 3 (+ 1) % Row 3 \SetRowColor{white} \textless{} & Less than \tn % Row Count 4 (+ 1) % Row 4 \SetRowColor{LightBackground} \textgreater{}= & Greater than or equal \tn % Row Count 5 (+ 1) % Row 5 \SetRowColor{white} \textless{}= & Less than or equal \tn % Row Count 6 (+ 1) % Row 6 \SetRowColor{LightBackground} \textless{}\textgreater{} or != & Not equal \tn % Row Count 7 (+ 1) % Row 7 \SetRowColor{white} AND & Logical operator AND \tn % Row Count 8 (+ 1) % Row 8 \SetRowColor{LightBackground} OR & Logical operator OR \tn % Row Count 9 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{LIMIT \& OFFSET}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{SELECT column\_a \newline % Row Count 1 (+ 1) FROM table\_name \newline % Row Count 2 (+ 1) WHERE last\_name = '' \newline % Row Count 3 (+ 1) ORDER BY first\_name \newline % Row Count 4 (+ 1) LIMIT 5 OFFSET 3; \newline % Row Count 5 (+ 1) LIMIT is not a {\emph{SQL-standard}}.% Row Count 6 (+ 1) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{FETCH}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{OFFSET start \{ ROW | ROWS \} \newline % Row Count 1 (+ 1) FETCH \{ FIRST | NEXT \} {[} row\_count {]} \{ ROW | ROWS \} ONLY% Row Count 3 (+ 2) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Order of clause}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{FROM \newline % Row Count 1 (+ 1) WHERE \newline % Row Count 2 (+ 1) GROUP BY \newline % Row Count 3 (+ 1) HAVING \newline % Row Count 4 (+ 1) SELECT \newline % Row Count 5 (+ 1) ORDER BY% Row Count 6 (+ 1) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{INSERT new record}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{INSERT INTO table\_name (column\_1, column\_2) \newline % Row Count 1 (+ 1) VALUES \newline % Row Count 2 (+ 1) ('val1', 'val2') \newline % Row Count 3 (+ 1) ('val3, 'val4');% Row Count 4 (+ 1) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Alias}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{column\_name AS alias\_name} \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{column\_name alias\_name} \tn % Row Count 2 (+ 1) % Row 2 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{expression alias\_name} \tn % Row Count 3 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{INNER JOIN}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{SELECT column\_a \newline % Row Count 1 (+ 1) FROM A\_table \newline % Row Count 2 (+ 1) INNER JOIN B\_table ON A\_table.pka = \{\{nobreak\}\}B\_table.fka;% Row Count 4 (+ 2) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{2.14011 cm} x{2.83689 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{JOINS general}} \tn % Row 0 \SetRowColor{LightBackground} {\bf{Inner}} Join & selects rows from one table that have the corresponding rows in other tables. \tn % Row Count 4 (+ 4) % Row 1 \SetRowColor{white} {\bf{Left}} Join & selects rows from one table that may or may not have the corresponding rows in other tables. \tn % Row Count 9 (+ 5) % Row 2 \SetRowColor{LightBackground} {\bf{Self}}-join & joins a table to itself by comparing a table to itself. \tn % Row Count 12 (+ 3) % Row 3 \SetRowColor{white} {\bf{Full Outer}}\{\{nobreak\}\} Join & uses the full join to find a row in a table that does not have a matching row in another table. \tn % Row Count 17 (+ 5) % Row 4 \SetRowColor{LightBackground} {\bf{Cross}} Join & produces a Cartesian product of the rows in two or more tables. \tn % Row Count 20 (+ 3) % Row 5 \SetRowColor{white} {\bf{Natural}} Join & joins two or more tables using implicit join condition based on the common column names in the joined tables. \tn % Row Count 25 (+ 5) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} % That's all folks \end{multicols*} \end{document}