언어/SQL

0929 DBMS 특강

DH_PARK 2024. 10. 4. 22:47

 

SQL 문 종류 !

  • DDL(데이터 정의어) : 데이터를 정의하기 위한 언어
    • 데이터베이스를 만들거나 삭제할 때 사용함.
    • CREATE , DROP , ALTER 등..
  • DML(데이터 조작어) : 데이터를 조작하기 위한 언어
    • DML 줄임말이 외우기 어려울 땐 M 이 Management(매니지먼트)라고 생각하자
    • 공부할 때 제일 많이 알아야 될 언어(select , insert , update , delete 등)
    • 지금은 이것만 외워도 된다고 할 정도로 SQL 을 사용할 때 가장 자주쓰는 문법이다.
  • DCL(데이터 제어문) : 데이터를 제어하기 위한 언어
    • 데이터베이스에서 실행한 변경을 확정하거나 취소하는 역할을 한다.
    • COMMIT , ROLLBACK 등..

여기서 제일 잘 알아야 할게 바로 SELECT 라고 한다. 기본적으로 무조건 쓰이고 활용을 많이 하기 때문에 우선은 이거 위주로 외우자!


논리연산자 우선순위 외우는 것보다 그냥 괄호를 사용하는게 더 간편함. !

SELECT : 데이터를 조회하는 명령어

SELECT * FROM (테이블명);

여기서 (*) 는 “모든” 이라는 뜻을 가진다. 즉 모든 행(컬럼)을 조회하고 싶을 때 사용함 !

특정 열을 조회하고 싶을 때는 *대신 특정 컬럼명을 써주면 된다.

※둘다 조회하고 싶을 때는 ? : 그럴 때는 * , (컬럼명) 을 써주면 전체 컬럼과 특정 컬럼을 같이 조회할 수 있다.

DISTINCT : 중복 제거

선택한 행에서 중복을 제거하기 위해 사용함.

해당하는 값이 여러개가 있다면 가장 처음에 나타난 행을 가져온다.

SELECT DISTINCT COUNTRY FROM CITY WHERE COUNTRYCODE = 'KOR';
//COUNTRY 행의 중복을 제거하고 데이터를 조회한다.

WHERE : 특정 조건에 해당하는 데이터 조회

조회하고 싶은 데이터에서 특정 조건을 지정해서 조회하게 해준다.

값은 TRUE 와 FALSE 로 나누어진다. (연산자 사용 가능)

SELECT * FROM CITY WHERE COUNTRYCODE = 'KOR'
// COUNTRYCODE 가 'KOR' 인 행만 조회한다

WHERE 뒤에 사용하는 문들 !

- LIMIT : 조회 할 데이터 개수 제한

출력할 데이터의 개수를 제한한다.

SELECT DISTINCT COUNTRY FROM CITY WHERE COUNTRYCODE = 'KOR' LIMIT 3;
//3개의 값만 가져온다

- BETWEEN .. AND

조건에서 사이 값을 지정할 때 사용

반대의 경우에는 NOT BETWEEN 을 사용한다

SELECT * FROM CITY WHERE POPULATION BETWEEN 100 AND 200;
//인구수가 100명에서 200명 사이의 행만 조회한다

- IN : WHERE 절에서 사용하는 비교문

해당되는 여러 조건을 한번에 작성할 때 사용

여러 개의 값을 비교연산하고 일치하는 값이 하나라도 있으면 그 값을 조회한다.

SELECT * FROM TBL WHERE COUNTRYCODE IN ('KOR','USA','JPN');
// COUNTRYCODE 가 KOR , USA , JPN 인 행을 조회한다.
// 저 중에 해당하지 않는 값이 있어도 나머지 행을 조회해준다 !

※IN 과 OR 의 차이? : 간단히 적자면 IN은 특정 값을 조건으로 사용하고

OR은 조건문 자체를 사용한다고 생각하자.

IN은 값을 일일히 조건으로 지정하기 때문에 쿼리문이 길어질 수 있다.

