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 에서수행 USE database_name Workbench 에서직접선택해사용가능 [Navigator] [SCHEMAS] 데이터베이스선택 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 의구문형식 SELECT select_expr [FROM table_references] [WHERE where_condition] [GROUP BY {col_name expr position}] [HAVING where_condition] [ORDER BY {col_name expr position}] MySQL 한번에끝내기 39
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) 데이터타입 : https://dev.mysql.com/doc/refman/8.0 /en/data-types.html MySQL 한번에끝내기 84
CREATE TABLE (MySQL Workbench) MySQL 한번에끝내기 85
CREATE TABLE (MySQL Workbench) test 테이블생성완료 MySQL 한번에끝내기 86
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