[SQL] SQL 기본 2

언교동·2025년 5월 27일

SQL

목록 보기
5/6
post-thumbnail

WHERE 절

  • 테이블에서 특정 조건에 부합하는 데이터만 조회하고 싶을 때 사용

SELECT 컬럼명1, 컬럼명2 ... FROM 테이블명 WHERE 조건절;

UPDATE 테이블명 SET 컬럼명=새로운데이터 WHERE 조건절;

ex)

UPDATE TEACHER SET CLASS_NAME='PE' WHERE NAME='Valentina';

DELETE FROM 테이블명 WHERE 조건절;

ex)

DELETE FROM TEACHER WHERE NAME='Valentina';

비교연산자

  • 두 비교대상의 데이터 타입이 맞지 않으면 에러가 발생함

부정 비교 연산자

연산자의미
!=같지 않음
^=같지 않음
<>같지 않음
not 컬럼명 =같지 않음
not 컬럼명 >크지 않음

SQL 연산자

연산자의미
BETWEEN A AND BA와 B의 사이 (A, B 포함)
LIKE '비교 문자열'비교 문자열을 포함
‘%’: 문자열, ‘’: 하나의 문자
’ 혹은 ‘%’ 기호가 포함된 문자열 검색 시 ESCAPE 지정
IN (LIST)LIST 중 하나와 일치
IS NULLNULL 값

escape 예시

SELECT COUNT(*) WHERE NAME='%@%%' ESCAPE '@';
/* NAME 에 % 이 들어가는 것의 개수 세기 */

IN 예시

SELECT COUNT(*) WHERE FLAVOR IN('strawberry', 'melon');
/* 맛이 strawberry 이거나 melon 인 것의 개수 세기 */

부정 SQL 연산자

연산자의미
NOT BETWEEN A AND BA와 B의 사이가 아님 (A, B 미포함)
NOT IN (LIST)LIST 중 일치하는 것이 없음
IS NOT NULLNULL 값이 아님

논리 연산자

연산자의미
AND모든 조건이 TRUE여야 함
OR하나 이상의 조건이 TRUE여야 함
NOTTRUE면 FALSE이고 FALSE이면 TRUE
  • 처리 순서: () -> NOT -> AND -> OR

GROUP BY, HAVING 절

GROUP BY

  • 특정 열을 기준으로 데이터를 그룹화 함

집계 함수

함수의미
COUNT(*)전체 Row를 Count하여 반환
COUNT(컬럼)컬럼값이 Null인 Row를 제외하고 Count하여 반환
COUNT(DISTINCT 컬럼)컬럼값이 Null이 아닌 Row에서 중복을 제거한 Count를 반환
SUM(컬럼)컬럼값들의 합계 반환
AVG(컬럼)컬럼값들의 평균 반환
MIN(컬럼)컬럼값들의 최소값 반환
MAX(컬럼)컬럼값들의 최댓값 반환

HAVING

  • GROUP BY 절과 함께 사용하며, WHERE 절 처럼 조건을 추가할 수 있음

  • 주로 데이터를 그룹화한 후 특정 그룹을 추출할 때 사용

  • 논리적으로 SELECT 절 전에 수행되기 때문에 SELECT 절에 명시되지 않은 집계 함수로도 조건 부여 가능

  • 주의할 점: WHERE 절을 사용해도 되는 조건까지 HAVING 절로 쓰면 성능상 불리할 수 있음(WHERE 절에서 필터링이 선행되면 GROUP BY 할 데이터량 감소)

/* 재구매가 일어난 상품과 회원 리스트 구하기 */
SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(*) > 1
ORDER BY USER_ID, PRODUCT_ID DESC;

ORDER BY 절

SELECT 문 수행순서
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY

  • ASC: 오름차순. 생략 가능

  • DESC: 내림차순

  • Oracle 의 경우 NULL 값을 최댓값으로 취급


JOIN

  • 두 개의 테이블을 서로 묶어 하나의 결과를 만들어 냄

EQUI JOIN

  • join 을 하는 조건에서 =(equality comparator) 를 사용하는 join

NON EQUI JOIN

  • join 을 하는 조건에서 =가 아닌 다른조건(BETWEEN, >, >=, <, <=) 등을 사용하는 join

OUTER JOIN

  • 두 테이블에서 join condition 을 만족하지 않는 튜플들도 결과테이블에 포함하는 join
  • Oracle 에서는 모든 행이 출력되는 테이블의 반대편 테이블 옆에 (+) 기호 붙여줌

STANDARD JOIN

  • 표준이 되는 ANSI JOIN. 표준 조인.
  • 즉, MySQL 에서도 사용할 수 있고 Oracle 에서도 사용 가능.

INNER JOIN

  • 두 테이블에서 join condition 을 만족하는 튜플들로 결과 테이블을 만드는 join

FROM table1 [INNER] JOIN table2 ON join_condition

OUTER JOIN

FROM table1 LEFT [OUTER] JOIN table2 ON join_condition

FROM table1 RIGHT [OUTER] JOIN table2 ON join_condition

FROM table1 FULL [OUTER] JOIN table2 ON join_condition

  • LEFT JOIN 또는 RIGHT JOIN 에서는 ON 뒤에 오는 조건을 만족하지 못해도 왼쪽 또는 오른쪽 테이블의 모든 행이 결과에 포함. 조건을 만족하지 않으면 오른쪽 또는 왼쪽 테이블 값이 NULL로 나옴

  • OUTER JOIN 에서 기준이 되는 테이블은 항상 모두 출력되지만 최종적으로 WHERE 조건에 의해 필터링을 거치게 됨

NATURAL JOIN

  • 두 테이블에서 같은 이름을 가지는 모든 attribute pair 에 대해서 equi join 수행

  • USING 조건절을 이용하여 같은 이름을 가진 컬럼 중 원하는 컬럼만 JOIN 에 이용할 수 있음

  • NATURAL JOIN 에서는 ON 절을 쓸 수 없음

CROSS JOIN

  • 두 테이블의 tuplease pair 로 만들 수 있는 모든 조합을 결과 테이블로 반환

  • 별도의 JOIN 조건이 없는 경우 두 테이블은 Cartiesian Product(카티션 곱)가 됨

참고자료
join의 의미와 여러 종류의 join들

0개의 댓글