All About

혼자 공부하는 SQL_2주차 정리 및 미션 본문

혼공학습단/혼공 SQL(11기)

혼자 공부하는 SQL_2주차 정리 및 미션

ColorNScent 2024. 1. 15. 20:44

혼자 공부하는 SQL 2주차

※ 순서

Chp 3. 정리

미션

 

Chp 3. SQL 기본 문법

■ 기본 중에 기본 SELECT ~ FROM ~ WHERE

- SELECT문: 구축 완료된 테이블에서 데이터 추출하는 기능

    -기본 형식: SELECT (열이름) FROM (테이블 이름) WHERE (조건식)

  • 실습용 데이터베이스 구축
    • 데이터베이스 만들기
      • DROP DATABASE: 기존 데이터베이스 삭제
      • USE: 데이터베이스 선택하는 문장
      • AUTO_INCREMENT: 자동으로 숫자 입력, 테이블 생성 시 지정
    • 데이터 입력하기
      • INSERT: 데이터 입력
    • 데이터 조회하기
      • SELECT: 입력 내용 확인
  • 기본 조회하기: SELECT ~ FROM
    • USE문
      • USE 데이터베이스_이름;
      • 데이터 베이스 선택하는 구문
      • 지금부터 이 DB 사용할 것이니 모든 쿼리는 이 DB에서 실행하라
      • 한 번 지정하면 계속 유지 
        • 다시 USE문을 사용하거나 다른 DB 사용 명시 안하면 앞으로 모든 SQL문은 해당 DB에서만 수행
        • MySQL 워크벤치 재시작 or 쿼리 창 새로 열면 다시 USE 실행해야 함
          • 주석: '--' (하이픈 2개 연속 & 하이픈 2개 이후에 한 칸 띄고 설명 작성)
    • SELECT문의 기본 형식
      • SELECT문에서 테이블 이름
        • 원칙: 데이터베이스_이름.테이블 이름
        • 대부분: 테이블_이름
          • 열 이름의 별칭(alias) 지정 가능(ex. 주소 → addr 주소)
SELECT 열_이름
	FROM 테이블_이름
    WHERE 조건식
    GROUP BY 열_이름
    HAVING 조건식
    ORDER BY 열_이름
    LIMIT 숫자
  • 특정 조건만 조회하기: SELECT ~ FROM ~WHERE
    • WHERE 없이 조회하기
      • 테이블의 모든 행 출력
      • 작은 데이터 조회 시에만 사용
    • 기본적인 WHERE절
      • SELECT 열_이름 FROM 테이블_이름 WHERE 조건식;
        • 세미콜론(;) 나오기 전까지  한 줄 or 여러 줄로 작성 가능
        • SQL이 길거나 복잡한 경우 여러 줄로 쓰는게 읽기 편리
      • 열_이름 = 값
        • 열의 값에 해당하는 결과만 출력
          • ex) SELECT * FROM member WHERE mem_name = '블랙핑크';
    • 관계 연산자, 논리 연산자의 사용
      • 관계 연산자: >, <, >=, <=, = 등
      • 논리 연산자: AND, OR 등
    • BETWEEN ~ AND
      • 범위에 있는 값 구하는 경우 사용
        • 숫자의 범위를 조건식에서 사용할 때 편리
    • IN()
      • 조건식에서 여러 문자 중 하나에 포함되는지 비교할 때 간결
      • 문자로 표현되는 데이터를 or로 일일이 쓰지 않아도 됨
        • ex) (WHERE addr = '경기' OR addr = '전남' OR addr = '경남';) == (WHERE addr IN('경기', '전남', '경남');
    • LIKE
      • 문자열의 일부 글자 검색
      • %: 문자열 비교 시 모두 허용, 제일 앞 글자에 해당하는 것 뒤에 무엇이든 허용(여러 문자에 대응)
        • ex) WHERE mem_name LIKE '우%';
          • 제일 앞 글자: 우 / 뒤: 무엇이든 허용
      • _: 문자열 비교 시 하나로 지정, 한 글자와 매치(한 문자에 대응)
        • ex) WHERE mem_name LIKE '__핑크';
          • 앞 두 글자: 상관 X / 뒤 글자: 검색
    • 서브 쿼리(subquery, 하위 쿼리)
      • SELECT 안에 또 다른 SELECT 들어갈 수 있음
      • 장점: 2개의 SQL을 하나로 만듦으로써 하나의 SQL만 관리하면 되므로 간단(실무에서도 종종 사용)

 

