MySQL 기본

Gaeun·2022년 9월 26일
0
post-custom-banner

영상에서 사용하는 example database는 https://dev.mysql.com/doc/index-other.html 에서 world_database를 다운받았았으며 MySQL Workbench를 사용하여 실습하였다. MySQL Workbench를 사용할 때, 구문 입력 후 번개 모양 아이콘을 클릭하거나 Cmd + enter를 치면 된다!

SQL의 분류

1. DML(Data Manipulation Language)

  • 데이터 조작 언어
  • 데이터를 조작(선택, 삽입, 수정, 삭제)하는 데 사용
  • SQL문 중 SELECT, INSERT, UPDATE, DELETE가 이 구문에 해당
  • 가장 기본이 되는 명령셋(set)

2. DDL(Data Definition Language)

  • 데이터 정의 언어
  • 데이터베이스, 테이블, 뷰, 인덱스 등의 데이터베이스 개체를 생성/삭제/변경하는 역할
  • CREATE, DROP, ALTER 구문

3. DCL(Data Control Language)

  • 데이터 제어 언어
  • 사용자에게 어떤 권한을 부여하거나 빼앗을 때 주로 사용하는 구문
  • GRANT, REVOKE 구문

MySQL

  • 가장 널리 사용되고 있는 관계형 데이터베이스 관리 시스템(RDBMS: Relational DBMS)
  • 오픈소스이며 다중 사용자와 다중 스레드를 지원
    - 상업적으로 사용할 때는 상업용 라이센스 구입 필요
  • C언어, C++, JAVA, PHP 등 여러 프로그래밍 언어를 위한 다양한 API 제공
  • 유닉스, 리눅스, 윈도우 등 다양한 운영 체제에서 사용할 수 있음. 특히 PHP와 함께 웹 개발에 자주 사용

MySQL 구문

SHOW DATABASES

SHOW {DATABASES | SCHEMAS}
    [LIKE 'pattern' | WHERE expr]
  • 현재 서버에 어떤 DB가 있는지 보기

USE

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

SHOW TABLES

SHOW TABLES
  • 선택한 데이터베이스의 테이블 이름 보기

SHOW TABLE STATUS

  • 데이터베이스의 테이블 정보 조회

DESCRIBE (DESC)

DESC table_name
  • 특정 테이블에 무슨 열이 있는지, 열에 대한 정보 확인

LAB #1

  1. country 테이블 정보 보기
  2. countrylanguage 테이블 정보 보기

SELECT

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

SELECT *

SELECT * TABLE table_name
  • 테이블의 모든 필드 선택

SELECT 열 이름

SELECT column1, column2, ...
FROM table_name;
  • SELECT 키워드 다음에 필드 이름을 명시하면 해당 테이블의 특정 열만 가져올 수 있음
  • 여러 개의 열을 가져오고 싶을 때는 쉼표(,)로 구분
  • 열 이름의 순서는 출력하고 싶은 순서대로 배열 가능

SELECT FROM WHERE

기본적인 WEHRE절

SELECT column1, column2, ...
FROM table_name
WHERE condition;
  • 조회하는 결과에 특정한 조건으로 원하는 데이터만 보고 싶을 때 사용
  • 조건이 없을 경우 테이블의 크기가 클수록 찾는 시간과 노력이 증가

관계 연산자의 사용

  • OR 연산자
SELECT column1, column2, ...
FROM table_name
WHERE condition1 OR condition2 OR condition3 ...;
  • AND 연산자
SELECT column1, column2, ...
FROM table_name
WHERE condition1 AND condition2 AND condition3 ...;
  • NOT 연산자
SELECT column1, column2, ...
FROM table_name
WHERE NOT condition;
  • 조건 연산자 (=, <, >, <=, >=, <>, != 등)
  • 연산자의 조합으로 데이터를 효율적으로 추출
  • MySQL 함수 및 연산자

LAB#2

  1. 한국에 있는 도시들 보기

  2. 미국에 있는 도시들 보기

  3. 한국에 있는 도시들 중에 인구 수가 1,000,000이상인 도시 보기

BETWEEN

SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
  • 데이터가 숫자로 구성되어 있어 연속적인 값은 BETWEEN... AND 사용 가능

IN

SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1, value2, ...);
  • 이산적인(Discrete)값의 조건에서는 IN() 사용 가능

LAB#3

