☰ See All Chapters |
MySQL JOINS
Combing two or more tables to a single table is called JOIN. Using joins you can retrieve data from multiple tables from single query.
We can join both related (related with primary key and foreign key) as well as unrelated tables.
WHERE clause is a required element of an SQL statement when joining tables. The join is performed in the WHERE clause. Several operators can be used to join tables, such as =, <, >, <>, <=, >=, !=, BETWEEN, LIKE, and NOT.
For joining tables, criteria are the data type of columns. The data type of the columns which are used (used in where clause) for joining should be of the same type.
The tables being joined are listed in the FROM clause.
Tables can have same column names, if same column name exists in multiple table being joined, we must specify column names with table name as below:
SELECT EMP.ENAME, DEPT.DNAME FROM DEPT , EMP WHERE DEPT.DEPTNO = EMP.DEPTNO; |
Notice that each column in the SELECT clause is preceded by the associated table name to identify each column. This is called qualifying columns in a query. Qualifying columns is only necessary for columns that exist in more than one table referenced by a query. You usually qualify all columns for consistency and to avoid questions when debugging or modifying SQL code.
In the below example we joined EMP table with DEPT table.
CREATE TABLE DEPT (DEPTNO NUMERIC(2) , DNAME VARCHAR(14) , LOC VARCHAR(13), CONSTRAINT PK_DEPT PRIMARY KEY(DEPTNO) ) ;
CREATE TABLE EMP (EMPNO NUMERIC(4) , ENAME VARCHAR(10), JOB VARCHAR(9), MGR NUMERIC(4), HIREDATE DATE, SAL NUMERIC(7,2), COMM NUMERIC(7,2), DEPTNO NUMERIC(2), CONSTRAINT FK_DEPTNO FOREIGN KEY(DEPTNO) REFERENCES DEPT(DEPTNO), CONSTRAINT PK_EMP PRIMARY KEY(EMPNO)
); INSERT INTO DEPT VALUES (10,'ACCOUNTING','NEW YORK'); INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS'); INSERT INTO DEPT VALUES (30,'SALES','CHICAGO'); INSERT INTO DEPT VALUES (40,'OPERATIONS','BOSTON');
INSERT INTO EMP VALUES (7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20); INSERT INTO EMP VALUES (7499,'ALLEN','SALESMAN',7698,'1981-2-20',1600,300,30); INSERT INTO EMP VALUES (7521,'WARD','SALESMAN',7698,'1981-2-22',1250,500,30); INSERT INTO EMP VALUES (7566,'JONES','MANAGER',7839,'1981-4-2',2975,NULL,20); INSERT INTO EMP VALUES (7654,'MARTIN','SALESMAN',7698,'1981-9-28',1250,1400,30); INSERT INTO EMP VALUES (7698,'BLAKE','MANAGER',7839,'1981-5-1',2850,NULL,30); INSERT INTO EMP VALUES (7782,'CLARK','MANAGER',7839,'1981-6-9',2450,NULL,10); INSERT INTO EMP VALUES (7788,'SCOTT','ANALYST',7566,'1987-4-19',3000,NULL,20); INSERT INTO EMP VALUES (7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10); INSERT INTO EMP VALUES (7844,'TURNER','SALESMAN',7698,'1981-9-8',1500,0,30); INSERT INTO EMP VALUES (7876,'ADAMS','CLERK',7788,'1987-5-23',1100,NULL,20); INSERT INTO EMP VALUES (7900,'JAMES','CLERK',7698,'1981-12-3',950,NULL,30); INSERT INTO EMP VALUES (7902,'FORD','ANALYST',7566,'1981-12-3',3000,NULL,20); INSERT INTO EMP VALUES (7934,'MILLER','CLERK',7782,'1982-1-23',1300,NULL,10); COMMIT; |
SELECT E.*, D.* FROM DEPT D JOIN EMP E ON D.DEPTNO = E.DEPTNO; |
Different type of Joins
Using Table Aliases
You use table aliases to rename a table temporarily. By this actual table name does not change in the database.
Giving the tables aliases is a necessity for the self-join.
You can use any alias name of your choice.
The selected columns were justified with the corresponding table alias.
SELECT E.*, D.* FROM DEPT D , EMP E WHERE D.DEPTNO = E.DEPTNO; |
Replacing WHERE clause by JOIN Syntax
SELECT E.*, D.* FROM DEPT D JOIN EMP E ON D.DEPTNO = E.DEPTNO; |
The table being joined is added after the JOIN syntax, and then the JOIN operators are placed after the ON qualifier. The data type of the columns which are used (used in ON qualifier) for joining should be of the same type.
All Chapters