DB (1) - 설치, 개념, SQL 기본

ysh·2023년 7월 7일
0

Spring Boot

목록 보기
26/53
post-thumbnail

모두의 SQL
https://thebook.io/006977/

Maria DB

RDBMS (관계형 데이터 베이스)

다운로드

https://mariadb.org/

주의

  • UTF-8 Check

DBeaver

DB용 IDE

다운로드

https://dbeaver.io/


데이터

정형 데이터

정형 데이터는 데이터베이스의 정해진 규칙(Rule)에 맞게 데이터를 들어간 데이터 중에 수치 만으로 의미 파악이 쉬운 데이터들을 보통 말한다

비정형 데이터

비정형 데이터는 정형 데이터와 반대되는 단어이다.
즉, 정해진 규칙이 없어서 값의 의미를 쉽게 파악하기 힘든 경우이다

반정형 데이터

반정형 데이터의 반은 Semi를 말한다. 즉 완전한 정형이 아니라 약한 정형 데이터라는 것이다.
대표적으로 HTML이나 XML과 같은 포맷을 반정형 데이터의 범위에 넣을 수 있을 것이다


데이터베이스(스키마)

실제 개별 서비스에서 사용하는 모든 데이터 담고 있다

  • 엑셀을 예로 들면 엑셀 파일 하나 / 여러개 시트 포함

테이블 (엔티티)

데이터들의 형식 정함, 같은 종류의 데이트 묶음 저장

  • 엑셀 파일의 시트 하나 / 여러개의 데이터 묶음

컬럼

테이블 내의 같은 형식의 데이터

로우 (튜플, 레코드)

테이블 내의 데이터 묶음 하나


SQL

RDB의 데이터를 읽고, 쓰고, 수정하고, 삭제하는 언어

  • RDBMS마다 약간씩 다름
  • 모든 RDBMS에서 사용 가능한 'ANSI SQL'이 있음

예제

-- 데이터를 가져오는 SQL문
-- 주석

-- select 뒤에는 테이블에서 가져올 컬럼명
select first_name
-- from 뒤에는 데이터를 가져올 테이블 명
-- 실행항 SQL 마지막에 ';'을 적음
from employees;

-- 모든 컬럼을 가져올 때는 *
select * 
from employees;



-- where 데이터를 조건에 맞는 것만 가져오도록 제한
select *
from employees
where employee_id < 105;

-- employees 테이블에서 last_name이 King인 사람
select *
from employees
-- 컬럼명 띄어쓰기 할 때 언더바를 사용
-- 문자열은 홑따옴표 사용
-- (=) 한 개로 같다라는 의미 (프로그래밍 언어와 다름)
where last_name = 'King';

select *
from employees
where last_name = 'King'
-- 조건을 연결할 때는 and, or 사용
-- 여러 조건 사용 시 나뉘어지는 방식을 잘 생각 후
-- 묶여야 할 곳은 소괄호로 묶음
	and (employee_id = 100 or employee_id = 101);

-- 위의 SQL문 결과가 다름
select *
from employees
where (last_name = 'King' and employee_id = 100)
	or employee_id = 101;
	

-- 그룹함수 사용 시
-- sum / avg / max / min 등 함수가 null 값을 카운팅 하지 않을 경우, 강제로
-- 카운트 하도록 if 등을 이용하여 값을 변환한 뒤 사용
select *
from employees
-- group by : 특정 컬럼 기준으로 그룹 만들 때 사용
group by job_id;

-- group by 사용 시 having과 select에서 그룹 함수 사용 가능
-- 컬럼 위치에 수학 계산 가능
-- as는 컬럼의 별명을 만들 수 있다
select job_id , sum(salary), count(salary), sum(salary) / count(salary) as 평균연봉
from employees
group by job_id
-- having은 그룹을 기준으로 그룹함수 또는 컬럼을 이용해 조건 검색
having sum(salary) > 40000;

-- group by 없이도 select 에서 그룹 함수 일부 사용 가능
-- 개별 행을 그룹으로 판단
select count(*) 
from employees;



select *
from employees
-- order by : 데이터를 특정 컬럼 기준으로 정렬할 때
-- asc - 오름차순, desc - 내림차순
order by salary desc;



select *
from employees
-- 문자열의 일부 내용을 생략할 때는 '%' 사용
-- 문자열 일부 내용 검색 시에는 '='보다 'like'사용
where first_name like 'J%';

-- employees 테이블에서 first_name에 e가 들어간 사람
select *
from employees
where first_name like '%e%';

-- employees에서 last_name이 t로 끝나는 사람
select *
from employees
where last_name like '%t';

-- employees에서 commission_pct가 없는 사람
select *
from employees
-- null 조건은 '='이나 'like'가 아닌 is사용
where commission_pct is null;

실습 코드

-- 대륙 REGIONS
-- 나라 COUNTRIES
-- 도시 LOCATIONS
-- 직원 EMPLOYEES
-- 부서 DEPARTMENTS
-- 직업 JOBS
-- 직업 변동 내역 JOB_HISTORY

-- 1. 모든 사원의 이름(FIRST_NAME, LAST_NAME)을 조회하라.
select first_name, last_name
from employees;

-- 2. 모든 사원의 모든 정보를 조회하라.
select *
from employees;

-- 3. 모든 도시 명을 조회하라.
select *
from locations;

-- 4. 이름(FIRST_NAME)이 M 으로 시작하는 사원의 모든 정보를 조회하라.
select *
from employees
where first_name like 'M%';

-- 5. 이름(FIRST_NAME)의 두 번째 글자가 'a'인 사원의 이름(FIRST_NAME)과 연봉을 조회하라. (위치 생략 _ 이용)
select first_name, salary
from employees
where first_name like '_a%';

-- 6. 도시 명을 오름차순 정렬하라.
select *
from locations
order by city asc;

-- 7. 부서 명을 내림차순 정렬하라.
select department_id 
from departments d 
order by department_id desc;

-- 8. 연봉이 7000 이상인 사원들의 모든 정보를 연봉순(오름차순)으로 정렬하라.
select *
from employees
where salary > 7000
order by salary asc;

-- 9. 인센티브(COMMISSION_PCT)를 받지 않는 사원들의 모든 정보를 조회하라.
select *
from employees
where commission_pct is null;

-- 10. 인센티브(COMMISSION_PCT)를 받는 사원들의 모든 정보를 조회하라.
select *
from employees
where commission_pct is not null and commission_pct != 0;

-- 11. 2007년 06월 21일에 입사한 사원의 사원번호, 이름(FIRST_NAME, LAST_NAME) 그리고 부서번호를 조회하라.
select employee_id, first_name, last_name, department_id
from employees
where hire_date = '2000-02-06';

select *
from employees
where hire_date = str_to_date('2000-02-06', '%Y-%m-%d'); 

-- 14. 부서번호별 사원수를 조회하라. (부서번호 오름차순 정렬)
select department_id as 부서번호, count(department_id) as 사원수
from employees
group by department_id
order by department_id asc;


-- 15. 직무 아이디별 평균 연봉을 조회하라. (직무 아이디 내림차순 정렬)
select job_id, avg(salary)  as 평균연봉
from employees
group by job_id
order by job_id desc;

포트

항구의 정박지

  • 윈도우는 보통 0 ~ 약 65000
  • vscode 라이브서버 : 5500 ~
  • MariaDb : 3306
  • Mysql : 3306
    (충돌 가능성, 변경 필요)

profile
유승한

0개의 댓글