What is difference between INNER join and OUTER join [duplicate] - sql

This question already has answers here:
What is the difference between "INNER JOIN" and "OUTER JOIN"?
(28 answers)
Closed 9 years ago.
Difference between inner and outer join. i am using two table and want to fetch data from both table so which type join we should use owning of that we can solve our problem

This is the best and simplest way to understand joins:
Credits go to the writer of this article HERE

Inner join - An inner join using either of the equivalent queries gives the intersection of the two tables, i.e. the two rows they have in common.
Left outer join -
A left outer join will give all rows in A, plus any common rows in B.
Full outer join -
A full outer join will give you the union of A and B, i.e. All the rows in A and all the rows in B. If something in A doesn't have a corresponding datum in B, then the B portion is null, and vice versa.
check this

INNER JOIN: Returns all rows when there is at least one match in BOTH tables
LEFT JOIN: Return all rows from the left table, and the matched rows from the right table
RIGHT JOIN: Return all rows from the right table, and the matched rows from the left table
FULL JOIN: Return all rows when there is a match in ONE of the tables

Inner join matches tables on keys, but outer join matches keys just for one side.
For example when you use left outer join the query brings the whole left side table and matches the right side to the left table primary key and where there is not matched places null.

Related

Why an 'ON' clause is required in a left outer join

As far as I understand in a left outer join between two tables (say a & b) all the rows of the table on the left side of the join are retrieved regardless of the values in the rows on the right table. Then why do we need an 'ON' clause specifying a condition, something like this:
select * from a LEFT OUTER JOIN b on a.some_column1 = b.some_column2;
Why is there a need for the statement "a.some_column1 = b.some_column2".
A left join would return all the rows from table a, and for each row the matching row in table b, if it exists - if it doesn't, nulls would be returned instead of b's columns. The on clause defines how this matching is done.
An on clause is required since you are "joining", and you need to tell which columns you want to join by. Otherwise you would use traditional from without any where condition to all possible row combinations. But you wanted a join, right?
Yeah, that's pretty much it is.
As far as I understand in a left outer join between two tables (say a & b) all the rows of the table on the left side of the join are retrieved regardless of the values in the rows on the right table.
That is correct in the sense that it says something about what left join on returns, but it isn't a definition of what it returns. left join on returns inner join on rows plus (union all) unmatched left table rows extended by nulls.
inner join on returns the rows of cross join that satisfy the on condition--which could be any condition on the columns. cross join returns every combination of a row from the left table & a row from the right table.
What do you expect outer join without on to mean? In standard SQL outer & inner join have to have an on. inner join on a true condition is the same as cross join. Which has no unmatched left table rows. So if you want outer join with no on to mean outer join on a true condition then, since there are no unmatched rows in the inner join on that condition, the result is also just cross join. (MySQL allows inner join to be used without an on, but it just means cross join.)

what is the use of right join exactly as we can get the same result from left join [duplicate]

This question already has answers here:
When or why would you use a right outer join instead of left?
(11 answers)
Closed 6 years ago.
I want to know that what is the use of right join exactly as we can get the same result from left join by interchanging the tables.
So let's take an example here -
Suppose i need to join two tables TAB_A and TAB_B with right join as below to get the result -
SELECT * FROM TAB_A RIGHT JOIN TAB_B
but i can also get the same result of query by using left join also instead of right join as below
SELECT * FROM TAB_B LEFT JOIN TAB_A
So my question is what is the purpose of right join in sql exactly, is there any performance related comparision or anything that can not be done by left join?
Suppose you need to do a double join like this:
SELECT *
FROM table1
LEFT JOIN table2 ON table1.name = table2.name1
RIGHT JOIN table3 ON table2.position = table3.job;
that is when the RIGHT JOIN is useful...
Regards
In case of only tow table you can switch the tables to get the same result from right and left join. But if you are having more than two table and you need to put left join on few tables right join on few tables so in that case you need both the joins.
As stated in http://dev.mysql.com/doc/refman/5.7/en/outer-join-simplification.html
At the parser stage, queries with right outer joins operations are converted to equivalent queries containing only left join operations.
Using RIGHT JOIN will cause parser conversions, but it should be negligible in pracitce.

what is the difference between inner and outer joins sql server [duplicate]

This question already has answers here:
What is the difference between "INNER JOIN" and "OUTER JOIN"?
(28 answers)
Closed 9 years ago.
I tried to search in the google. But everyone is explaining about inner join and when comes to outer join they are including full outer join /left/right. I just want to know only the difference between inner join and outer join.
An inner join is where the columns match in both tables involved in the join, and will only return results where that condition is true. An outer join will return results even when there is no match, and will return nulls when the join condition is not met.
Sql fiddle link
Inner Join
"Get all of the rows from both tables that match the join condition."
Outer Join
"Get all of the rows from the [left/right] table and join any rows that match the join condition from the other table."
Full Outer Join
"Get all of the rows from both tables and join any rows to each that match the join condition."
In the case of outer join if you say:
SELECT m.*, mo.*
FROM myTable m
LEFT OUTER JOIN myOtherTable mo ON m.Id = mo.myTableId
This will return all the rows from the left table (myTable) and any matching rows from myOtherTable. Any rows from myTable without a match will have the values of mo.* set to NULL.
In the case of inner join if you say:
SELECT m.*, mo.*
FROM myTable m
INNER JOIN myOtherTable mo ON m.Id = mo.myTableId
You will only get the rows that match in both tables, so for instance if you have a myTable record with Id 15 and no myOtherTable records with the myTableId of 15 then no rows will be returned for myTable row with an Id 15.
There is another point to recognize that if there are multiple matches multiple rows will be returned. So if you have 2 items in myOtherTable with a myTableId of 10 then the myTable row with Id of 10 will be duplicated, one row with the first record from myOtherTable joined, and one with the second record.

