ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (5)MySQL_기본문법
    MySQL 2023. 3. 23. 16:30
    728x90
    • 시작하기에 앞서 내용은 전에 sql 기본문법의 내용과 연결이 된다.
    • 먼저 member table의 내용

     

    (4)MySQL_기본문법

    member Table 조건절 + 정렬 select 필드명1, 필드명2 ... from 테이블명 where 조건절 order by 정렬할 필드명 [asc, desc]; 성별이 여성인 회원을 point가 많은 순으로 정렬(단, 포인트가 같을 경우 먼저 가입한

    jm-rograming.tistory.com

    • 프로필 테이블 생성

    create table profile(
    userid varchar(20) not null,
        height double,
        weight double,
        blood varchar(10),
        mbti varchar(10),
        foreign key(userid) references member(userid)
    );

    • profile 테이블 안에 값 넣기

    insert into profile values('apple',163,56,'AB','ISTP');
    insert into profile values('banana',165,55,'A','ISFP');
    insert into profile values('grapes',173,66,'B','ISTP');
    insert into profile values('melon',153,56,'O','ENTP');
    insert into profile values('orange',159,46,'AB','ENFP');

    JOIN

    • select 필드명1, 필드명2 ... from 테이블1[inner, left, right] join 테이블2 on 테이블1.연결할 필드 = 테이블2.연결할필드;

    inner join

    • 조인하는 테이블의 on 절의 조건이 일치하는 결과만 출력
    • join, inner join, cross join 모두 같은 의미로 사용됨

    select m.userid, m.username, m.hp, p.height, p.weight, p.mbti
    from member m inner join profile p on m.userid = p.userid;

    left/right outer join

    • 두 테이블이 조인 될 때 왼쪽/오른쪽을 기준으로 했느냐에 따라 기준 테이블의 것을 모두 출력
    • outer join은 조인하늩 테이블의 on 절의 조건 중 한쪽의 데이테를 모두 가져옴
    • left outer join, right outer join, full outer join 이렇게 3가지가 있음
    • full outer join은 거의 사용하지 않음

    select m.userid, m.username, m.hp, p.height, p.weight, p.mbti
    from member m left outer join profile p on m.userid = p.userid;

    select m.userid, m.username, m.hp, p.height, p.weight, p.mbti
    from member m right outer join profile p on m.userid = p.userid;

    데이터 정규화

    • 데이터 베이스를 설계할 때 중복을 최소화하는 것
    • 크고 조직화 되어 있지 않은 테이블과 관계들을 조직화된 테이블과 관계들로 나누는 것

    데이터 정규화가 필요한 경우

    • 데이터를 갱신, 삽입, 삭제하는 등 테이블을 수정할 때 원하지 않게 데이터가 삭제되거나 가공되는 일이 발생하는데 이를 '이상 현상'이라고 함
    • 이상 현상이 발생하는 경우 데이터 정규화가 반드시 필요

    정규화의 종류

    1. 1NF(제 1정규화)

    • 테이블 안의 모든 값들은 단일 값이여야 함

    2. 2NF(제 2정규화)

    • 1NF를 만족하면서, 완전 함수 종속성을 가진 관계들로만 테이블을 생성하는 것
    • 종속성들 중 종속 관계에 있는 열들끼리 테이블을 구분해 주는 것
    • ✔ 함수 종속성
    • x값에 따라서 y값이 결정되는 경우

    3. 3NF(제 3정규화)

    • 2NF를 만족하면서, 기본키에 대해 이행적 함수 종속이 되지 않는 것을 의미

    비정규화

    • 정규형에 일치하게 되어 있는 테이블을 정규형을 지키지 않는 테이블로 만드는 것
    • 테이블을 조회하는 용도로 사용하거나, 너무 데이터가 많이 나뉘어 성능이 저하된다면 비정규화를 하여 테이블을 다루는 것이 더 효율적일 수 있음
    • 어떤 작업을 수행하는지, 어떤 데이터를 사용하는지에 따라 적절한 정규화를 하는 것이 좋음 

    정규화 작업을 위한 테이블 생성

    create table tel(
    idx int auto_increment primary key, # mysql에선 aoto_increment를 사용하게 되면 기본키로 설정해주어야 한다.
        name varchar(20) not null,
        hp varchar(20) not null,
        job varchar(20),
        regdata datetime default now()
    );

     

    insert into tel(name,hp,job) values ('김사과','010-1111-1111','학생');
    insert into tel(idx,name,hp,job) values (2,'하나','010-2111-2111','학생');
    insert into tel(idx,name,hp,job) values (10,'십','010-3111-2311','학생');

    insert into tel(idx,name,hp,job) values (2,'둘','010-2211-2121','학생'); # 인덱스 값이 2로 같아 인서트가 안됨

    insert into tel(name,hp,job) values ('둘','010-2111-2111','학생');

    유니온

    • 합집합을 나타내는 연산자로, 중복된 값을 제거함
    • 서로 같은 종류의 테이블(컬럼이 같아야 함)에서만 적용이 가능
    • select 컬럼명1, 컬럼명2.. 테이블1 union select 컬럼명1, 컬럼명2.. from 테이블

    create table product(
    code varchar(6) not null,
        name varchar(50) not null,
        detail varchar(1000),
        price int default 0,
        regdate datetime default now()
    );

     

    insert into product values('100000','아이폰14','예뻐요',1500000,now());
    insert into product values('100001','갤럭시23','좋아요',1300000,now());
    insert into product values('100002','맥북에어','가벼워요',1400000,now());
    insert into product values('100003','z플립4','잘접혀요',1800000,now());
    insert into product values('100004','LG공기청정기','성능좋아요',600000,now());

    create table product_new(
    code varchar(6) not null,
        name varchar(50) not null,
        detail varchar(1000),
        price int default 0,
        regdate datetime default now()
    );

     

    insert into product_new values('200000','엘지그램','가벼워요',1500000,now());
    insert into product_new values('200001','삼성모니터','잘보여요',500000,now());
    insert into product_new values('100001','갤럭시23','좋아요',1300000,now());

    날짜는 중복되지 않아 출력이 됨

    select code, name, price, regdate from product 
    union
    select code, name, price, regdate from product_new;

    unionall

    • 합집합을 나타내는 연산자로, 중복된 값을 제거하지 않음

    select code, name, price from product 
    union all
    select code, name, price from product_new;

    'MySQL' 카테고리의 다른 글

    (7)MySQL_기본문법  (1) 2023.03.24
    (6)MySQL_기본문법  (0) 2023.03.23
    (4)MySQL_기본문법  (0) 2023.03.21
    (3)MySQL_기본문법  (0) 2023.03.21
    (2)MySQL_기본문법  (0) 2023.03.21

    댓글

Designed by Tistory.