목록전체 글 (122)
기록
CASE식은 명칭이 가르키듯이 경우 구분을 기술할 때 사용한다. 프로그래밍에서는 '조건 분기'라고 칭한다. CASE 식 구문에는 단순 CASE식과 검색 CASE식이 있다. 먼저 검색 CASE구문을 살펴보자. CASE WHEN THEN WHEN THEN WHEN THEN ... ELSE END WHEN 구의 이란, '열=값'과 같이 반환값이 진리값이 되는 식을 말한다. =, !=, LIKE, BETWEEN 같은 술어를 사용해서 만든 식이라고 보면 된다. 실제로 사용해보자. SELECT goods_name, CASE WHEN goods_classify = '의류' THEN CONCAT('A:', goods_classify) # THEN 'A:' || goods_classify WHEN goods_classi..
술어란 ? 반환값이 진리값인 함수 (TRUE/FALSE/UNKWOUN) 대표적인 술어는 다음과 같다 - LIKE - BETWEEN - IS NULL, IS NOT NULL - IN - EXISTS LIKE 술어 : 문자열 부분 일치 검색 전방일치 - 검색조건이 되는 문자열이 검색 대상 문자열의 가장 앞에 위치하고 있는 레코드만 검색 SELECT * FROM SampleLike WHERE strcol LIKE 'ddd%'; 중간일치 - 검색 조건이 되는 문자열이 검색 대상 문자열의 '어딘가'에 포함되어 있으면 레코드가 선택됨 (가장 앞, 가장 뒤, 중간 모두 상관없음) SELECT * FROM SampleLike WHERE strcol LIKE '%ddd%'; 후방일치 - 검색조건이 되는 문자열이 문자열 ..
CURRENT_DATE - 현재 날짜 이 함수가 실행된 날을 반환 값으로 출력한다. 인수가 없기 때문에 괄호가 필요 없다. SELECT CURRENT_DATE; CURRENT_TIME - 현재 시간 함수가 실행된 시간을 취득한다. 인수가 없어서 괄호가 필요 없다. SELECT CURRENT_TIME; CURRENT_TIMESTAMP - 현재 일시 현재날짜와 현재시간 기능을 합친 기능을 가진 함수다. 취득한 결과로부터 날짜나 시간만 잘라낼 수도 있다. SELECT CURRENT_TIMESTAMP; EXTRACT - 날짜 요소 추출하기 날짜 데이터에서 일부분을 추출하는 것으로, 예를 들어 '년', '월' 또는 '시간'이나 '초'만 추출할 때 사용한다. 반환형은 날짜형이 아닌 숫자형이 된다. SELECT CU..
함수란? 어떤 값을 입력하면 그에 대응하는 값을 출력하는 기능. 이때 입력을 '인수(파라미터)'라 하며, 출력을 '반환 값'이라 한다. 함수 종류는 크게 다음과 같이 분류할 수 있다. - 산술 함수 (수치 계산) - 문자열 함수 (문자열 처리) - 날짜 함수 (날짜 처리) - 변환 함수 (데이터형이나 값 변환) - 집약 함수 (데이터 집계) ABS(수치) - 절대값 MOD(피제수, 제수) - 나머지 ROUND(대상수, 반올림 자릿수) - 반올림 (반올림 자릿수를 0으로 지정하면 소수점 이하 첫번째 자리에서 반올림) SELECT m, ABS(m) AS abs_col FROM SampleMath; SELECT n,p, MOD(n,p) AS mod_col FROM SampleMath; SELECT m, n, ..
상관 서브쿼리는 작은 그룹으로 나누어 비교할 때 사용한다. 상품분류 별로 평균 판매단가보다 높은 상품을 상품분류그룹에서부터 추출하고 싶다. SELECT goods_classify, goods_name, sell_price FROM Goods WHERE sell_price > (SELECT AVG(sell_price) FROM Goods GROUP BY goods_classify); 에러 발생 !! 스칼라 서브쿼리는 단일 데이터값을 반환해야 하기 때문이다. 해당 쿼리는 3행 값을 반환하고 있어서 스칼라 서브쿼리로서 역할을 못하고 있다. WHERE구에서 서브쿼리를 사용할 경우네는 반드시 결과가 1행이여야 한다. 해결 방법은? 여기서 등장하는 강력한 도구가 상관 서브쿼리이다. SELECT goods_class..
앞 포스팅에서 뷰라는 편리한 도구에 대해 배웠다. 이번 포스팅에서 배우는 '서브쿼리'는 이 뷰를 기반으로 하는 기술이다. 서브쿼리의 특징을 한마디로 정리하면 '일회용 뷰'다. 뷰란 데이터를 저장하는 것이 아니라 데이터를 추출하는 SELECT문을 저장하는 방법이였다. 반면, 서브쿼리는 뷰 정의 SELECT문을 그대로 FROM구에 삽입한 것이다. SELECT goods_classify, cnt_goods FROM (SELECT goods_classify, COUNT(*) AS cnt_goods -- 뷰 정의 SELECT문을 그대로 기술 FROM Goods GROUP BY goods_classify) AS GoodsSum; 이처럼 뷰 정의 SELECT문을 그대로 FROM구에 삽입한 것이 서브쿼리다. AS Go..
뷰와 테이블의 차이는, 실제 데이터를 저장하고 있는지의 여부이다. 보통, 테이블을 만들어서 INSERT문으로 데이터를 추가하면 데이터베이스에 데이터가 저장된다. 이 데이터가 실제 저장되는 위치는 컴퓨터 내의 기억장치(일반적으로 하드디스크)다. 따라서 SELECT문으로 데이터를 검색할 때는 실제로 기억장치에서 데이터를 끌어와서 다양한 계산 후 사용자에게 결과를 반환한다. 반면, 뷰는 데이터를 기억장치에 저장하지 않는다. 뷰가 저장하는 것은 'SELECT'문 자체이다. 뷰에서 데이터를 꺼내려 할 때, 뷰는 내부적으로 SELECT문을 실행해서 일시적인 가상 테이블을 만든다. - 뷰의 이점 1) 데이터를 저장하지 않아 기억장치용량을 절약할 수 있다. (테이블은 실제 데이터를 저장하는 반면, 뷰는 테이블에서 데이..
DBMS 트랜잭션에는 지켜야 할 네 가지 약속이 표준규격으로 정해져 있다. 1. 원자성 (Atomicity) 트랜잭션이 끝난 시점에 모든 갱신 처리가 실행된 상태 또는 모두 실행되지 않은 상태로 종료되는 것을 보증하는 성질이다. All or Nothing이라고도 한다. 앞의 예를 사용하면, 와이셔츠 값은 내렸는데 티셔츠 값은 올리지 않은 상태로 끝나는 트랜잭션은 절대로 없다는 것이다. 트랜잭션의 종료 상태는 둘 다 실행되거나(COMMIT) 둘 다 실행되지 않는(ROLLBACK) 양자택일이어야 한다. (트랜잭션의 어중간한 종료를 방지 위하여 원자성은 중요하다) 2. 일관성 (Comsistency) 트랜잭션에 포함되는 처리는 데이터베이스에 미리 설정된 제약을 지켜야 한다. ( 추후 책보고 다시 보완 ) 3...
트랜잭션이란 ? 데이터베이스에서 이루어지는 하나 이상의 갱신 처리를 모아서 부르는 명칭. 세트로 실행해야 할 하나 이상의 갱신 처리 집합이다. ex) 와이셔츠 판매단가를 1000원 내리고 대신에 티셔츠 판매단가를 1000원 올리는 것 트랜잭션 개시문과 트랜잭션 종료문으로 갱신 DML문을 감싸는 형식이다. -- BEGIN TRANSACTION; -- postgreSQL START TRANSACTION; -- MySQL UPDATE Goods SET sell_price = sell_price - 1000 WHERE goods_name = '와이셔츠'; UPDATE Goods SET sell_price = sell_price + 1000 WHERE goods_name = '티셔츠'; COMMIT; -- ROL..
https://www.draw.io/