std_data
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(10) | NO | | 0 | |
| class | varchar(10) | NO | | 0 | |
| add | varchar(10) | NO | | 0 | |
+-------+-------------+------+-----+---------+----------------+
std_point
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | | |
| level | tinyint(10) | NO | | | |
| ls_1 | tinyint(100) | NO | | | |
| ls_2 | tinyint(100) | NO | | | |
| ls_3 | tinyint(100) | NO | | | |
+-------+--------------+------+-----+---------+-------+
ysql> select * from std_point;
----+-------+------+------+------+
id | level | ls_1 | ls_2 | ls_3 |
----+-------+------+------+------+
1 | 1 | 98 | 23 | 88 |
2 | 3 | 10 | 63 | 88 |
3 | 2 | 54 | 27 | 56 |
4 | 3 | 38 | 3 | 76 |
5 | 3 | 22 | 95 | 80 |
6 | 2 | 14 | 59 | 88 |
7 | 1 | 74 | 35 | 100 |
8 | 1 | 46 | 43 | 100 |
9 | 2 | 22 | 55 | 56 |
10 | 1 | 10 | 27 | 88 |
----+-------+------+------+------+
mysql> select * from std_data;
+----+------+-------+---------+
| id | name | class | add |
+----+------+-------+---------+
| 1 | 2 | 1-2 | 102-167 |
| 2 | 2 | 1-1 | 146-107 |
| 3 | 3 | 1-1 | 178-155 |
| 4 | 1 | 1-2 | 186-127 |
| 5 | 2 | 1-1 | 110-123 |
| 6 | 2 | 1-1 | 170-195 |
| 7 | 3 | 1-3 | 106-179 |
| 8 | 1 | 1-3 | 138-123 |
| 9 | 3 | 1-2 | 174-131 |
| 10 | 1 | 1-1 | 166-151 |
+----+------+-------+---------+
테이블 별명 단축..
select * from std_data
이러한 쿼리를
select * from std_data sd
라고 선언할수 있다.
그러므로써 뒤의 where문 뒤의 조건식에서
select * from std_data sd where sd.id<5
와 같은식으로 표기할수 있어진다.
그리고 앞쪽의 필드 구분에서도 이용가능하다.
◆◆ The Cross Join
mysql> select * from std_data,std_point;
+----+------+-------+---------+----+-------+------+------+------+
| id | name | class | add | id | level | ls_1 | ls_2 | ls_3 |
+----+------+-------+---------+----+-------+------+------+------+
| 1 | 2 | 1-2 | 102-167 | 1 | 1 | 98 | 23 | 88 |
| 2 | 2 | 1-1 | 146-107 | 1 | 1 | 98 | 23 | 88 |
| 3 | 3 | 1-1 | 178-155 | 1 | 1 | 98 | 23 | 88 |
| 4 | 1 | 1-2 | 186-127 | 1 | 1 | 98 | 23 | 88 |
.
.
.
.
100 rows in set (0.00 sec)
한 데이터당 한데이터씩 매치시켜가며 표기한다.
10x10 즉 100개의 결과를 내놓는다.
mysql> select sd.add,sp.id from std_data sd,std_point sp where sp.id='5';
+---------+----+
| add | id |
+---------+----+
| 102-167 | 5 |
| 146-107 | 5 |
| 178-155 | 5 |
| 186-127 | 5 |
| 110-123 | 5 |
| 170-195 | 5 |
| 106-179 | 5 |
| 138-123 | 5 |
| 174-131 | 5 |
| 166-151 | 5 |
+---------+----+
10 rows in set (0.02 sec)
id를 add에 한번씩 매치시켜 표시한다.
1x10 즉 10개의 결과를 내놓는다.
◆◆ The Equi-join
직접 테이블의 필드와 필드를 비교해서 값을 가져온다.
mysql> select sd.add,sp.id from std_data sd,std_point sp where sp.id=sd.id and sd.id=3;
+---------+----+
| add | id |
+---------+----+
| 178-155 | 3 |
+---------+----+
1 row in set (0.30 sec)
필드의 값을 직접비교해서 결과를 가져온다.
◆◆ The Left Join
mysql> select * from std_data left join std_point on std_data.id=std_point.id;
+----+------+-------+---------+------+-------+------+------+------+
| id | name | class | add | id | level | ls_1 | ls_2 | ls_3 |
+----+------+-------+---------+------+-------+------+------+------+
| 1 | 2 | 1-2 | 102-167 | 1 | 1 | 98 | 23 | 88 |
| 2 | 2 | 1-1 | 146-107 | 2 | 3 | 10 | 63 | 88 |
| 3 | 3 | 1-1 | 178-155 | 3 | 2 | 54 | 27 | 56 |
| 4 | 1 | 1-2 | 186-127 | 4 | 3 | 38 | 3 | 76 |
| 5 | 2 | 1-1 | 110-123 | 5 | 3 | 22 | 95 | 80 |
| 6 | 2 | 1-1 | 170-195 | 6 | 2 | 14 | 59 | 88 |
| 7 | 3 | 1-3 | 106-179 | 7 | 1 | 74 | 35 | 100 |
| 8 | 1 | 1-3 | 138-123 | 8 | 1 | 46 | 43 | 100 |
| 9 | 3 | 1-2 | 174-131 | 9 | 2 | 22 | 55 | 56 |
| 10 | 1 | 1-1 | 166-151 | 10 | 1 | 10 | 27 | 88 |
+----+------+-------+---------+------+-------+------+------+------+
10 rows in set (0.00 sec)
두 테이블을 합쳐서 한화면에 보여준다.
요구한 필드의 값이 같은것들을 찾아서 보여준다.
Left Join이 아니더라도
mysql> select * from std_data , std_point where std_data.id=std_point.id;
이런 쿼리를 보내면 같은 결과를 얻을수 있다.
◆ The Using Clause
조금더 편리한 방법으로 using 을 사용해서 아래와 같은 결과를 얻을수 잇다.
겹쳐지는 id 부분은 한번만 출력한다.
mysql> select * from std_data left join std_point using(id);
+----+------+-------+---------+-------+------+------+------+
| id | name | class | add | level | ls_1 | ls_2 | ls_3 |
+----+------+-------+---------+-------+------+------+------+
| 1 | 2 | 1-2 | 102-167 | 1 | 98 | 23 | 88 |
| 2 | 2 | 1-1 | 146-107 | 3 | 10 | 63 | 88 |
| 3 | 3 | 1-1 | 178-155 | 2 | 54 | 27 | 56 |
| 4 | 1 | 1-2 | 186-127 | 3 | 38 | 3 | 76 |
| 5 | 2 | 1-1 | 110-123 | 3 | 22 | 95 | 80 |
| 6 | 2 | 1-1 | 170-195 | 2 | 14 | 59 | 88 |
| 7 | 3 | 1-3 | 106-179 | 1 | 74 | 35 | 100 |
| 8 | 1 | 1-3 | 138-123 | 1 | 46 | 43 | 100 |
| 9 | 3 | 1-2 | 174-131 | 2 | 22 | 55 | 56 |
| 10 | 1 | 1-1 | 166-151 | 1 | 10 | 27 | 88 |
+----+------+-------+---------+-------+------+------+------+
10 rows in set (0.00 sec)
◆◆ Self-joins
mysql> select * from std_data as sd1, std_data as sd2;
+----+------+-------+---------+----+------+-------+---------+
| id | name | class | add | id | name | class | add |
+----+------+-------+---------+----+------+-------+---------+
| 1 | 2 | 1-2 | 102-167 | 1 | 2 | 1-2 | 102-167 |
| 2 | 2 | 1-1 | 146-107 | 1 | 2 | 1-2 | 102-167 |
| 3 | 3 | 1-1 | 178-155 | 1 | 2 | 1-2 | 102-167 |
| 4 | 1 | 1-2 | 186-127 | 1 | 2 | 1-2 | 102-167 |
처음에 했던 크로스 조인과 비슷한 출력물을 내놓는다.