Logical Operations
SELECT column1, column2, ...
FROM tablename
WHERE column +
AND : 조건을 모두 만족하는 경우 TRUE
OR : 하나의 조건이라도 만족하는 경우 TRUE
NOT : 조건을 만족하지 않는 경우 TRUE
WHERE NOT condition
value1
and value2
: 조건 값이 범위 사이에 있으면 TRUEvalue1
, value2
) : 조건 값이 목록에 있으면 TRUE pattern : '%가수%' - '가수'라는 단어를 포함한
'G%' - G로 시작하는 단어
'%엔터테이먼트' - 엔터테이먼트로 끝나는 단어
'___%' - 최소 3글자 이상
'%, %' - ,로 나뉘는 단어 하나 이상(?!)
UNION
: 여러 개의 SQL 문을 합쳐서 하나의 SQL 문으로 만들어주는 방법 (주의 : 칼럼의 개수가 같아야 함)
#TABLE A와 TABLE B의 중복된 값을 포함/미포함 해서 알려준다.
각각 조건을 달 수 있다.
SELECT column1, column2, ... FROM tableA WHERE condition
UNION | UNION ALL
SELECT column1, column2, ... FROM tableB WHERE condition;
예)
#가수가 직업인 연예인의 이름, 직업을 검색하는 쿼리와,
1980년대에 태어난 연예인의 이름, 생년월일, 나이를 검색하는 쿼리를 UNION으로 실행
SELECT name, job_title FROM celeb WHERE job_title LIKE '%가수%'
UNION
SELECT name, birthday FROM celeb
WHERE birthday BETWEEN '1980-01-01' AND '1989-12-31';
#가져오는 칼럼의 수가 각각 같아야만 함!
JOIN
문법)
SELECT column1, column2, ...
FROM tableA
INNER JOIN | LEFT JOIN | RIGHT JOIN tableB
ON tableA.column = tableB.column
WHERE condition;
예)
SELECT celeb.id, celeb.name, snl_show.id, snl_show.host
FROM celeb
INNER JOIN snl_show
ON celeb.name = snl_show.host;
FULL OUTER JOIN
이 있으나, MySQL에서는 FULL JOIN을 지원하지 않으므로 다음과 같은 쿼리로 결과를 만들 수 있다.SELECT column1, column2, ...
FROM tableA
LEFT JOIN tableB ON tableA.column = tableB.column
UNION
SELECT column1, column2, ...
FROM tableA
RIGHT JOIN tableB ON tableA.column = tableB.column
WHERE condition
SELF JOIN
은 일반적인 JOIN 처럼 두개 이상의 테이블을 연결하여 데이터를 함께 표시하는 대신 자기 자신 안에 있는 똑같은 데이터를 가져가 붙인다. 테이블에 한 번만 연결하여 수행 참고SELECT
cust.customer_id,
cust.firstname,
cust.lastname,
cust.birthdate,
cust.spouse_id,
spouse.firstname AS spouse_firstname,
spouse_lastname AS spouse_lastname
FROM customer AS cust
INNER JOIN customer AS spouse #같은 테이블인데 별명을 다르게 지어줌
ON cust.spouse_id = spouse.customer_id
CONCAT
: 여러 문자열을 하나로 합치거나 연결
SELECT CONCAT ('string1', 'string2', ..);
ALIAS
: 칼럼이나 테이블 이름에 별칭 생성
#칼럼 별명
SELECT column as alias
FROM tablename;
#테이블 별명
SELECT column
FROM tablename as alias;
예제)
#name을 이름으로, agency는 소속사로 별칭을 만들어 검색
SELECT name as '이름', agency as '소속사' FROM celeb;
#name과 job을 합쳐서 profile이라는 별칭을 만들어 검색
SELECT CONCAT(name, ' : ', job) as profile FROM celeb;
#테이블 이름 줄이기
SELECT s.season, s.episode, c.name, c.joi_title
FROM celeb AS c, snl_show AS s
WHERE c.name = s.host;
#AS 생략도 가능
SELECT CONCAT(s.season, '-', s.episode, '(', s.broadcast_date, ')') '방송정보', CONCAT(c.name, '(', c.job, ')') '출연자정보'
FROM celeb c, snl_show s
WHERE c.name = s.host;
DISTINCT
: 검색한 결과의 중복 제거
#연예인 소속사 종류를 검색 - 중복 제외
SELECT DISTINCT agency FROM celeb;
LIMIT
: 검색 결과를 정렬된 순으로 주어진 숫자만큼만 조회
SELECT column1, column2, ...
FROM tablename
WHERE condition
LIMIT number;