SQL 프로그래밍 (1)
포스트
취소

SQL 프로그래밍 (1)

table of contents

SQL 아시는구나

  • DB 왜 쓸까? 모든 데이터를 텍스트 파일로만 저장하면 되겠습니까? 요즘 데이터가 얼마나 양이 많은데 어떻게 그걸 쓰니. 보안 이슈는 또 어떻고요? → 데이터베이스/DBMS를 쓰면 데이터들을 편리하고, 빠르고, 안전하게, 무료로 사용할 수 있다.
  • DB는 RDBMS와 NoSQL로 구분된다
    • RDBMS: 구조 딱딱 예쁘게 저장
    • NoSQL: ↑ 저런 구조가 없는 DB
  • MySQL: 모두에게 무료인 오픈소스, GUI 포함됨
  • 요즘 SQL 코테도 발전하고 있단다
  • DB는 3층으로 구성된다: 인스턴스(폴더) → 스키마(=데이터베이스)(엑셀 파일) → 테이블(엑셀 시트)
    • 오라클은 4계층 구조인 점 알아두기
  • 서버 인스턴스는 하나의 DB Server 지칭
    • DBMS를 설치하면 인스턴스가 자동 생성
    • 하나의 DB를 운영하기 위해 내부 Buffer / 내부 저장공간 / 관리 도구들이 동작되어야 한다. 운영이 필요한 모든 도구들을 모아 “서버 인스턴스”라고 부른다.

MySQL 설치하기

  • 8.0.20 버전 사용
  • 아래 이미지와 같이 커스텀해서 설치하기, 대부분 기본 옵션으로 진행

    260326-HAE-1-sql-1.png

  • auth는 레거시로 선택, 비밀번호는 잊어버릴 일 없게 root로 (나중에 진짜 프로젝트할 때 이렇게 하면 안됩니다)
  • 설치 후 워크벤치가 켜지면 딱 하나 있는 로컬 인스턴스(DB 서버) 들어가면 된다. 서버 running 확인하기.

    image.png

  • 환경변수 추가하면 터미널에서도 sql을 쓸 수 있다 (실제 본인 PC 주소를 쓰세요)
    • path에 추가: C:\Program Files\MySQL\MySQL Server 8.0\bin
    • 터미널에서 sql 확인: mysql –u root –p → 비번 치고 sql 들어가면 제대로 된 것

샘플 데이터를 쓰세요

다운로드: https://dev.mysql.com/doc/index-other.html

image.png

  • 깃허브로 연결된 데이터베이스는 다음의 과정으로 import하기
    1. 클론한다. 방법은 뭐든.
    2. cd 레포지토리
    3. mysql –u root –p < employees.sql
    4. 저거 하고 나면 서버 인스턴스에 스키마가 새로 생긴다

스키마를 새로 만드세요

  • 스키마 창에서 우클릭, 진행 후 apply, finish

    image.png

테이블을 만드세요

  • 기본키는 int, auto_increment 넣으세요

image.png

  • 쿼리는 이렇게 생김

    1
    2
    3
    4
    5
    
      CREATE TABLE 'autoever'.'members' (
          'member_id' INT NOT NULL AUTO_INCREMENT,
          'name' VARCHAR(45) NOT NULL,
          'age' INT NOT NULL,
          PRIMARY KEY (`member_id'));
    

이제부터 진짜 그 SQL임

  • UI로 테이블 업데이트 가능함. 그냥 select로 조회해서 나온 표에 직접 쓰고 apply하면 됨

    image.png

  • 이름 함 봐두세요

    image.png

  • 명령어 모음

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
-- 기본 조회
SELECT * FROM members;

-- 데이터 추가
INSERT INTO autoever.members (name, age) VALUES ('지윤', '24');
-- 컬럼명에는 백틱을 쓰고, 값에는 따옴표를 쓰세요

-- 특정 컬럼 조회
SELECT name FROM autoever.members;

-- 조건 조회
SELECT * FROM autoever. members
WHERE member_id >= 3 and member_id <= 5;

-- 필드 이름 변경 (테이블 수정 없이 보이는 이름만 바꿈)
SELECT name as '이름' FROM autoever.members;

-- 정렬
SELECT * FROM autoever.members ORDER BY age DESC; -- or ASC

-- 3개만 보여줘
SELECT * FROM autoever.members LIMIT 3;

-- 3개 거르고 3개만 보여줘
SELECT * FROM autoever.members LIMIT 3, 3;
  • 데이터 백업 / 가져오기 (한글 경로 불가)

    image.png

    image.png

  • 터미널에서도 SQL 써도 됩니다

1
2
3
4
5
6
7
8
9
10
-- 터미널에서 SQL 쓰기
mysql -u root -p

-- 데이터베이스 목록 확인 후 사용할 것 선택하기
show databases;
use world;

-- 테이블 확인하기
show tables;
DESC city;

PK는 플레이어 킬이 아니고요

  • 다음의 의무를 갖는 값입니다
    • 한 테이블 내에서 중복되지 않는 값만 가질수 있는 키
    • 유일한 값
    • 중복 허용 X
    • NULL X
  • FK는 남의 PK임
    • 특정 테이블에 포함되어 있으면서 다른테이블의 기본키로 지정된 키
    • 기본적으로는 다른 테이블의 기본 키를 참조한다.
    • NULL, 중복 허용 OK
  • DB 쓰는데 테이블 하나만 쓸거예요? 그럼 엑셀 쓰지 왜 DB를 쓰겠어요 DB는 테이블 분리가 일이야
    • 그래서 PK, FK가 필요한 거임. 각자의 테이블 안에서도 구분이 되어야 하고, 남의 테이블을 참조해서도 구분이 되어야 함.
    • 중복된 데이터를 분리해서 저장하면 용량을 효율적으로 쓸 수 있음 (이 텍스트만으로는 이해가 안될건데 해보면 알아 직접 해보세요)
  • 남의 테이블은 어떻게 가져와요? → join을 쓰세요 집합은 배웠죠?

JOIN

  • 메뉴 테이블은 메뉴 id, 이름과 가격을 저장하고, 주문 테이블은 주문 id, 메뉴 id를 저장함. 주문 별 메뉴 이름을 보려면 뭘 할까요? → join을 하세요
  • join은 여러 종류가 있다: inner, outer 등등
  • inner join: 교집합. 겹치는 것만 보여줘.

    1
    2
    3
    4
    
      SELECT employees.emp_no, first_name, salaries.salary
      FROM employees
      INNER JOIN salaries
      ON employees.emp_no = salaries.emp_no
    

BETWEEN

어디부터 어디까지 보여주세요

1
2
3
SELECT *
FROM city
WHERE Population BETWEEN 500 AND 900;

IN

이 중에 있으면 보여줘

1
2
3
SELECT *
FROM city
WHERE name IN ('Seoul' , 'Sydney', 'Oxford');
이 기사는 저작권자의 CC BY-NC-ND 4.0 라이센스를 따릅니다.

자바 프로그래밍 (3)

SQL 프로그래밍 (2)