[MySQL] MySQL 정리 1

4 분 소요

MySQL 소개

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

SQL의 분류

DML(Data Manipulation Language)

  • 데이터 조작 언어
  • 데이터를 조작(선택, 삽입, 수정, 삭제)하는 데 사용되는 언어
  • DML 구문이 사용되는 대상은 테이블의 행
  • DML을 사용하기 위해서는 꼭 그 이전에 테이블이 정의되어 있어야 함
  • SQL 문 중 SELECT, INSERT, UPDATE, DELETE가 이 구문에 해당
  • 트랜잭션(Transaction)이 발생하는 SQL도 이 DML에 속함
    • 테이블의 데이터를 변경(입력, 수정, 삭제)할 때 실제 테이블에 완전히 적용하지 않고, 임시로 적용시키는것
    • 취소 가능

DDL(Data Definition Language)

  • 데이터 정의 언어
  • 데이터베이스, 테이블, 뷰, 인덱스 등의 데이터베이스 개체를 생성 / 삭제 / 변경하는 역할
  • Create, Drop, ALTER 구문
  • DDL은 트랜잭션 발생시키지 않음
  • ROLLBACK이나 COMMIT 사용 불가
  • DDL문은 실행 즉시 MySQL에 적용

DCL(Data Control Language)

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

MySQL 구문

  • SHOW DATABASES;

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

  • USE database_name;

    사용할 데이터 베이스 지정

    지정해 놓은 후 특별히 다시 USE문을 사용하지 않거나 다른 DB를 사용하겠다고 명시하지 않는 이상 모든 SQL문은 지정 DB에서 수행

    Workbench에서 직접 선택해 사용 가능 [Navigator] → [SCHEMAS] → 데이터베이스 선택

  • SHOW TABLES

    데이터 베이스의 테이블 이름 보기

  • SHOW TABLE STATUS

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

  • DESCRIBE (DESC) table_name;

    테이블에 무슨 열이 있는지 확인

일반적인 형식

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 [column_name] WHERE [table_name]

  • 요구하는 데이터를 가져오는 구문 (일반적으로 가장 많이 사용되는 구문) → 원하는 정보 추출

  • 여러 개의 열을 가져오고 싶을 때는 콤마로 구분 (전체 열 출력은 *)

  • 열 이름의 순서를 출력하고 싶은 순서대로 배열 가능

    SELECT * FROM city;
    SELECT Name, CountryCode FROM city;
    
  • DISTINCT : 중복된 것은 1개씩만 보여주면서 출력, 테이블의 크기가 클수록 효율적

    SELECT DISTINCT CountryCode FROM city;
    

WHERE

  • 조회하는 결과에 특정한 조건으로 원하는 데이터만 보고 싶을 때 사용

  • 조건이 없을 경우 테이블의 크기가 클수록 찾는 시간과 노력이 증가

  • 관계 연산자 사용 가능 → 연산자의 조합으로 데이터를 효율적으로 추출

    • OR 연산자, AND 연산자, 조건 연산자(=, <, >, <=, >=, <>, !=), 관계 연산자(NOT, AND, OR)
  • BETWEEN : 데이터가 숫자로 구성되어 있어 연속적인 값은 BETWEEN ... AND 사용 가능

    SELECT * FROM city WHERE Population BETWEEN 7000000 AND 8000000;
    
  • IN : 이산적인 값의 조건에서는 IN() 사용 가능

    SELECT * FROM city WHERE Name IN('Seoul', 'New York', 'Tokyo');
    
  • LIKE : 문자열의 내용 검색 → % 무엇이든 매치 / _ 한 글자 매치

    SELECT * FROM city WHERE CountryCode LIKE 'KO_';
    SELECT * FROM city WHERE Name LIKE 'Seo%';
    SELECT * FROM city WHERE Name LIKE '%ork';
    
  • 서브 쿼리 : 쿼리문 안에 또 쿼리문이 들어 있는 것, 서브 쿼리의 결과가 둘 이상이면 에러 발생

    SELECT * FROM city WHERE CountryCode = (SELECT CountryCode
                                           	FROM city
                                           	WHERE Name = 'Seoul');
    # CountryCode KOR 결과 출력
    
  • ANY : 서브쿼리의 여러 개의 결과 중 한가지만 만족해도 가능 (SOMEANY는 동일한 의미로 사용 / =ANY 구문은 IN과 동일한 의미)

    SELECT * FROM city WHERE Population > ANY (SELECT Population
                                               From city
                                               WHERE District = 'New York');
    # New York 가장 인구수가 적은 지역보다 인구수가 많으면 모두 출력 
    
  • ALL : 서브쿼리의 여러 개의 결과를 모두 만족 시켜야 함

    SELECT * FROM city WHERE Population > ALL (SELECT Population
                                               FROM city
                                               WHERE District = 'New York');
    # New York 가장 인구수가 많은 지역보다 인구수가 많으면 모두 출력 
    

ORDER BY

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

  • 기본적으로 오름차순 정렬, 내림차순으로 정력할 경우 열 이름 뒤에 DESC, 혼합 가능

    SELECT * FROM city ORDER BY CountryCode, Population DESC;
    # CountryCode 오름차순, Population 내림차순으로 정렬되어 출력
    

LIMIT

  • 출력 개수를 제한 → 상위의 N개만 출력하는 LIMIT N 구문

    SELECT * FROM city ORDER BY Population DESC LIMIT 10;
    

GROUP BY

  • 그룹으로 묶어주는 역할

  • 집계함수(Aggregate Function)를 함께 사용

    • AVG() : 평균
    • MIN() : 최소값
    • MAX() : 최대값
    • COUNT() : 행의 개수
    • COUNT(DISTINCT) : 중복 제외된 행의 개수
    • STDEV() : 표준 편차
    • VARIANCE() : 분산
  • 효율적인 그룹화가 가능하고 읽기 좋게 하기 위해 별칭(Alias) 사용

    SELECT CountryCode, Max(Population) AS 'Popilation' 
    	FROM city 
    	GROUP BY CountryCode;
    # CountryCode 같은 도시  가장  인구 수를 출력
      
    SELCT COUNT(*) FROM city;
    # city table 전체  개수
    
  • WITH ROLLUP : 총합 또는 중간 합계가 필요할 경우 사용

    SELECT CountryCode, Name, SUM(Population)
    	FROM city
    	GROUP BY CountryCode, Name WITH ROLLUP;
    # CountryCode   Name 인구수의 합계가 구해지고  CountryCode 중간 합계 출력
    

    ROLLUP

HAVING

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

  • 집계 함수(그룹)에 대해서 조건 제한하는 편리한 개념

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

    SELECT CountryCode, MAX(Population)
    	FROM city
    	GROUP BY CountryCode
      HAVING MAX(Population) > 8000000;
    # CountryCode 묶인 그룹중에서 인구수가 8,000,000 이상일 경우 출력
    

JOIN

  • 데이터베이스 내의 여러 테이블에서 가져온 레코드를 조합하여 하나의 테이블이나 결과 집합으로 표현

    SELECT * 
    	FROM city 
    	JOIN country ON city.CountryCode = country.Code
    	JOIN countrylanguage ON city.CountryCode = countrylanguage.CountryCode;
    # 세개의 테이블이 JOIN 형태
    

태그:

카테고리:

업데이트:

댓글남기기