SQL 연산자

|

개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.


연산자로 데이터 다루기

우선 MySQL 환경과 MySQLWorkbench 환경은 아래와 같다.

MySQL 8.0.42-arm64
MySQLWorkbench 8.0.42-arm64

SQL 연산자는 WHERE절 등에서 더 정교한 조건을 만들거나 SELECT 절에서 데이터를 계산할 떄 사용

산술 연산자

  • +(더하기), -(뻬기), *(곱하기), /(나누기), %(나머지)
  • DIV: 정수 나누기
  • MOD: 나머지(%와 동일)
-- 문제: 숫자 23과 5를 이용한 다양한 산술 연산 결과를 확인해보기
SELECT 23 + 5 AS 더하기, 23 - 5 AS 뺴기,23 * 5 AS 곱하기,23 / 5 AS 나누기,23 % 5 AS 나머지1 ,23 mod 5 AS 나머지2;

비교 연산자

두 값의 크기를 비교해 TRUE(1), FALSE(0)로 반환 > WHERE 절에서 많이 사용!

-- 문제1: 숫자 23과 5를 이용한 비교 연산 결과를 확인
SELECT 23 >= 5 , 23 <= 5 , 23 > 5 ,23 < 5 ,23 = 5 ,23 != 5;

-- 문제2: 사원 테이블에서 직위가 '대표 이사'가 아닌 사원의 모든 정보를 조회
SELECT * FROM 사원 WHERE 직위 != '대표 이사';
SELECT * FROM 사원 WHERE 직위 <> '대표 이사';

논리 연산자

여러개의 조건을 조합할 때 사용

  • AND: 모든 조건이 참일 때 참
  • OR: 조건 중 하나라도 참일때 참
  • NOT: 조건을 부정
-- 문제:  고객 테이블에서 '부산광역시'에 살면서 마일리지가 1,000점 미만인 고객 정보를 조회
SELECT * FROM 고객 WHERE 도시 = "부산광역시" AND 마일리지 < 1000;

집합 연산자 UNION

두개 이상의 SELECT 문을 하나로 합침

  • UNION: 중복된 행은 제거하고 합치기
  • UNION ALL: 중복 상관없이 모든 결과를 합치기
-- 문제: '부산광역시'에 살거나 또는 마일리지가 1,000점 미만인 고객의 고객번호, 도시를 조회
-- 결과는 고객번호 순으로 정렬
SELECT 고객번호, 도시 FROM 고객 WHERE 도시 = '부산광역시' UNION SELECT 고객번호, 도시 FROM 고객 WHERE 마일리지 < 1000 ORDER BY 1

SELECT 고객번호, 도시 FROM 고객 WHERE 도시 = '부산광역시' OR 마일리지 < 1000 ORDER BY 1

이떄 주의할 점은 UNION을 사용하기 위해서는 SELECT문의 컬럼개수와 데이터 타입이 서로 호환되어야 한다.

IS NULL

값이 없는 데이터를 찾음

-- 문제: 고객 테이블에서 지역 정보가 비어있는( NULL ) 고객 정보를 조회
SELECT * FROM 고객 WHERE 지역 = "";  -- 지역에 빈 문자열이 있는지 확인
UPDATE 고객 SET 지역 = null where 지역 = "";  -- 빈 문자열을 null 로 업데이트

SELECT * FROM 고객 WHERE 지역 IS NULL;

IN, BETWEEN

WHERE절의 조건을 더 간결하게 만들어줌

  • IN(값1, 값2…): 여러 OR 조건을 대체
  • BETWEEN 값1 AND 값2: 범위 조건을 간결하게 표현
-- 문제1: 고객 테이블에서 담당자 직위가 '영업 과장'이거나 '마케팅 과장'인 고객의 담당자명, 담당자직위를 조회
SELECT 담당자명, 담당자직위 FROM 고객 WHERE 담당자직위 IN ('영업 과장', '마케팅 과장');

-- 문제2: 마일리지가 100,000점 이상 200,000점 이하인 고객의 담당자명, 마일리지를 조회
FROM 담당자명, 마일리지 FROM 고객 WHERE 마일리지 BETWEEN 100000 AND 200000;
FROM 담당자명, 마일리지 FROM 고객 WHERE 마일리지 >= 100000 AND 마일리지 < 200000;

LIKE

문자열 데이터에서 특정 패턴을 검색할 때 사용

  • %: 0r개 이상의 모든 문자를 의미
  • _: 1개 이상의 문자를 의미
-- 문제:  고객 테이블에서 도시가 '광역시'로 끝나면서, 고객번호의 두 번째 또는 세 번째 글자가 'C'인 고객 정보를 조회
SELECT * FROM 고객 WHERE 도시 LIKE '%광역시' AND (고객번호 LIKE '__C%' OR 고객번호 LIKE '___C%');

문제 풀어보기

문제1

서울에 사는 고객중에 마일리지가 15000점 이상 20000점 이하인 고객의 모든 정보

SELECT * FROM 고객 WHERE 도시 LIKE '서울%' AND (마일리지 BETWEEN 15000 AND 20000);

문제2

고객들은 어느 지역, 어느 도시에 사는지 지역과 도시를 한번씩만 보이시오. 이때 결과를 지역순으로 나타내고 동일지역에 대해서는 도시순.

SELECT DISTINCT 지역,도시 FROM 고객 ORDER BY 1,2;

문제3

춘천시나 과천시 또는 광명시에 사는 고객 중에서 담당자직위에 이사 또는 사원이 들어가는 고객의 모든 정보

SELECT * FROM 고객 WHERE 도시 IN ('춘천시','과천시','광명시') AND (담당자직위 LIKE '%이사' OR 담당자직위 LIKE '%사원');

문제4

광역시나 특별시에 살지않는 고객들 중에서 마일리지가 많은 상위 고객 3명의 모든 정보

SELECT * FROM 고객 WHERE 도시 NOT LIKE '%광역시' AND 도시 NOT LIKE '%특별시' ORDER BY 마일리지 DESC LIMIT 3;'

문제5

지역에 값이 들어있는 고객 중에서 담당자 직위가 대표이사인 고객을 뺴고 보이시오

SELECT * FROM 고객 WHERE 지역 IS NOT NULL AND 담당자직위 != "대표이사";