본문 바로가기
코딩

2022.03.09_21일차_sql(1)

by 흥뷰자 2022. 3. 16.

21일차 학습내용

SQL

[SQL]

0. 세팅
1) Oracle Data Server 19c
url : 192.168.10.240 (학원pc만), javaking.iptime.org (학원 또는 집)
port : 1521
sid : orcl
username : (본인꺼 java01~19)
pw : username과 동일

2) 툴 Oracle SQL Developer
https://www.oracle.com/tools/downloads/sqldev-downloads.html
1) DBMS : DataBase Management System : 데이터를 관리하는 툴
oracle, mysql, mariaDB

2) 데이터 베이스 : 유용한 데이터의 집합

3) 파일 시스템의 문제점
일관성
보안성
경제성
무결성

4) 오라클
8,9 -> i (internet)
10, 11 -> g (grid)
12,13,18,19... -> c (cloud)

RDMBS : Relational DBMS : 관계형 데이터 베이스 oracle, mysql, postgreSQL...
NoSQL : not only sql : 키-벨류 객체구조... mongoDB 대용량데이터나 클라우드 할 때 편리 document방식 json이나 s..에 데이터 저장,, 키벨류 방식은 레디스 디비도 있고 , 빅테이블데이터베이스들도 있고...

5) 관계형 데이터 베이스
행과 열로 표현되는 테이블간의 관계를 나타낼 때 사용됨.

행 : row, 레코드
열 : column

2. SQL : Staructured Query Language : 구조화 질의어
 : 데이터베이스를 사용할 때, 데이터베이스에 접근할 수 있는 데이터베이스 하부 언어
 SQL 명령 문자를 query문이라고도 부른다.

쿼리문을 통해 하는 작업  : CRUD
Create
Read
Update
Delete

1) SQL 종류

DDL (Data Definition Language) : 데이터 정의어
: 데이터베이스 객체(테이블, 뷰, 인덱스..)의 구조 정의

Create : 생성
ALTER : 수정(변경)
DROP : 삭제
RENAME : 객체 이름 변경
TRUNCATE : 삭제 (저장공간포함)

DML(Data Manipulation Language) : 데이터 조작어
: 데이터 삽입, 삭제, 갱신 등 데이터 처리

INSERT : 데이터 저장
DELETE : 데이터 삭제
UPDATE : 데이터 수정

DCL (Data Control Language) : 데이터 제어어
: 데이터 베이스 사용자의 권한을 제어함 (DB관리자만 사용가능)

GRANT : 권한 부여
REVOKE : 권한 취소

DQL
SELECT : 데이터 검색
TCL (Transaction Control Language) : 트렌젝션 제어어
: 트랜젝션 (데이터 처리 단위) 관련 제어함.

COMMIT : 하나의 트랜젝션이 정상 종료후 처리. 영구적으로 저장하려면 여기까지 트랜젝션임을 반영해야
(툴에서 Auto Commit옵션 활성화하자. 아니면 매번 명령 후 commit;명령어를 실행해야 함. 
안그럼 데이터 영구적 처리가 안됨)
ROLLBACK : 트랜젝선 취소, 돌아가기(작업취소) 인터넷끊길경우 자동으로 롤백됨. 방금전 실행한 작업돌아가서 
돌아가는 의도적 취소.. 우리는 하면서 COMMIT;만 쓰겠지만..
SAVEPOINT : 백업정책

(메모 방식 : 명령어는 전체 대문자, [] 기호없이 우리가 작성할 영역~~)

3. 데이터 조회 : SELECT  << sql01.sql  

SELECT [컬러명 또는 표현식] FROM [테이블명 또는 뷰명];  ///줄내림은 명령어 사이에서만 가능. 명령어와 내가 작성할 부분은 띄어쓰기 넣어야

* 문자열 데이터를 제외한 나머지는 대소문자를 구분하지 않는다.

* -- 한줄 주석 /**/ 여러줄 주석
----------------------------------------------별칭 ""
--표현식 (리터럴상수)은 컬럼 이름이외에 출력하기를 원하는 내용을 작성하여 출력 가능
--  select 뒤에 ''묶어서 사용.
-- 데이터는 '' 묶기, 별칭(alias)은 ""묶기
-- 홑따옴표 두개면 하나의 문자로 취급~~ 표시가 ''그대로 나오는게 싫으면 별칭설정""
-- 컬럼 별칭(Column alias) : 컬럼명 뒤에 ""로 묶어서 별칭 달 수 있다.(select 문 실행할때만 적용됨)
---------------------------------------------select 에서 중복값 제거하는 명령어 distinct
-- 중복값 제거하고 select 해오기
-- 주의 : 1개 컬럼앞에 키워드를 작성해도 나열된 모든 컬럼을 기준으로 중복처리를 함. 의도랑 다르게 나올 수 있으니 주의 

