SQL 연산자
21 Jul 2025 | 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 담당자직위 != "대표이사";