데이터베이스

준동이·2023년 3월 28일
0
post-custom-banner

데이터 베이스

데이터베이스

영구저장소

  • 로컬
    파일

  • 원격
    데이터베이스



ERP

ERP란 전사적자원관리(Enterprise Resource Planning)의 약자로
기업의 모든 업무를 통합 관리할 수 있는 시스템을 의미



DBMS - 데이터베이스 관리 시스템

데이터의 집합인 데이터베이스를 관리 / 운영하기 위한 시스템 또는 소프트웨어



데이터베이스 정의

데이터의 집합
여러명의 사용자, 응용 프로그램이 공유
동시 접근 가능해야 함



SQL

데이터베이스에 명령을 주는 구문

DBMS - 서버(항상 오픈)
연결부분 - 네트워크
사용자, 응용프로그램 - 클라이언트



저장용량

대용량

DB2 - IBM
Oracle - Oracle

범용

MySQL - Oracle
Mariadb(MySQL의 무료버전) - MariaDB
SQLServer - MS

소형

Access - MS
SQLite - SQLite : android



데이터베이스 연관된 개발자

1. 시스템 관리자(SA)

설치
외부 접근 보안

2. 데이터베이스 관리자(DBA)

모니터링 - 튜닝
백업, 복원(restore)
내부 접근 보안

자격중 + Oracle(OCP, OCM)

3. 개발자

데이터베이스와 프로그램 연동 => SQL



SQL의 종류

DML(Data Mainpulation Lang) - 데이터 조작

selec(가장중요)
insert
update
delete

DDL(Data Definition Lang) - 데이터 정의

create
alter
drop
rename
truncate

DCL(Data Control Lang) - 접근 권한

grant
revoke

TCL(Transaction Control Lang) - 트랜잭션 ( 잘 사용 안함 )

commit
rollback
savepoint

데이터베이스 - 디렉토리
디렉토리 안에 테이블 (실제 데이터가 저장되는 저장소)
테이블은 행과 열로 이루어져있음(Excel의 확장판)

데이터베이스 목록보기



Mariadb 접속

-p비밀번호 형식으로 쓸 경우 보안에 큰 문제가생겨 절대 사용 금지 (비밀번호 다 보임)



다른 아이피 접속 / 비밀번호 잘못 입력



데이터베이스 목록보기 - show databases;




데이터베이스 선택 - use 데이터베이스명



테이블 목록보기 - show tables;



테이블 구조 - describe user;

describe 를 desc로 줄여서 가능



select

select는 데이터베이스 내의 테이블에서 원하는 정보를 추출할때 사용

대소문자 구분 안함
selec 컬럼절
form 테이블명;

select * from dept; : dept 테이블의 전 컬럼을 다 보여줘
seltct*
from dept; 해도 됨

컬럼 : 컬럼(column, 열)이란 관계형 데이터베이스 테이블에서 특정한 단순 자료형의 일련의 데이터값과 테이블에서의 각 열을 말한다




부분적 컬럼 보기 ( 원하는 데이터 )

select deptno, dname, loc부서 테이블에서 부서 번호, 부서 이름, 지역 이름을 볼거야
from dept;



컬럼에대한 별칭 변경(alias)

줄여서 as
deptno를 no로, dname을 name으로, loc를 location으로 바꿈



한글로 변경

공백치면 에러, 공백 원하면 '부서 위치' 처럼 ' ' 안에 넣음



' '로 공백 넣어주기, as 생략 알아서 ' ' 안의 값을 읽음



연산자도 사용 가능

산술 연산자

+ - * / %

집합개념으로 전체적용 / 계산된 컬럼을 보여주는 것도 가능하다.(sal * 12)

컬럼명 변경

바꾸고싶은 이름 옆에 바꿀 이름 입력 as가 있어야하지만 생략돼있음

comm 보너스

연봉 + 보너스 값 출력, 보너스가 null인데 null을 연산하면 null로 된다.
null 과 0 은 다르다
null은 연산시 null 출력 0은 값 출력



비교 연산자

true는 1, false는 0
!= 는 <>로도 씀



논리 연산자

true = 1, false = 0



조건절(where절) 특정 내용 보기

select 컬럼이름 ...
from 테이블명
where절(행 제한조건)
컬럼명 비교, 논리연산 값

select *
from dept
where deptno = 10;



급여가 1000이하인 사원번호, 이름, 급여 뽑기




사원번호 7369인 사원에 대한 사원번호, 사원이름 급여 출력




문자열을 입력할때는 컬럼을 구별을 못하기에 문자열에 ' ' 붙여줘야함




