(CONCAT,IN,OR,NOT, LIKE)
먼저 클럽 테이블에서 단순하게 클럽명과 감독 이름을 조회해 보겠습니다.
SELECT name,coach ClubCoach
FROM clubs
이걸 한 컬럼에서 뽑아내고 싶은데 이때 사용하는게 CONCAT입니다.
SELECT CONCAT(name,coach) ClubCoach
FROM clubs
붙긴 붙었는데 읽기가 힘들죠?
그래서 읽기 쉽게 중간에 띄어쓰고 다른 글씨를 써놓고 싶습니다.
SELECT CONCAT(name,'의 감독',coach) ClubCoach
FROM clubs
CONCAT하나에 3개의 인자를 넣으니까 이런 에러가 나옵니다.
CONCAT은 두개의 인자만 쓸 수 있습니다.
그렇다면 두개의 컬럼안에 다른 글씨를 넣으려면 CONCAT을 두번 써야 됩니다.
SELECT CONCAT(CONCAT(name,'의 감독 : '),coach) ClubCoach
FROM clubs
CONCAT을 두번 사용하니까 그래도 전보다 보기 좋게 나오는걸 볼 수 있습니다.
선수 테이블로도 잠깐 살펴 보겠습니다.
SELECT name,goals
FROM players
기본 선수 이름과 골 수를 표현한 것입니다.
컬럼의 셀들을 보면 이름은 왼쪽으로, 골은 오른쪽으로 맞춰져 있는게 보입니다.
문자는 왼쪽 숫자는 오른쪽으로 되어있는 것입니다.
SELECT name,CONCAT(goals,'골') goals
FROM players
골의 숫자 옆에 '골'이라는 문자가 붙으면서 자료형도 문자형으로 바뀌어 왼쪽으로 맞춰진게 보입니다.
IN 연산자는 WHERE절의 조건범위를 지정할때 사용합니다.
SELECT NAME
FROM CLUBS
WHERE OINTMENT IN('런던','마드리드')
이렇게 클럽 연고지를 기준으로 런던과 마드리드에 있는 팀들을 보고싶을때 사용 할 수 있습니다.
OR 연산자도 비슷한 역할을 합니다.
SELECT NAME
FROM CLUBS
WHERE OINTMENT='런던' OR OINTMENT= '마드리드'
작성하는 방식은 조금 다르지만 값을 동일하게 출력됩니다.
하지만 IN 연산자의 장점이 있습니다.
목록에 넣을 값이 여러 개일때, IN 연산자가 보다 쓰기도 쉽고, 이해하기도 쉽다.
IN을 사용하면 평가 순서를 보다 쉽게 관리 할 수 있고, 연산자 수도 줄어든다.
IN 연산자가 OR 연산자보다 실행 속도가 빠르다.
IN의 가장 큰 장점은 IN 연산자에 다른 SELECT 문을 넣을 수 있다.
동적인 WHERE 절을 만들때 더 크게 활용 된다.
출처: https://inforyou.tistory.com/28 [a battle with myself]
NOT 연산자는 IN 연산자와 반대의 역할을 합니다.
SELECT NAME
FROM CLUBS
WHERE NOT OINTMENT IN('런던','마드리드')
이런식으로 컬럼명 앞에 적어주고 IN 연산자를 만들면 전의 출력값의 반대 결과가 나옵니다.
아까 출력됐던 클럽을 뺀 나머지 클럽들이 전부 나왔습니다.
LIKE 연산자는 WHERE절에서 부분적으로 일치하는 컬럼을 찾을때 사용됩니다.
선수들의 이름 중에서 '수'가 들어있는 이름을 찾아 보겠습니다.
SELECT name
FROM players
WHERE name LIKE '%수%'
이렇게 '수'가 들어있는 선수 2명이 나온 것을 볼 수 있습니다.
그런데 LIKE연산자를 사용할때 %수%로 문자를 감쌌는데
여기에서 %수, 수%같이 한쪽에만 쓰면 출력되는 값도 달라집니다.
'%수%'는 '수'가 포함된 모든 문자를 찾고
'%수'는 '수'로 끝나는 문자를 찾습니다.
'수%'는 '수'로 시작하는 문자를 찾습니다.
그러므로 사진의 값이 '수'로 시작하거나 끝나지 않기 때문에
%수%로 하지 않은 다른 형식으로 쓴다면 아무 값도 나오지 않게됩니다.