Real time usage and difference between left outer join and right outer join [duplicate]

This question already has answers here:
Does "Right Outer Join" have any useful purpose?
(9 answers)
Closed 9 years ago.
If Left outer join is used(select table A left outer join table B), I can have null values in right table(Table B) when data is not matching with left table(Table A). If I change the select query order (select table B left outer join table A), now I can have null data in Table A. So, same operation can be performed by using left outer join. So, what is the use of right outer join?
Please help me to get solution on this.
left outer join and right outer join are, in a sense, redundant. You can write a query using only one of them.
They are both provided for the same reason that < and > are both provided. Sometimes one or the other makes more sense for a given logical operation.
As for me, I strive to write queries using only join and left outer join. The left outer join makes more sense to me, because it says "keep all the rows in the first table, along with matching rows in other tables". This doesn't mean that right outer join is wrong, just that different people understand things in different ways.
The difference is simple – in a left outer join, all of the rows from the “left” table will be displayed, regardless of whether there are any matching columns in the “right” table. In a right outer join, all of the rows from the “right” table will be displayed, regardless of whether there are any matching columns in the “left” table. Hopefully the example that we gave above help clarified this as well.
Should I use a right outer join or a left outer join?
Actually, it doesn’t matter. The right outer join does not add any functionality that the left outer join didn’t already have, and vice versa. All you would have to do to get the same results from a right outer join and a left outer join is switch the order in which the tables appear in the SQL statement.
SELECT * from TableA LEFT JOIN TableB
Same as
SELECT * from TableB RIGHT JOIN TableA
SELECT * FROM TableA LEFT JOIN TableB
All rows in TableA and matching rows in TableB. If no matching row is found in TableB then all the columns of TableB will be replaced by null
Example:
TableA rows
1
2
3
Table B rows
2
3
4
TableA LEFT JOIN TableB will give the following tuples:
(1 NULL)
(2 2)
(3 3)
TableA RIGHT JOIN TableB will give the following tuples:
(2 2)
(3 3)
(NULL 4)
TableA OUTER JOIN TableB the following tuples:
(1 NULL)
(2 2)
(3 3)
(NULL 4)

Is inner join the same as equi-join?

Can you tell me if inner join and equi-join are the same or not ?
An 'inner join' is not the same as an 'equi-join' in general terms.
'equi-join' means joining tables using the equality operator or equivalent. I would still call an outer join an 'equi-join' if it only uses equality (others may disagree).
'inner join' is opposed to 'outer join' and determines how to join two sets when there is no matching value.
Simply put: an equi-join is a possible type of inner-joins
For a more in-depth explanation:
An inner-join is a join that returns only rows from joined tables where a certain condition is met. This condition may be of equality, which means we would have an equi-join; if the condition is not that of equality - which may be a non-equality, greater than, lesser than, between, etc. - we have a nonequi-join, called more precisely theta-join.
If we do not want such conditions to be necessarily met, we can have
outer joins (all rows from all tables returned), left join (all rows
from left table returned, only matching for right table), right join
(all rows from right table returned, only matching for left table).
The answer is NO.
An equi-join is used to match two columns from two tables using explicit operator =:
Example:
select *
from table T1, table2 T2
where T1.column_name1 = T2.column_name2
An inner join is used to get the cross product between two tables, combining all records from both tables. To get the right result you can use a equi-join or one natural join (column names between tables must be the same)
Using equi-join (explicit and implicit)
select *
from table T1 INNER JOIN table2 T2
on T1.column_name = T2.column_name
select *
from table T1, table2 T2
where T1.column_name = T2.column_name
Or Using natural join
select *
from table T1 NATURAL JOIN table2 T2
The answer is No,here is the short and simple for readers.
Inner join can have equality (=) and other operators (like <,>,<>) in the join condition.
Equi join only have equality (=) operator in the join condition.
Equi join can be an Inner join,Left Outer join, Right Outer join
If there has to made out a difference then ,I think here it is .I tested it with DB2.
In 'equi join'.you have to select the comparing column of the table being joined , in inner join it is not compulsory you do that . Example :-
Select k.id,k.name FROM customer k
inner join dealer on(
k.id =dealer.id
)
here the resulted rows are only two columns rows
id name
But I think in equi join you have to select the columns of other table too
Select k.id,k.name,d.id FROM customer k,dealer d
where
k.id =d.id
and this will result in rows with three columns , there is no way you cannot have the unwanted compared column of dealer here(even if you don't want it) , the rows will look like
id(from customer) name(from Customer) id(from dealer)
May be this is not true for your question.But it might be one of the major difference.
The answer is YES, But as a resultset. So here is an example.
Consider three tables:
orders(ord_no, purch_amt, ord_date, customer_id, salesman_id)
customer(customer_id,cust_name, city, grade, salesman_id)
salesman(salesman_id, name, city, commission)
Now if I have a query like this:
Find the details of an order.
Using INNER JOIN:
SELECT * FROM orders a INNER JOIN customer b ON a.customer_id=b.customer_id
INNER JOIN salesman c ON a.salesman_id=c.salesman_id;
Using EQUI JOIN:
SELECT * FROM orders a, customer b,salesman c where
a.customer_id=b.customer_id and a.salesman_id=c.salesman_id;
Execute both queries. You will get the same output.
Coming to your question There is no difference in output of equijoin and inner join. But there might be a difference in inner executions of both the types.