6장 SQL문의 기본

MINJU·2023년 7월 1일
0

1. SQL의 기초적인 기술 규칙

  1. SQL문의 마지막에 딜리미터를 붙인다.
  2. 키워드의 대문자와 소문자는 구별하지 않는다.
  3. 정수는 기존 그대로 쓴다. 문자열이나 날짜 시각은 작은 따옴표로 감싼다.

2. 테이블을 조작하는 SQL 종류 요약

  1. SELECT = 어디서 (FROM 테이블명) 무엇을 가지고 온다(SELECT 컬럼명)
  2. WHERE 조건 (조건에는 비교 연산자 AND와 OR이 자주 사용됨)
  3. DISTINCT 활용한 중복 제거 가능
  4. ORDER 로 정렬
  5. GROUP BY로 구분
  6. HAVING으로 나눈 그룹에 조건 추가
  7. UPDATE로 데이터 갱신 (UPDATE 테이블명 SET 컬럼명=값)
  8. INSERT로 데이터 삽입
  9. DELETE로 데이터 삭제

추가적으로 더 정리하고 싶은 부분을 정리한 내용은 아래와 같음.

2-1. 테이블을 요약하는 함수.

함수엔 크게 두 가지의 종류가 있다.

  1. 복수 행에 대해 집계를 수행하는 함수(=집약함수)
  2. 단일 해의 값에 대해 조작이나 계산을 수행하는 함수

집약함수의 대표적인 다섯 가지는 아래와 같다.

  1. COUNT = 테이블의 행수를 알려줌
  2. SUM = 테이블의 수치 데이터를 합계
  3. AVG = 테이블의 수치 데이터 평균을 구함
  4. MAX = 테이블의 임의열 데이터 중 최대 값을 구함
  5. MIN = 테이블의 임의열 데이터 중 최소 값을 구함

이러한 집야감수는 기본적으로 NULL을 제외하고 집계한다.
하지만 COUNT(*)는 NULL을 포함한 전체 행을 집계한다.

또한 SUM, AVG를 제외한 나머지 함수는 수치 데이터 외에도 사용 수 있다.
예를 들어, city 컬럼의 MAX는 'Y'로 시작하는 'Yosu', MIN은 'A'로 시작하는 'Andong'이 된다.

2-2. 문자열을 집약하는 GROUP_CONCAT

SQL 표준에는 없지만 MySQL에는 GROUP_CONCAT 함수가 있다.
GROUP_CONCAT은 문자열에 대한 집계를 문자열의 결합으로 수행한다.
근데 이 경우에는 예상 외의 길이를 가진 결과가 return 되는 경우가 많기 떄문에, GROUP_CONCAT 함수의 결과를 저장하거나 표시하는 경우 주의할 필요가 있다.

시스템 변수로 상한선(1024바이트)이 정해져 있어서 그 이상의 문자열은 잘리기 때문

2-3. 데이터를 변경하는 UPDATE문

데이터 변경시엔 UPDATE 테이블명 SET 컬럼명=값 사용.
하지만 얘는 SET에 명시한 것 외에는 변경되지 않기 떄문에 주로 UPDATE 테이블명 SET 컬럼명 = 값 WHERE 조건 사용한다.

복수 열의 동시 갱신도 가능하다.

UPDATE CITY SET NAME = '시흥', POPULATION = 432390 WHERE COUNTRYCODE = "KOR" AND DISTRICT = "Kyonggi" AND NAME = "Sihung";

2-4. 데이터를 입력하는 INSERT문

행 단위로 수행되기 때문에 테이블 정의를 명확하게 알아야 한다.

SHOW CREATE TABLE 테이블명\G 로 확인 가능.

단순히 열의 정보를 알고 싶은 경우에는 Oracle과 호환되는 명령인 desc 테이블명으로도 확인 가능하다.

INSERT문의 기본 구분은 INSERT INTO 테이블명(열1[,열2,..]) VALUES(값1[, 값2,...]) 이다.

이때 테이블의 모든 컬럼에 대해 값을 설정하면 열 리스트를 생략해도 된다.

VALUES DEFAULT로 해당 행에 해당하는 기본 값을 입력할 수도 있다. 아니면 컬럼 리스트에서 해당 값을 제거하면 자동으로 기본 값이 들어간다.

CREATE TABLE 테이블명1 LIKE 테이블명2란 구문으로 테이블명2와 같은 구조의 테이블을 작성할 수도 있다.

INSERT문 하나로 신규 복수 행을 입력할 수도 있다.
INSERT INTO city(name, countrycode, district, poluation) VALUES ('Gimpo', '~', '~','~'), ('~','~','~','~')...

3. 뷰를 작성하고 복수 테이블에서 선택하기

뷰를 사용하는 이점은 무엇일까

  1. 복잡한 SELECT 문을 일일이 매번 기술할 필요가 없다.
  2. 필요한 열과 행만 사용자에게 보여줄 수 있다.

3-1. 뷰를 생성

CREATE VIEW 뷰명 (컬럼명1[,컬럼명2, ...]) AS SELECT 문;

3-2. 뷰로의 입력 및 갱신 제한

기본적으로는 어떤 행이 대응하는지 모르거나 어떤 값을 넣으면 좋을지 모르는 경우에는 갱신할 수 없다.

예를 들어 "GROUP BY로 집약한 수치"나 "DISTINCT"로 얻은 값을 갱신하는 경우엔 어떤 수치를 갱신하는 것이 좋을지 모르기 때문에 불가능하고

두 가지 이상의 테이블을 조합해 작성한 뷰를 갱신할 때는 어떤 테이블을 갱신하면 좋을지 몰라 할 수 없다.

뷰에서 원래 테이블의 일부 열만 선택되었다면 데이터를 삽입하려고 해도 선택된 열 이외의 열에 기본값도 없고 NULL도 허용되지 않는 상황에서는 해당 열에 넣을 수 있는 값이 없어서 실질적으로 뷰로의 삽입이 불가능.

4. 서브쿼리의 실행

SELECT 문의 결과를 마치 데이터처럼 다루거나 수치처럼 취급해서 조건문에 이용하는 경우, 이런 쿼리를 서브쿼리라고 부른다.

5. 결합

5-1. 내부 결합

결합은 두 개의 테이블에서 필요한 열을 가지고 올 때 행을 결합하기 위한 조건을 "ON"으로 지정
내부결합에서는 이 ON으로 지정한 결합 조건에 일치하는 행만을 두 개의 테이블로부터 가져올 수 있다.
여기서는 두 개의 테이블에서 결합 조건에 일치하는 것만을 얻어낸다.

5-1. 외부 결합

어떤 테이블을 기준으로 잡고 그 테이블에 있는 정보를 모두 표현하되, 조건과 일치하는 다른 테이블의 값도 함께 표현하는 것을 의미한다.

0개의 댓글