9월 2일 SQL 수업 정리

 DBMS (DataBase Management System) : 여러사람에 의해 공유될 목적으로 저장된 데이터의 집합 


-동시성 ( 동시에 접속이 가능하다 ) 

-메모장에서 글을 열면 글자가 안보인다. 이런문제를 해결하기 위함

-동일한 방법으로 조회할 수 있는것. 

- 여러종류의 기계에서 동일하게 보일 수 있다. (보편성) 

동시성 / 보편성


트랜젝션 : 여러 단계의 과정을 하나의 작업 행위로 묶는 행위이다. 


그러니까 쉽게 내계좌-> 출금 -> ATM -> 입금 -> 상대방 계좌

이렇게 했을때 입금이 취소됬을때 출금이 벌써 된 돈이 들어간 것이 취소가 되어야 하는 과정이 있다. 


원자성 : 트랜젝션 내의 작업 전체가 실행이 완료되거나 / 한군데라도 취소가 되면 안되거나 해야함. 

일관성 : 트랜젝션이 수행된 이후 -> 데이터 베이스에 일관성있게 보존 되어야 한다. 


독립성( 독립성 ) : 여러 트랜잭션이 동시에 실행이 되도 각각 트랜젝션은 서로 영향이 없다. 


지속성 : 트랜젝션이 커밋된 이후 해당 트랜젝션으로 변경된 모든 사항이 보존되어야 한다. 


SQL은 DBMS와 통신하기 위한 유일한 수단이 되기 때문에 배워야 한다. 



정형/ 비정형 데이터 (목적에 따라 선택하면 된다. ) 


- RDBMS 


안정성, 무결성

제조업, 금융 , 회계등의 데이터 일치가 중요한 시스템에


-NOSQL 


유연한 데이터 구조 

빅데이터같은



SQL  기초 공부



| : or 


{ } : 여러개가 반복된다. 


[] : 옵션 으로 있을 수도 있고 없을 수도 있다. 


SELECT * | { colon | expression [allias]  }

FROM 테이블 이름 ; 

 


ex) 실습 


SELECT *

FROM lprod; 


.별표는 전체를 지칭하는 것이다. 


SELECT buyer_id, buyer_name

FROM buyer;


. 카트의이름을 가진 테이블의 모든열들을 볼 수 있는것. 


SELECT * 

FROM cart ; 



SELECT mem_id, mem_pass, mem_name 

FROM member; 



SQL 실행방법 


1. 실행하려고 하는 sql을 선택후 ctrl + enter 

2. 실행하려는 sql 구문에 커서를 위치시키고 ctrl + enter; 


.SQL의 경우 KEY워드의 대소문자를 구분하지 않는다. ( 자바랑 다른부분이다. )

그래서 SQL은 정상적으로 실행된다. 

.Coding rule이 회사마다 있다. 



SELECT 쿼리는 테이블의 데이터에 영향을 주지 않는다. 

SELECT 쿼리를 잘못 작성 했다고 해서 데이터가 망가지지 않는다. 


SELECT ename, sal, sal + 100  (여기서 보면 쿼리를 ,쉼표로 연결하고 있지 그리고 아무것도 붙이고 있지 않아 따옴표를 ) 

FROM emp;


 DESC 테이블구조를 확인


연산 


숫자 + 숫자 = 숫자값 


문자 + 문자 연결은  | |  ( Java ) ->  자바에서 하는 + 이 역할과 같은것 


날짜 + 숫자는? 


수학적으로 정의된 개념이 아니다. 

오라클에서 정의한 개념이다. 

날짜에다가 숫자를 일수로 생각하여 더하고 뺀 일자가 결과로 된다. 


날짜 + 숫자 = 날짜 


EX ) 


SELECT ename, hiredate after_1year, hiredate + 365, hiredate - 365 before_1year 

ename 과 hiredate after_1year 두개는 column

hiredate + 365 는 hiredate라는 column에 365를 붙인것이고 hiredate - 365 before_1year 는 hiredate column에서 365를 뺀것을 before_1year라는 별칭을 붙인 것이다. 두개는 expression 이다. 





별칭이란 : column 에 새로운 이름을 부여하는 것이다.


column | expression 뒈에 [AS] [column 명 ] 


as는 생략이 가능하다. 


별칭을 부여할 때 주의할 점


