플레이데이터 - 12일차 SQL 공부

Kim Hyen Su·2023년 7월 14일

🎇 SQL 기본 사용

▷ 쿼리 실행 단축키

  • Ctrl + Enter : 커서 부분 실행
  • Ctrl + Shift + Enter : 첫행부터 커서 부분까지 실행

▷ DataBase 선택

  • use 데이터베이스명;

▷ 실행시간

  • Duration : 쿼리문 실행 시간.
  • Fetch : 데이터 조회가 완료된 시간.

▷ 주석처리

  • -- : 한 줄 주석
  • /* */ : 여러줄 주석

▷ DataBase 조회

  • SHOW DATABASES;

▷ DB 내 테이블 정보 조회

  • SHOW TABLE STATUS; : 테이블 상세 정보 조회.
  • SHOW TABLES : DB 내 테이블 리스트 조회.

▷ 별칭 사용하기

  • AS 별칭(AS 생략 가능)
  • AS "별칭" : 띄어쓰기가 있는 명칭을 입력하기 위해 ""(큰따옴표) 안에 별칭을 넣어준다.

▷ DataBase 비활성화

  • 위 처럼 아이콘색이 연한 경우, 비활성화된 DB를 의미한다
  • 워크벤치 실행 후 한번도 선택되지 못한 데이터베이스는 비활성화로 전환된다.

▷ 정수형 크기

  • tinyInt : 1byte
  • smallInt : 2byte
  • Int : 4byte
  • bigInt :8byte

▷ CHAR와 VARCHAR

  • CHAR : 지정한 레코드 크기만큼 메모리를 생성. Ex) CHAR(200) → 200크기 메모리 생성.
  • VARCHAR : 지정한 크기만큼 메모리를 생성하지만, 입력된 레코드 크기에따라 가변적으로 바뀐다. Ex) VARCHAR(200) → 20자 글자 → 20으로 축소

🎇 SQL_DDL(정의어)

▷ CREATE문

  • 기본 형태
	CREATE TABLE 테이블명 (컬렴명 자료형 제약조건 , ...);
  • 제약 조건
    - NOT NULL : 필수 입력

    • AUTO_INCREMENT : 순번 자동 생성(default : 시작 1, 증가 1)
    • UNIQUE : 중복 불가
    • PRIMARY KEY (컬럼명) : 기본키 설정
    • FOREIGN KEY (컬럼명) REFERENCES 참조할테이블명(참조컬럼명) : 외래키 설정
  • 레코드 복사

    • CREATE TABLE testTbl5 (SELECT emp_no,first_name, last_name FROM employees.employees);
  • 테이블 복사

    • CREATE TABLE 새로운테이블명(SELECT * FROM 복사할테이블명)