한국, 미국 일본의 도시들 보기

LIKE

SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE pattern;
  • 문자열의 내용 검색
  • 문자 뒤에 %: 무엇이든(%) 허용
  • 한 글자와 매치하기 위해서는 '_' 사용

Sub Query

  • 쿼리문 안에 또 쿼리문이 들어있는 것
  • 서브 쿼리의 결과가 둘 이상이 되면 에러 발생

서울이라는 이름이 포함된 도시의 국가코드의 도시

ANY

SELECT column_name(s)
FROM table_name
WHERE column_name operator ANY
  (SELECT column_name
  FROM table_name
  WHERE condition);
  • 서브쿼리의 여러 개의 결과 중 한 가지만 만족해도 가능
  • SOMEANY와 동일한 의미로 사용
  • ANY 구문은 IN과 동일한 의미

NewYork이라는 District를 가지는 도시의 인구 결과는 6가지

이 중 하나라도 초과하는 값을 가진다면 모두 출력함

ALL

SELECT column_name(s)
FROM table_name
WHERE column_name operator ALL
  (SELECT column_name
  FROM table_name
  WHERE condition);
  • 서브쿼리의 여러 개의 결과를 모두 만족시켜야 함

ORDER BY

SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;
  • 결과가 출력되는 순서를 조절하는 구문
  • 기본적으로 오름차순(Ascending) 정렬
  • 내림차순(Descending)으로 정렬
    - 열 이름 뒤에 DESC 적어줄 것
  • ASC(오름차순)는 default이므로 생략 가능
  • ORDER BY 구문을 혼합해 사용하는 구문도 가능

LAB#4

  1. 인구수로 내림차순하여 한국에 있는 도시 보기

  2. 국가 면적 크기로 내림차순하여 나라 보기

DISTINCT

SELECT DISTINCT column1, column2, ...
FROM table_name;
  • 중복된 것은 1개씩만 보여주면서 출력
  • 테이블의 크기가 클수록 효율적

LIMIT

SELECT column_name(s)
FROM table_name
WHERE condition
LIMIT number;
  • 출력 개수를 제한
  • 상위의 N개만 출력하는 LIMIT N구문
  • 서버의 처리량을 많이 사용해 서버의 전반적인 성능을 나쁘게하는 악성 쿼리문을 개선할 때 사용

GROUP BY

SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
ORDER BY column_name(s);
  • 그룹으로 묶어주는 역할
  • 집계 함수(Aggregate Function)를 함께 사용
    • AVG(): 평균
    • MIN(): 최솟값
    • MAX(): 최대값
    • COUNT(): 행의 개수
    • COUNT(DISTINCT): 중복 제외된 행의 개수
    • STDEV(): 표준 편차
    • VARIANCE(): 분산
  • 효율적인 데이터 그룹화(Grouping)
  • 읽기 좋게 하기 위해 별칭(Alias) 사용

LAB#5

1.도시는 몇 개인가?
2. 도시들의 평균 인구 수는?

HAVING

SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
HAVING condition
ORDER BY column_name(s);
  • WHERE과 비슷한 개념으로 조건 제한
  • 집계 함수에 대해서 조건 제한하는 편리한 개념
  • HAVING절은 반드시 GROUP BY절 다음에 나와야 함

ROLLUP

SELECT column1, column2, aggregate_function(column3)
FROM table_name
GROUP BY col1, col2 WITH ROLLUP;
  • 총합 또는 중간 합계가 필요할 경우 사용
  • GROUP BY절과 함께 WITH ROLLUP문 사용

JOIN

SELECT column_name(s)
FROM table1
JOIN table2
ON table1.column_name = table2.column_name;
  • JOIN은 데이터베이스 내의 여러 테이블에서 가져온 레코드를 조합하여 하나의 테이블이나 결과 집합으로 표현
    - INNER JOIN: Returns records that have matching values in both tables
    - LEFT JOIN: Returns all records from the left table, and the matched records from the right table
    - RIGHT JOIN: Returns all records from the right table, and the matched records from the left table
    - CROSS JOIN: Returns all records from both tables

LAB#6

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

참고 자료
이수안컴퓨터연구소 MySQL 데이터베이스 한번에 끝내기 SQL Full Tutorial Course using MySQL Database

profile
🌱 새싹 개발자의 고군분투 코딩 일기
post-custom-banner

0개의 댓글