1. 공백이나, 특수문자가 있는 경우 " 얘로 감싸줘야 한다. 

2. 별칭명은 기본적으로 대문자로 취급되지만 소문자로 지정하고 싶으면 " 얘를 적용한다. 


' ' 는 문자열 이고 " " 이거는 별칭의 특수문자 띄어쓰기 소문자 지정 

, 이거는 colone을 구분하는 것. 



SELECT ename(공백이 문제) emp name -> "emp name"


FROM emp;


SELECT ename "emp name", ( ename 을 emp name이라는 별칭으로 바꿔준것 ), empno emp_no, empno "emp_no2"

FROM emp;


? _ 애가 있는데 왜 emp_no 는 큰 따옴표 " 로 묶어 주질 않았지? 


자바에서 문자열 : " Hello World" 이지만

SQL에서의 문자열은 : ' Hello World ' 



매우중요 


NULL : 아직 모르는 값


숫자타입 : 0이랑 NULL은 다르다. 

문자타입 : ' ' 공백문자랑 NULL은 다르다. 


주의점 : NULL을 포함한 연산의 결과는 항상 NULL이다. 

5 * NULL = NULL 

800 + NULL = NULL

800 + 0 = 800 


emp 테이블 테이블 column 정리


1. empno : 사원번호

2. ename : 사원 이름

3. job (담당 ) 업무

4. mgr : 매니저 사번번호

5. hiredate : 입사일자

6. sal : 급여

7. comm : 커미션

8. deptno : 부서번호 


EMP 테이블에서 NULL값 확인 


SELECT * 

FROM emp; 


ex) SELECT prod_id "id", prod_name "name"

FROM prod; 

 -> prod_id 를 별칭인 id로 해서 출력

prod_name 을 별칭인 name으로 해서 출력 as는 생략해도 되고 



literal 


literal : 값 자체


literal 표기법 : 값을 표현하는 방법 


숫자 10이라는 숫자 값을 


자바에서는 : int a = 10; 이렇게 표현

SQL에서는 SELECT empno, 10 

                    FROM emp; 


문자


java : String str = "Hello, world"; 

column 별칭 , expression 별칭 , 가능 " " 얘는 별칭을 가리키는 말 



SQL 은 SELECT empno e, '


*column 인지 expression 인지 잘 구분해 줘야 한다. 


SELECT 뒤에 * | { column | expression [alias] }




SQL에서의 날짜 값 표현 


자바에서는 primitive type 8개 : int, byte, short, long , float, double, 

문자열 => String, class

날짜 => date class 


SQL에서는 리터럴 값 자체



문자열 연산 


자바에서는 + 는 결합 연산 

"Hello" + "world" => Hello world 

"Hello" - "world" : 연산자가 정의되어 있지 않다. 

"Hello" * "world" : 연산자가 정의되어 있지 않다.


즉 자바에서는 + 는 문자열을 연결하는거지만 - 와 * 는 사용되지 않는다. 


SQL에서는 어떻게 문자열을 연산할까?  ||


||, concat 함수 -> 결합연산 


emp 테이블의 ename, job column 이 문자열 


 ename ' ' || job

SELECT ename || ' ' || job 

FROM emp; 



CONCAT (문자열1, 문자열 2 ) : 문자열1과 문자열2를 합쳐서 만들어진 새로운 문자열을 반환해준다. 


1) SELECT ename || ' ' || job,             -> 이게 무슨 의미냐면 연산자야. 즉 ename이라는 column의 데이터 내용에다가 더하기 ' '  즉 공백 더하기 job이라는 데이터를 더해준거다 라는 뜻 

그래서 ename의 데이터 공백 job의 데이터 이렇게 프린트가 된다. 

    

2) CONCAT ( CONT(ename, ' '), job ) 

     FROM emp; 



3)SELECT ename || ' ' || job

CONCAT ( CONT(ename, ' '), job ) 

     FROM emp; 



그러니까  3) 은 1)과 2)번 인 ename job 이랑 ename job 이고 두개는 동일하게 나오지만 column 은 다르게 나온다. 



 USER_TABLES : 오라클에서 관리하는 테이블 (뷰 ) 

접속한 사용자가 보유하고 있는 테이블 정보를 관리 


SELECT 'select * FROM ' || table_name || ';' AS "QUERRY"

FROM user_tables;


? 굳이 특별한게 있어?? 


댓글