발자취

#03 DML 실습 (환경 설정, 기본 구문) 본문

3-1/데이터베이스

#03 DML 실습 (환경 설정, 기본 구문)

해린 2023. 3. 25. 08:49

#01 실습 환경 설정하기
employees 데이터 베이스를 사용할 것이기 때문에 해당 DB를 다운로드를 받아줘야 합니다.
 
1. 웹 브라우저에 https://launchpad.net/test-db/employees-db-1/1.0.6/+download/employees_db-full-1.0.6.tar.bz 입력해서 파일 다운로드 받기
 
2. 반디집을 통해 압축풀기
 
3. cmd를 열어 cd [employees 데이터베이스가 저장된 경로] 입력
 
4. dir 명령어를 입력해서 디렉토리 리스트 보기 (제대로 이동이 되었는지 확인하는 용도.
 
5. cmd 창에 MySQL 경로인 "C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe" -uroot -p를 입력한 후 패스워드 입력. (중요! 꼭 파일명 앞뒤에 쌍따옴표를 붙여줘야 함. 리눅스는 띄어쓰기를 인식못하기 때문에..)
 
6. mysql> 프롬프트 창으로 들어가졌다면, source employees.sql을 실행해서 설치
 
#02 간단 실습 (데이터베이스 구조 파악해보기!)
1. show databases;를 입력하면 DB 목록을 보여줍니다.
2. use employees;를 입력하면 employees를 사용한다고 지정할 수 있습니다.
3. show tables;를 입력하면 employees라는 DB 밑에 있는 테이블 리스트를 확인할 수 있습니다.(테이블이 6개 있는게 확인되면 됩니다.)
 

 
4. desc employees;를 입력하면 employees 테이블의 설명을 볼 수 있습니다.

6개의 컬럼으로 되어있으며 기본키가 emp_no임을 알 수 있습니다.
 
5. select count(*) from employees;를 입력하면 employees 테이블에 몇개의 레코드가 있는지를 보여줍니다.

 
6. select * from employees;를 치면 모든 레코드를 보여줍니다. employees 테이블에는 레코드가 약 30만개 있기 때문에 꼭 뒤에 limit를 붙여줘야 합니다!! select * from employees limit 10;이라고 하면 상위 10개만 볼 수 있습니다!

 
#03 인덱스 관련 실습
인덱스가 있을 때와 없을 때 검색 속도가 어떻게 달라지는지 확인해보는 실습을 진행해 볼 것입니다!
 
1. show indexes from employees\G를 입력하면 employees라는 테이블의 인덱스를 전부 보여줍니다.
(\G는 윈도우용 mySQL(=workbench)에서는 안먹음. 리눅스(=cmd)에서는 자주 씀. \G를 써야 깨짐방지가 된다!)

왼쪽은 \G를 사용하지 않았을 떄(깨짐), 오른쪽은 \G를 사용했을 때의 결과입니다.
 
2. select * from employees where emp_no=20000;을 입력하면 사번이 20000인 사람을 찾아 출력해줍니다. 

-> 기본키 및 외래키는 원래 지정하지 않아도 기본적으로 인덱스가 달립니다. emp_no는 기본키니까 인덱스가 달려있어서 검색 결과가 금방 나옵니다. (소요시간 0.00초)
 

explain을 앞에 붙이면 자세한 설명이 나옵니다.
 
3. select * from employees where first_name='Sumant' and last_name='Peac'을 치면 first_name이 Sumant이고,
last_name이 Peac인 사람을 찾아 출력해줍니다.

-> first_name과 last_name은 인덱스가 달려있지 않기 때문에 시간이 좀 걸립니다. (소요시간 0.01초) 잘 안쓰는 컬럼에는 굳이 인덱스를 달 필요가 없지만(오히려 낭비) 자주 쓰는 건 달아주는 게 좋습니다.
 

explain을 붙여본 결과입니다.
rows 부분을 보면 원래는 인덱스가 지정되어 있지 않아 292025개를 비교한 뒤 찾았다고 나오는데, 이미 미리 했던 실습을 통해 인덱스를 만들어둔 상태라 1개만 보고 찾았다고 나옵니다...
 
4. 아무튼... create index sample_index on employees(first_name, last_name);를 입력하면 인덱스가 만들어진다.
create index [인덱스명] on [테이블명]([컬럼명]);
 
#03 SQL DML 실습
w3schools.comLearn SQL로 들어가서 구문 예시를 보면서 employees DB를 가지고 실습해보도록 할 것입니다.
 
- select
- distinct
- where
- and, or, not
- order by
- null value
- select top
- in
- between
-alias
 
1. select

employees 테이블의 last_name 컬럼을 상위 10줄만 조회합니다.
 
2. distinct

employees 테이블의 last_name 컬럼을 중복 제거하여 상위 10줄만 조회합니다.
 
3. where

emp_no가 10025인 레코드를 조회합니다.
 
4-1. and

first_name이 ‘Taizo’이고 last_name이 ‘Oxman’인 레코드를 조회합니다.
 
4-2. or

emp_no가 10055거나, 201356인 레코드를 조회합니다.
 
4-3. not

gender가 ‘M’이 아닌 상위 10개의 레코드를 조회합니다.
 
5. order by

emp_no를 기준으로 내림차순으로 정렬한 뒤 상위 레코드 10개를 조회합니다.
 
6. null values(is null)

titles 테이블에서 to_date가 null 값을 갖는 레코드를 조회하려 했으나 null값을 갖는 레코드가 존재하지 않아 조회하지 못했습니다.
 
7. select top (리눅스에서는 limit를 써야 함)

employees 테이블의 상위 10개의 레코드만 조회합니다.
 
8. in

last_name 컬럼에서 ‘Anger’, ‘Bahl’, ‘Bahr’ 중 하나라도 일치하는 레코드가 있으면 조회합니다.
 
9. between

employees 테이블에서 birth_date가 ‘1959-01-01’과 ‘1959-01-02’ 사이인 레코드의 first_name과 birth_date를 조회합니다.
 
10. alias

first_name 컬럼을 first_name_test라는 별칭으로 중복없이 10줄만 조회했습니다.