자격증/sqld

CH2 SQL 기본(2)

seung_ho_choi.s 2023. 8. 15. 21:52
728x90

WHERE 절

INSERT를 제외한 DML문을 수행할 때 원하는 데이터만 골라 수행할 수 있도록 해주는 구문이다.

조건식에서 컬럼명은 반드시 좌측에 있어되지만 우측에 있어도 정상적으로 동작이 된다. 

 

부정 비교 연산자

같지않음

!=, ^=, <>, not컬럼명= 

 

SQL 연산자

- BETWEEN A AND B - A와 B사이(A,B포함)

- LIKE "비교 문자열" - 비교문자를 포함: WHERE COL LIKE "%승호"

'-','%' 문자를 찾고 싶으면 ESCAPE '#'으로 지정해 '#_', '#%' 이렇게 그대로 인식이 된다.(158p)

- IN(LIST) - LIST WND 하나와 일치 : WHRE COL IN(1,2) / OR 써서 가능 (108p)

 

논리 연산자

(  ) -> NOT -> AND -> OR 순으로 처리된다.

 

GROUP BY,HAVING 절

GROUB BY

- 이것은 말 그대로 데이터를 그룹별로 묶을 수 있도록 해주는 절이다. 

- 그룹핑의 기준이 되는 컬럼이 오게 해야한다. 컬럼은 하나가 될 수있고 그 이상이 될 수 있다. 

- 이것은 비교적 많은 비용이 드는 작업이므로 수행전에 데이터량을 최소로 줄여놓는 것이 바람직하다. 

- SELECT 문에 있는 모든 열은 집계 함수가 되거나 GROUP BY절에 나타나야 한다. 

- 이것을 사용하는데 만약 SELECT 문에 집계 함수를 사용하지 않거나 GROUP BY 절에 언급되지 않은

열이 존재하다면 오류가 발생한다. 

집계 함수 

- COUNT(*) - 전체 ROW를 Count하여 반환 

- COUNT(컬럼) - 컬럼값이 Null인 Row를 제외하고 Count하여 반환

- COUNT(DISTINCT 컬럼) - 컬럼값이 Null인 Row에서 중복을 제거한 Count를 반환

- SUM(컬럼), AVG(컬럼), MIN(컬럼), MAX(컬럼)가 있다. (NULL 값을 제외하고 계산한다.)

 

HAVING

- 이것은 GROUP BY절을 사용할때 WHERE 절처럼 사용하는 조건절이다.

- 주로 데이터를 그룹핑한 후 특정 그룹을 골라낼 때 사용한다. 

- 집계함수로 조건을 부여할 수 있다. 

- 논리적으로 SELECT 절 전에 수행되기 때문에 SELECT 절에 명시되지 않은 

집계 함수로도 조건을 부여할 수 있다. 

- GROUP BY 절 없이 쓸 수 있다. 즉 테이블 전체가 한 개의 그룹이 되는 경우 HAVING만 단독적으로 쓸 수 있다. 

 

ORDER BY

- 이것은 SELECT한 데이터를 정렬할 수 있는것이다.

ASC: 오름차순

DESC: 내림차순 

- 옵션생략시 ASC가 기본값이 된다. 

- 오라클의 경우 NULL을 최댓값을 취급하고 SQL SERVER은 반대다.

- SELECT 절에 기술된 컬럼의 순서를 숫자로 명시해줄 수도 있다. 

 

JOIN

- 일상생활에서 조인이라는 단어는 각기 다른 두 개의 집단이 합해질 때 주로 쓰인다. 

- 테이블 간에 PK, FK의 연관 관계가 없어도 JOIN이 가능하다. 

 

EQUL JOIN

이것은 EQUAL 조건으로 JOIN하는 것으로 가장 흔히 볼 수 있는 JOIN 방식이다. 

 

Non EQUL JOIN

이것은 EQUL 조건이 아닌 다른 조건(BETWEEN, >, <, >=, <=)으로 JOIN하는 방식이다. 

 

이 둘은 하나의 쿼리에서 같이 사용이 가능하다.

 

OUTER JOIN

- 이것은 JOIN 조건에 만족하지 않는 행들도 출려되는 형태이다. 

- 오라클에서는 모든 행이 출력되는 테이블의 반대편 테이블의 옆에 (+) 기호를 붙여 작성해주면 된다. 

- 좌변에 (+) 기호 붙일때는 RIGHT OUTER JOIN 우변은 반대다. 참고!! 

 

STANDARD JOIN

이것은 ANSI SQL 중 하나로 쉽게 말해 오라클에서도 돌아가도 MySQL에서도 돌아가는 JOIN 쿼리라고 생각하면 된다.

 

INNER JOIN

- JOIN 조건에 충족하는 데이터만 출려되는 방식이다. 

- JOIN 조건을 ON 절을 사용하여 작성해야 한다. 

 

OUTER JOIN

- JOIN 조건에 충족하는 데이터가 아니어도 출력될 수 있는 방식이다. 

- LETF OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN이 있다. 

 

NATURAL JOIN(SQL X)

- A테이블과 B테이블에서 같은 이름을 가진 컬럼들이 모두 동일한 데이터를 가지고 있을 경우 조인되는 방식이다.

- 하지만 컬럼부분에 하나만 다른 이름을 가지고 있으면 출력이 안된다.

- USING 절을 이용하여 해결이 가능하며 별도의 ALIAS나 테이블명을 붙이면 안된다. 

 

CROSS JOIN

- A 테이블과 B 테이블 사이에 JOIN 조건이 없는 경우, 조합할 수 있는 모든 경우를 출력하는 방식이다.

SELECT BOY_NAME, GIRL_NAME

FROM GIRL, BOY B; 

이거는 

SELECT BOY_NAME, GIRL_NAME

FROM GIRL CROSS JOIN BOY B; 

이랑 같다.

- 즉 별도의  JOIN 조건이 없는 경우 두 테이블은 커티션 곱이 된다.

 

728x90