본문 바로가기
TIL

[23.04.05.] 국비지원 풀스택 개발자 과정 - Day 21(RDBMS, 오라클 자료형, SELECT문, SQL, SQL연산자,ORDER BY, 그룹함수, GROUP BY, HAVING)

by DevPark 2023. 4. 5.

 

악으로 깡으로...될때까지 해야한다. 끝날때까지 끝난게 아니다. ”
- 강사님

학습주제


RDBMS

RDBMS(Relational Database Management System)는 관계형 데이터베이스를 생성, 수정, 관리 및 검색하는 데 사용되는 소프트웨어 시스템입니다. RDBMS는 SQL을 사용하여 데이터를 조작하고 검색하는 데 많이 사용됩니다.

 

관계형 데이터베이스는 테이블(Table)로 구성되며, 각 테이블은 행(Row)과 열(Column)로 이루어져 있습니다. 각 열은 특정 데이터 유형을 가지고 있으며, 각 행은 데이터 레코드(Record)를 나타냅니다. RDBMS는 데이터 테이블 간에 관계(Relationship)를 정의하여 데이터를 구성하고 관리합니다.

 

 

[SQL] RDBMS 란?(+트랜잭션, 롤백)

RDBMS란? RDBMS(Relational Database Management System)는 관계형 데이터베이스를 생성, 수정, 관리 및 검색하는 데 사용되는 소프트웨어 시스템입니다. RDBMS는 SQL을 사용하여 데이터를 조작하고 검색하는 데

devparker.tistory.com

 


 

오라클 자료형

오라클 데이터베이스에서 지원하는 자료형은 다양합니다. 일반적인 자료형에 대한 설명은 다음과 같습니다.

 

  • BINARY_INTEGER : 정수 값을 저장하기 위한 형식
  • CHAR(size): 고정 길이 문자열을 저장하는 데 사용됩니다. 최대 길이는 2000바이트입니다.
  • NCHAR(size) : 고정 길이 유니코드 문자열을 저장하기 위한 데이터 형식입니다.
  • NVARCHAR2(size) : 가변 길이 유니코드 문자열 저장하기 위한 데이터 형식
  • LONG: 가변길이 문자열 저장(최대 2GB)
  • LONG RAW: 가변길이의 바이너리 데이타(2GB)/PL/SQL에 의해 해석되지 않는 자료형
  • NUMBER: 숫자를 저장하는 데 사용됩니다. 정밀도와 스케일을 지정할 수 있습니다.
  • DATE: 날짜와 시간을 저장하는 데 사용됩니다. 7바이트의 고정 길이입니다.
  • TIMESTAMP: 날짜와 시간을 저장하는 데 사용됩니다. TIMESTAMP와 TIMESTAMP WITH TIME ZONE 두 가지 유형이 있습니다.
  • CLOB: 대용량 문자열 데이터를 저장하는 데 사용됩니다. 최대 크기는 4GB입니다
  • BLOB: 바이너리 데이터를 저장하는 데 사용됩니다. 최대 크기는 4GB입니다.
  • BINARY_FLOAT: 부동 소수점 숫자를 저장하는 데 사용됩니다. IEEE 754 표준을 따릅니다.
  • BINARY_DOUBLE: 더블 정밀도 부동 소수점 숫자를 저장하는 데 사용됩니다. IEEE 754 표준을 따릅니다.
  • ROWID: 데이터베이스 내에서 행을 유일하게 식별하는 데 사용됩니다.
  •  

오라클에서는 이 외에도 다양한 자료형을 지원합니다. 또한 사용자가 직접 자신의 자료형을 정의할 수도 있습니다.


SQL

SQL(Structured Query Language)은 데이터베이스 관리 시스템(DBMS)에서 사용되는 프로그래밍 언어입니다. SQL은 데이터를 관리하고 검색하고 조작하며 보고하는 데 사용됩니다.

구조화된 질의어 입니다.

DBMS(Oracle,MySQL,MS-SQL,DB2,INFORMIX등)의 데이타를 제어하기위한 표준 질의어

 

 

SQL은 크게 세 가지 유형의 명령으로 구성됩니다.

  1. 데이터 정의 언어(DDL): 데이터베이스 스키마를 정의하고 수정하는 데 사용됩니다. CREATE, ALTER, DROP 등의 명령어가 포함됩니다.
  2. 데이터 조작 언어(DML): 데이터를 조작하고 검색하는 데 사용됩니다. INSERT, UPDATE, DELETE, SELECT 등의 명령어가 포함됩니다.
  3. 데이터 제어 언어(DCL): 데이터베이스의 보안, 권한 및 트랜잭션 제어와 같은 데이터 액세스를 관리하는 데 사용됩니다. GRANT, REVOKE 등의 명령어가 포함됩니다.

 

