[MySQL] 기초 문법 정리 - 2
by Edward Park
Abstract
지난포스트에서는 MySQL의 기본적인 문법인 CRUD + 간단한 정렬(order by), 조건문(where)들을 살펴보았다.
이번포스트에서는 좀더 심화된 조건문(like)과 병합(join)등에 대해 살펴보자.
Table 생성
-- Set Schema
CREATE TABLE classmates (
id INTEGER PRIMARY KEY AUTO_INCREMENT,
-- autoincrement가 지정되어있는 primary key의 경우
-- 삭제된 후 다시 데이터를 insert해도 삭제된 부분이 채워지지않는다.
name TEXT NOT NULL,
age INT NOT NULL,
address TEXT NOT NULL
);
-- Insert data
INSERT INTO classmates (name, age, address)
VALUES
('바지락', 33, '울산'),
('가자미', 33, '부산'),
('가자미', 25, '김해'),
('갈매기', 15, '울산')
;
TABLE 2번 선택
다음과 같이 한개의 command에 SELECT문을 여러번 사용할 수 있다.
SELECT t.name FROM (SELECT name, age FROM classmates WHERE age >= 20) AS t;
조건문
LIKE
2%
: 2로 시작(0개이상)
%2
: 2로끝남
%2%
: 2가들어감
_2%
: 아무값이나 들어가고 두번째가 2로 시작
1___
: 1로 시작하고 4자리
SELECT * FROM classmates
WHERE age LIKE '2_'; -- 20대인 row만 출력
SELECT * FROM classmates
WHERE age >= 30 and name LIKE '%미'; -- 두가지 이상의 조건 연결
GROUPBY에서 조건 HAVING 사용
SELECT name, COUNT(name) AS count
FROM classmates
GROUP BY name
HAVING COUNT(name) > 1
; -- name=가자미, count=2인 table 반환
IN
SELECT id, name FROM classmates
WHERE name in ('가자미', '전복'); -- 포함되어있는 것
병합(JOIN)
두개의 테이블을 어떠한 column을 기준으로 합치는것으로 MySQL에서는 크게 3가지 방법이 있다.
INNSER JOIN
: 두개의 테이블중 중복된 것들만 뽑아 합치는것. 결과물의 row가 가장 작다LEFT JOIN(=LEFT OUTER JOIN)
: 왼쪽 테이블이 모든 원소를 가지며 합쳤을때 오른쪽 테이블에 없는 값들은 NULL값이 된다.RIGHT JOIN(=RIGHT OUTER JOIN)
: 위와 동(left, right 반대)CROSS JOIN
: 특정 기준값 없이 두 테이블의 모든 경우의 수 결합을 나열
설명 참고 또다른 table 생성-- Set Schema CREATE TABLE classmates2 ( id INTEGER PRIMARY KEY AUTO_INCREMENT, name TEXT NOT NULL, age INT NOT NULL, address TEXT NOT NULL ); -- Insert data ALTER TABLE classmates2 convert to character set UTF8; INSERT INTO classmates2 (name, age, address) VALUES ('바지락', 26, '울산'), ('우럭', 33, '서울'), ('가자미', 25, '김해'), ('갈매기', 15, '울산'), ('조기', 100, '대구') ;
기본적인 사용법
joined_table: {
table_reference {[INNER | CROSS] JOIN | STRAIGHT_JOIN} table_factor [join_specification]
| table_reference {LEFT|RIGHT} [OUTER] JOIN table_reference join_specification
| table_reference NATURAL [INNER | {LEFT|RIGHT} [OUTER]] JOIN table_factor
}
예제
-- LEFT JOIN
SELECT c1.name, c1.age as c1_age, c2.age as c2_age FROM classmates AS c1 LEFT JOIN classmates2 AS c2 ON c1.name = c2.name;
결과물은 아래와 같다.