concat, alias, distinct, limit

eunbi kim·2024년 4월 2일
0
  • CONCAT
  • ALIAS
  • DISTINCT
  • LIMIT

CONCAT

여러 문자열을 하나로 합치거나 연결해주는 함수이다.

SELECT CONCAT('string1', 'string2', ...);

celeb 데이터에서 이름: name 형식으로 출력해보면:

select concat('이름: ', name) from celeb;

ALIAS

컬럼이나 테이블 이름에 별칭을 생성할 때 사용한다.

SELECT column as alias
FROM tablename;

name 컬럼을 '이름'으로 별칭을 만들어서 검색:

select name as '이름' from celeb;

name은 '이름'으로, agency는 '소속사'로 별칭을 만들어서 검색:

select name as '이름', agency as '소속사' from celeb;

name과 job_title을 합쳐서 profile이라는 별칭을 만들어서 검색:

select concat(name, ' : ', job_title) as profile from celeb;

snl_show에 출연한 celeb을 기준으로 두 테이블을 조인하여,
celeb 테이블은 c, snl_show 테이블은 s라는 별칭을 만들어서
출연한 시즌과 에피소드, 이름, 직업을 검색:

select s.season, s.episode, c.name, c.job_title
from snl_show as s, celeb as c
where c.name = s.host;

-> snl_show.season을 s.season으로 줄일 수 있다.
가독성을 유지하며 간략해진다!!

snl_show에 출연한 celeb을 기준으로 두 테이블을 조인하여
다음과 같이 각 데이터의 별칭을 사용하여 검색:

  • 시즌, 에피소드, 방송일을 합쳐서 '방송정보'
  • 이름, 직업을 합쳐서 '출연자정보'
select concat(s.season, '-', s.episode, '(', s.broadcast_date, ')') as '방송정보',
concat(c.name, '(', c.job_title, ')') as '출연자정보'
from snl_show as s, celeb as c
where name=host;

-> AS는 생략도 가능


  • 문제 풀이

예제 1.
이름이 3글자인 연예인 정보(이름, 소속사)를 검색:

select concat('이름: ', name, ', 소속사: ', agency) as '연예인 정보'
from celeb
where name like '___';

예제 2.
앞글자가 2글자이고, '엔터테인먼트'로 끝나는 소속사 연예인 중
SNL에 출연한 연예인의 신상정보(나이, 성별)와 출연정보(시즌-에피소드, 방송날짜), 소속사 정보를
방송날짜 최신순으로 정렬하여 검색:

select c.agency as '소속사정보',
concat('나이: ', c.age, '(', c.sex, ')') as '신상정보',
concat(s.season, '-', s.episode, ', 방송날짜: ', s.broadcast_date) as '출연정보'
from celeb as c, snl_show as s
where c.name=s.host AND agency like '__엔터테인먼트' order by s.broadcast_date desc;


DISTINCT

검색한 결과의 중복을 제거하는 기능을 한다.

SELECT DISTINCT column1, column2, ...
FROM tablename;

연예인 소속사 종류를 검색 - 중복 포함:

select agency from celeb;

연예인 소속사 종류를 검색 - 중복 제외:

select distinct agency from celeb;

가수 중에서, 성별과 직업별 종류를 검색 - 중복 포함:

select sex, job_title
from celeb
where job_title like '%가수%';

가수 중에서, 성별과 직업별 종류를 검색 - 중복 제외:

select distinct sex, job_title
from celeb
where job_title like '%가수%';


LIMIT

검색 결과를 정렬된 순으로 주어진 숫자만큼만 조회한다.
n개만 가져오고 싶다 <- 이렇게 limit을 건다.

SELECT column1, column2, ...
FROM tablename
WHERE condition
LIMIT number;

celeb 데이터 3개만 가져오기:

select * from celeb limit 3;

나이가 가장 적은 연예인 4명을 검색:

select * from celeb order by age limit 4;

  • 문제 풀이

예제 1.
celeb테이블에서 남자 연예인 중 나이가 가장 많은 2명을 조회하세요.

select * from celeb where sex='M' order by age desc limit 2;

예제 2.
SNL 출연자들의 방송정보(출연 시즌, 에피소드, 호스트 이름)를 최신 방송 날짜순으로 2명 조회하세요.

select concat('SNL 시즌 ', s.season, ' 에피소드 ', s.episode, ' 호스트 ', s.host) as 'SNL 방송 정보',
c.age as '나이'
from snl_show as s, celeb as c
where s.host=c.name
order by s.broadcast_date desc
limit 2;

0개의 댓글