MySQL 기초
SHOW DATABASES
현재 서버에 어떤 DB가 있는지 조회
USE
사용할 DB 지정
USE database_name
Workbench에서 직접 선택하는 것도 가능
SHOW TABLES
DB 내의 테이블 이름 보기
SHOW TABLE STATUS
테이블의 정보 조회
DESCRIBE(DESC)
특정 테이블에 있는 col 조회
DESC col_name
SELECT
요구하는 데이터를 가져오기
SELECT 열이름
- 테이블에서 필요로 하는 열만 가져오기
- 여러 개의 열을 가져오려면 콤마(,)로 구분
- 출력 순서는 입력한 순서대로
WHERE
특정한 조건에 해당되는 정보 조회
SELECT 필드이름
FROM 테이블이름
WHERE 조건식
- AND
- BETWEEN
- IN : 이산적인 값의 조건 WHERE 열이름 IN('값1', '값2')
- LIKE : %(문자 뒤에 무엇이든), _(문자 뒤에 한 글자만)
ORDER BY : 결과의 출력 순서 조절. 오름차순이 기본값이며 내림차순은 열이름 뒤에 DESC 입력
DISTINCT : 중복된 것은 1 개만 출력. 열이름 앞에 입력
LIMIT : 출력 개수 제한
GROUP BY
집계함수를 함께 사용: AVG, MAX, MIN, COUNT, COUNT(DISTINCT), STDEV, VARIANCE
AS로 별칭 사용 가능
SELECT CountryCode MAX(Population)
HAVING
- 집계함수에 대해 조건 제한
- WHERE과 비슷한 개념이지만, 반드시 GROUP BY 다음에만 사용할 수 있다는 것이 다름
SELECT CountryCode, MAX(Population)
FROM city
GROUP BY CountryCode
HAVING MAX(Population) > 8000000
Sub Query
쿼리 내에 또 쿼리가 들어있는 것
서브 쿼리의 결과가 둘 이상이면 에러 발생
- ANY(SOME): 서브쿼리의 여러 결과 중 하나만 만족해도 가능
- ALL : 서브쿼리의 모든 값을 만족해야 가능
ROLLUP
총합 또는 중간 합계가 필요할 경우 사용
GROUP BY 절과 함께 WITH ROLLUP문 사용
GROUP BY CountryCode, Name WITH ROLLUP
JOIN
DB 내의 여러 테이블에서 가져온 레코드들을 조합하여 하나의 테이블이나 결과 집합으로 출력
SELECT *
FROM city
JOIN country ON city.CountryCode = country.Code
# 테이블 city와 테이블 country를 결합하고 싶은데 'ON 이하의 조건'에 따라서 결합해줘
세 개의 테이블을 결합하려면 JOIN 아래에 JOIN 또 붙여
SELECT *
FROM city
JOIN country ON city.CountryCode = country.Code
JOIN countrylanguage ON city.CountryCode = countrylanguage.Code
MySQL 내장함수
LENTH : 문자열의 길이 반환
CONCAT : 입력된 문자열을 모두 결합하여 하나의 문자열로 반환. 그 중 하나라도 NULL이면 NULL 반환
LOCATE : 찾는 문자열이 주어진 문자열 내에 위치한 인덱스를 반환. 인덱스는 1부터 시작
SELECT LOCATE('apple', 'my apple is good')
LEFT, RIGHT : 주어진 문자열에서 왼쪽에서부터(오른쪽에서부터) 지정한 개수만큼의 문자를 반환
SELECT LEFT('my apple is good', 3)
LOWER, UPPER: 소문자로(대문자로) 변환
REPLACE : 문자열 내에서 특정 문자를 다른 특정 문자로 치환
SELECT REPLACE('My bag is Gucci', 'Gucci', 'Chanel')
TRIM
SELECT TRIM(' MYSQL '), #공백 제거
TRIM(LEADING '#' FROM '###MYSQL'), #주어진 문자열의 앞에 존재하는 특정 문자 제거
TRIM(TRAILING '#' FROM 'MYSQL###') #주어진 문자열의 뒤에 존재하는 특정 문자 제거
FORMAT : 숫자 타입의 데이터를 세 자리마다 쉼표 처리. 두 번째 인자는 반올림하여 표시할 소수 부분의 자리 수
SELECT FORMAT(12345.6789, 2)
날짜 관련
- NOW() : 현재 날짜, 시간
- CURDATE() : 현재 날짜(년월일)
- CURTIME(): 현재 시간(시분초)
- DATE()
- MONTH()
- DAY()
- HOUR()
- MINUTE()
- SECOND()
- MONTHNAME() : 월 이름
- DAYNAME() : 요일 이름
- DAYOFMONTH() : 일자가 해당 월에서 몇번째 날인지
- DAYOFWEEK()
- DAYOFYEAR()
CREATE TABLE
CREAT TABLE city2 AS SELECT * FROM city
#테이블 city와 똑같은 테이블 city2 생성
CREATE DATABASE
새로운 DB 생성
ALTER TABLE
ALTER TABLE test
ADD col4 INT NULL; #열 추가
ALTER TABLE test
MODIFY col4 VARCHAR(20) NULL; #열 타입 변경
ALTER TABLE test
DROP col4; #열 제거
인덱스
- 테이블에서 원하는 데이터를 빠르게 찾기 위해 사용
- 설정된 값을 포함한 데이터의 삽입, 삭제 등의 수정이 원본 테이블에서 이루어질 경우, 인덱스도 함께 수정되어야 함
- 인덱스가 있는 테이블은 처리 속도가 느려질 수 있으므로 수정보다는 검색이 자주 사용되는 테이블에서 사용하는 것이 좋음