Hi,
I will explain Union and Union All in Oracle SQL in this post of Oracle SQL Tutorial series.
Read the previous post of this tutorial series before this.
SQL Full Outer Join in Oracle SQL | Oracle SQL Tutorials -23
Union Operator
Union operator is very popular operator in Oracle SQL that is used to combine two or more result set of Select statements.
Union operator is valid for similar data types columns and they should be in the same order.
UNION Operator Syntax
Union operator syntax is as follows.
SELECT column1,column2,column(n)... FROM table1
UNION
SELECT column1,column2,column(n)... FROM table2;
UNION ALL Operator
Union All operator is like Union operator that is combine two or more result set of Select statements.
The only difference between Union and Union All operator is duplicated values in the result set.
UNION ALL Syntax
Union All operator syntax is as follows.
SELECT column1,column2,column(n)... FROM table1
UNION All
SELECT column1,column2,column(n)... FROM table2;
You should use Union all instead of Union.
If using union all is possible, you should prefer it instead of union, because Union are doing expensive sort to remove duplicate rows.
Let’s make an example about Union and Union All.
There are common column between hr.employees and hr.job_history table like employee_id, job_id columns.
Union example is as follows.
SQL> SELECT employee_id, job_id
2 FROM hr.employees
3 UNION
4 SELECT employee_id, job_id
5 FROM hr.job_history;
EMPLOYEE_ID JOB_ID
----------- ----------
101 AC_ACCOUNT
101 AC_MGR
101 AD_VP
102 AD_VP
102 IT_PROG
103 IT_PROG
104 IT_PROG
105 IT_PROG
106 IT_PROG
107 IT_PROG
108 FI_MGR
EMPLOYEE_ID JOB_ID
----------- ----------
109 FI_ACCOUNT
110 FI_ACCOUNT
111 FI_ACCOUNT
112 FI_ACCOUNT
113 FI_ACCOUNT
114 PU_MAN
114 ST_CLERK
115 PU_CLERK
116 PU_CLERK
117 PU_CLERK
118 PU_CLERK
EMPLOYEE_ID JOB_ID
----------- ----------
119 PU_CLERK
120 ST_MAN
121 ST_MAN
122 ST_CLERK
122 ST_MAN
123 ST_MAN
124 ST_MAN
125 ST_CLERK
126 ST_CLERK
127 ST_CLERK
128 ST_CLERK
EMPLOYEE_ID JOB_ID
----------- ----------
129 ST_CLERK
130 ST_CLERK
131 ST_CLERK
132 ST_CLERK
133 ST_CLERK
134 ST_CLERK
135 ST_CLERK
136 ST_CLERK
137 ST_CLERK
138 ST_CLERK
139 ST_CLERK
EMPLOYEE_ID JOB_ID
----------- ----------
140 ST_CLERK
141 ST_CLERK
142 ST_CLERK
143 ST_CLERK
144 ST_CLERK
145 SA_MAN
146 SA_MAN
147 SA_MAN
148 SA_MAN
149 SA_MAN
150 SA_REP
EMPLOYEE_ID JOB_ID
----------- ----------
151 SA_REP
152 SA_REP
153 SA_REP
154 SA_REP
155 SA_REP
156 SA_REP
157 SA_REP
158 SA_REP
159 SA_REP
160 SA_REP
161 SA_REP
EMPLOYEE_ID JOB_ID
----------- ----------
162 SA_REP
163 SA_REP
164 SA_REP
165 SA_REP
166 SA_REP
167 SA_REP
168 SA_REP
169 SA_REP
170 SA_REP
171 SA_REP
172 SA_REP
EMPLOYEE_ID JOB_ID
----------- ----------
173 SA_REP
174 SA_REP
175 SA_REP
176 SA_MAN
176 SA_REP
177 SA_REP
178 SA_REP
179 SA_REP
180 SH_CLERK
181 SH_CLERK
182 SH_CLERK
EMPLOYEE_ID JOB_ID
----------- ----------
183 SH_CLERK
184 SH_CLERK
185 SH_CLERK
186 SH_CLERK
187 SH_CLERK
188 SH_CLERK
189 SH_CLERK
190 SH_CLERK
191 SH_CLERK
192 SH_CLERK
193 SH_CLERK
EMPLOYEE_ID JOB_ID
----------- ----------
194 SH_CLERK
195 SH_CLERK
196 SH_CLERK
197 SH_CLERK
198 SH_CLERK
199 SH_CLERK
200 AC_ACCOUNT
200 AD_ASST
201 MK_MAN
201 MK_REP
202 MK_REP
EMPLOYEE_ID JOB_ID
----------- ----------
203 HR_REP
204 PR_REP
205 AC_MGR
206 AC_ACCOUNT
114 rows selected.
SQL>
Union result of the hr.employees and hr.job_history table is 114 rows. There is no duplicated rows in this result set.
Union All example is as follows.
SQL> SQL> SELECT employee_id, job_id FROM hr.employees UNION ALL SELECT employee_id, job_id FROM hr.job_history; EMPLOYEE_ID JOB_ID ----------- ---------- 206 AC_ACCOUNT 205 AC_MGR 200 AD_ASST 101 AD_VP 102 AD_VP 109 FI_ACCOUNT 110 FI_ACCOUNT 111 FI_ACCOUNT 112 FI_ACCOUNT 113 FI_ACCOUNT 108 FI_MGR EMPLOYEE_ID JOB_ID ----------- ---------- 203 HR_REP 103 IT_PROG 104 IT_PROG 105 IT_PROG 106 IT_PROG 107 IT_PROG 201 MK_MAN 202 MK_REP 204 PR_REP 115 PU_CLERK 116 PU_CLERK EMPLOYEE_ID JOB_ID ----------- ---------- 117 PU_CLERK 118 PU_CLERK 119 PU_CLERK 114 PU_MAN 145 SA_MAN 146 SA_MAN 147 SA_MAN 148 SA_MAN 149 SA_MAN 150 SA_REP 151 SA_REP EMPLOYEE_ID JOB_ID ----------- ---------- 152 SA_REP 153 SA_REP 154 SA_REP 155 SA_REP 156 SA_REP 157 SA_REP 158 SA_REP 159 SA_REP 160 SA_REP 161 SA_REP 162 SA_REP EMPLOYEE_ID JOB_ID ----------- ---------- 163 SA_REP 164 SA_REP 165 SA_REP 166 SA_REP 167 SA_REP 168 SA_REP 169 SA_REP 170 SA_REP 171 SA_REP 172 SA_REP 173 SA_REP EMPLOYEE_ID JOB_ID ----------- ---------- 174 SA_REP 175 SA_REP 176 SA_REP 177 SA_REP 178 SA_REP 179 SA_REP 180 SH_CLERK 181 SH_CLERK 182 SH_CLERK 183 SH_CLERK 184 SH_CLERK EMPLOYEE_ID JOB_ID ----------- ---------- 185 SH_CLERK 186 SH_CLERK 187 SH_CLERK 188 SH_CLERK 189 SH_CLERK 190 SH_CLERK 191 SH_CLERK 192 SH_CLERK 193 SH_CLERK 194 SH_CLERK 195 SH_CLERK EMPLOYEE_ID JOB_ID ----------- ---------- 196 SH_CLERK 197 SH_CLERK 198 SH_CLERK 199 SH_CLERK 125 ST_CLERK 126 ST_CLERK 127 ST_CLERK 128 ST_CLERK 129 ST_CLERK 130 ST_CLERK 131 ST_CLERK EMPLOYEE_ID JOB_ID ----------- ---------- 132 ST_CLERK 133 ST_CLERK 134 ST_CLERK 135 ST_CLERK 136 ST_CLERK 137 ST_CLERK 138 ST_CLERK 139 ST_CLERK 140 ST_CLERK 141 ST_CLERK 142 ST_CLERK EMPLOYEE_ID JOB_ID ----------- ---------- 143 ST_CLERK 144 ST_CLERK 120 ST_MAN 121 ST_MAN 122 ST_MAN 123 ST_MAN 124 ST_MAN 101 AC_ACCOUNT 200 AC_ACCOUNT 101 AC_MGR 200 AD_ASST EMPLOYEE_ID JOB_ID ----------- ---------- 102 IT_PROG 201 MK_REP 176 SA_MAN 176 SA_REP 114 ST_CLERK 122 ST_CLERK 116 rows selected. SQL>
Union All result of the hr.employees and hr.job_history table is 116 rows. There are 2 duplicated rows in this result set.
Be careful that if using union all is possible, you should prefer it instead of union, because Union are doing expensive sort to remove duplicate rows.
Dou want to learn Oracle SQL Tutorial for Beginners, then read the following articles.
Oracle SQL Tutorials For Beginners – Learn Oracle SQL from scratch with Oracle SQL Online Course