▷ ALTER문

  • 기본 형태
    [ ] : 생략가능, | : 선택옵션, { } : 반복가능 
    ALTER TABLE 테이블명
        [ADD 속성이름 데이터타입]
        [DROP COLUMN 속성명]
        [MODIFY COLUMN 속성명 테이터 타입] -- 타입 변경
        [MODIFY COLUMN 속성명 [NULL|NOT NULL]] -- NOT NULL 제약조건
        [ADD PRIMARY KEY(속성명)] -- 기본키 설정
        [[ADD|DROP] 제약명]
  • 생성된 테이블의 컬럼 및 제약조건을 변경하는 실행문이다.

  • ALTER TABLE 테이블명 제약조건;(제약조건 변경)

  • ALTER TABLE 테이블명 AUTO_INCREMENT=1000;

    • 순번 시작값 변경.(default : 0)
  • SET @@auto_increment_increment =3;

    • 순번 간격값 변경.(default : 1
  • ALTER TABLE memberTbl ADD CONSTRAINT pk_memberTbl PRIMARY KEY(userId);

    • PK 지정함.

▷ DROP문

  • 테이블 자체 삭제
  • 기본 형태
	DROP TABLE 테이블명;

🎇 SQL_DML(조작어)

▷ SELECT문

  • 기본 형태
SELECT [ALL | DISTINCT] 컬럼명(복수가능) - 어떤 컬럼을 검색
	FROM 테이블명(복수가능) - 어느 테이블 검색
	[WHERE 검색 조건(복수가능)] - SELECT절 컬럼에 대한 검색 조건
	[GROUP BY 컬럼명] - 여러 레코드를 하나의 컬럼을 기준으로 같은것끼리 묶음.
	[HAVING 검색 조건(복수가능)] - GROUP BY된 컬럼에 대한 검색 조건
	[ORDER BY 속성명 [ASC | DESC]] - 정렬 기준
  • DISTINCT : 중복 제거

  • WHERE절 조건

    • 대입 비교 연산
      • 컬럼명 = 레코드;
      • >= , >, <, <=, ==, !=
    • 논리 연산
      • AND & OR
    • BETWEEN
      • BETWEEN 정수 AND 정수 : 정수 이하 ~ 정수 이상 조건
    • 집합 연산
      • IN (조건, 조건, ...) : OR과 동일, 조건에 해당하는 모든 레코드 조회.
        • NOT IN(조건, 조건, ...) : 조건과 동일하지 않은 모든 레코드 조회.
    • LIKE
      • '조건%' : 첫자에 조건을 포함한 레코드 조회.
      • '%조건' : 끝자에 조건을 포함한 레코드 조회.
      • '%조건%' : 조건을 포함한 레코드 조회.('=' 연산과 동일한 기능이지만, 성능이 훨씬 떨어진다.)
      • _조건 : _은 와일드 카드로써, 'X조건'과 동일한 레코드를 조회.
  • GROUP BY

    • 동일한 컬럼값을 갖는 레코드끼리 그룹을 만들어준다.
  • 부속질의

    • 단일 레코드 조회.
    • 다중 레코드 조회.
      • 다중 레코드 처리를 위한 집합 연산
        - ALL(SELECT절) : 다중 레코드의 전체 조건이 맞는 레코드를 조회(AND)
        - ANY(SELECT절) : 다중 레코드 중 하나의 조건이라도 맞는 레코드를 조회(OR)
        - = ANY(SELECT절) : IN 연산과 동일한 기능을 한다.
  • 집계함수

    • SUM(컬럼) : 컬럼 내 레코드들의 합
    • AVG(컬럼) : 컬럼 내 레코드들의 평균
    • MAX(컬럼) : 컬럼 내 레코드의 최대값
    • MIN(컬럼) : 컬럼 내 레코드의 최소값
    • COUNT(컬럼) : 컬럼 내 레코드의 갯수
      • NULL 값을 제외한 레코드 갯수
  • LIMIT : 레코드 조회 갯수 제한
    - OFFSET 지정 : 조회 시작점을 지정
    Ex) LIMIT 100, 5; 101번부터 5개의 레코드 조회.

  • ROLLUP : 중간 합계

Ex)

  SELECT groupName, SUM(price*amount) AS '비용'
  FROM buytbl
  GROUP BY groupName
  WITH ROLLUP;
============
실행 결과
Null	270
서적	  184
의류	  300
전자	  4500
Null   5254(중간 합계 결과)
  • LAST_INSERT_ID() : AUTO_INCREMENT로 생성한 마지막 순번 조회
SELECT LAST_INSERT_ID();

▷ INSERT문

  • 기본 형태
	INSERT INTO 테이블명(컬럼명 ...) VALUES (레코드 ...);
  • 테이블명 옆 컬럼순서와 VALUES 옆 컬럼 순서를 일치시켜준다.

  • INSERT IGNORE INTO 테이블명 VALUES(...);

    • IGNORE : INSERT 되지 않은 경우, 경고문을 발생하고, 하위의 다른 실행문은 실행 가능하도록 해준다.
  • INSERT INTO 테이블명 VALUES(...) ON DUPLICATE KEY UPDATE 컬럼명=값

    • 레코드가 없는 경우 삽입, 있는 경우 업데이트 해주는 INSERT문
      EX)
      INSERT INTO memberTbl VALUES('BBK','비비코','미국')
      				ON DUPLICATE KEY UPDATE name='비비코', addr='미국';
      INSERT INTO memberTbl VALUES('DJM', '동짜몽', '일본')
      				ON DUPLICATE KEY UPDATE name='동짜묵', addr='니혼';

▷ UPDATE문

  • 기본 형태
	UPDATE 테이블명 SET 컬럼명= '수정값' WHERE 구분컬럼 = '키값';
  • 주의사항
    -
    • WHERE절 생략 시, 테이블 전체 레코드가 변경되므로, WHERE절로 변경될 레코드를 제한해줘야 한다.

▷ DELETE문

  • 기본 형태
	DELETE 테이블명 WHERE 구분컬럼 = '키값';
  • 테이블 내 WHERE 조건에 부합하는 모든 레코드가 삭제된다.
  • LIMIT를 사용하여 삭제 레코드 갯수를 제한할 수 있다.

▷ DB 삭제문 비교

DELETE문

테이블 안에 레코드만 삭제하는 실행문으로, 삭제 전 삭제 데이터들을 transaction log에 남겨두는 작업이 수행되어 수행 시간이 오래 걸린다.

DROP문

테이블 자체를 삭제해주어 수행 시간이 짧다.

TRUNCATE TABLE 테이블명

테이블 내 레코드만 삭제하는 실행문으로, 별도로 log를 남겨두지 않아 작업 수행 시간이 짧다.

profile
백엔드 서버 엔지니어

0개의 댓글