복습.
DML의 종류에는 SELECT INSERT UPDATE 등이 있다.
사용용례 :
SELECT 열 AS 별칭 FROM 테이블
INSERT INTO 테이블(열,열) VALUES(값,값);
UPDATE 테이블 SET 열=값, 열=값 WHERE 조건.
SQL의 관계연산자는
NOT, AND, OR, BETWEEN, IN;
등이 있다. 딱히 부연설명이 필요없이 사례로서 보이겠다.
1. DB에서 조회수 1~3의 열만 추출.
SELECT * FROM NOTICE WHERE 1<=HIT AND HIT<=3;
다른 자바의 &&연산이랑 똑같음.
그런데 복잡하게 부등호 말고, 간결한 표현을 원할 경우.
SELECT * FROM NOTICE WHERE HIT BETWEEN 1 AND 3 ;
대신, 이건 양 끝값이 모두 등호에 포함되는 경우임.
2.DB에서 조회수 0,5,2,3 인 열만 추출.
이 경우는 두가지 방법이 존재하는데
SELECT * FROM NOTICE WHERE HIT=0 OR HIT=5 OR HIT=2 OR HIT=3;
비교연산자를 관계연산자로 묶어주는 경우인데 너무 복잡하다. 이걸 쉽게 바꾸면,
SELECT * FROM NOTICE WHERE HIT IN(0,5,2,3);
이렇게 IN 연산자를 쓸 경우에 IN의 값 안에 포함되어 있는 값이 해당 레코드의 HIT이면, 뽑아낼 수 있다.
3.DB에서 조회수 0,5,2,3이 아닌 열만 추출.
이 경우는 어떨까? 앞서쓴 IN과 NOT 부정연산자를 쓰면 된다.
SELECT * FROM NOTICE WHERE HIT NOT IN(0,5,2,3);
요약하면 연속적인 데이터 값의 추출은 BETWEEN을 쓰면 되고, 산발적인 데이터의 추출은 IN을 쓰면 된다.
SQL에서 어떠한 문자열을 추출하고 싶을때 쓰는 패턴비교연산자는 3가지가 있다.
LIKE, %, _;
이것도 바로 사례로서 설명하겠다.
1. 성이 '최' 씨인 사람을 DB에서 추출할떄.
SELECT * FROM MEMBER WHERE NAME LIKE '최%';
그럼 NAME 필드의 이름이 '최'로 시작하는 모든 문자열을 가진 테이블이 출력된다.
주의할점은
SELECT * FROM MEMBER WHERE NAME = '최%';
가 아니라는 것이다. 이 퀴리를 실행하게 된다면, 액면가 그대로 이름이 '최%' 인 사람만 출력된다.
2. 그렇다면, 이름 중에 '미' 가 들어가는 사람을 추출은 어떻게 하면 될까?
응용인대, 나도 처음에는 %연산을 두번 써도 되는지 모르고 OR 연산자를 써야 하는지 알았다.
하지만 %연산자는 해당 글자의 앞,뒤 모두 올수 있고, "%미%"는 '미'로 이름이 시작하는 사람, '미'라는 글자가 중간에 포함되는 사람, '미'라는 글자가 마지막에 들어가는 사람 모두를 포함한다.
SELECT * FROM MEMBER WHERE NAME LIKE '%미%';
이럼 미가연, 최미, 최미연, 최미미 이런 이름들이 모두 출력된다.
3.그럼 성이 '최' 이고 이름이 외자인 사람 추출할떄.
%연산자의 의미는 0개 이상글자는 모두 포함 이라는의미를 가지고 있어서 '최%' 로만 다 필터링 할수 없다. 이렇게 구체적인 글자수를 제한해야 할 경우에는 ,
SELECT * FROM MEMBER NAME WHERE LIKE '최_';
이렇게 쓴다. _ 의 개수가 글자의 개수이다.
공부시간 1시간.
순공부시간 30분.
오늘은 오전,오후 다 외근으로 어르신 모시고 병원갔다온다고 공부를 조금밖에 하지 못했다. 그래도 짧은시간이지만 밀도있게 마무리한거 같아서 뿌듯하다. 항상 기억하자. 끝까지 하는 사람은 10%밖에 안된다. 무엇이든 끝까지 하는 것만으로도 상위 10%가 될수 있다. 자연스럽게 그냥 아무생각없이 하자. 열심히? 악으로? 할 필요 없다. 그냥 하자. 내 일상의 루틴처럼.
'기록 > SQL' 카테고리의 다른 글
ROWNUM, 페이징을 통한 열의 단위집합 출력 2021-06-29 (0) | 2021.06.29 |
---|---|
패턴비교 연산자. 2021-06-28 (2) | 2021.06.28 |
SELECT 스킬 : 산술연산(숫자연산자, 문자 연산자, 별칭붙여서 출력) ,비교연산 2021-06-22 (4) | 2021.06.22 |
트랜젝션(transaction), commit, rollback 2021-06-21 (0) | 2021.06.21 |
JDBC 의 필요이유 다시정리 클라이언트와의 관계, DML 중 UPDATE 2021-06-18 (0) | 2021.06.18 |