[mysql] MySQL 알아보기

Tim·2022년 1월 23일
0

MySQL

목록 보기
2/2
post-thumbnail

1. MySQL

데이터베이스(DataBase)

  • 여러 사람에 의해 공유되어 사용될 목적으로 통합하여 관리되는 데이터의 집합.

테이블(Table)

  • 데이터를 행과 열로 스키마에 따라 저장할 수 있는 구조.
  • 테이블은 데이터가 아니라 데이터를 집어넣는 공간이다.

스키마(Schema)

  • 데이터베이스의 구조와 제약 조건에 관한 명세를 기술한 집합.

MySQL에서의 주석(Comment)

-- 한 줄 주석
# 한 줄 주석

2. DDL(Data Definition Language) - 데이터 정의어

데이터베이스를 정의하는 언어이며, 데이터를 생성, 수정, 삭제하는 등의 데이터 전체의 골격을 결정하는 역할을 하는 언어입니다.
⭐️ 쿼리문 실행은 ctrl + enter MacOS는 command + return

데이터베이스 생성

create database 테이블명;

데이터베이스 삭제

drop database 테이블명;

데이터베이스 사용

use 테이블명;

테이블 생성

create table 테이블명(
    컬럼명1 자료형 {제약조건},
    컬럼명2 자료형 {제약조건},
    ...
);

테이블 삭제

drop table 테이블명;

테이블 구조 확인

desc 테이블명;

테이블 컬럼 추가

alter table 테이블명 add (컬럼명 자료형 {제약조건});

테이블 컬럼 수정

alter table 테이블명 modify column (컬럼명 자료형 {제약조건});

테이블 컬럼 삭제

alter table 테이블명 drop 컬럼명;

자료형

1. 숫자 타입

  • 정수 : tinyint, smallint, mediumint, bigint, int
  • 실수(소수) : float, double, decimal(n, m)
    decimal(n,m) : 전체 n 자리 중에 소수점 아래로 m 자리
    ex) decimal(4,2) -----> -99.99 ~ 99.99

2. 문자 타입

  • 텍스트 : char, text, varchar
    char(20) -> 총 20byte 크기로 공간을 할당 -> 더 작은 데이터를 넣어도 공간을 소모 -> 낭비가 심하다
    varchar(20) -> 총 20byte의 가변형 크기를 할당 -> 더 작은 데이터를 넣으면 공간 축소 (~65535byte)
  • 바이너리 : binary, varbinary
  • 열거 : enum(값1, 값2, ...) -> 정해놓은 값들을 제외하고는 데이터가 들어올 수 없는 타입

3. 날짜와 시간 타입

  • 날짜 : date
  • 날짜와 시간 : datetime, timestamp(1970년 1월 1일 0시 0분 0초 ~ )

제약조건

데이터의 무결성을 지키기 위해 데이터를 입력받을 때 실행하는 검사 규칙.

  • not null - 비어있을 수 없음(NULL을 저장할 수 없음)
  • unique - 고유한 값(중복된 값을 저장할 수 없음, NULL은 허용)
  • default - 기본값을 설정
  • primary key - 고유하면서 비어있을 수 없는 값을 설정, unique와 not null 제약조건을 동시에 가짐, 테이블에 오직 하나의 필드에만 적용
  • auto_increment - 자동으로 숫자가 하나씩 증가되며 추가, 중복된 값이 저장되지 않음, pk 여야만 부여 가능
  • foreign key - 다른 테이블과 연결해주는 역할

3. DML(Data Manipulation Language) - 데이터 조작어

데이터들을 추가, 수정, 삭제, 조회하는 명령어들.
INSERT, UPDATE, DELETE, SELECT

데이터 추가(INSERT)

insert into 테이블명 {(컬럼1, 컬럼2, ...)} values(값1, 값2, ...);
  • 컬럼들을 써준 경우에는 뒤에 올 값으로 그 컬럼들에 들어갈 값들을 써줍니다. 컬럼의 개수와 자료형에 알맞게 순서대로 써주어야 합니다.
  • 컬럼을 생략한 경우에는 모든 컬럼에 값을 넣어주겠다는 뜻입니다. 따라서 모든 컬럼에 들어갈 값들을 컬럼 순서대로 전부 작성해줍니다.

데이터 수정(UPDATE)

update 테이블명 set 컬럼명 = 새로운값 where 조건절;
  • 조건이 없이 모든 행을 수정해야 한다면 조건절은 생략 가능.
  • 데이터 수정이 안될 때(safe 모드 해제)
    edit - preferences - SQL Editor - 맨 아래의 Safe Updates 체크 해제

데이터 삭제(DELETE)

delete from 테이블명 where 조건절;

데이터 조회(SELECT)