--------------------------------연결연산자 : || (파이프라인)
---------------WHERE 절 : 원하는 조건만 골라내기

    SELECT [컬럼명 또는 표현식] FROM [테이블명 또는 뷰명] WHERE [조건];
    조건은 일반 산수에 사용되는 조건 사용. 비교연산식 < > ...
문자열은 ''무조건 해줘야하고, 그'' 안의 값은 대소문자 구분하니까 . (테블명이나 키워드들은 대소문자 구분 안함)


---------------기본 산술 연산자       
------------비교 연산자  오후 
숫자 between and / 문자 between and
IN연산자
LIKE연산자 

 널~~~~~~~~~ 
-- IS NULL / IS NOT NULL : 값이 무엇인지 모를 경우
-- NULL 은 어떤 값인지 모른다는 뜻의 데이터 종류이다.
-- NULL 은 = 같다라는 비교연산자로 비교할 수 없다.  == null : is null, != null : is not null


-- AND OR : 겁색할 때 WHERE절 조건식에서 사용 
-- AND : 검색조건이 모두 만족할 때 (java의 &&)
-- OR : 조건 중 하나라도 만족할 때

* AND가 OR 보다 우선순위가 높다   <

--정렬 ORDER BY 기준컬럼명(옵션)  < 
 정렬 숫자 ~~~~~ 다시듣기 ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

order by는 처리 느리니까 DB가 많으면 java에서 하는게 빠를 수 있어~~ 버블정렬 선택정렬

-- 집합 연산자  <


-- UNION        : 합집합   : 두집합의 결과 합쳐, 중복값 제거하고 정렬(정렬은 오래걸린당)
-- UNION ALL    : 합집합+  : 두 집합의 결과 합쳐, 중복제거 안하고 정렬 안함
-- INTERSECT    : 교집합   : 두 집합의 중복되는 값만 가져옴, 정렬도 해줌.
-- MINUS        : 차집합   : 두 집합의 차집합 결과를 가져옴, 정렬도 해줌. (집합 작성 순서 중요. 앞에서 뒤를 뺌)

    *연산자 사용시 주의사항
      두 집합의 select 절에 오는 컬럼수가 동일해야 함.
      두 집합의 select 절에 오는 컬럽의 데이터 타입이 동일해야함.
      두 집합의 컬럼명은 달라도 상관없음


## SQL함수 ## <
    
    단일행 함수 : 한번에 한개의 행에 대한 처리를 한 번 해주는 함수 : 한 개 행 -> 한 개의 결과
    복수행 함수 : 한번에 여러개의 행에 대한 처리를 한 번 해주는 함수 : 여러개 행 -> 한 개의 결과
    
    1) 단일행 함수
        문자함수, 숫자함수, 날짜함수, 일반함수, 변환함수
        #1. 문자함수
            LOWER('문자')         : 소문자로 변환
            UPPER('문자')         : 대문자로 변환
            LENGTH('문자')        : 문자 길이 출력
            CONCAT('문자','문자')  : 문자열 연결
            SUBSTR('문자', idx1, idx2) : 문자를 idx1 ~ 개수만큼 잘라서 줌. index는 1부터 시작
            LPAD('original문자', length, '삽입문자') : original에 왼쪽부분에 length길이가 될때까지 삽입문자를 추가해줌.
                ex. 'love', 6, '*' --> **love
            RPAD('original문자', length, '삽입문자') : original에 오른쪽부분에 length길이가 될때까지 삽입문자를 추가해줌.
                ex. 'love', 6, '*' --> love**
            LTRIM('original문자', '삭제할문자') : original 문자에 왼쪽에 있는 해당 문자 삭제
                ex. '*love', '*' --> love    
            RTRIM('original문자', '삭제할문자') : original 문자에 오른쪽에 있는 해당 문자 삭제
                ex. 'love***', '*' --> love
                
            REPLACE('org', 'old', 'new') : org문자열 내의 old부분을 new로 교체
            INSTR('문자', '특정문자') : 문자안의 특정문자의 위치 알려줌. 위치는 1부터~ (INSTRB 바이트로 몇 번째인지....?)
                ex. 'abcd', 'a' --> 1