문자열의 비교는 아스키값 비교로 하여 출력된다.

대 / 소문자 구분이 없어서 아스키값은 대/소문자 통일이다.
첫번째는 'king'보다 아스키값이 높은 문자열들만 출력
두번째는 'b'보다 아스키값이 낮은 문자열들 출력



고유일자 / 특정 고유일자 출력

  1. 사원번호, 사원이름, 입사일자 출력
  2. 특정 입사일자에 해당되는 사원번호, 사원이름, 입사일자 출력



비교도 가능

특정 입사일자보다 숫자가 큰 입사일자들 출력



범위값 뽑기

and로 범위 지정 하여 급여가 1000보다 크고 2000보다 작은 목록 뽑기



입사년도가 2011년인 사원에 대한 사원번호, 사원이름, 급여, 입사일자 출력 (범위형)

바로 2011을 넣는다고 출력 안됨.
and로 2011년도 첫날부터 끝날까지 지정해줘야함



직책이 clerk 이거나 salesman인 사원에 대한 사원번호, 사원이름, 직책 출력하기(목록형)

or 연산자 || 사용



범위형 - between A and B

between으로 사용가능
between A and B 로 사용



목록형 - in

Ex ) job in ('clerk', 'salesman'); job이 clerk이거나 salesman



부서가 10이거나 20인 사원에 대한 사원번호, 사원이름, 직책 부서번호를 출력

  1. 목록형으로 씀
  2. 일반적으로 씀



null인사람 조회 - is null / null이 아닌 사람 조회 - in not null

null말고 is null / is not null로 전체 조회가 가능



like - 특정 위치에 위치한 요소 출력

'~%'; - ~ 로 시작하는것
'%~'; - ~ 로 끝나는 것
'%~%'; - ~ 이 있는것



02월에 입사한 사원에 정보




언더바 _

언더바 한 개당 한 자를 의미, 언더바 갯수 후에 적힌 글자 위치에 맞는 목록 출력
ex)
where hiredate like '_k%'; 두번째 글자가 k인 (언더바가 한개이고 k가 2번째에 있어서 k가 두 번째에 있는 문자열, 목록 출력)



distinct - 중복을 배제하고 목록화 하여 보여줌

distinct로 deptno의 중복된 값을 배제하고 출력
첫번째는 중복 제거 안한 값 출력
두번째는 distinct로 중복 배제한 값 출력



job으로 이름 변경




직책 중복안되게 출력




양쪽 값, 쌍(deptno, job)이 같게나오는것이 중복으로 출력되지않음

deotbi와 job을 한 쌍으로봤을때 쌍의 값이 중복되게 출력되지않게 함.



전체데이터에서 몇개만 보고싶을 때 - limit (mariadb 전용)

limit A, B - A번째 줄 위치부터 B개 출력한다는 의미
0이 첫번째를 의미(배열 인덱스번호같이)



위에처럼 원하는 값을 전체출력으로 보는것보다 원하는 값만 뽑아서 출력하는것이 제일 좋은 방법

limit 0,3;과 limit 3; 은 똑같이 출력 / 앞에 숫자가 없으면 0번째 위치부터 라는 의미



정렬해서 보기 - order by 컬럼명

order by 후 오름차순이나 내림차순 안써주면 오름차순으로 적용됨 (defualt)
select
from
where
order by 컬럼명(옵션으로 오름차순(asc), 내림차순(desc) 줄 수 있음)
첫번째출력 emp전체 테이블 출력 -> order by deptno asc로 deptno의 값을 오름차순으로 변경
두번째 출력 emp전체 테이블 출력 -> order by deptno asc로 deptno의 값을 내림차순으로 변경



입사한 순서 오름차순으로 정렬

hiredate 오름차순으로 정렬



정렬의 다양한 방법

첫번째 출력 기본
두번째 출력 deptno 오름차순
세번째 출력 deptno 묶음의 job 오름차순


컬럼 위치순서 번호로 정렬도 가능

1은 deptno가 정렬 / 2는 job 정렬 / 3은 empno 정렬 / ...

컬럼 변경된 이름으로도 가능



SQL정보모음 사이트

https://mariadb.com/kb/en/documentation/

명령어

select version() - 버전확인
select database() - 현재 데이터베이스 정보
status - 접속된 상태값

숫자

절대값

abs()



올림 / 내림

ceil(값) : 무조건 올림
floor(값) : 무조건 내림



반올림



소수점 잘라내는 위치 truncate(값, 잘라낼 위치값)

-2는 뒤에서 부터 잘라서 잘린곳은 0으로 됨
2는 .부터 2개
0은 소수점 없이 출력
소수점 개수보다 많으면 0으로 더 채워져서 출력됨.



