-
데이터베이스(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)
- 참조하는 테이블과 참조되는 테이블의 관계를 나타내는 속성
- 관련있는 테이블들 사이에서 두 테이블을 연결해주는 다리 역할
- 참조되는 테이블의 기본키가 참조하는 테이블의 외래키가 됨
개념적 데이터 모델링
논리적 데이터 모델링
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
'백엔드' 카테고리의 다른 글
[Django] JWT TOKEN(access token, refresh token, crfs, cors error) (0) 2023.05.04 Modeling(데이터베이스 모델링) (0) 2023.04.02 [Git] 커밋 기록 삭제 및 복구 (0) 2023.03.26 django ch1 - ch4 (0) 2023.03.22 스프링 부트와 AWS로 혼자 구현하는 웹 서비스(-78p) (1) 2023.01.06