ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 데이터베이스(MySQL)
    백엔드 2022. 8. 30. 01:23

    해당 글은 EFUB 세미나를 듣고 작성되었습니다. 

     

    관계 데이터 모델 : 개념적 구조를 논리적 구조로 표현하는 논리적 데이터 모델

     

    1. 릴레이션(relation) = Table, Entity에  대응

    - 하나의 개체에 관한 데이터를 2차원의 테이블 구조로 저장

    - 관계형 데이터베이스에서는 테이블과 같음

    - 논리적 데이터 모델링에서는 Entity와 같음

    ex) 학생

     

    2. 속성(attribute) = 열, 필드

    - 릴레이션의 열

    - Entity를 구성하는 논리적 단위

    - 파일 구조상에서는 데이터 필드를 의미

    ex) 학번, 이름, 학년...

     

    3. 튜플(tuple) = 행

    - 릴레이션의 행

    - 파일 구조 상에서는 레코드를 의미

    ex) (86032, 장보고, 4, 174, ED)

     

    4. 도메인(domain)

    - 하나의 열이 가질 수 있는 모든 값의 집합

    - 속성 값을 입력 및 수정할 때 적합성 판단의 기준이 됨

    ex) gender: 여성/남성, age: 1~100

     

    5. 키(key)

    -릴레이션 내에서 튜플을 유일하게 구별하는 속성 또는 속성들의 집합

     키의 종류: 기본키, 후보키, 외래키, 대체키, 슈퍼키

    - 기본키(PK, primary key)
       - 튜플을 식별하는 기준으로 사용하는 키
       - 중복X NOT NULL

      
    - 외래키(FK, foreign key)
       - 참조하는 테이블과 참조되는 테이블의 관계를 나타내는 속성
       - 관련있는 테이블들 사이에서 두 테이블을 연결해주는 다리 역할
       - 참조되는 테이블의 기본키가 참조하는 테이블의 외래키가 됨
     

     

    개념적 데이터 모델링

    개념적 데이터 모델링

     

     

    논리적 데이터 모델링

    논리적 데이터 모델링
    스키마
    인스턴스

     

     

     

    1측: 1개 / n측: n개 - 1명의 교수가 n개의 과목을 맡는다.
    수강 릴레이션에서 오른쪽처럼 쓰는 걸 권장한다.

     

    MySQL

    1. 자연어에 가까운 구문

    2. 비절차적

    SQL 구성

    1. DDL 테이블고 같은 데이터 구조를 정의하는데 사용
    - 명령어: CREATE(생성) ALTER(변경) DROP(삭제) RENAME(이름 변경) TRUNCATE(초기화)

    2. DML 데이터베이스 테이블에 들어있는 데이터와 관련해 사용
    - 명령어: SELECT(조회) INSERT(삽입) UPDATE(변경) DELETE(삭제)

    3. DCL 데이터베이스에 접근하거나 객체들의 권한과 관련해 사용
    -명령어: GRANT(수행권한 부여) REVOKE(수행권한 박탈, 회수)

     

    데이터 타입

    cf. TINYINT, 자바에서 boolean 타입

         BIGINT, 자바에서 long 타입

         VARCHAR 가변형 문자열: 데이터 사이즈에 맞게 메모리 차지

         DATE 문자열로 날짜 양식에 맞춰 작성

     

     

    명령어

    이화 데이터베이스를 만들고, 그 안에 학과와 관련된 데이터를 담을 것이다.

     

    CREATE DATABASE == CREATE SCHEMA

    SHOW SCHEMAS : 모든 데이터베이스 출력

     

    데이터 베이스를 만들고 나서, 안에 테이블이나 데이터를 넣어야 한다.

    그 전에, 어떤 데이터 베이스를 쓸지 작성해야 한다. USE

    CREATE TABLE 테이블 생성 : 테이블은 속성이 있기때문에 () 안에 써줘야 한다.

    AUTO_INCREMENT 기본키인 고유번호가 없을 때, 들어온 순서대로 숫자를 매겨준다.

    PRIMARY KEY 기본키 설정

     

    CREATE TABLE 테이블명 (

           속성 이름 데이터타입 널허용여부 특이사항

    );

     

    ALTER TABLE 테이블 열 수정

     

    - 테이블에 필드(열) 추가

    ALTER TABLE [table name] ADD [column name][datatype];

     

    - 테이블 필드(열) 타입 변경

    ALTER TABLE [table name] MODIFY COLUMN [column name][datatype];

     

    - 테이블 필드(열) 삭제

    ALTER TABLE [table name] DROP [column name];

     

     

    INSERT INTO 테이블명( 값을 넣어줄 속성 이름들)

    VALUES

    ( 속성에 들어갈 값들을 순서대로 작성)

    - 테이블에 레코드(행) 추가

    INSERT INTO [table name] VALUES (value1, value2, value3…);

     

    - 테이블의 레코드(행) 선택

    SELECT * FROM [table]

     

     

     

    UPDATE 테이블명

    SET 속성이름: 수정할 값

    WHERE 바꾸려는 데이터의 조건

    - 테이블의 레코드(행) 내용 수정

    UPDATE [table] SET [column]=[value] WHERE [condition];

     

     

     

    DELETE FROM 테이블명

    WHERE 삭제하려는 데이터 조건

    - 테이블의 레코드(행) 삭제

    DELETE FROM [table] WHERE [condition];

     

    다중 테이블 연산

     

     

     

     

    AND 조건: WHERE에 조건 추가가 더 필요할 때 사용

    SELECT DISTINCT 중복 제거

    select - 추출할 데이터 항목을 기술한다. 

    from - 어떤 데이터 오브젝트에서 무슨 테이블의 데이터를 조회할 것인지를 기술한다.

    where - 대상이 되는 테이블에서 가져올 데이터에 대해 조건을 부여하여 데이터를 조회하는 경우에 기술한다.

    group by - 가져올 데이터를 그룹으로 조합하여 그룹에 대해서 데이터를 생성한다.

    having - group by 절에서 그룹으로 구성한 내용들 중 조건을 부여하여 조건에 해당하는 그룹의 데이터를생성한다.

    union -  동일한 구성의 sql문장을 작성하여 통합하거나 제외시키는 일을 수행한다.

    order by - 가져온 데이터를 주어진 칼럼 값에 의해 오름차순이나 내림차순으로 정렬한다.

     

    select문장의 처리순서

    from 절 > where 절 > group by절 > select절 > order by절
    1. user 테이블로부터 age가 20세 이상이고 addr이 서울인 사람의 이름을 검색하는데
    중복된 데이터는 하나만 검색한다.
    
        mysql>select distinct name from user where age>=20 and addr='서울';
        
        
        
    2. user 테이블로부터 milage가 3000이상이고 sex가 'f'인 사람의 name,tele,addr,age를 검색하여
    나이의 내림차순으로 정렬한다.
    
     mysql>select name,tele,addr,age from user where milage>=3000 and sex='f' order by age desc;
     
     
     
    3. user 테이블로부터 성별로 milage의 최대값과 최소값, 평균값을 '최고마일리지','최소마일리지',
     '평균마일리지'라는 이름으로 검색한다.
     
     mysql>select max(milage) as '최고마일리지',min(milage) as '최소마일리지',
     avg(milage) as '평균마일리지',성별 from user group by sex;
     
     
     
    4. user 테이블로부터 이름이 '성유리'인 사람의 국어, 수학, 영어의 평균값을 검색
    
        mysql>select name,(국어+수학+영어)/3 as 평균값 from user where 이름='성유리';

    ORDER BY 정렬기준

    GROUP BY 그룹화(중복 제거): department테이블에서 department_id가 1인 교수님이 세 분 계신다면, 하나로 퉁쳐진다.

    즉, 오유란 교수님만 남게 된다.

    중첩 질의: 쿼리 안에 또다른 쿼리를 작성한다.

    SELECT 

    FROM 
    WHERE
            (  SELECT
                FROM
                WHERE )

    department테이블 안에서 아산공학관이라는 조건을 만족하는 department_id를 찾아서 바깥으로 반환해주면,
    바깥 쿼리는 professor테이블 안에서 조건을 만족하는 name과 email을 반환해준다.

    cf. 쿼리란, 웹 서버에 특정한 정보를 보여달라는 웹 클라이언트 요청에 의한 처리를 말한다.

     

    테이블의 병합

    SELECT 출력하고 싶은 데이터를 모두 적는다.

    테이블명. 데이터별칭 AS 모든 데이터

     

    INNER JOIN 두 테이블 간에 연결관계가 없는 데이터를 빼고 보여준다.

    ex) 김갹갹 교수님, 와플대학사과잼학과(id 8번)

    AS 별칭을 붙여준다.

    FROM 테이블1 INNER JOIN 테이블2 : 테이블 병합

    ON 테이블1과 테이블 2가 겹치는 데이터 : 두 데이터를 하나로 보겠다는 말이다.(외래키)

    연결되는 데이터가 없다면 NULL로 표시한다.

     

    LEFT JOIN       UNION        RIGHT JOIN : 테이블 두개를 병합하여 모두 출력한다.

     

     

     

     

    실습

    mySQL 까는 방법 참조) https://m.blog.naver.com/bjh7007/221829548634

     

Designed by Tistory.