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 버전 사용
아래 이미지와 같이 커스텀해서 설치하기, 대부분 기본 옵션으로 진행
- auth는 레거시로 선택, 비밀번호는 잊어버릴 일 없게 root로 (나중에 진짜 프로젝트할 때 이렇게 하면 안됩니다)
설치 후 워크벤치가 켜지면 딱 하나 있는 로컬 인스턴스(DB 서버) 들어가면 된다. 서버 running 확인하기.
- 환경변수 추가하면 터미널에서도 sql을 쓸 수 있다 (실제 본인 PC 주소를 쓰세요)
- path에 추가:
C:\Program Files\MySQL\MySQL Server 8.0\bin - 터미널에서 sql 확인:
mysql –u root –p→ 비번 치고 sql 들어가면 제대로 된 것
- path에 추가:
샘플 데이터를 쓰세요
- 깃허브로 연결된 데이터베이스는 다음의 과정으로 import하기
- 클론한다. 방법은 뭐든.
- cd 레포지토리
mysql –u root –p < employees.sql- 저거 하고 나면 서버 인스턴스에 스키마가 새로 생긴다
스키마를 새로 만드세요
테이블을 만드세요
- 기본키는 int, auto_increment 넣으세요
쿼리는 이렇게 생김
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임
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;
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');