SQL을 사용하여 데이터베이스를 조작하는 방법은 다음과 같습니다.

  1. 데이터베이스에 연결합니다.
  2. 데이터를 검색하거나 조작하기 위해 SQL 명령어를 작성합니다.
  3. 작성한 SQL 명령어를 실행하여 데이터베이스를 조작합니다.
  4. 데이터베이스에서 연결을 종료합니다.

 

SQL은 데이터베이스 시스템에서 널리 사용되므로 데이터베이스에 대한 이해가 필요한 모든 분야에서 유용합니다. SQL을 사용하여 데이터베이스를 쿼리하고 데이터를 검색하면 비즈니스 분석, 고객 서비스, 마케팅, 자원 관리 등 다양한 작업을 수행할 수 있습니다.


SELECT 문

SELECT 문은 데이터베이스에서 데이터를 검색하고, 필요한 정보를 가져오기 위해 사용되는 데이터 조작 언어(DML) SQL 문장입니다.

 

SELECT column1, column2, ... // 컬럼 일름
FROM table_name //테이블 이름
WHERE condition // 찾는 조건
GROUP BY column1, column2, ...; // 결과 데이터 그룹화
HAVING condition; .. // 그룹에서 찾는 조건
ORDER BY column_name [ASC|DESC]; // 데이터 정렬 표현

 


SQL 쿼리실행 순서

SQL 쿼리의 실행 순서는 다음과 같습니다.

 

FROM->WHERE->GROUP BY ->HAVING ->SELECT->ORDER BY

 

위의 실행 순서는 대부분의 데이터베이스에서 동일하게 적용됩니다. 단, 데이터베이스에 따라서 조금씩 다를 수 있습니다.

 

 

 

[SQL] SELECT 쿼리 실행 순서(MySQL,MariaDB,Oracle,MS SQL,PostgreSQL,SQLite)

일반적인 쿼리 실행 순서 쿼리 실행 순서는 일반적으로 다음과 같습니다. FROM: 쿼리의 대상이 되는 테이블을 선택합니다. WHERE: 특정 조건을 만족하는 행만 선택합니다. GROUP BY: 특정 열을 기준으

devparker.tistory.com

 


 

모든 열 선택

특정 컬럼 선택

열에 별칭 부여

중복행의 제거

특정 행의 검색

 


 

산술 표현식

비교연산자와 논리연산자

BETWEEN 연산자

LIKE 연산자

IS NULL

|| 연산자

 


 

ORDER BY 정렬

 

 

[SQL] ORDER BY 정렬

ORDER BY 절은 SELECT 문의 결과를 정렬하는데 사용됩니다. ORDER BY는 하나 이상의 열 이름과 정렬 방향을 지정합니다. SELECT문의 맨 뒤에 기술 되어야 합니다. 예를 들어, "employees" 테이블에서 급여가

devparker.tistory.com

 


 

그룹함수(집계함수)

 

 

[SQL] 그룹함수

그룹함수 그룹 함수는 SELECT 문에서 그룹별 집계를 수행하는데 사용됩니다. 그룹 함수는 여러 행을 하나의 결과 행으로 집계하며, 집계된 결과는 그룹화된 열에 따라서 계산됩니다. 사용방법 예

devparker.tistory.com

 


 

GROUP BY

 

 

[SQL] GROUP BY

GROUP BY GROUP BY 구문은 SELECT 문에서 그룹별 집계를 수행하는데 사용됩니다. GROUP BY 구문은 열 이름을 지정하여 그 열에 따라 결과 행을 그룹화합니다. 각 그룹은 고유한 값을 가지며, 이 그룹들에

devparker.tistory.com

 


 

HAVING

 

[SQL] HAVING

HAVING HAVING 구문은 GROUP BY 구문과 함께 사용되며, 그룹화된 결과에 대한 조건을 지정할 때 사용됩니다. HAVING 구문은 WHERE 구문과 유사하지만, WHERE 구문은 단일 행에 대한 조건을 지정하는 반면, HAV

devparker.tistory.com

 

 


연습문제

 

 

문제

SCOTT 계정의 EMP 테이블에서 연봉이 2500에서 3000 사이이고 직책이 MANAGER인 직원의 사번,이름,직책,연봉을 출력하라.

 

SELECT empno,ename,job,sal FROM emp WHERE job = 'MANAGER' AND sal BETWEEN 2500 AND 3000;

 

 

문제

SCOTT 계정에서 부서코드가 30인 직원중에 연봉이 1500이상인 직원의 이름과 부서코드와 연봉 그리고 직무를 출력하여라. 단, SALESMAN 직무는 제외하여라

 

