Friday, 12 July 2013

SQL Joins



SQL Joins are used to relate information in different tables. A Join condition is a part of the sql query that retrieves rows from two or more tables. A SQL Join condition is used in the SQL WHERE Clause of select, update, delete statements.


The Syntax for joining two tables is:


SELECT col1, col2, col3...

FROM table_name1, table_name2

WHERE table_name1.col2 = table_name2.col1;


If a sql join condition is omitted or if it is invalid the join operation will result in a Cartesian product. The Cartesian product returns a number of rows equal to the product of all rows in all the tables being joined. For example, if the first table has 20 rows and the second table has 10 rows, the result will be 20 * 10, or 200 rows. This query takes a long time to execute.


Lets use the below two tables to explain the sql join conditions.


database table "product";


product_id product_name supplier_name unit_price

100 Camera Nikon 300

101 Television Onida 100

102 Refrigerator Vediocon 150

103 Ipod Apple 75

104 Mobile Nokia 50

database table "order_items";


order_id product_id total_units customer

5100 104 30 Infosys

5101 102 5 Satyam

5102 103 25 Wipro

5103 101 10 TCS

SQL Joins can be classified into Equi join and Non Equi join.


1) SQL Equi joins


It is a simple sql join condition which uses the equal sign as the comparison operator. Two types of equi joins are SQL Outer join and SQL Inner join.


For example: You can get the information about a customer who purchased a product and the quantity of product.


2) SQL Non equi joins


It is a sql join condition which makes use of some comparison operator other than the equal sign like >, <, >=, <=






1) SQL Equi Joins:


An equi-join is further classified into two categories:

a) SQL Inner Join

b) SQL Outer Join

a) SQL Inner Join:


All the rows returned by the sql query satisfy the sql join condition specified.


For example: If you want to display the product information for each order the query will be as given below. Since you are retrieving the data from two tables, you need to identify the common column between these two tables, which is theproduct_id.


The query for this type of sql joins would be like,


SELECT order_id, product_name, unit_price, supplier_name, total_units

FROM product, order_items

WHERE order_items.product_id = product.product_id;


The columns must be referenced by the table name in the join condition, because product_id is a column in both the tables and needs a way to be identified. This avoids ambiguity in using the columns in the SQL SELECT statement.


The number of join conditions is (n-1), if there are more than two tables joined in a query where 'n' is the number of tables involved. The rule must be true to avoid Cartesian product.


We can also use aliases to reference the column name, then the above query would be like,


SELECT o.order_id, p.product_name, p.unit_price, p.supplier_name, o.total_units

FROM product p, order_items o

WHERE o.product_id = p.product_id;


b) SQL Outer Join:


This sql join condition returns all rows from both tables which satisfy the join condition along with rows which do not satisfy the join condition from one of the tables. The sql outer join operator in Oracle is ( + ) and is used on one side of the join condition only.


The syntax differs for different RDBMS implementation. Few of them represent the join conditions as "sql left outer join", "sql right outer join".


If you want to display all the product data along with order items data, with null values displayed for order items if a product has no order item, the sql query for outer join would be as shown below:


SELECT p.product_id, p.product_name, o.order_id, o.total_units

FROM order_items o, product p

WHERE o.product_id (+) = p.product_id;


The output would be like,


product_id product_name order_id total_units

------------- ------------- ------------- -------------

100 Camera

101 Television 5103 10

102 Refrigerator 5101 5

103 Ipod 5102 25

104 Mobile 5100 30

NOTE:If the (+) operator is used in the left side of the join condition it is equivalent to left outer join. If used on the right side of the join condition it is equivalent to right outer join.


SQL Self Join:


A Self Join is a type of sql join which is used to join a table to itself, particularly when the table has a FOREIGN KEY that references its own PRIMARY KEY. It is necessary to ensure that the join statement defines an alias for both copies of the table to avoid column ambiguity.


The below query is an example of a self join,


SELECT a.sales_person_id, a.name, a.manager_id, b.sales_person_id, b.name

FROM sales_person a, sales_person b

WHERE a.manager_id = b.sales_person_id;


2) SQL Non Equi Join:


A Non Equi Join is a SQL Join whose condition is established using all comparison operators except the equal (=) operator. Like >=, <=, <, >


For example: If you want to find the names of students who are not studying either Economics, the sql query would be like, (lets use student_details table defined earSQL RENAME Statement


With RENAME statement you can rename a table.


Some of the relational database management system (RDBMS) does not support this command, because this is not standardizing statement.


For example renaming a table through MS SQL Server you must use storage procedure SP_RENAME.





Syntax for SQL RENAME is:


RENAME TABLE {tbl_name} TO {new_tbl_name};


Where {tbl_name} table that exists in the current database, and {new_tbl_name} is new table name.


As for Oracle may also be use the following option:


ALTER TABLE {tbl_name} RENAME TO {new_tbl_name};


As Example


CREATE TABLE employees

( id NUMBER(6),

name VARCHAR(20)

);

INSERT INTO employees( id, name ) values( 1, 'name 1');

INSERT INTO employees( id, name ) values( 2, 'name 2');

INSERT INTO employees( id, name ) values( 3, 'name 3');


SELECT * FROM employees;


SELECT Output:


id name

------------------- -------------------

1 name 1

2 name 2

3 name 3

RENAME TABLE employees TO employees_new;


SELECT * FROM employees_new;


SELECT Output:


id name

------------------- -------------------

1 name 1

2 name 2

3 name 3

SQL RENAME NOTES


1)The minimum version that supports table renaming is Oracle 8i. All the dependencies of the table will automatically updated. No need of updating them after wards

lier.)


SELECT first_name, last_name, subject

FROM student_details

WHERE subject != 'Economics'


The output would be something like,


first_name last_name subject

------------- ------------- -------------

Anajali Bhagwat Maths

Shekar Gowda Maths

Rahul Sharma Science

Stephen Fleming Science


No comments :

Post a Comment