✅ 코딩테스트 SQL 문제 준비 ✅

uuuu.jini·2023년 4월 5일
0

문제 추천

코딩테스트에서 나오는 SQL문제들을 대비하기 위하여 기초 정리가 아닌 문제를 풀기위한 이론을 정리하려고 한다.
🤷‍♀️ 가보자고 🤷‍♀️

🤘 IF

  • select, where 절에서 사용 가능
    SELECT IF(10>5, '크다','작다') AS result;

🤘 Order By

  • Order by 뒤에 우선순위가 있는 열을 순서대로 적는다.

🤘 LIKE

  • where 절과 함께 특정 패턴을 검색할 때 사용한다.
SELEC * 
FROM student
WHERE student_ID like 'a%';

LIKE 'a%' // a 로 시작되는 모든 것 
LIKE 'a_%_%' // a 로 시작되고 최소 3이상의 길이를 가진 것
LIKE `_a%` // 두번째 자리에 a가 들어가는 모든 것

🤘 IN

  • where 절 내 여러 값을 설정하고자 할 때 사용
  • 연산속도가 상대적으로 빠름
  • or 연산과 유사한 효과
select * 
from Customers
where country in ('UK','Korea');
  • 문제 : 동물 보호소에 들어온 동물 중 이름이 'Lucy, Ella, Pickle, Rogan, Sabrina, Mitty'인 동물의 아이디와 이름, 성별 및 중성화 여부를 조회하는 SQL 문을 작성해주세요.
SELECT id, name, gender, sex
from animal
where name in ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty');

🤘 Between

  • where 절 내 검색 조건으로 범위를 지정하고자 할 때 사용
  • betweenand 사이에 들어가는 값은 ~이상 ~이하이다.
select * 
from products
where price between 10 and 20;

select * 
from products 
where price not between 10 and 20;

select * 
from products
where (price between 10 and 20) and not id in(2,3);

🤘 Null의 처리

  • IFnull 사용
SELECT ANIMAL_TYPE, IFNULL(NAME, 'No name') AS NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS;
  • coalesce 사용
FROM ANIMAL_INS;

coalesce는 정의된 열 중 null이 아닌 첫번째 값을 화면에 출력

🤘 Case 문

CASE
	WHEN 조건1 THEN '조건1 반환값'
    WHEN 조건2 THEN '조건2 반환값'
    ELSE '충족되는 조건 없을 때 반환값'
END

SELECT, WHERE, ORDER BY 절에서 사용 가능하고 보통 SELECT 절에 많이 쓰인다. ELSE 생략시 결과값이 NULL이 나온다.

🤘 LIMIT

// 조건식이 있는 경우
SELECT 열명
FROM 테이블명
WHERE 조건식
LIMIT 행수

// 조건식이 없는 경우 
SELECT 열명
FROM 테이블명
LIMIT 행수

// 지정한 숫자 개수 리턴
SELECT * 
FROM 
LIMIT 0,3; // 0 번부터 3개

🤘 GROUP BY

  • 집계함수와 함께 사용되어, 결과를 지정한 칼럼에 따라 그룹으로 묶고자 할 때 사용
SELECT count(id)
FROM customers
GROUP BY country; // 각 도시에 사는 사람이 몇명인지

🤘 MIN(), MAX(), COUNT(), AVG(), SUM()

  • 집계함수
  • SELECT에서 사용
  • count : null은 숫자로 세지 않는다.
  • 문제: 평균 잔고(balance)가 700이상인 지점의 이름과 평균 잔고를 구하라
select name, avg(balance)
from account
group by branch_name
having avg(balance);

🤘 Union

  • select 의 칼럼 리스트를 기준으로 두 개 이상의 질의 결과를 하나의 테이블로 합치고자 할 때 사용
  • 기본적으로 중복값을 제거한다.
  • 중복값 포함 union all
SELECT * 
FROM customers
union
SELECT city FROM orders
order by city;

🤘 JOIN

  • INNER JOIN : 교집합
SELECT test1.number
FROM test1 join test2 on test1.number = test2.number;
  • 문제: 우유와 요거트를 동시에 구입한 장바구니가 있는지 알아보려고 합니다. 우유와 요거트를 동시에 구입한 장바구니의 아이디를 조회하는 SQL문을 작성해주세요. 이때 결과는 장바구니의 아이디 순으로 나와야 합니다.
SELECT distinct c.cart_id
FROM cart_products c inner join cart_product p on(c.cart_id = p.cart_id)
WHERE (c.name='우유' and p.name='요거트') or (c.name='요거트' and p.name='우유')
order by c.cart_id;
  • LEFT JOIN : 왼쪽 기준
    • 왼쪽과 오른쪽의 number 칼럼을 서로 비교하여 중첩되는 값이 존재하면 왼쪽 테이블의 number 컬럼의 값을 출력한다.
select test1.number
FROM test1 left join test2 on test1.number = test2.number;
  • RIGHT JOIN : 오른쪽 기준
  • OUTER JOIN : 매칭되는 값이 없어도 출력
profile
멋쟁이 토마토

0개의 댓글