CH2 SQL 기본(2)
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 조건이 없는 경우 두 테이블은 커티션 곱이 된다.