나를 기록하다
article thumbnail
Published 2024. 3. 20. 00:10
[TIL-47/240319] MySQL, SELECT TIL
반응형

데이터베이스(Database)

데이터베이스란?

데이터베이스

  • 여러 사람이 공유하고 사용할 목적으로 통합 관리되는 정보의 집합
  • 논리적으로 연관된 하나 이상의 자료의 모음
  • 데이터들을 고도로 구조화 함으로써 검색과 갱신의 효율화를 꾀한 것
  • 몇 개의 자료 파일을 조직적으로 통합하여 중복을 없애고 자료를 구조화 시킨 자료의 집합체

DB란 무엇일까

  • 통합된 데이터(Integrated Data)
    • 각자 사용하던 데이터를 모아서 중복을 최소화하고 데이터 불일치를 제거
  • 저장된 데이터(Stored Data)
    • 문서 형태로 보관되는 것이 아니라 저장장치(디스크, 테이프 등 컴퓨터 저장장치)에 저장됨
  • 운영 데이터(Operational Data)
    • 조직의 목적을 위해서 사용되는 데이터를 의미
  • 공용 데이터(Shared Data)
    • 여러 사람이 각각 다른 목적의 업무를 위해서 공통으로 사용되는 데이터를 의미

즉, 조직 또는 개인이 필요에 의해 논리적으로 연관된 데이터를 모아 일정한 형태로 저장한 것!


DBMS(Database Management System)

데이터베이스 관리 프로그램

DBMS

  • 데이터베이스 조작 인터페이스 제공
  • 효율적인 데이터 관리 기능 제공
  • 데이터베이스 구축 기능 제공
  • 데이터 복구, 사용자 권한 부여, 유집수 기능 제공

관계형 데이터베이스(Relation DB)

관계형 데이터 베이스란?

관계형 데이터베이스

  • 테이블(Table) 기반의 Database
  • 테이블(Table)
    • 실제 데이터가 저장되는 곳
    • 행과 열의 2차원 구조를 가진 데이터 저장 장소
  • 데이터 테이블 단위로 관리
    • 하나의 데이터(record)는 여러 속성(Attribute)을 가짐
    • 데이터 중복 최소화
    • 테이블 간의 관계를 이용하여 필요한 데이터 검색 가능

 

관계형 데이터베이스 구조

(예시) 학생 릴레이션

  • 스키마(Schema): 데이터베이스에서 자료의 구조, 표현방법, 관계 등 전반적인 명세를 기술한 것
  • 테이블(Table): 행과 열의 모델을 사용해 조직된 데이터 요소들의 집합
  • 열(Column) 또는 속성(Attribute): 고유한 데이터 형식(자료형)이 지정됨
  • 행(Row) 또는 레코드(Record): 실제 데이터가 저장되는 형태
  • 기본 키(Primary Key): 각 행의 고유 값

관계형 데이터베이스 관리 시스템(Relational DBMS)

DBMS의 종류

 


SQL(Structured Query Language)

SQL의 동작

  • RDBMS에서 데이터 조작과 데이터 정의를 위해 사용하는 언어
    • 데이터 조회, 삽입, 삭제, 수정
    • DB Object 생성, 변경, 삭제
    • DB 사용자 생성, 삭제, 권한 제어
  • 표준 SQL은 모든 DBMS에서 사용 가능

표준 SQL

SQL 특징

  • 배우고 사용하기 쉬움
  • 대소문자 구별 X(데이터의 대소문자는 구분)
  • 절차적 언어 X 선언적 언어 O
  • DBMS에 종속적이지 X

 

DML(Data Manipulation Language): 데이터 조작 언어

  • DB에서 데이터를 조작하거나 조회할 때 사용
  • 테이블의 레코드를 CRUD(Create, Read, Update, Delete)

DDL(Data Definition Language): 데이터 정의 언어

  • DB 객체(table, view, user, index 등)의 구조를 정의

DCL(Data Control Language): 데이터 제어 언어

  • Database, Table 접근 권한이나 CRUD 권한 정의
  • 특정 사용자에게 테이블의 검색 권한 부여/금지