OR 절도 조건을 많이 붙이면 쿼리문이 길어지긴 한다 .. !

IS NULL / IS NOT NULL : 해당 값이 NULL 인지 비교

그냥 NULL 을 사용해도 되긴한다. 근데 IS NULL이 가독성이 좋음 !

NULL 이 아닌지를 보려면 IS NOT NULL 을 사용함 !

- LIKE : 해당 문자 포함된 문자열 검색할 때 사용

  • % 을 사용한다. %을 기준으로 앞에 오면 시작하는 문자 뒤에 오면 “으로 끝나는 문자이다.”
    • %A : A로 끝나는 문자열
    • A% : A로 시작하는 문자열
    • _ : 문자의 개수를 지정 ___A (문자3개 뒤에 A)

집계함수

데이터를 조작하거나 계산하기 위해 사용하는 함수들

  • AVG() : 평균을 구한다
  • MIN() : 최솟값
  • MAX() : 최대값
  • COUNT() : 행의 개수를 센다
    • COUNT(DISTINCT) : 중복을 1개만 인정하고 행의 개수를 센다
  • SUM() : 합계를 구한다
  • STDEV() : 표준편차를 구한다
  • VAR() : 분산을 구함

GROUP BY : 데이터의 그룹화

데이터를 그룹화 할 때 사용한다.

SELECT * FROM CITY WHERE COUNTRYCODE = 'KOR' GROUP BY DISTRICT;
// COUNTRYCODE가 'KOR'인 행 중에 DISTRICT 별로 다른 행들을 묶어서 조회한다.

HAVING : GROUP BY 의 WHERE 절 같은 느낌?

GROUP BY 에 대한 조건을 지정할 때 사용하는 명령어

※ WHERE 와 HAVING 의 차이점 : WHERE 는 데이터가 집계되기전에 조건을 먼저 필터링하고 HAVING 은 집계후에 필터링을 하기 때문에 엄연히 다름.

SELECT * FROM CITY WHERE COUNTRYCODE = 'KOR' 
GROUP BY DISTRICT HAVING COUNT(DISTRICT) = 6;
// DISTRICT 별로 그룹을 나누는데 DISTRICT 의 개수가 6개인 데이터만
// 그룹화해서 조회한다.

ROLLUP : GROUP BY 에 사용하는 총합계

GROUP BY 로 그룹화한 그룹의 합계를 나타내준다.

무조건 GROUP BY 로 그룹화한 뒤에만 사용할 수 있다. (그룹화 한 데이터의 합계를 구하는 것이기 때문에)

SELECT DISTRICT , SUM(POPULATION) FROM CITY
WHERE COUNTRYCODE = 'KOR'
GROUP BY ROLLUP(DISTRICT,NAME);
// DSTRICT , NAME 별로 합계를 보여주고
// 그룹화한 그룹들의 총 합계를 보여준다.

SUM() 함수와는 조금 다른게 , SUM() 함수는 따로 행을 하나 더 만들어서 조회해주고 데이터를 그룹화 한 합계를 조회해주는데

ROLL UP 은 그룹별 합계와 전체 데이터의 그룹 합계를 조회해줌

※WITH ROLL UP 이라고 있는데 이것도 똑같음

SELECT DISTRICT , SUM(POPULATION) FROM CITY
WHERE COUNTRYCODE = 'KOR'
GROUP BY DISTRICT,NAME WITH ROLLUP;

쿼리문을 쓸 때 약속?

SQL 은 대문자, 소문자의 구분이 따로 없기 때문에 가독성 향상을 위해 대문자로 많이 사용한다.

물론 컬럼명이나 테이블명을 조회할 때는 소문자와 섞어서 쓰지만

쿼리문 명령어를 사용할 때는 대부분 대문자로 표기하는게 맞다고 한다 !

'언어 > SQL' 카테고리의 다른 글

2번 째 SQLD 후기  (1) 2024.12.08