SHOW DATABASES

현재 서버에 어떤 DB가 있는지 보기

 

USE

  • 사용할 데이터베이스 지정
  • 지정해 놓은 후 특별히 다시 USE문 사용하거나 다른 DB를 사용하겠다고 명시하지 않는 이상 모든 SQL문은 지정 DB에서 수행
USE database_name;
  • Workbench에서 직접 선택해 사용 가능

[Navigator] → [SCHEMAS] → 데이터베이스 선택

 

SHOW TABLES

  • 지정한 데이터베이스의 테이블 이름 보기

SHOW TABLE STATUS

  • 지정한 데이터베이스의 테이블 정보 조회(row 개수 등등 정보를 보여줌)

DESCRIBE(DESC)

  • 해당 테이블에 무슨 컬럼이 있는지 확인
DESCRIBE city;
DESC city;

SELECT

  • <SELECT... FROM>
  • 요구하는 데이터를 가져오는 구문
  • 일반적으로 가장 많이 사용되는 구문
  • 데이터베이스 내 테이블에서 원하는 정보를 추출
  • SELECT 구문 형식
SELECT select_expr
               [FROM table_references]
               [WHERE where_condition]
               [GROUP BY {col_name | expr | position}]
               [HAVING where_condition]
               [ORDER BY {col_name | expr | position}]

SELECT *

해당 테이블의 전체 데이터들을 보여줌(모든 열)

SELECT *
FROM city;

 

SELECT 열 이름

  • 테이블에서 필요로 하는 열만 가져옴
  • 여러 개의 열을 가져오고 싶을 때는 콤마로 구분
  • 열 이름의 순서는 출력하고 싶은 순서대로 배열 가능
SELECT Name, Population
FROM city;

SELECT FROM WHERE

  • 조회하는 결과에 특정한 조건으로 원하는 데이터만 보고 싶을 때 사용
  • SELECT 필드이름 FROM 테이블이름 WHERE 조건식;
SELECT *
FROM city
WHERE Population >= 8000000;
  • 연산자의 사용

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

- 관계 연산자(AND, OR, NOT 등)

- 연산자의 조합으로 데이터를 효율적으로 추출

SELECT *
FROM city
WHERE Population > 7000000 AND Population < 8000000;
  • BETWEEN

데이터가 숫자로 구성되어 있어 연속적인 범위를 지정할 때 BETWEEN...AND 사용 가능(이상, 이하의 결과를 추출)

SELECT *
FROM city
WHERE Population BETWEEN 7000000 AND 8000000;

# 동일한 결과(AND 연산자 사용)
SELECT *
FROM city
WHERE Poulation >= 7000000 AND Population <= 8000000;

# 위 검색내용과 반대되는 조건문
SELECT *
FROM city
WHERE Population NOT BETWEEN 7000000 AND 8000000;
  • IN

이산적인 값의 조건에서는 IN()사용 가능(IN안에 들어가는 값에 맞는 결과 추출)

SELECT *
FROM city
WHERE Name IN('Seoul', 'New York', 'Tokyo');

# 마찬가지로 NOT 이용 가능(반대되는 조건문)
  • LIKE

-  문자열의 내용 검색하기 위해 LIKE 연산자 사용(부분적으로 일치하는 데이터를 찾을때 사용)

-  _: 글자숫자를 정해줌(EX 컬럼명 LIKE '홍_동'), 한 글자와 매치

-  %: 글자숫자를 정해주지않음(EX 컬럼명 LIKE '홍%'), 모든 글자와 매치

# A로 시작하는 문자를 찾기
SELECT 컬럼명
FROM 테이블
WHERE 컬럼명 LIKE 'A%';

# A로 끝나는 문자 찾기
SELECT 컬럼명
FROM 테이블
WHERE 컬럼명 LIKE '%A';

# A를 포함하는 문자 찾기
SELECT 컬럼명
FROM 테이블
WHERE 컬럼명 LIKE '%A%';

# A로 시작하는 두 글자 문자 찾기
SELECT 컬럼명
FROM 테이블
WHERE 컬럼명 LIKE 'A_';

# 첫 번째 문자가 'A'가 아닌 모든 문자열 찾기
SELECT 컬럼명
FROM 테이블
WHERE 컬럼명 LIKE '[^A]';