TCL(Transaction Control Language): 트랜잭션 제어 언어

  • 트랜잭션 단위로 실행한 명령문을 적용하거나 취소

SQL 명령어 종류

 

SQL 실습

USE 테이블명;

-- 한 줄 주석입니다.
# 한 줄 주석입니다.
/*
	여러 줄 주석입니다.
    Ctrl + Enter : 해당 줄 실행
    Ctrl + B : 자동정렬
    SQL도 마지막엔 ;을 찍어서 문장을 마무리 해야함.
*/

# Q1. 모든 사원 정보 검색
SELECT * FROM emp;
# Q2-1. 사원이 근무하는 부서 번호
SELECT deptno FROM emp;
# Q2-2. 사원이 근무하는 부서 번호(중복제거)
SELECT DISTINCT deptno FROM emp;
# Q3. 사원의 이름, 부서번호, 업무 조회
SELECT ename as 이름, deptno as 부서번호, job as 업무 FROM emp;
# Q4. 사원의 이름, 사번, 급여*12 (연봉), 업무 조회
SELECT ename as 이름, empno as 사번, sal*12 as 연봉, job as 업무 FROM emp;
# Q5. 사원의 이름, 사번, 커미션, 급여, 커미션 포함 급여 조회
SELECT ename as 이름, empno as 사번, comm as 커미션, sal as 급여, sal + comm as `커미션 포함 급여` FROM emp;
# Q6. 모든 사원의 사번, 이름, 급여, 급여 등급  조회 (5000 이상 -> 높은연봉, 2000 이상 -> 평균 연봉, 그 외 -> 낮은연봉)
SELECT e.empno AS 사번, e.ename AS 이름, e.sal AS 급여,
    CASE 
        WHEN e.sal >= sg.hisal THEN '높은연봉'
        WHEN e.sal >= sg.losal THEN '평균 연봉'
        ELSE '낮은연봉'
    END AS 급여등급
FROM emp e
JOIN salgrade sg ON e.sal BETWEEN sg.losal AND sg.hisal;
# Q7. 부서 번호가 30인 사원중 급여가 1500 이상인 사원의 이름, 급여, 부서번호 조회
SELECT ename as 이름, sal as 급여, deptno as 부서번호
FROM emp
WHERE deptno = 30
HAVING sal >= 1500;
# Q8. 부서번호가 20 또는 30인 부서에서 근무하는 사원의 사번, 이름, 부서번호 조회
SELECT 
    empno AS 사번, ename AS 이름, deptno AS 부서번호
FROM
    emp
WHERE
    deptno IN (20 , 30);
# Q9. 부서번호가 20,30이 아닌 부서에서 근무하는 사원의 사번, 이름, 부서번호 조회
SELECT 
    empno, ename, deptno
FROM
    emp
WHERE
    deptno NOT IN (20 , 30);
# Q10. 업무가 MANAGER, ANALYST, PRESIDENT 인 사원의 이름, 사번, 업무조회
SELECT 
    ename AS 이름, empno AS 사번, job AS 업무
FROM
    emp
WHERE
    job IN ('MANAGER' , 'ANALYST', 'PRESIDENT');
# Q11. 부서번호가 10, 20이 아닌 사원의 사번, 이름, 부서번호 조회
SELECT 
    empno AS 사번, ename AS 이름, deptno AS 부서번호
FROM
    emp
WHERE
    deptno NOT IN (10 , 20);
# Q12. 급여가 2000이상 3000이하 인 사원의 사번, 이름, 급여조회
SELECT empno as 사번, ename as 이름, sal as 급여
FROM emp
WHERE sal BETWEEN 2000 AND 3000;
# Q13. 입사일이 1981년인 직원의 사번, 이름, 입사일 조회
SELECT 
    empno AS 사번, ename AS 이름, hiredate AS 입사일
FROM
    emp
WHERE
    YEAR(hiredate) = 1981;
