MySQL한번에끝내기
목차
1. MySQL 소개
2. MySQL 설치
3. SQL 기본
4. SQL 고급
• MySQL 한번에끝내기 3
1. MySQL 소개
MySQL 소개
MySQL은가장널리사용되고있는관계형데이터베이스관리시스템(RDBMS: Relational DBMS)
MySQL은오픈소스이며, 다중사용자와다중스레드를지원
C언어, C++, JAVA, PHP 등여러프로그래밍언어를위한다양한 API를제공
MySQL은유닉스, 리눅스, 윈도우등다양한운영체제에서사용할수있으며, 특히 PHP와함께웹개발에자주사용
MySQL은오픈소스라이센스를따르기는하지만, 상업적으로사용할때는상업용라이센스구입필요
• MySQL 한번에끝내기 5
2. MySQL 설치
MySQL 다운로드
• MySQL 한번에끝내기 7
MySQL 다운로드
• MySQL 한번에끝내기 8
MySQL 다운로드
• MySQL 한번에끝내기 9
MySQL 설치
• MySQL 한번에끝내기 10
MySQL 설치
• MySQL 한번에끝내기 11
MySQL 설치
• MySQL 한번에끝내기 12
MySQL 설치
• MySQL 한번에끝내기 13
MySQL 설치
• MySQL 한번에끝내기 14
MySQL 설치
• MySQL 한번에끝내기 15
MySQL 설치
• MySQL 한번에끝내기 16
MySQL 설치
• MySQL 한번에끝내기 17
MySQL 설치
• MySQL 한번에끝내기 18
MySQL 설치
• MySQL 한번에끝내기 19
MySQL 설치
• MySQL 한번에끝내기 20
MySQL 설치
• MySQL 한번에끝내기 21
MySQL 설치
• MySQL 한번에끝내기 22
MySQL 설치
• MySQL 한번에끝내기 23
MySQL 설치
• MySQL 한번에끝내기 24
MySQL 설치
• MySQL 한번에끝내기 25
MySQL 설치
• MySQL 한번에끝내기 26
MySQL 설치
• MySQL 한번에끝내기 27
MySQL 설치
• MySQL 한번에끝내기 28
MySQL Workbench
• MySQL 한번에끝내기 29
MySQL Workbench
• MySQL 한번에끝내기 30
3. SQL 기본
SQL의분류
DMLData Manipulation Language
데이터조작언어
데이터를조작(선택, 삽입, 수정, 삭제)하는데사용되는언어
DML 구문이사용되는대상은테이블의행
DML 사용하기위해서는꼭그이전에테이블이정의되어있어야함
SQL문중SELECT, INSERT, UPDATE, DELETE가이구문에해당
트랜잭션Transaction이발생하는SQL도이DML에속함
테이블의데이터를변경(입력/수정/삭제)할때실제테이블에완전히적용하지않고, 임시로적용시키는것
취소가능
DDLData Definition Language
데이터정의언어
데이터베이스, 테이블, 뷰, 인덱스등의데이터베이스개체를생성/삭제/변경하는역할
CREATE, DROP, ALTER 구문
DDL은트랜잭션발생시키지않음
ROLLBACK이나COMMIT 사용불가
DDL문은실행즉시MySQL에적용
DCLData Control Language
데이터제어언어
사용자에게어떤권한을부여하거나빼앗을때주로사용하는구문
GRANT/REVOKE/DENY 구문
• MySQL 한번에끝내기 32
SHOW DATABASES
현재서버에어떤 DB가있는지보기
• MySQL 한번에끝내기 33
USE
사용할데이터베이스지정
지정해놓은후특별히다시 USE문사용하거나다른 DB를사용하겠다고명시하지않는이상모든 SQL문은지정 DB에서수행
Workbench에서직접선택해사용가능
[Navigator] → [SCHEMAS] → 데이터베이스선택
USE database_name
• MySQL 한번에끝내기 34
SHOW TABLE
데이터베이스world의테이블이름보기
• MySQL 한번에끝내기 35
SHOW TABLE STATUS
데이터베이스world의테이블정보조회
• MySQL 한번에끝내기 36
DESCRIBE (DESC)
city 테이블에무슨열이있는지확인 DESCRIBE city;
DESC city;
• MySQL 한번에끝내기 37
LAB #1
country 테이블과 countrylanguage테이블정보보기
• MySQL 한번에끝내기 38
SELECT
<SELECT... FROM>
요구하는데이터를가져오는구문
일반적으로가장많이사용되는구문
데이터베이스내테이블에서원하는정보를추출
SELECT의구문형식
• MySQL 한번에끝내기 39
SELECT select_expr[FROM table_references][WHERE where_condition][GROUP BY {col_name | expr | position}][HAVING where_condition][ORDER BY {col_name | expr | position}]
SELECT
SELECT *
• MySQL 한번에끝내기 40
SELECT
SELECT 열이름 테이블에서필요로하는열만 가져오기가능
여러개의열을가져오고싶을때는콤마로구분
열이름의순서는출력하고싶은순서대로배열가능
• MySQL 한번에끝내기 41
SELECT FROM WHERE
기본적인 WHERE절 조회하는결과에특정한조건줘서원하는데
이터만보고싶을때사용
SELECT 필드이름FROM 테이블이름WHERE 조건식;
조건이없을경우테이블의크기가클수록찾는시간과노력이증가
• MySQL 한번에끝내기 42
SELECT FROM WHERE
관계연산자의사용 ‘…했거나’, ‘… 또는’ - OR 연산자
‘...하고’, ‘…면서’, ‘… 그리고’ - AND 연산자
조건연산자(=, <, >, <=, >=, < >, != 등)와관계연산자(NOT, AND, OR 등)의조합으로알맞은데이터를효율적으로추출
MySQL 함수및연산자: https://dev.mysql.com/doc/refman/8.0/en/functions.html
• MySQL 한번에끝내기 43
LAB #02
한국에있는도시들만보기
미국에있는도시들만보기
한국에있는도시들중에인구수가 1,000,000 이상인도시만 SELECT 하기
• MySQL 한번에끝내기 44
BETWEEN
데이터가숫자로구성되어있어연속적인값은 BETWEEN… AND 사용가능
• MySQL 한번에끝내기 45
IN
이산적인Discrete 값의조건에서는 IN( ) 사용가능
• MySQL 한번에끝내기 46
LAB #03
한국, 미국, 일본의도시들에대해서보기
• MySQL 한번에끝내기 47
LIKE
문자열의내용검색하기위해 LIKE 연산자사용
문자뒤에 % - 무엇이든(%) 허용
한글자와매치하기위해서는‘_’사용
• MySQL 한번에끝내기 48
Sub Query
서브쿼리SubQuery
쿼리문안에또쿼리문이들어있는것
서브쿼리의결과가둘이상이되면에러발생
• MySQL 한번에끝내기 49
ANY
서브쿼리의여러개의결과중한가지만만족해도가능
SOME은 ANY와동일한의미로사용
= ANY 구문은 IN과동일한의미
• MySQL 한번에끝내기 50
ALL
서브쿼리의여러개의결과를모두만족시켜야함
• MySQL 한번에끝내기 51
ORDER BY
결과물에대해영향을미치지는않음
결과가출력되는순서를조절하는구문
기본적으로오름차순ASCENDING 정렬
내림차순DESCENDING 으로정렬 열이름뒤에DESC 적어줄것
ASC(오름차순)는디폴트값이므로생략가능
• MySQL 한번에끝내기 52
ORDER BY
ORDER BY 구문을혼합해사용하는구문도가능
• MySQL 한번에끝내기 53
LAB #04
한국에있는도시들에대해인구수로내림차순하여보기
country 테이블을이용하여국가면적크기로내림차순하여보기
• MySQL 한번에끝내기 54
DISTINCT
중복된것은 1개씩만보여주면서출력
테이블의크기가클수록효율적
• MySQL 한번에끝내기 55
LIMIT
출력개수를제한
일부를보기위해여러건의데이터를출력하는부담줄임
상위의 N개만출력하는‘LIMIT N’ 구문사용
서버의처리량을많이사용해서버의전반적인성능을나쁘게하는악성 쿼리문개선할때사용
• MySQL 한번에끝내기 56
GROUP BY
그룹으로묶어주는역할
집계함수Aggregate Function를 함께사용
AVG(): 평균
MIN(): 최소값
MAX(): 최대값
COUNT(): 행의개수
COUNT(DISTINCT): 중복제외된행의개수
STDEV(): 표준편차
VARIANCE(): 분산
효율적인데이터그룹화Grouping
읽기좋게하기위해별칭Alias 사용
• MySQL 한번에끝내기 57
LAB #05
전체도시는몇개인가?
전체도시들의평균인구수는?
• MySQL 한번에끝내기 58
HAVING
WHERE과비슷한개념으로조건제한
집계함수에대해서조건제한하는편리한개념
HAVING절은반드시 GROUP BY절다음에나와야함
• MySQL 한번에끝내기 59
ROLLUP
총합또는중간합계가필요할경우사용’
GROUP BY절과함께 WITH ROLLUP문사용
• MySQL 한번에끝내기 60
JOIN
JOIN은데이터베이스내의여러테이블에서가져온레코드를조합하여하나의테이블이나결과집합으로표현
• MySQL 한번에끝내기 61
LAB #06
city, country, countrylanguage테이블 3개를 JOIN 하기
• MySQL 한번에끝내기 62
MySQL 내장함수
사용자의편의를위해다양한기능의내장함수를미리정의하여제공
대표적인내장함수의종류
문자열함수
수학함수
날짜와시간함수
• MySQL 한번에끝내기 63
LENGTH()
전달받은문자열의길이를반환
• MySQL 한번에끝내기 64
CONCAT()
전달받은문자열을모두결합하여하나의문자열로반환
전달받은문자열중하나라도 NULL이존재하면 NULL을반환
• MySQL 한번에끝내기 65
LOCATE()
문자열내에서찾는문자열이처음으로나타나는위치를찾아서해당위치를반환
찾는문자열이문자열내에존재하지않으면 0을반환
MySQL에서는문자열의시작인덱스를 1부터계산
• MySQL 한번에끝내기 66
LEFT(), RIGHT()
LEFT():문자열의왼쪽부터지정한개수만큼의문자를반환
RIGHT(): 문자열의오른쪽부터지정한개수만큼의문자를반환
• MySQL 한번에끝내기 67
LOWER(), UPPER()
LOWER():문자열의문자를모두소문자로변경
UPPER(): 문자열의문자를모두대문자로변경
• MySQL 한번에끝내기 68
REPLACE()
문자열에서특정문자열을대체문자열로교체
• MySQL 한번에끝내기 69
TRIM()
문자열의앞이나뒤, 또는양쪽모두에있는특정문자를제거
TRIM() 함수에서사용할수있는지정자
BOTH : 전달받은문자열의양끝에존재하는특정문자를제거 (기본설정)
LEADING : 전달받은문자열앞에존재하는특정문자를제거
TRAILING : 전달받은문자열뒤에존재하는특정문자를제거
만약지정자를명시하지않으면, 자동으로 BOTH로설정
또한, 제거할문자를명시하지않으면, 자동으로공백을제거
• MySQL 한번에끝내기 70
FORMAT()
숫자타입의데이터를세자리마다쉼표(,)를사용하는 '#,###,###.##' 형식으로변환
반환되는데이터의형식은문자열타입
두번째인수는반올림할소수부분의자릿수
• MySQL 한번에끝내기 71
FLOOR(), CEIL(), ROUNT()
FLOOR(): 내림
CEIL():올림
ROUND(): 반올림
• MySQL 한번에끝내기 72
SQRT(), POW(), EXP(), LOG()
SQRT(): 양의제곱근
POW(): 첫번째인수로는밑수를전달하고, 두번째인수로는지수를전달하여거듭제곱계산
EXP(): 인수로지수를전달받아, e의거듭제곱을계산
LOG():자연로그값을계산
• MySQL 한번에끝내기 73
SIN(), COS(), TAN()
SIN(): 사인값반환
COS():코사인값반환
TAN():탄젠트값반환
• MySQL 한번에끝내기 74
ABS(), RAND()
ABS(X): 절대값을반환
RAND(): 0.0보다크거나같고 1.0보다작은하나의실수를무작위로생성
• MySQL 한번에끝내기 75
NOW(), CURDATE(), CURTIME()
NOW(): 현재날짜와시간을반환, 반환되는값은 'YYYY-MM-DD HH:MM:SS' 또는YYYYMMDDHHMMSS 형태로반환
CURDATE():현재날짜를반환, 이때반환되는값은 'YYYY-MM-DD' 또는YYYYMMDD 형태로반환
CURTIME():현재시각을반환, 이때반환되는값은 'HH:MM:SS' 또는 HHMMSS 형태로반환
• MySQL 한번에끝내기 76
DATE(), MONTH(), DAY(), HOUR(), MINUTE(), SECOND()
DATE():전달받은값에해당하는날짜정보를반환
MONTH(): 월에해당하는값을반환하며, 0부터 12 사이의값을가짐
DAY():일에해당하는값을반환하며, 0부터 31 사이의값을가짐
HOUR(): 시간에해당하는값을반환하며, 0부터 23 사이의값을가짐
MINUTE():분에해당하는값을반환하며, 0부터 59 사이의값을가짐
SECOND(): 초에해당하는값을반환하며, 0부터 59 사이의값을가짐
• MySQL 한번에끝내기 77
MONTHNAME(), DAYNAME()
MONTHNAME(): 월에해당하는이름을반환
DAYNAME():요일에해당하는이름을반환
• MySQL 한번에끝내기 78
DAYOFWEEK(), DAYOFMONTH(), DAYOFYEAR()
DAYOFWEEK(): 일자가해당주에서몇번째날인지를반환, 1부터 7 사이의값을반환 (일요일 = 1, 토요일 = 7)
DAYOFMONTH():일자가해당월에서몇번째날인지를반환, 0부터 31 사이의값을반환
DAYOFYEAR(): 일자가해당연도에서몇번째날인지를반환, 1부터 366 사이의값을반환
• MySQL 한번에끝내기 79
DATE_FORMAT()
전달받은형식에맞춰날짜와시간정보를문자열로반환
MySQL Date and Time Function: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html
• MySQL 한번에끝내기 80
4. SQL 고급
CREATE TABLE AS SELECT
city 테이블과똑같은 city2 테이블생성
• MySQL 한번에끝내기 82
CREATE DATBASE
CREATE DATABASE 문은새로운데이터베이스를생성
USE문으로새데이터베이스를사용
• MySQL 한번에끝내기 83
CREATE TABLE (MySQL Workbench)
• MySQL 한번에끝내기 84
데이터타입: https://dev.mysql.com/doc/refman/8.0/en/data-types.html
CREATE TABLE (MySQL Workbench)
• MySQL 한번에끝내기 85
CREATE TABLE (MySQL Workbench)
• MySQL 한번에끝내기 86
test 테이블생성완료
CREATE TABLE
test2 테이블생성완료
• MySQL 한번에끝내기 87
ALTER TABLE
ALTER TABLE 문과함께 ADD 문을사용하면, 테이블에컬럼을추가할수있음
• MySQL 한번에끝내기 88
ALTER TABLE
ALTER TABLE 문과함께 MODIFY 문을사용하면, 테이블의컬럼타입을변경할수있음
• MySQL 한번에끝내기 89
ALTER TABLE
ALTER TABLE 문과함께 DROP 문을사용하면, 테이블에컬럼을제거할수있음
• MySQL 한번에끝내기 90
인덱스Index
테이블에서원하는데이터를빠르게찾기위해사용
일반적으로데이터를검색할때순서대로테이블전체를검색하므로데이터가많으면많을수록탐색하는시간이늘어남
검색과질의를할때테이블전체를읽지않기때문에빠름
설정된컬럼값을포함한데이터의삽입, 삭제, 수정작업이원본테이블에서이루어질경우, 인덱스도함께수정되어야함
인덱스가있는테이블은처리속도가느려질수있으므로수정보다는검색이자주사용되는테이블에서사용하는것이좋음
• MySQL 한번에끝내기 91
CREATE INDEX
CREATE INDEX 문을사용하여인덱스를생성
• MySQL 한번에끝내기 92
SHOW INDEX
인덱스정보보기
• MySQL 한번에끝내기 93
CREATE UNIQUE INDEX
중복값을허용하지않는인덱스
• MySQL 한번에끝내기 94
FULLTEXT INDEX
FULLTEXT INDEX는일반적인인덱스와는달리매우빠르게테이블의모든텍스트컬럼을검색
• MySQL 한번에끝내기 95
INDEX 삭제 (ALTER)
ALTER 문을사용하여테이블에추가된인덱스삭제
• MySQL 한번에끝내기 96
INDEX 삭제 (DROP INDEX)
DROP 문을사용하여해당테이블에서명시된인덱스를삭제
DROP 문은내부적으로 ALTER 문으로자동변환되어명시된이름의인덱스를삭제
• MySQL 한번에끝내기 97
VIEW
뷰view는데이터베이스에존재하는일종의가상테이블
실제테이블처럼행과열을가지고있지만, 실제로데이터를저장하진않음
MySQL에서뷰는다른테이블이나다른뷰에저장되어있는데이터를보여주는역할만수행
뷰를사용하면여러테이블이나뷰를하나의테이블처럼볼수있음
뷰의장점 특정사용자에게테이블전체가아닌필요한
컬럼만보여줄수있음
복잡한쿼리를단순화해서사용
쿼리재사용가능
뷰의단점
한번정의된뷰는변경할수없음
삽입, 삭제, 갱신작업에많은제한사항을가짐
자신만의인덱스를가질수없음
• MySQL 한번에끝내기 98
CREATE VIEW
CREATE VIEW 문을사용하여뷰생성
• MySQL 한번에끝내기 99
ALTER VIEW
ALTER 문을사용하여뷰를수정
• MySQL 한번에끝내기 100
DROP VIEW
DROP 문을사용하여생성된뷰를삭제
• MySQL 한번에끝내기 101
LAB #07
city, country, countrylanguage테이블을 JOIN하고, 한국에대한정보만뷰생성하기
• MySQL 한번에끝내기 102
INSERT
테이블이름다음에나오는열생략가능
생략할경우에 VALUE 다음에나오는값들의순서및개수가테이블이정의된열순서및개수와동일해야함
• MySQL 한번에끝내기 103
INSERT (MySQL Workbench)
• MySQL 한번에끝내기 104
INSERT INTO SELECT
test 테이블에있는내용을 test2 테이블에삽입
• MySQL 한번에끝내기 105
UPDATE
기존에입력되어있는값변경하는구문
WHERE절생략가능하나테이블의전체행의내용변경
• MySQL 한번에끝내기 106
DELETE
행단위로데이터삭제하는구문
DELETE FROM 테이블이름 WHERE 조건;
데이터는지워지지만테이블용량은줄어들지않음
원하는데이터만지울수있음
삭제후잘못삭제한것을되돌릴수있음
• MySQL 한번에끝내기 107
TRUNCATE
용량이줄어들고, 인덱스등도모두삭제
테이블은삭제하지는않고, 데이터만삭제
한꺼번에다지워야함
삭제후절대되돌릴수없음
• MySQL 한번에끝내기 108
DROP TABLE
데이블전체를삭제, 공간, 객체를삭제
삭제후절대되돌릴수없음
• MySQL 한번에끝내기 109
DROP DATABASE
DROP DATABASE 문은해당데이터베이스를삭제
• MySQL 한번에끝내기 110
LAB #08
자신만의연락처테이블만들기
이름, 전화번호, 주소, 이메일, …
자유주제로데이터들을저장할테이블만들기
(참고) 데이터타입: https://dev.mysql.com/doc/refman/8.0/en/data-types.html
• MySQL 한번에끝내기 111
• MySQL 한번에끝내기 112