select 컬럼1, 컬럼2, ... from 테이블명 where 조건절;
  • select로 간단하게 구조 확인하기

    select * from car;
    select * from tb_user;
  • 관계연산자(>, <, =)

    userpoint가 1000보다 큰 username 검색
    select username from tb_user where userpoint > 1000;
    
    userpoint가 1000보다 작은 username 검색
    select username from tb_user where userpoint < 1000;
    
    userpoint가 1000과 같은 username 검색
    select username from tb_user where userpoint = 1000;
  • 논리연산자(and, or, not)

    userid가 apple 이고 userpw가 1111인 username 검색
    select username from tb_user where userid='apple' and userpw='1111';
    ㅤ
    userid가 apple 이거나 userpw가 1111인 username 검색
    select username from tb_user where userid='apple' or userpw='1111';
    ㅤ
    userid가 apple 이 아닌 username 검색
    select username from tb_user where not userid='apple';
  • 컬럼 between A and B : 컬럼의 값이 A 이상 B 이하

    userpoint가 500 이상 1500이하인 userid, username, userpoint 검색
    select userid, username, userpoint from tb_user where userpoint between 500 and 1500;
  • null의 값 비교는 is null, is not null 로 비교한다.

    useremail이 null값인 username 검색
    select username from tb_user where useremail is null;
  • 컬럼 in (값1, 값2, ...) : 컬럼의 값이 값1, 값2, ... 에 있으면 참

    userid의 id가 apple 또는 banana 또는 cherry인 username 검색
    select username from tb_user where userid in ('apple', 'banana', 'cherry');
  • like('검색할 특정문자열') : 특정 문자가 포함되어 있는 데이터를 검색한다.
    '%a%' : a 포함 데이터 검색
    '%a' : a 로 끝나는 데이터 검색
    'a%' : a 로 시작하는 데이터 검색
    '_a' : a로 끝나는 두글자 데이터 검색

    userid에 'a'가 들어가는 모든 userid, username 검색
    select userid, username from tb_user where userid like('%a%');
  • order by 컬럼명 {정렬기준} : 컬럼을 기준으로 정렬 (정렬기준 생략 시 오름차순) - 정렬기준에 DESC를 작성 시 내림차순

    userid 오름차순으로 정렬
    select * from tb_user order by userid;
    ㅤ
    userid 내름차순으로 정렬
    select * from tb_user order by userid desc;
  • 그룹함수(집계함수) : 여러 행의 데이터들을 종합적으로 확인 후 결과를 도출하는 함수 - sum(), avg, max, min, count()

    userpoint값의 합 조회
    select sum(userpoint) from tb_user;
    
    usergender가 '남자'인 userpoint값의 합 조회
    select sum(userpoint) from tb_user where usergender='남자';
  • group by 컬럼1, 컬럼2, ... : 컬럼을 기준으로 그룹을 짓고 쿼리문 수행, 그룹함수가 적용될 파트를 나누는 문장.

    usergender로 그룹을 나누고 usergender와 userpoint의 합을 조회
    select usergender, sum(userpoint) from tb_user group by usergender;
  • having 조건절 : 그룹에 대한 조건절

    usergender로 그룹을 나누고 그룹별 포인트 총 합을 구한 후 포인트 총 합이 2000보다 작거나 같은 그룹의 결과만 조회
    select usergender, sum(userpoint) from tb_user group by usergender having sum(userpoint) <= 2000;
  • 별칭(alias) : 컬럼명 별칭, 컬럼명 as 별칭 / from 테이블명 별칭

    컬럼명 별칭
    select userid 아이디, zipcode as 우편번호, address1 "도로명 주소", address2 as "상세 주소" from tb_user;
    
    테이블명 별칭
    select userid from tb_user u;
  • limit : 갯수제한

    처음부터 2개 조회
    select * from tb_user limit 2;
    
    1번째(2행)부터 2개 조회
    select * from tb_user limit 1, 2;
  • join : 데이터베이스 내의 여러 테이블에서 가져온 레코드를 조합해서 하나의 테이블이나 결과 집합으로 표현.

    inner join(내부 조인) : 조건이 일치하는 것만 결과로 생성(반환).

    예시 : tb_profile의 useridx와 tb_user의 useridx가 같은 조건인 
    username, userage, userbirthday, userblood로 값 반환.
     ㅤ
    select 
       u.username,
       p.userage,
       p.userbirthday,
       p.userblood
    from tb_profile p 
    join tb_user u on p.useridx = u.useridx;

    outer join(외부 조인) : 조건이 일치하지 않더라도 한쪽 테이블의 데이터는 모두 결과로 생성(반환).
    (모두 데이터로 사용할 테이블의 방향을 적어준다.)

    예시 : tb_profile의 useridx와 tb_user의 useridx가 
    같은 조건인 경우와 조건이 일치하지 않는 경우 
    모두 username, userage, userbirthday, userblood로 값 반환.
     ㅤ
    select 
       u.username, 
       p.userage,
       p.userbirthday,
       p.userblood
    from tb_profile p 
    right outer join tb_user u on p.useridx = u.useridx;
profile
HTML5, CSS3, JavaScript, Typescript, React 프론트엔드 개발자입니다.

0개의 댓글