# Q14. 커미션인 NULL 인 사원의 사번, 이름, 커미션 조회
SELECT empno as 사번, ename as 이름, comm as 커미션
FROM emp
WHERE comm IS NULL;
# Q15. 커미션 NULL이 아닌 사원의 사번, 이름, 업무, 커미션 조회
SELECT empno as 사번, ename as 이름, job as 업무, comm as 커미션
FROM emp
WHERE comm IS NOT NULL;
# Q16. 이름이 M으로 시작하는 사원의 사번, 이름 조회
SELECT 
    empno AS 사번, ename AS 이름
FROM
    emp
WHERE
    ename LIKE 'M%';
# Q17. 이름에 E가 포함된 사원의 사번 이름 조회
SELECT 
    empno AS 사번, ename AS 이름
FROM
    emp
WHERE
    ename LIKE '%E%';
# Q18. 이름의 세번째 알파벳이 'A'인 사원의 사번, 이름 조회
SELECT 
    empno AS 사번, ename AS 이름
FROM
    emp
WHERE
    ename LIKE '__A%';
# Q19. 모든 직원의 모든 정보를 이름을 기준으로 내림차순 정룔
SELECT 
    *
FROM
    emp
ORDER BY ename DESC;
# Q20. 모든 사원의 사번 이름, 급여를 조회 (급여 내림차순)
SELECT empno as 사번, ename as 이름, sal as 급여
FROM emp
ORDER BY sal DESC;
# Q21. 20, 30번 부서에 근무하는 사원의 사번, 이름, 부서번호, 급여 조회 (부서별 오름차순, 급여순 내림차순)
SELECT empno as 사번, ename as 이름, deptno as 부서번호, sal as 급여
FROM emp
ORDER BY deptno, sal DESC;
# Q22. 모든 사원에 대하여 사원수, 급여총액, 평균급여, 최고급여, 최저급여 조회
SELECT COUNT(*) as 사원수, SUM(sal) as 급여총액, AVG(sal) as 평균급여, MAX(sal) as 최고급여, MIN(sal) as 최저급여
FROM emp;
# Q23. 모든 사원에 대하여 부서, 사원수, 급여총액, 평균급여, 최고급여, 최저급여를 부서별로 조회하고, 소수점 둘째자리 반올림
SELECT deptno as 부서, COUNT(*) as 사원수, SUM(sal) as 급여총액, ROUND(AVG(sal),2) as 평균급여, MAX(sal) as 최고급여, MIN(sal) as 최저급여
FROM emp
GROUP BY deptno;
# Q24. 모든 사원에 대하여 부서, 업무, 사원수, 급여총액, 평균급여, 최고급여, 최저급여를 부서별, 직급별로 조회
SELECT deptno as 부서, job as 업무, COUNT(*) as 사원수, SUM(sal) as 급여총액, AVG(sal) as 평균급여, MAX(sal) as 최고급여, MIN(sal) as 최저급여
FROM emp
GROUP BY DEPTNO, JOB
ORDER BY DEPTNO, JOB;
# Q25. 급여(커미션포함) 평균이 2000이상인 부서번호, 부서별 사원수, 평균급여(커미션포함) 조회 
SELECT DEPTNO as 부서번호, COUNT(*) as `부서별 사원수`, ROUND(AVG(sal + IFNULL(comm, 0)),2) as `평균급여(커미션포함`
FROM emp
GROUP BY DEPTNO
HAVING AVG(sal + IFNULL(comm, 0)) >= 2000;

예전에 했지만 복습 겸 DB 수업을 들으며 공부하였고, 오후에 공부하던 운영체제 5장은 내일 낮에 마무리하여 업로드할 예정이다. 원서 접수를 위한 어학 성적이 어느덧 만료가 돼서 오늘 토스 접수까지 마쳤다. 빠듯한 취업준비, 알차게 준비해서 원하는 기업으로 취업하고 싶다.

반응형

'TIL' 카테고리의 다른 글

[TIL-49/240321] Join & SubQuery & Modeling  (0) 2024.03.22
[TIL-48/240320] DDL & DML  (0) 2024.03.21
[TIL-46/240318] File Upload & Download  (1) 2024.03.19
[TIL-45/240315] MVC 패턴  (0) 2024.03.16
[TIL-44/240314] Filter & Interceptor  (2) 2024.03.15
profile

나를 기록하다

@prao

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...