MySQL 요약 노트-2

soyeong·2022년 10월 7일
0

MySQL

목록 보기
2/7
post-thumbnail

MySQL 요약 노트 (2022년 1월 ~ 2022년 3월까지 공부했던 내용 정리)
혼자 공부하는 SQL책과 한빛미디어에서 제공하는 유튜브 강의로 공부함

📌 3강 SQL 기본 문법

✔️ 03-1 SELECT~FROM~WHERE

  • 실습용 데이터베이스 구축하기
    1) 데이터베이스 만들기: DROP문, CREATE
    DROP DATABASE IF EXISTS 데이터베이스_이름; -- 기존 데이터베이스 삭제
    CREATE DATABASE 데이터베이스_이름; -- 데이터베이스 새로 만들기
    2) 테이블 만들기: USE문, CREATE
    USE 데이터베이스_이름; -- 데이터베이스 선택
    CREATE TABLE 테이블_이름
    ( 열_이름 데이터타입 PK NN ...
      열_이름 데이터타입 PK NN ...
    );
    3) 데이터 입력하기: INSERT
    INSERT INTO 테이블_이름 VALUES(데이터, 데이터, ..., 데이터);
    4) 데이터 조회하기: SELECT
    SELECT 열_이름 FROM 테이블_이름
  • USE
    • 데이터베이스를 지정 또는 변경하는 형식, 한 번 지정하면 계속 유지됨: USE
      USE 데이터베이스_이름;
  • SELECT
    • 테이블을 조회하는 형식: SELECT
      SELECT 열_이름
          FROM 테이블_이름
          WHERE 조건식
          GROUP BY 열_이름
          HAVING 조건식
          ORDER BY 열_이름
          LIMIT 숫자
  • SELECT ~ FROM ~ WHERE
    • 기본 형식: SELECT 열이름 ~ FROM 테이블이름 ~ WHERE 조건식
      SELECT 열_이름 FROM 테이블_이름 WHERE 조건식
      SELECT 열_이름
          FROM 테이블_이름
          WHERE 조건식
    • 예시: 데이터베이스(market_db)를 선택하고 회원 테이블(member)을 조회하기
      • *: 모든 열을 지정할 때 사용하는 기호
      USE market_db;
      SELECT * FROM member; -- *는 모든 것을 의미(즉, 모든 열), FROM 테이블_이름
      SELECT * FROM market_db.member; -- FROM 데이터베이스_이름.테이블_이름(위 코드와 동일한 결과)
    • 예시: 회원 테이블(member)에서 여러 개의 열(addr, debut_date, mem_name) 조회하기
      SELECT addr 주소, debut_date "데뷔 일자", mem_name 
          FROM member; -- addr 열 이름은 주소, debut_date 열 이름은 데뷔 일자로 지정됨
      • 열 이름 별칭(alias) 지정: SELECT 문에서 실제 열 이름 대신에 출력되도록 설정하는 방식
        • 열 이름 다음에 지정하고 싶은 별칭 입력(단, 공백이 있는 별칭은 큰따옴표("")로 묶어줌)
  • 관계 연산자
    • 두 연산자의 값이 같은지: =
    • 두 연산자의 값이 서로 큰지 작은지: >, <
    • 두 연산자의 값이 서로 크거나 같은지, 작거나 같은지: >=, <=
    • 관계 연산자 예시: 회원 테이블(member)에서 인원(mem_number)이 4명인 회원의 모든 열 조회하기
      SELECT * FROM member WHERE mem_number = 4;
  • 논리 연산자: 관계 연산자가 2개 이상 나오면 AND, OR 등으로 참, 거짓을 판별함
    • 논리식이 모두 참이면 참: AND
    • 논리식 중 하나라도 참이면 참: OR
    • 논리 연산자 예시: 회원 테이블(member)에서 평균 키(height)가 165이상이면서 인원(mem_number)도 6명 초과인 회원의 여러 개의 열(mem_name, height, mem_number) 조회하기
      SELECT mem_name, height, mem_number
          FROM member
          WHERE height >= 165 AND mem_number > 4;
  • BETWEEN ~ AND
    • 범위에 있는 값을 구하는 경우: BETWEEN ~ AND
    • BETWEEN ~ AND 예시: 회원 테이블(member)에서 평균 키(height)가 163이상 165이하인 회원의 두 개의 열(mem_name, height) 조회하기
      SELECT mem_name, height
          FROM member
          WHERE height BETWEEN 163 AND 165;
  • IN()
    • 여러 문자 중 하나에 포함되는지 비교하는 경우: IN()
    • IN() 예시: 회원 테이블(member)에서 주소(addr)가 경기/전남/경남 중 한 곳에 사는 회원의 두 개의 열(mem_name, addr) 조회하기
      SELECT mem_name, addr
          FROM member
          WHERE addr IN('경기', '전남', '경남');
  • LIKE
    • 문자열의 일부 글자를 검색하는 경우: LIKE
      • % : 문자열에서 여러 문자에 대응하는 기호
      • _ : 문자열에서 한 문자에 대응하는 기호
    • LIKE 예시: 회원 테이블(member)에서 이름(mem_name)의 첫 글자가 '우'로 시작하는 회원의 모든 열 조회하기
      SELECT *
          FROM member
          WHERE mem_name LIKE '우%'; -- %는 그 뒤에 무엇이든 허용한다는 의미
    • LIKE 예시: 회원 테이블(member)에서 이름(mem_name)의 앞 두 글자는 상관없고 뒤는 '핑크'인 회원의 모든 열 조회하기
      SELECT *
          FROM member
          WHERE mem_name LIKE '__핑크'; -- 언더바(-)는 한 글자와 매치
  • 서브 쿼리
    • SELECT 안에 또 다른 SELECT: 서브 쿼리, 하위 쿼리
    • 서브 쿼리 예시: 회원 테이블(member)에서 에이핑크의 평균 키인 164보다 평균 키가 큰 회원의 두 개의 열(mem_name, height) 조회하기
      SELECT mem_name, height FROM member
          WHERE height > (SELECT height FROM member WHERE mem_name = '에이핑크');