# 첫 번째 문자가 'A' 또는 'B' 또는 'C'인 문자열 찾기
SELECT 컬럼명 FROM 테이블 WHERE 컬럼명 LIKE '[ABC]';
SELECT 컬럼명 FROM 테이블 WHERE 컬럼명 LIKE '[A-C]';
  • Sub Query(서브 쿼리)

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

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

- 서브쿼리를 쓰는 이유는 알려지지 않은 기준을 이용한 검색을 하기 위해서

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

서브 쿼리만 실행하면 city 테이블에서 Name이 'Seoul'인 CountryCode가 출력되고('KOR') 메인 쿼리와 매칭시켜 결과 출력

# 서브 쿼리의 결과가 둘 이상이 되면 에러 발생
SELECT *
FROM city
WHERE CountryCode = (    SELECT CountryCode
                                             FROM city
                                             WHERE Name IN('Seoul', 'Kabul')    );
  • ANY(서브쿼리 안의 값이 여러개일때)

- 서브쿼리의 여러 개의 결과 중 한 가지만 만족해도 가능(하나의 조건만 만족하면 True)

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

SELECT *
FROM city
WHERE Population > ANY(    SELECT Population
                                                FROM city
                                                WHERE District = 'New York'    );
#
> ANY : 최소값보다 크면
>= ANY : 최소값보다 크거나 같으면
< ANY : 최대값보다 작으면
<= ANY : 최대값보다 작거나 같으면
= ANY : IN과 같은 기능
!= ANY : NOT IN과 같은 기능
  • ALL(서브쿼리 안의 값이 여러개일때)

- 서브쿼리의 여러 개의 결과를 모두 만족시켜야 함(모든 값이 조건 만족하면 True)

SELECT *
FROM city
WHERE Population > ALL(    SELECT Population
                                               FROM city
                                               WHERE District = 'New York'    );
#
> ALL : 최대값보다 크면
>= ALL : 최대값보다 크거나 같으면
< ALL : 최소값보다 작으면
<= ALL : 최소값보다 작거나 같으면
= ALL : 서브 쿼리의 결과가 1건이면 괜찮지만 여러 건이면 오류가 발생
!= ALL : 서브 쿼리의 결과가 1건이면 괜찮지만 여러 건이면 오류가 발생

ORDER BY

- 결과가 출력되는 순서를 조절하는 구문

- default는 ASC(오름차순)으로 생략 가능

- 내림차순 정렬(열 이름 뒤에 DESC 적어줄 것)

SELECT *
FROM city
ORDER BY Population DESC;

- 혼합해 사용하는 구문도 가능

SELECT *
FROM city
ORDER BY CountryCode ASC, Population DESC;
# CountryCode 컬럼을 오름차순으로 정렬 후, Population 컬럼을 내림차순 정렬

DISTINCT

- 중복된 것은 1개씩만 보여주면서 출력

- 테이블의 크기가 클수록 효율적

SELECT DISTINCT CountryCode
FROM city;

LIMIT

- 출력 개수를 제한

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

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

- Workbench에서 Limit을 조절하는 옵션이 있음

SELECT *
FROM city
ORDER BY Population DESC
LIMIT 10;

GROUP BY

- 그룹으로 묶어주는 역할(효율적인 데이터 그룹화)

- 집계 함수를 함께 사용

AVG(): 평균

MIN(): 최소값

MAX(): 최대값

COUNT(): 행의 개수

COUNT(DISTINCT): 중복 제외된 행의 개수

STDEV(): 표준편차

VARIANCE(): 분산

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

SELECT CountryCode, AVG(Population) AS 'Average'
FROM city
GROUP BY CountryCode;

Question: 도시는 몇개인가?, 도시들의 평균 인구수는?

SELECT COUNT(*)
FROM city;

SELECT AVG(Population)
FROM city;

HAVING

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

- 집계 함수에 대해서 조건 제한하는 편리한 개념

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

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

ROLLUP

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

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

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

JOIN

- 데이터베이스 내의 여러 테이블을 하나의 테이블이나 결과 집합으로 결합

- python에서 데이터프레임을 결합하는 merge와 비슷

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

Question: city, country, countrylanguage 테이블 3개를 JOIN 하기

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

 

 

Reference)

유튜브 '이수안컴퓨터연구소 MySQL 데이터베이스 한번에 끝내기'

'SQL' 카테고리의 다른 글

MySQL(3)  (0) 2023.05.21
MySQL(2)  (0) 2023.05.19
DDL, DML, DCL  (0) 2023.05.18

+ Recent posts