SQL CRUD 이해와 쿼리 작성

yunseul·2024년 9월 6일

DB

목록 보기
4/4

SQL 이란?

  • SQL (구조적 쿼리 언어)는 관계형 데이터베이스에 정보를 저장하고 관리하기 위해 사용되는 프로그래밍 언어
  • 대소문자를 구분하지 않음

SQL 동작 과정

  1. 쿼리 작성, 제출

    • 사용자가 sql 쿼리를 작성하여 데이터베이스에 입력
  2. SQL 파서(parser)

    • 데이터베이스가 쿼리를 파싱(parse)
    • 파서(parser) 가 쿼리를 분석하여 구문이 올바른지 확인
      • 해당 과정에서 쿼리가 이해할 수 있는 토큰(token) → 구문 트리 (syntax tree) 로 변환
  3. 구문 분석 및 최적화

    • 파싱된 쿼리는 구문 분석기와 최적화기를 통해 처리 됨
      • 구문 분석기 : 쿼리의 의미적 오류를 확인, 예를 들어 존재하지 않는 테이블이나 컬럼을 참조하는지 등을 확인
      • 쿼리 최적화
        • 쿼리의 실행 계획을 가장 효율적인 방법을 선택하여 최적화
        • 인덱스 사용, 조인 순서 결정, 통계 정보 활용 등의 방법이 사용 됨
  4. 실행 계획 생성

    • 위의 단계에서 최적화된 쿼리를 실행 계획으로 변환되며, 여기서 실행 계획이란? 데이터베이스가 쿼리를 어떻게 실행할지에 대한 것
      • 테이블 스캔, 인덱스 스캔, 조인 방법 등이 있음
  5. 쿼리 실행

    • 실행 계획에 맞추어 실제 쿼리를 실행
      • 데이터베이스 엔진이 필요로 하는 데이터를 검색, 수정, 삭제, 추가
  6. 결과 반환

    • 쿼리 실행 완료 후에 결과 집합이 사용자에게 반환 됨
      • select 쿼리의 경우 : 결과 집합이 사용자가 요청한 데이터의 행과 열로 구성
      • insert, update, delete 쿼리의 경우 : 데이터베이스는 성공 여부와 함께 영향을 받는 행의 수를 반환

SQL CRUD

Create (테이블 생성)

데이터베이스의 테이블을 생성하는 명령어

  • CREATE 명령어 docs
    CREATE TABLE "테이블 이름" {
    	"컬럼 이름 1" 데이터타입();
    	"컬럼 이름 2" 데이터타입();
    }:
  • CREATE 명령어 예제
    CREATE TABLE info {
    	name varchar2(50),
    	age number
    }:

Insert

테이블을 생성한 후에 데이터를 입력하는 명령어

  • INSERT 명령어 docs
    INSERT INTO "테이블 이름" (칼럼) VALUES ('값');
  • INSERT 명령어 예제
    INSERT INTO info ('name', 'age') VALUES ('yunseul', 27);

Read (select)

테이블의 값 불러오는 명령어

  • SELECT 명령어 docs
    SELECT "칼럼 이름" FROM "테이블 이름";
  • SELECT 명령어 예제
    SELECT * FROM info;
    • 위의 예제에서 *(별표)는 지정한 테이블의 모든 칼럼을 가져오는 것을 의미

Read (select 활용)

  • info 테이블에서 age칼럼의 데이터의 중복 제거하여 출력
    SELECT DISTINCT age FROM info;
  • info 테이블에서 name 이 yunseul 인 제품의 age 칼럼 들고오기
    SELECT age FROM info WHERE name = 'yunseul';

Update

데이터를 변경하는 명령어

  • update 명령어 docs
    UPDATE "테이블 이름" SET "칼럼 이름" = '변경할 내용" WHERE 칼럼 이름" = '조건';
  • update 명령어 예제
    UPDATE info SET age = 28 WHERE name = 'yunseul';

Delete

데이터를 제거하는 명령어

  • delete 명령어 docs
    DELETE FROM "테이블 이름" WHERE "칼럼 이름" = '조건';
  • delete 명령어 예제
    DELETE FROM info WHERE name = 'yunseul';