제곱

pow(2.2) : 2의 2승
pow(2,3) : 2의 3승



나머지 연산

mod()



최대 / 최소값

greatest(값, 값, 값, ..) : 값 중에 최대값
least(값, 값, 값, ...) : 값 중에 최소값



least로 sal과 값 비교하여 최소값 출력

least(sal, 2000)하면 sal값과 2000중 작은 값 출력이 된다.
2000보다 작은 값들이 출력이 된거라면 sal값이 2000보다 작다는 것.
2000이 출력이 됐다면, sal이 2000보다 큰 값이라는 것.



문자열 조작

ascii('문자') : 아스키값으로 나온다.



문자열 길이

length('문자열') : 문자열의 길이를 알려준다.
공백도 문자열로 한다.



다국어 경우는 char_length()로 해줘야 길이 출력 가능




이름이 4자인 사람이름 출력




like 로 출력




문자열 연결하기

컬럼적용 (출력을 문자열화), 보통 alias 사용

',' 조심해야함



10번 부서에서CLARK 님의 연봉은 29400원 입니다.연봉 : 급여X12



instr - 위치

몇번째 부터 시작인지 알려줌 / 없으면 0



문자로 위치 찾기

20번 부서의 사원 이름중 mi가 들어간 이름중에 몇번째부터 들어가있는지 알려줌



일정부분 잘라내기

left 왼쪽부분부터 입력값만큼
right 오른쪽부분부터 입력값만큼
mid ~번째부터 ~까지 (substring 써도 된다)



사원이름이 s로 시작하는 사원정보를 출력

like / instr / left - 세 개로 가능

like 사용

instr 사용

left 사용



relace로 치환 하기

'mariadb database study' 에서 'study'를 '스터디'로 치환



insert - 글자 삽입

9번째에서부터 8자 빼고 '데이터베이스' 집어넣음

값을 크게 주면 뒤에 글자를 덮어서 출력된다



대/소문자 변환

lcase('대문자'), lower('대문자') : 대문자를 소문자로 변환
ucase('소문자'), upper('소문자') : 소문자를 대문자로 변환

뒤집기 - reverse



공백제거 - trim()

ltrim() : 왼쪽 공백 제거
rtrim() : 오른쪽 공백 제거
trim() : 전체 공백 제거



공백 채우기

왼쪽 lpad - 숫자에 많이 사용

4개의 공간에 왼쪽 빈공간에 '?' 채움

오른쪽 rpad - 문자에 많이 사용

4개의 공간에 오른쪽 빈공간에 '?' 채움



날짜데이터

날짜 데이터

now(), sysdate(), current_timestamp()
현재 년도,날짜,시간을 나타내준다.



년,월,일 / 시간 출력

curdate() : 현재 년, 월, 일 나타낸다
curtime() : 현재 시간을 나타낸다



시간 연산

interval : ~ 후

now() +1 / now() -1 하면 1초가 더해지거나 빼지는 것.

date_add(now(), interval 2 day) : 현재 날짜에서 2일 더함
date_add(now(), interval 2 month) : 현재 날짜에서 2개월 더함



date_sub ~ 일 전
date_sub(now(), interval 2 day) : 현재 날짜에서 2일을 뺌



특정 날짜의 ~ 일 전
date_sub('2023-03-24', interval 2 day) : 정한 날에서 2일 뺌



날짜 사이의 간격

현재 날짜와 입력 날짜의 차이
-4 일전
TIMESTAMPDIFF(단위, 날짜1, 날짜2);
단위 기준으로 날짜2 - 날짜1 의 값이 나온다.

month는 달의 차



10번 부서 사원들이 입사일 몇일 지났는지 출력하는 SQL 작성




날짜 부분별 출력방식

현재 년도, 월, 일, 요일 출력

extract로 출력

단위(now())로 출력

요일

타임스탬프

원하는 타입으로 날짜 출력




제어문 - if

if( 조건, '참 결과', '거짓 결과')



null 판별




comm 에 null이 있으면 0으로 바꿈

만약에 comm에 null이있으면 0으로 출력해



연봉 구하고 ifnull로 30부터 사람중 보너스가 null인사람을 null을 0으로 바꾸고 더함



텍스트파일 저장 후 sql에서 실행하기

ex01.sql이라는 텍스파일 새로 만들고 -> 메모장으로 켜서 실행시킬 구문 적고 -> Ansi, utf-8로 인코딩 바꾸고 -> 저장 -> sql에서 source 경로 적어주면 출력 됨



profile
개발자 꿈나무
post-custom-banner

0개의 댓글