연습 환경 구성
연습용 샘플 데이터베이스 다운로드
https://dev.mysql.com/doc/index-other.html
터미널에서 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 |