✔️ 03-2 SELECT 문(ORDER BY 절, GROUP BY 절)

  • ORDER BY
    • 결과가 출력되는 순서를 지정하기(결과의 값이나 개수에 대한 영향 없음): ORDER BY
      • ASC(기본값) : 오름차순
      • DESC : 내림차순
    • ORDER BY 절 예시(ASC): 회원 테이블(member)에서 데뷔 일자(debut_date)가 빠른 순서대로 정렬하여 세 개의 열(mem_id, mem_name, debut_date) 조회하기
      SELECT mem_id, mem_name, debut_date
          FROM member
          ORDER BY debut_date;
    • ORDER BY 절 예시(DESC): 회원 테이블(member)에서 데뷔 일자(debut_date)가 늦은 순서대로 정렬하여 세 개의 열(mem_id, mem_name, debut_date) 조회하기
      SELECT mem_id, mem_name, debut_date
          FROM member
          ORDER BY debut_date DESC;
  • LIMIT
    • 출력하는 개수를 제한하기: LIMIT
    • LIMIT 예시: 회원 테이블(member)에서 모든 열을 조회할 때 전체 중 앞에서 3건만 조회하기
      SELECT *
          FROM member
          LIMIT 3;
    • LIMIT 시작, 개수(=LIMIT 개수 OFFSET 시작)
      • LIMIT 0, 3: 0번째부터 3건이라는 의미
    • LIMIT 시작, 개수 예시: 회원 테이블(member)에서 모든 열을 조회할 때 전체 중 0번째부터 3건만 조회하기
      SELECT *
          FROM member
          LIMIT 0, 3; -- LIMIT 3 OFFSET 0
  • DISTINCT
    • 중복된 결과를 제거하여 출력하기(조회된 결과에서 중복된 데이터를 1개만 남김): DISTINCT
    • DISTINCT 예시: 회원 테이블(member)에서 회원이 사는 지역(addr)을 조회할 때 중복을 제거하여 조회하기
      SELECT DISTINCT addr FROM member;
  • GROUP BY
    • 데이터를 그룹화해주는 기능(그룹을 묶어주는 역할): GROUP BY
    • GROUP BY 절 예시: 구매 테이블(buy)에서 회원(mem_id)이 구매한 개수(amount)의 총합 출력하기
      SELECT mem_id "회원 아이디", SUM(amount) "총 구매 개수"
          FROM buy GROUP BY mem_id;
  • 집계함수
    • COUNT(*) : 모든 행의 개수를 셈
    • COUNT(열_이름) : 열 이름의 값이 NULL인 것을 제외한 행의 개수를 셈
  • HAVING
    • 집계 함수에 대해서 조건을 제한하는 것(GROUP BY 절 다음에 HAVING 절이 나와야 함): HAVING
    • HAVING 절 예시: 구매 테이블(buy)에서 회원(mem_id)이 구매한 금액(price*amount)의 총합에서 총 구매액이 1000이상인 회원 아이디 출력하기
      SELECT mem_id "회원 아이디", SUM(price*amount) "총 구매 금액"
          FROM buy
          GROUP BY mem_id
          HAVING SUM(price*amount) > 1000;