좀 더 깊게 알아보는 SELECT문

  • ORDER BY 절
    • 결과가 출력되는 순서 조절
      • ASC(Ascending): 오름차순, 기본값
      • DESC(Descending): 내림차순, 제일 뒤에 붙여주면 됨
    • 정렬 기준 여러 개 열로 지정 가능
    • WHERE 절과 함께 사용 가능(대신 WHERE(먼저), ORDER BY(다음) 순서지켜야 함)
    • LIMIT: 출력의 개수 제한
      • LIMIT 시작, 개수 (= LIMIT 개수 OFFSET 시작)
      • 첫 데이터를 0번으로 설정 후 시작
      • 주로 ORDER BY와 함께 사용
    • DISTINCT: 중복된 결과 제거
      • 조회된 결과에서 중복된 것 1개만 남김
      • 열 이름 앞에 붙이기
  • GROUP BY 절
    • 데이터를 그룹으로 묶어주는 기능
    • 집계 함수: 데이터 그룹화, GROUP BY 절과 함께 주로 사용
    • HAVING 절: 집계 함수와 관련된 조건 제한, GROUP BY 절 다음에 나옴
      • WHERE과 비슷한 개념으로 조건 제한 → 집계 함수에 대한 조건 제한
        • 아래는 집계 함수 표
함수명 설명
SUM() 합계
AVG() 평균
MIN() 최소값
MAX() 최대값
COUNT() 행의 개수
COUNT(DISTINCT) 행의 개수(중복 1개만 인정)

 

데이터 변경을 위한 SQL문

  • INSERT: 데이터 입력
    • 기본 문법
      • INSERT INTO 테이블 [(열1, 열2, ...)] VALUES (값1, 값2, ...)
        • 테이블 이름 후 열 생략 가능
          • 생략 시 VALUES 다음에 나오는 값들의 순서 및 개수 = 열 순서 및 개수
    • 자동으로 증가하는 AUTO_INCREMENT
      • 1부터 증가하는 값을 자동으로 입력
      • PRIMARY KEY로 지정
      • 시작값 지정
        • ex) ALTER TABLE hongong2 AUTO_INCREMENT=100;
      • 증가값 지정
        • ex) SET @@auto_increment_increment=3;
    • 다른 테이블의 데이터를 한 번에 입력하는 INSERT INTO ~ SELECT
      • 다른 테이블의 데이터를 가져와서 한 번에 대량으로 입력
      • INSERT INTO 테이블_이름 (열_이름1, 열_이름2, ...) SELECT문;
      • SELECT 문 열 개수 = INSERT 문 열 개수
  • UPDATE: 데이터 수정
    • 기존에 입력되어 있는 값 수정
    • WHERE과 함께 사용
    • 기본 문법
      • UPDATE 테이블_이름 SET 열1=값1, 열2=값2, ... WHERE 조건;
    • WHERE가 없는 UPDATE문
      • WHERE 절 문법 상 생략 가능하지만, 생략하면 테이블의 모든 행의 값 변경됨
  • DELETE: 데이터 삭제
    • 행 단위로 삭제
    • WHERE 없으면 전체 행 삭제
    • 기본 문법
      • DELETE FROM 테이블이름 WHERE 조건;
  • 대용량 테이블의 삭제
    • DROP: 테이블 자체 삭제
    • DELETE: 빈 테이블 남김, 삭제 오래 걸림
    • TRUNCATE: 빈 테이블 남김, DELETE와 동일한 효과지만 속도 매우 빠름, WHERE 문 사용 불가(조건 없이 전체 행 삭제 시 사용)

 

 

▶ 2주차 미션

    ▷ 기본 미션

Q. p.138 확인 문제 2번

A.

1. SELECT * FROM member ORDER BY height;

2. SELECT * FROM member LIMIT 5,2;

3. SELECT * DISTINCT phone1 FROM member;