MySQL이란?

오픈 소스이며, 다중 사용자와 다중 스레드를 지원

아양한 운영체제에서 사용할수 있고, 특히 PHP와 함께 웹 개발에 자주 사용

MySQL은 오픈 소스 라이센스를 따르기는 하지만, 상업적 사용할 때 상업용 라이센스 필요

오라클이 MySQL 사면서 WorkBench 이용 가능함


DML, DDL, DCL 

DML(Data Manipulation Language)

- 데이터 조작 언어

- 데이터를 조작(선택,삽입,수정,삭제)하는데 사용됨

- DML 구문이 사용되는 대상은 테이블 행

- SQL문 중 SELECT,INSERT,UPDATE,DELETE가 해당

- 트랜잭션이 발생하는 SQL도 DML에 속함

  - 테이블의 데이터를 변경(입력/수정/삭제)할 때 실제 테이블에 완전히 적용하지 않고, 임시로 적용시키는 것

  - 취소 OK

 

DDL(Data Definition Language)

- 데이터 정의 언어

- CREATE, DROP, ALTER 구문

- DDL은 트랜잭션 발생시키지 않는다.

- DDL문은 즉시 바로 MySQL에 적용

- ROLLBACK이나 COMMIT 사용 불가

- DB,테이블,뷰,인덱스 등의 데이터 베이스 개체를 생성 / 삭제 / 변경하는 역할을 가지고 있음

 

DCL(Data Control Language)

- 데이터 제어 언어

- 사용자에게 어떤 권한을 부여하거나 빼앗을 때 사용함


SHOW DATABASES

- 현재 DB 몇개 있는지 보여줌

USE world 

- 지금 데이터 베이스 뭐 쓸지 보여줌

world가 bold된 것을 볼 수 있다.

SHOW TABLES

- 테이블 보여줘

SHOW TABLE STATUS

- 테이블의 상태까지 나온다

TABLE S안들어감

DESCRIBE city

- 테이블에 대한 정보를 볼 수 있음.(city,country,countrylanguage)

DESC country

DESC countrylanguage

- 줄여서 사용 가능

desc로 줄여서 볼 수 있다


SELECT

- 일반적으로 제일 많이 사용

- 요구하는 데이터를 가져오는 구문

- 형식

SELECT ~

FROM ~

WHERE ~

GROUP BY ~

HAVING ~

ORDER BY ~

 

SELECT * FROM city

- 전체 데이터를 볼 수 있음

SELECT Name, CountryCode FROM city;

- 원하는 부분만 선택해서 볼 수 있음.


WHERE

- 조회하는 결과에 특정한 조건으로 원하는 데이터만 볼 때

- SELECT 필드이름 FROM 테이블이름 WHERE 조건식 조건이 없으면 찾을려고 할 때 COST와 시간 노력이 증가한다.

 

SELECT *

FROM city

WHERE Population > 200000

- 조건을 줄 수 있음, 보여주는데 Population이 200000보다 크게

관계 연산자

- OR , AND , 조건 연산자(=,<,> 등등)

- 관계 연산자(NOT ANT OR) 등 사용 가능

 

관계 연산자를 이용하지 않고도 BETWEEN을 이용해서 사잇값을 구할 수 있다.

 

이산적인 값 조건에서 IN을 이용해서 국적코드가 AND 와 KOR 값을 구했다.


LIKE

- 문자열의 내용 검색하기 위해서 LIKE 연산자 사용 문자 뒤에 % - 뒤에 허용

- 한글자 매치하기 위해서는 '_'를 사용한다

JOR KOR 둘다 검색되는 것을 볼 수 있다.

%R 이면 R로 끝나는 데이터

%R%하면 R이 사이에 있는 데이터

R% 하면 R로 시작하는 데이터가 출력된다.


Sub Query

- 서브 쿼리

- 쿼리문 안에 또 쿼리문이 들어 있는 것

- 서브 쿼리의 결과가 둘 이상이 되면 에러 발생

City의 자료중에서 CountryCode가 (서브쿼리 들어감) ContryCode안에서 이름이 'Seoul'인 쿼리

 

Any

- 서브쿼리의 여러 개의 결과 중 한가지만 만족해도 가능

- SOME은 ANY와 동일한 의미로 사용

- =ANY 구문은 IN과 동일한 의미

여러 가지의 결과가 나오는데 한가지만 만족해도 됨. ANY 대신에 SOME 넣어도 됨.

 

ALL

- 서브쿼리의 결과를 모두 만족해야 함

 

안에 있는 서브쿼리만 실행해보면 New York인데 

 

뉴욕에 있는 Population보다 큰 값만 보여줘라 이 말임.


ORDER BY

- 결과 출력 순서를 조절한다

- 기본적으로 ASC(오름차순) 생략 가능

 

혼용해서 사용가능 CountryCode는 오름차순, Population은 내림차순으로 사용 가능

 

Q. 인구수로 내림차순 한국에 있는 도시, 국가 면적 크기로 내림차순 나라보기


DISTINCT

- 중복된 것 1개씩 만 보여줌

- 테이블 크기가 크면 좋다

현재 AFG가 중복돼서 나오는데 DISTINCT 키워드를 이용해서 중복을 없앨 수 있음.


LIMIT

- 출력 개수를 제한

- 상위의 N개만 출력하는 'LIMIT N' 구문

- 서버의 처리량을 많이 사용해 서버의 전반적인 성능을 나쁘게 하는 악성 쿼리문 개선할떄 사용??

 

이렇게 하면 전체의 쿼리 다봄

이것을 LIMIT으로 개선시키면

20개만 볼 수 있다.


GROUP BY

- 그룹으로 묶어주는 역할

- 집계 함수를 함께 사용

 - AVG 평균 , MIN 최소값 , MAX 최대값 , COUNT 행의 개수 , COUNT(DISTINCT) 중복 제외된 행 개수

   STEDV 표준 편차 , VARIANCE 분산

- 효율적인 데이터 그룹화

- 읽기 좋게 하기 위해 별칭 사용

 

여러 개의 Country코드들이 있었는데 마치 DISTINCT가 된 것 처럼 그룹화 되어있고, 

그 중 MAX()함수를 이용해서 가장 큰 값들만 보여주고 있다.


HAVING

- WHERE과 비슷한 개념으로 조건을 제한한다.

- HAVING 절은 반드시 GROUP BY절 다음에 나와야 한다.

 

조건을 걸때 WHERE로 걸지만 GROUP에 조건을 줄때는 HAVING을 사용한다!

ROLLUP

- 총합 또는 중간합계가 필요한 경우

- GROUP BY절과 함께 WITH ROLLUP문 사용

보면은 AFG라는 컨트리 코드가 있는데

SUM함수로 총 인구수를 보여주는데 이제 중간에 총 합계가 보여지는 구문이 나오고 또 중간 과정도 나오는 것을 같이 볼 수 있다.

 

JOIN

- JOIN은 데이터베이스 내의 여러 테이블에서 가져온 레코드를 조합하여 하나의 테이블이나 결과 집합으로 표현

 

조인은 여러개의 테이블을 한번 조합해보자 라는 의미.

 

ON에 조건이 들어감

city에 있는 Country코드랑 country에 있는 code랑 같으면 조인을 해줘러 이 말임.

 

세개를 조인하려면 마찬가지임 뒤에다가 JOIN을 추가해서 작성해주면 됨.


+ Recent posts