SQL

원종서·2021년 9월 28일
0

DDL

create
alter
drop

DML

insert
select
update
delete
(crud)

DCL

grant
remove

DDL

Create table

= 테이블 정의하기
=. 데이터 구조 정의하기
= 개념상의 데이터 정의하기
= entity 정의하기
= Member data

ctrl + enter

Oracle built-in Data types

CHAR

CHAR(n [byte | char])
  • n * byte 문자 저장 ex) phone-number, birth day
  • national language == 3 byte
  • CHAR(2) => 나셔널 두글자 불가능
  • CHAR(2 char) => 나셔널 두글자 가능 // 보다는 NCHAR(2)가 효율적,
VARCHAR2(n)
  • 최대 n * byte 문자 저장, (비어있는 공간 반환) ex) Id, alios -> 처리 속도가 CHAR에 비해 느림
NCHAR(n)
  • N ==nation 각 전세계 언어들을 처리할떄 (3배 정도의 크기를 사용함)
NVARCHAR2(n)
Long (구식)
  • 굉장히 큰 문자열을 다룰 시, 최대 2Gbyte ,
CLOB
  • CHAR LARGE OBJECT, 최대 4Gbyte
NCLOB
  • NCHAR LARGE OBJECT, 최대 4Gbyte

NUMBER

NUMBER(4) 최대 4자로 이루어진 숫자
NUMBER(6,2) 소수점 2자리를 포함한 최대 6자리
NUMBER(6,-2) 소수점 -2자리를 반올림하는 최대 6자리
NUMBER == NUMBER(38,*)
NUMBER(*,5) == NUMBER(38,5)

DATE

DATE
  • 년, 월 ,일
TIMESTAMP
  • 년, 월, 일, 시, 분, 초
CREATE TABLE MEMBER(
ID VARCHAR2(50)
PWD NVARCHAR2(50)
NAME NVARCHAR2(50)
GENDER NCHAR(2)
AGE NUMBER
BIRTHDAT CHAR(10 BYTE) 
PHONE CHAR(13 BYTE)
REGDATE DATE
);

UPDATE table

  1. 컬럼에서 수정하기

    ALTER TABLE MEMBER MODIFY ID NVARCHAR2(20);

  • varchar id -> nvarchar id
  1. 컬럼 삭제하기

    ALTER TABLE MEMBER DROP COLUMN AGE;

  2. 컬럼 추가하기

    ALTER TABLE MEMBER ADD EMAIL VARCHAR(200);

    sql 예약어로 테이블, 컬럼명으로 사용 = "" 감싸기


    DML

    INSERT

  • 테이블에 데이터 넣기

    INSERT INTO <테이블> VALUES <값목록>

    INSERT INTO MEMBER(ID,PWD) VALUES("NewID","NewPWD");

  • 원하는 필드만 원하는 순서대로 입력

  • 안넣은 것들은 null 값으로 들어감,

  • SELECT * FROM TABLE 에서 확인

SELECT * FROM MEMBER;

  • MEMBER TABLE 의 모든 필드 보기

SELECT id,name,pwd FROM MEMBER;

  • 예약어, 컬럼명은 소대문자 구별안함
  • MEMBER TABLE 에서 id,name,pwd 만 찾아서 보여줌

SELECT id AS user_id,name,pwd FROM MEMBER;

  • 기존 필드명은 id 인데 사용자의 요청으로 user_id으로 바꿀때 As키워드를 붙여줌
SELECT id user_id,name,pwd FROM MEMBER;
  • AS 생략 가능

SELECT id "user id",name,pwd FROM MEMBER;

  • 공백을 넣은 필드명으로 하고 싶다면, 큰 따음표로 감싸준다.

    UPDATE

    UPDATE MEMBER SET PWD = '1234';

    • 테이블 내 모든 pwd를 바꿈

    UPDATE MEMBER SET PWD = '1234678' WHERE ID='drangon';

  • id가 drangon 인 유저의 비밀번호를 바꾼다. where == 조건

  • 변화를 원하는 컬럼을 , 로 구분한다

DELETE

DELETE MEMBER WHERE ID='test';

트랜직션

  • 업무 실행단위, 논리 명령단위, 개념상의 ...
  1. 업무적인 단위 (계좌이체)
    ->
  2. 물리적인 단위, (update, update)

논리적으로는 계좌이체 업무가 한번에 일어나기를 원하지만 구현할때는 빠지는 쪽을 업데이트하고 들어오는 쪽을 업데이트하는 두가지 명령이 동시에 일어나야한다.

두가지 이상의 일이 정상 작동된 것을 확인하고 데이터베이스에 변경을 적용한다.

이벤트 게시글 등록 == sql (insert , update) -> 업무적인 단위에 한번에 끝내기를 원하는 단위를 두개 이상의 명령어가 하나인 것 처럼 묶어서 실행하기 위해서 어떠한 장치가 필요함,

LOCK -- 다른 사용자가 끼어들지 못하게 하기 위해
update
update
UNLOCK

LOCK, UNLOCK 의 과정을 위해 제공받는 명령어 COMMIT,RollBack
(session A 에서 DML을 사용하고 Commit | Rollback을 하지 않으면
session B 에서 DML을 사용하려고 할때 wating 이 발생한다. LOCk이 걸렸기 때문이다)

연산

산술연산자

SELECT HIT+1 FROM NOTICE;

  • 컬럼 hit 의 값을 1 더하고 싶어서 + 연산자를 썼더니
  • 컬럼 hit+1 에서 값들을 찾아줌
  • 그럼 SELECT HIT+1 AS HIT FROM NOTICE; 별칭을 써줘야하낟.

SELECT 1 + '3' FROM DUAL;

-DUAL = 더미티에블

  • 4출력
    • 연산자는 자료형이 맞지 않아도 무조건 숫자로써 더한다.
  • 문자를 더하기 위해서는 ||

SELECT 1 || '3' FROM DUAL;

  • '13' 출

SELECT ID || '(' || NAME || ')' as NAME FROM MEMBER ;

  • ID(NAME)

비교연산자

같지 않다.

  • !=, ^=, <>

SELECT * FROM NOTICE WHERE WRITER_ID = 'newlec';

SELECT * FROM NOTICE WHERE HIT > 3;

-- 게시글 중 내용을 입력하지 않은 게시글 조회
SELECT FROM NOTICE WHERE content is NULL ;
-- 게시글 중 내용을 입력하지한 게시글 조회
SELECT
FROM NOTICE WHERE content is NOT NULL ;

관계 연산자

NOT , AND, OR , BETWEEN, IN

SELECT * FROM NOTICE WHERE HIT >= 0 AND HIT <=2;

  • 조회수가 0,1,2 인 게시글을 조회해라

SELECT * FROM NOTICE WHERE HIT BETWEEN 0 AND 2;

  • 위와 같음

SELECT * FROM NOTICE WHERE HIT = 0 OR HIT =7 OR HIT =2;

  • 조회수가 0,2,7인 게시글을 조회해라

SELECT * FROM NOTICE WHERE HIT IN (0,2,7);

  • 위외 같음

SELECT * FROM NOTICE WHERE HIT NOT IN (0,2,7);

  • 위와 반대

패턴 비교 연산자

LIKE , % , _

0개의 댓글