추가 ?

Column 변경 명령어

Column 추가

  • docs
    ALTER TABLE "테이블 이름" ADD "칼럼 이름" "데이터 타입" "제약사항"
  • 예제
    ALTER TABLE info ADD yunseul VARCHAR(50);

Column 삭제

  • docs
    ALTER TABLE "테이블 이름" DROP "칼럼 이름"
  • 예제
    ALTER TABLE info DROP yunseul

Column 수정

  • docs
    ALTER TABLE "테이블 이름" ALTER COLUMN "칼럼 이름" "데이터 타입"
  • 예제
    ALTER TABLE info ALTER COLUMN yunsuel DATE

WHERE (조건 검색)

= (같을 때)

  • docs
    SELECT * FROM "테이블 이름" WHERE "칼럼 이름" = 3
  • 예제
    SELECT * FROM info WHERE yunseul = 3

or < (크기 비교, >= 와 <= 사용 가능)

  • docs
    SELECT * FROM "테이블 이름" WHERE "칼럼 이름" > 25
    SELECT * FROM "테이블 이름" WHERE "칼럼 이름" < 25
  • 예제
    SELECT * FROM info WHERE yunseul > 25
    SELECT * FROM info WHERE yunseul < 25

<> (다를 때)

  • docs
    SELECT * FROM "테이블 이름" WHERE "칼럼 이름" <> 25
  • 예제
    SELECT * FROM info WHERE yunsuel <> 25

IS NULL (NULL 일 때)

  • docs
    SELECT * FROM "테이블 이름" WHERE "칼럼 이름" is null
  • 예제
    SELECT * FROM info WHERE yunseul IS NULL

BETWEEN “A” AND “B” (A 보다 크거나 같고, B 보다 작거나 같을 때)

  • docs
    SELECT * FROM "테이블 이름" WHERE "칼럼 이름" BETWEEN "value1" AND "value2"
  • 예제
    SELECT * FROM info WHERE yunseul BETWEEN 25 and 30

IN (여러 값을 비교)

  • docs
    SELECT * FROM "테이블 이름" WHERE "칼럼 이름" IN(value1, value2, value3, ...)
  • 예제
    SELECT * FROM info WHERE yunseul IN(10, 15, 20, 25)

OR, AND (2개 이상의 조건)

  • docs
    SELECT * FROM "테이블 이름" WHERE "조건 1" OR / AND "조건 2"
  • 예제
    SELECT * FROM info WHERE yunseul < 15 OR yunseul = 20
    SELECT * FROM info WHERE yunseul > 25 OR yunseul <> 30

% , _ (특정 패턴 조건)

“%” : 문자열의 길이나 위치에 상관없이 일치하는 모든 데이터를 찾음

  • docs
    SELECT * FROM "테이블 이름" WHERE "칼럼 이름" LIKE '%23'
    SELECT * FROM "테이블 이름" WHERE "칼럼 이름" LIKE '%2%'
    SELECT * FROM "테이블 이름" WHERE "칼럼 이름" LIKE '12%'
  • 예제
    SELECT * FROM info WHERE yunseul LIKE '123%'

“_” : 주어진 위치에서 정확하게 하나의 문자를 대체

  • docs
    SELECT * FROM "테이블 이름" WHERE "칼럼 이름" LIKE '1__'
    SELECT * FROM "테이블 이름" WHERE "칼럼 이름" LIKE '_2_'
    SELECT * FROM "테이블 이름" WHERE "칼럼 이름" LIKE '__3'
  • 예제
    SELECT * FROM info WHERE yunseul LIKE '12_45'

ORDER BY (정렬, 기본은 오름차순이지만 DESC 를 사용하면 내림차순 사용 가능)

  • docs
    SELECT * FROM "테이블 이름" WHERE "조건" ORDER BY "칼럼 이름"
  • 예제
    SELECT * FROM info WHERE age > 10 ORDER BY yunseul DESC
  • 추가 기능
    • 2개 이상의 조건으로 정렬 가능하며, 앞에 있을수록 우선 순위가 높음
profile
새로운 것을 시도하고 도전하는 것을 좋아하는 Engineer 입니다..

0개의 댓글