DataBase/MySQL

MySQL 기초

Dev_Green 2022. 7. 7. 16:11

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; #열 제거

인덱스 

  • 테이블에서 원하는 데이터를 빠르게 찾기 위해 사용
  • 설정된 값을 포함한 데이터의 삽입, 삭제 등의 수정이 원본 테이블에서 이루어질 경우, 인덱스도 함께 수정되어야 함
  • 인덱스가 있는 테이블은 처리 속도가 느려질 수 있으므로 수정보다는 검색이 자주 사용되는 테이블에서 사용하는 것이 좋음