오늘은 지난 시간에 배운 CRATE TABLE을 이용해 TABLE을 생성하고, 컬럼을 삽입했다.
PLAYER_INFO
PLAYER_INFO_MAJOR
PLAYER_INFO 테이블은 선수들의 정보를 관리하기 위한 테이블로, 선수 이름, 나이, 번호, 전공 컬럼이 있다.
PALYER_INFO의 PLAYER_MAJOR를 varchar가 아닌 int형으로 받은 이유는, PLAYER_INFO_MAJOR 테이블에서 더 세분화 하기 위해서다.
PLAYER_INFO_MAJOR 테이블에는 PIM_SEQ와 PIM_MAJOR 컬럼이 있다.
PIM_SEQ는 PLAYER_INFO의 PLAYER_MAJOR와 대칭되는 컬럼이며, PIM_MAJOR에는 전공명이 써져 있다.
※ 테이블을 다 만들고 누나한테 들은 바로는, primary key가 붙는 컬럼을 가장 위, 다른 테이블을 참조하는 컬럼을 그 다음으로 놓는 것이 더 좋다고 한다.
이제 선수들의 정보를 출력할 것인데, 위에 보다시피 선수정보와 전공을 다른 테이블에 만들었다. 그래서 출력을 하기 위해 한 쪽 테이블을 참조할 것이다. 이 때 사용하는 예약어가 "join"이다.
출력
결과
이 join 예약어는 앞에 left, right 외에도 다른 예약어를 붙여 사용할 수 있는데, 오늘 배운 것은 left와 right이다.
left join
join 앞에 붙이는 left, right는 t1과 t2 중 어느 것에 초점을 두느냐의 차이다. left를 사용해 t1 테이블을 기준으로 출력 내용을 정리하면 아래와 같이 t1의 PLAYER_SEQ를 기준으로 정렬된다.
- 정렬을 할 때 MySQL 내부적으로 primary key가 있는 컬럼을 최우선 순위로 두는지 자세히 모르겠으나 몇 번을 해도, 다른 테이블을 생성해봐도 항상 SEQ를 기준으로 정렬되었다.
right join
위에서 추가한 컬럼으로는 right join과 left join의 차이가 나지 않아 컬럼에 추가 삽입을 했다.
이제 right join을 사용해 출력해보자.
결과
보다시피 PLAYER_MAJOR로 정렬되었다.
order by
위 방법 외에도 출력시 정렬을 위한 방법으로 order by [컬럼명] 방법이 있다.
보다시피 right join을 입력하고 order by t1.PLAYER_SEQ를 입력했는데, PLAYER_SEQ를 기준으로 정렬되었다. 아마도 order by의 강제력이 더 큰 것 같다.
또, order by에는 컬럼을 2 개 이상 명시할 수도 있는데,
order by 컬럼명1, 컬럼명2
위와 같은 경우에서 컬럼명 1을 기준으로 먼저 정리한 후, 중복 값이 있을 경우 컬럼명 2를 이용해 재정렬하는 것이다.
'MySQL' 카테고리의 다른 글
MySQL Index? (0) | 2023.07.11 |
---|---|
MySql ErrorCode: 1046 (0) | 2023.04.27 |
[MySQL] TABLE 구조 잡기 (0) | 2022.10.22 |
FOREIGN KEY 맛보기 (2) | 2022.10.03 |
CREATE TABLE - 테이블 생성하기 (0) | 2022.09.27 |