Database

MySQL 기초 2

reasontaek 2021. 11. 10. 20:06

연습 환경 구성


연습용 샘플 데이터베이스 다운로드

https://dev.mysql.com/doc/index-other.html

 

MySQL :: Other MySQL Documentation

Other MySQL Documentation This page provides additional documentation. There's even more available on these extra pages: MySQL Server Doxygen Documentation Title HTML Online MySQL Server (latest version) View Expert Guides Language Title Version HTML Onlin

dev.mysql.com

터미널에서 MySQL에 접속한 뒤 다운로드한 sql 실행

mysql> SOURCE [path]/world.sql

또는

MySQLWorkbench에서 불러오기 후 실행(FILE -> Open SQL Script)

 

MYSQL 함수


서브 쿼리

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

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

SELECT * FROM city WHERE CountryCode = (SELECT CountryCode FROM city WHERE Name = 'Seoul');

-- ANY(): 서브쿼리 결과 중 한 가지만 만족해도 출력('SOME'도 동일)
SELECT * FROM city WHERE Population > ANY (SELECT Population FROM city WHERE District = 'New York');

-- ALL(): 서브쿼리의 모든 결과를 만족해야 함
SELECT * FROM city WHERE Population > ALL (SELECT Population FROM city WHERE District = 'New York');

 

DISTINCT

- 중복된 값은 1개씩만 보여주며 출력

SELECT DISTINCT CountryCode FROM city;

 

GROUP BY

- 그룹으로 묶어주는 역할

- 집계함수와 같이 사용 가능

   - AVG(): 평균

   - MIN(): 최소 값

   - MAX(): 최대 값

   - COUNT(): 행의 개수

   - COUNT(DISTINCT): 중복을 제외한 행의 개수

   - STDEV(): 표준 편차

   - VARIANCE(): 분산

SELECT CountryCode, MAX(Population) FROM city GROUP BY CountryCode;
SELECT CountryCode, AVG(Population) as Average FROM city GROUP BY CountryCode;

 

HAVING

- 집계함수에 대해서 조건을 걸음

- 반드시 GROUP BY 절 다음에 와야 함

SELECT Name, MAX(Population) AS maxPop FROM city GROUP BY CountryCode HAVING maxPop > 8000000;

 

ROLLUP

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

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

SELECT CountryCode, name, SUM(Population) AS sumPop FROM city GROUP BY CountryCode, Name WITH ROLLUP;

 

JOIN

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

SELECT * FROM city JOIN country ON city.CountryCode = country.Code;

-- 세 개 테이블을 JOIN할 경우
SELECT * FROM city 
JOIN country ON city.CountryCode = country.Code
JOIN countrylanguage ON city.CountryCode = countrylanguage.CountryCode;

 

LENGTH()

- 문자열 길이를 반환

SELECT LENGTH("1234567");

 

CONCAT()

- 전달받은 문자열을 모두 결합하여 하나의 문자열로 반환

- 문자열 중 하나라도 NULL이면 NULL을 반환

SELECT CONCAT('My', 'sql Op', 'en Source');

 

LOCATE()

- 문자열 내에서 찾는 문자열이 나타나는 위치를 찾아서 해당 위치를 반환

- 찾는 문자열이 존재하지 않으면 0 반환

- MySQL에서는 문자열의 시작 인덱스를 1부터 시작

SELECT LOCATE('abc', 'asdsabcabcabc');

 

LEFT(), RIGHT()

- 지정한 개수만큼의 문자열 반환

SELECT LEFT('MySQL is an open source relational database management system', 3);
SELECT RIGHT('MySQL is an open source relational database management system', 3);

 

LOWER(), UPPER()

- 문자열의 모든 문자를 소문자/대문자로 변경

SELECT LOWER('MySQL is an open source relational database management system');
SELECT UPPER('MySQL is an open source relational database management system');

 

REPLACE()

- 문자열에서 특정 문자열을 대체 문자열로 변경

SELECT REPLACE('MSSQL', 'MS', 'MY');

 

TRIM()

- 문자열의 앞이나 뒤 또는 양쪽 모두에 있는 특정 문자 제거

- TRIM()에는 세 가지 옵션이 있음

   - BOTH: 양 끝에 존재하는 특정 문자를 제거(Default)

   - LEADING: 문자열 앞에 존재하는 특정 문자 제거

   - TRAILING: 문자열 뒤에 존재하는 특정 문자 제거

SELECT TRIM('    MySQL     ');
SELECT TRIM(LEADING '#' FROM '###MySQL###');
SELECT TRIM(TRAILING '#' FROM '###MySQL###');

 

FORMAT()

- 숫자 타입의 데이터를 세 자리마다 쉼표를 사용하는 #.###.###.## 형식으로 반환

- 반환되는 데이터 형식은 문자열 형식

- 두 번째 인수는 반올림할 소수 부분의 자릿수

SELECT FORMAT(123123123123.123123123, 3);

 

FLOOR(), CEIL(), ROUND()

- 내림, 올림, 반올림

SELECT FLOOR(10.95), CEIL(10.95), ROUND(10.95);

 

출처

https://youtu.be/vgIc4ctNFbc?list=PLSuYGb2n4c-dkszkBPmUkrvanmZfqcLEp

'Database' 카테고리의 다른 글

데이터베이스 설계 시 테이블 id INT or BIGINT?  (0) 2021.12.16
[MySQL] 게시글 검색(제목->내용->태그 순)  (0) 2021.12.03
MySQL 기초 1  (0) 2021.11.10