오후 4:11 부터 안들음
                

            SQL 문법
                - oracle : oracle 함수, 문법
                - 표준 : SQL-ANSI




 #2. 숫자함수 : 입력되는 값이 숫자인 함수들을 말함 < 오후 4:33 2022-03-08
        ROUND(숫자, 소수점수): 반올림 : 12.345, 2 --> 12.35
         TRUNC(숫자, 소수점수) : 지정 자리만큼 유지하고 뒤는 버림 12.345, 2 -> 13.34
          MOD(숫자1, 숫자2)   :숫자1을 숫자2로 나눈 나머지 (자바의 %) 12,10 -> 2
          CELL(숫자)         : 올림
         FLOOR(숫자)        : 내림
          POWER(숫자1, 숫자2) : 숫자1의 숫자2승 3,2-> 9

 #3. 날짜관련함수  < 오후 4:39 2022-03-08
* 날짜 계산
날짜 + 숫자 = 날짜 ex. 3월8일 + 3 = 3월 11일
날짜 - 숫자 = 날짜 
날짜 - 날짜 = 숫자 ex. 3울8일 - 3월5일 = 3

* 날짜 함수 // 키워드도 있고 함수도 있음
SYSDATE  : 키워드. 시스템(OS)의 현재 날짜와 시간
MONTH_BETWEEN : 두 날짜 사이의 개월수
ADD_MONTH : 주어진 날짜에 개월 더해줌
NEXT_DAY : 돌아오는 날짜 출력
LAST_DAY : 해당 달의 마지막 날짜
ROUND : 주어진 날짜 반올림
TRUNC : 주어진 날짜 버림


--오라클에서 제공해주는 디비? 라서 듀얼...? ???????


    #3. 형변환 함수
        # 오라클 데이터 타입  (컬럼의 데이터 타입~~~~~)
 varchar2(n) : n바이트 만큼의 변하는 길이의 문자 저장. 최대 4000바이트. 가변길이문자저장 
        number(p,s) : 위에 n은 필수지만 number에서 뒤는 옵션~~~~~~/ 숫자저장, p전체자릿수 1~38 , s 소수점자리수 -84~127자리까지. () 생략가능
        date        : DC 4771 AC 9991 까지 날짜 저장 가능....??
        
        char(n) : n바이트 만큼의 고정길이 문자 저장. 최대 2000바이트 (한글은 1000자, 영문으니 2000자). 가변이 아니라 고정됨.
        long        : 가변길이 문자저장 2GB
        clob        : 가변길이 문자저장 4GB
        raw(n)      : 원시 2진 데이터 200byte
        long raw(n) : 원시 2진 데이터 2GB
        bfile       : 외부파일에 저장된 데이터로 최대 4GB

* 자동 형변환
  select 2+'2' from dual;
* 강제 형변환

    ** 함수 **
          ###  TO_CHAR(숫자) : 숫자->문자, 날짜->문자
            TO_NUMBER(문자) : 문자 -> 숫자
            TO_DATE('잘짜형문자') :  문자 -> 날짜  //주의 포맷이 날짜형태로 맞춰줘야 함
            
            * 날짜를 표현하는 방법 *
                연도 : YYYY / YY / YEAR
                월  : MM(03) / MONTH(MARCH) / MON(MAR)- 유닉스계열 윈도우는 이렇게 해도 다 MARCH로 나왕
                일  : DD(08) / DAY(요일) 윈도우는 한글 맥은 영문으로.. / DDTH 몇번째 날인지
                시간 : HH24(24시간 표기법) / HH(12시간)
                분  : MI
                초  : SS


'코딩' 카테고리의 다른 글

2022.03.14_24일차_jsp(2)  (0) 2022.03.16
2022.03.11_23일차_jsp(1)  (0) 2022.03.16
2022.03.07_20일차_javascript(3)ㅡㅡㅡㅡㅡ  (0) 2022.03.09
2022.03.04_19일차_javascript(2)  (0) 2022.03.06
2022.03.03_18일차_css(2), javascript(1)  (0) 2022.03.05

댓글