✔️ 03-3 데이터 변경하기

  • INSERT
    • 테이블에 데이터를 삽입하는 명령어: INSERT
      INSERT INTO 테이블_이름 [(1,2, ...)] VALUES (1,2, ...);
    • 열 이름을 생략할 경우: VALUES 다음에 나오는 값들의 순서 및 개수는 테이블을 정의할 때의 열 순서 및 개수와 동일해야 함!
  • AUTO_INCREMENT
    • 열을 정의할 때 1부터 증가하는 값을 입력해 줌: AUTO_INCREMENT
      • 단, AUTO_INCREMENT로 지정하는 열은 꼭 PRIMARY KEY로 지정해야 함
    • AUTO_INCREMENT의 시작값과 증가값 지정
      ALTER TABLE 테이블_이름 AUTO_INCREMENT=시작값; -- 시작값 지정
      SET @@auto_increment_increment=증가값; -- 증가값 지정
    • AUTO_INCREMENT 예시: 아이디(toy_id) 열이 자동 증가인 테이블 만들기(시작값: 1000, 증가값: 3이면 아이디는 1000, 1003, 1006, ..으로 증가함)
      CREATE TABLE hongong(
          toy_id INT AUTO_INCREMENT PRIMARY KEY,
          toy_name CHAR(4),
          age INT);
      ALTER TABLE hongong AUTO_INCREMENT=1000; -- 시작값은 1000으로 지정
      SET @@auto_increment_increment=3; -- 증가값은 3으로 지정
  • INSERT INTO ~ SELECT 구문
    • 다른 테이블의 데이터를 가져와서 한 번에 대량으로 입력하는 경우: INSERT INTO ~ SELECT 구문
      INSERT INTO 테이블_이름 (열_이름1, 열_이름2,...)
          SELECT;
  • UPDATE
    • 테이블에 데이터를 수정하는 명령어: UPDATE
      UPDATE 테이블_이름
          SET1=1,2=2,...
          WHERE 조건;
  • DELETE
    • 테이블에 데이터를 삭제하는 명령어: DELETE
      • 행 단위로 삭제(행 데이터 삭제)
      DELETE FROM 테이블_이름 WHERE 조건;
  • 대용량 테이블의 삭제
    • DELETE 문, DROP 문, TRUNCATE
      • DROP 문은 테이블 아예 없어짐, DELETE 문과 TRUNCATE 문은 빈 테이블을 남김
      • 대량의 행 데이터를 모두 삭제할 때는 DELETE 문보다 TRUNCATE 문이 효율적!
      DELETE FROM 테이블_이름;
      DROP TABLE 테이블_이름;
      TRUNCATE TABLE 테이블_이름;

📌 참고 문헌

우재남. (2021). 혼자 공부하는 SQL. 한빛미디어. p102-p154.

profile
The ultimate goal is to be a Data Scientist.

0개의 댓글