SELECT ENAME,DEPTNO,SAL,JOB
FROM EMP 
WHERE DEPTNO = 30 AND SAL >= 1500 AND JOB != 'SALESMAN';

 

 

문제

EMP테이블에서 부서코드가 20이거나 혹은 30이면서 연봉이 2000이상이 아닌(2000미만) 직원 모든 데이터를 검색
단, (부서코드  IN연산자를 사용)

 

SELECT * 
FROM EMP
WHERE DEPTNO IN(20,30)AND SAL < 2000;

 

 

문제
보너스(COMM)를 받는 직원중에서 연봉이 1500이상인 직원의 모든 데이터를 검색해라. (IS NULL 연산자 사용) 

 

SELECT * 
FROM EMP
WHERE COMM IS NOT NULL AND SAL>=1500;

 

 

문제
HR계정의 EMPLOYEES테이블에서 COMMISSION PCT가 NULL이 아닌 직원 중 연봉이 5000이상이면서 
LAST NAME이 S로 시작하는 직원의 FIRST NAME과 LAST NAME을 연결해서 출력하고 컬럼명을  '성 명'으로 별칭을 부여해서 출력해라

SELECT FIRST_NAME || ' ' || LAST_NAME "성 명",SALARY,commission_pct
FROM EMPLOYEES
WHERE COMMISSION_PCT IS NOT NULL AND SALARY>=5000 AND LAST_NAME LIKE 'S%';
--like 연산자, 별칭, 문자열 결합
--열 이름 [AS] "별칭"/ 별칭에 공백을 주거나 '을 주고 싶을때는 무조건 "으로 감싸

 

 

문제
HR계정의 EMPLOYEES테이블에서 연락처가 011로 시작하는 직원의 FIRST NAME과 LAST NAME을 연결해서 출력하고
락처,입사일을 출력하여라

SELECT FIRST_NAME || ' ' || LAST_NAME 이름,PHONE_NUMBER,HIRE_DATE
FROM EMPLOYEES
WHERE phone_number LIKE '011%';
--like 연산자

 

 

문제

SCOTT계정의 EMP테이블에서 연봉이 가장 높은 순으로 정렬

 

SELECT *
FROM EMP
ORDER BY SAL DESC;
--ORDER BY 절 사용 내림차순 정렬

 

 

문제

SCOTT계정에서 직무가 SALESMAN인 직원중 보너스를 100이상 받는 직원들의 이름, 부서코드, 연봉, 보너스를 출력하되 연봉이 낮은 순부터 출력하라

 

SELECT ENAME,DEPTNO,SAL,COMM
FROM EMP
WHERE JOB='SALESMAN' AND COMM>=100
ORDER BY SAL ASC;
--ORDER BY

 

 

문제

SCOTT계정에서 이름에 A가 들어간 직원을 출력하되 먼저 연봉으로 오름차순하고 부서코드로 내림차순해서 출력하라

 

SELECT *
FROM EMP
WHERE ENAME LIKE '%A%'
ORDER BY SAL ASC, DEPTNO DESC;
--LIKE 연산자, ORDER BY 다중 정렬

 

 

문제

SCOTT계정의 EMP테이블에서 연봉이 1000이상이고 이름이 S로 끝나는 직원의 총 수를 구해라.

SELECT COUNT(*)
FROM EMP
WHERE SAL >= 1000 AND ENAME LIKE '%S';
--그룹함수 사용

 

 

문제

SCOTT계정의 EMP테이블에서 직업이 SALESMAN인 직원들의 연봉 평균을 구해라.

 

SELECT AVG(SAL)
FROM EMP
WHERE JOB ='SALESMAN';
--그룹함수 사용

 

 

문제

HR 계정에서 부서별 최고 연봉을 구해서 최고연봉과 부서코드를 출력하여라. 그리고 최고연봉순으로 내림차순하여라.

 

SELECT DEPARTMENT_ID,MAX(SALARY) HIGH_END
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID
ORDER BY HIGH_END DESC;
--GROUB BY(ORDER BY 전에 기술)

 


문제

hr계정에서 부서별 평균 연봉을 구해서 평균연봉과 부서코드를 출력하여라. 단, 평균 연봉을 구할때 연봉이 3000이하인 직원과 커미션을 받는 직원은 제외하여라. 출력시에는 평균연봉순으로 내림차순하여라

SELECT DEPARTMENT_ID,AVG(SALARY)
FROM EMPLOYEES
WHERE SALARY > 3000 AND commission_pct IS NULL
GROUP BY DEPARTMENT_ID
ORDER BY AVG(SALARY) DESC;
--그룹함수, GROUP BY
반응형

댓글