본문 바로가기

DEVELOPMENT/SQL

(16)
[SQL] 뷰(VIEW) 뷰(VIEW) 데이터베이스 객체란 테이블이나 인덱스 등 데이터베이스 안에 정의하는 모든 것을 말한다. 뷰 역시 데이터베이스 객체 중 하나이다. 반면 SELECT 명령은 객체가 아니다. SELECT 명령에 이름을 지정할 수도 없고 데이터베이스에 등록되지도 않기 때문이다. 이처럼 본래 데이터베이스 객체로 등록할 수 없는 SELECT 명령을, 객체로서 이름을 붙여 관리할 수 있도록 한 것이 뷰이다. SELECT 명령은 실행했을 때 테이블에 저장된 데이터를 결괏값으로 반환한다. 따라서 뷰를 참조하면 그에 정의된 SELECT 명령의 실행결과를 테이블처럼 사용할 수 있다. 뷰를 작성하는 것으로 복잡한 SELECT 명령을 간략하게 표현할 수 있다. 뷰는 테이블처럼 취급할 수 있지만 '실체가 존재하지 않는다'라는 의미..
[SQL] 인덱스 인덱스 인덱스는 테이블에 붙여진 색인이라 할 수 있으며, 검색속도의 향상을 위해 사용된다. 여기서 '검색'이란 SELECT 명령에 WHERE 구로 조건을 지정하고 그에 일치하는 행을 찾는 일련의 과정을 말한다. 검색은 탐색이라고도 불린다. 테이블에 인덱스가 지정되어 있으면 효율적으로 검색할 수 있으므로 WHERE로 조건이 지정된 SELECT 명령의 처리 속도가 향상된다. 인덱스의 구조도 목차나 색인과 비슷하다. 목차나 색인에 제목/키워드별 페이지 번호가 적혀있듯, 데이터베이스의 인덱스에는 검색 시에 쓰이는 키워드와 대응하는 데이터 행의 장소가 저장되어 있다. 인덱스는 테이블과는 별개로 독립된 데이터베이스 객체로 작성된다. 인덱스는 테이블에 의존하는 객체라 할 수 있다. 대부분의 데이터베이스에서는 테이블을..
[SQL] 제약조건 테이블 작성시 제약 정의 CREATE TABLE로 테이블을 작성할 때 제약을 같이 정의한다. 물론 ALTER TABLE로 제약을 지정하거나 변경할 수 있다. 이때 NOT NULL 제약 등 하나의 열에 대해 설정하는 제약은 열을 정의할 때 지정한다. -- 테이블 열에 제약 정의하기 CREATE TABLE sample1 ( a INTEGER NOT NULL, b INTEGER NOT NULL UNIQUE, c VARCHAR(30) ); 이처럼 열에 대해 정의하는 제약을 '열 제약'이라 부른다. '복수열에 의한 기본키 제약'처럼 한 개의 제약으로 복수의 열에 제약을 설명하는 경우를 '테이블 제약'이라 부른다. -- 테이블에 '테이블 제약' 정의하기 CREATE TABLE sample1 ( no INTEGER ..
[SQL] 테이블 작성/삭제/변경 테이블 작성 CREATE TABLE로 테이블을 작성할 수 있다. -- 형식 CREATE TABLE 테이블명( 열 정의1, 열 정의2, ... ) -- 예시 CREATE TABLE sample1 ( no INTEGER NOT NULL, a VARCHAR(30), b DATE); 테이블 삭제 DROP TABLE 명령을 사용하여 필요 없는 테이블을 삭제한다. DROP TABLE 테이블명 테이블 정의는 그대로 둔 채 테이블의 모든 행을 삭제해야 할 때 TRUNCATE TABLE 명령을 사용한다. TRUNCATE TABLE 테이블명 테이블 변경 테이블을 작성해버린 뒤에도 열 구성을 변경할 수 있다. 이때 테이블 변경은 ALTER TABLE 명령을 통해 이루어진다. ALTER TABLE 테이블명 변경명령 ALTER..
[SQL] 상관 서브쿼리 EXISTS 서브쿼리를 사용해 검색할 때 '데이터가 존재하는지 아닌지' 판별하기 위해 조건을 지정할 수도 있다. 이런 경우 EXISTS 술어를 사용해 조사할 수 있다. -- EXISTS를 사용해 '있음'으로 갱신하기 UPDATE sample1 SET a = '있음' WHERE EXISTS (SELECT * FROM sample2 WHERE no2 = no); NOT EXISTS '없음'의 경우, 행이 존재하지 않는 상태가 참이 되므로 이때는 NOT EXISTS를 사용한다. NOT을 붙이는 것으로 값을 부정할 수 있다. -- NOT EXISTS를 사용해 '없음'으로 갱신하기 UPDATE sample1 SET a = '없음' WHERE NOT EXISTS (SELECT * FROM sample2 WHERE ..
[SQL] 서브쿼리 서브쿼리 서브쿼리는 SELECT 명령에 의한 데이터 질의로, 상부가 아닌 하부의 부수적인 질의를 의미한다. 상위 쿼리의 결과에 영향을 주지 않으면서 상세한 정보를 얻기 위해 사용됩니다. 쉽게 말하면, 한 쿼리 안에서 다른 쿼리를 실행하여 더 자세한 결과를 얻는 방식이라고 할 수 있습니다. 서브쿼리는 SQL 명령의 WHERE 구에서 주로 사용된다. WHERE 구는 SELECT, DELETE, UPDATE 구에서 사용할 수 있는데 이들 중 어떤 명령에서든 서브쿼리를 사용할 수 있다. 스칼라 값 서브쿼리를 사용할 때는 SELECT 명령이 어떤 값을 반환하는지 주의할 필요가 있다. 여러 가지 패턴 중에서도 다음과 같은 네 가지가 일반적인 서브쿼리 패턴이다. -- 1. 하나의 값을 반환하는 패턴 SELECT MI..
[SQL] GROUP BY GROUP BY *형식 SELECT * FROM 테이블명 GROUP BY 열1, 열2, ... *예시 [sample1] no name quantity 1 A 1 2 A 2 3 B 10 4 C 3 5 NULL NULL -- GROUP BY 구에 name 열을 지정해 그룹화하기 SELECT name FROM sample1 GROUP BY name; name A B C NULL DISTINCT를 지정했을 때와 같은 결과가 나왔다. GROUP BY 구에 열을 지정하여 그룹화하면 지정된 열의 값이 같은 행이 하나의 그룹으로 묶인다. GROUP BY 구를 지정하는 경우에 집계함수와 사용하면 GROUP BY 구로 그룹화된 각각의 그룹이 하나의 집합으로서 집계함수의 인수로 넘겨진다. -- GROUP BY 구와 집계함수..
[SQL] 집계함수 집계함수 집계란 집합으로 부터 하나의 값을 계산하는 것이다. SQL은 집합을 다루는 집계함수를 제공한다. 대표적인 집계함수는 COUNT, SUM, AVG, MIN, MAX 가 있다. 일반적인 함수는 인수로 하나의 값을 지정하는데 비해 집계함수는 인수로 집합을 지정한다. 이 때문에 집합함수라고도 불린다. 즉, 집합을 특정 방법으로 계산하여 그 결과를 반환한다. 집계함수는 집합 안에 NULL 값이 있을 경우 이를 제외하고 처리한다. COUNT로 행 개수 구하기 COUNT 집계함수로 행 개수를 구할 수 있다. -- 형식 COUNT(집합) -- 예시 SELECT COUNT(*) FROM sample1; -- 5 SELECT COUNT(*) FROM sample1 WHERE name = 'A'; -- 2 SELE..
[SQL] CASE 문 CASE 문 RDBMS에 준비된 함수를 사용해 데이터를 특정 형태로 변환하는 경우도 있지만, 임의의 조건에 따라 독자적으로 변환 처리를 지정해 데이터를 변환하고 싶은 경우도 있다. 이때 CASE 문을 이용할 수 있다. *형식 CASE WHEN 조건식1 THEN 식1 WHEN 조건식2 THEN 식2 ELSE 식3 END *예시 -- CASE로 NULL 값을 0으로 변환하기 SELECT a, CASE WHEN a IS NULL THEN 0 ELSE a END "a(null=0)" FROM sample1; COALESCE NULL 값을 변환하는 경우라면 COALESCE 함수를 사용하는 편이 더 간단하다. SELECT a, COALESCE(a, 0) FROM sample1; COALESCE 함수는 여러 개의 인..
[SQL] 날짜 연산 SQL 날짜 날짜나 시간 데이터는 수치 데이터와 같이 사칙 연산을 할 수 있다. 날짜시간 데이터를 연산하면 결괏값으로 동일한 날짜시간 유형의 데이터를 반환하는 경우도 있으며 기간(간격)의 차를 나타내는 기간형(interval) 데이터를 반환하는 경우도 있다. 기간형은 '10일간', '2시간10분'과 같이 시간의 간격을 표현할 수 있다. 1. 시스템 날짜 시스템 날짜란 하드웨어 상의 시계로부터 실시간으로 얻을 수 있는 일시적인 데이터를 말한다. RDBMS에서도 시스템 날짜와 시간을 확인하는 함수를 제공한다. 표준 SQL에서는 'CURRENT_TIMESTAMP'라는 함수로 실행했을 때를 기준으로 시간을 표시한다. CURRENTA_TIMESTAMP는 일반적인 함수와는 달리 인수를 지정할 필요가 없으므로 괄호를..
[SQL] 문자열 연산 문자열 결합 문자열 결합이란 다음과 같이 문자열 데이터를 결합하는 연산이다. -- 문자열 결합 'ABC' || '1234' -- 'ABC1234' 문자열을 결합하는 연산자에는 데이터베이스 제품마다 방언이 있으며 다음과 같은 차이를 가진다. 연산자/함수 연산 데이터베이스 + 문자열 결합 SQL Server || 문자열 결합 Oracle, DB2, PostgreSQL CONCAT 문자열 결합 MySQL SELECT quantity + unit FROM sample1; SELECT quantity || unit FROM sample1; SELECT CONCAT(quantity, unit) FROM sample1; SUBSTRING 함수 SUBSTRING 함수는 문자열의 일부분을 계산해서 반환해주는 함수이다. ..
[SQL] 결과 행 제한 행수 제한 LIMIT 구는 표준 SQL은 아니다. MySQL과 PostgreSQL에서 사용할 수 있는 문법이다. LIMIT 구는 SELECT 명령의 마지막에 지정하는 것으로 WHERE 구나 ORDER BY 구의 뒤에 지정한다. LIMIT로 지정하는 것은 '최대 행수'이다. 만약 테이블에 하나의 행만 있다면 LIMIT 3으로 지정해도 1개의 행이 반환된다. -- 형식 SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열명 LIMIT 행수 -- 예시 SELECT * FROM sample1 LIMIT 3; SELECT * FROM sample1 ORDERY BY no DESC LIMIT 3; LIMIT를 사용할 수 없는 데이터베이스에서의 행 제한하려면 ROWNUM이라는 열을 사용해 WHER..
[SQL] 패턴 매칭 패턴 매칭 = 연산자로 검색하는 경우는 셀의 데이터 값이 완전히 동일한지를 비교한다. 하지만 특정 문자나 문자열이 포함되어 있는지를 검색하고 싶은 경우에 '패턴 매칭' 을 사용한다. LIKE 술어를 사용하여 패턴 매칭으로 검색할 수 있다. 패턴을 정의할 때 사용할 수 있는 메타문자로는 %와 _이 있다. %는 임의의 문자열과 매치하며, 빈 문자열에도 매치한다. -- 형식 열명 LIKE '패턴' -- 예시 SELECT * FROM sample1 WHERE text LIKE 'SQL%'; SELECT * FROM sample1 WHERE text LIKE '%SQL%';
[SQL] 데이터베이스와 SQL SQL DBMS는 데이터베이스를 관리하는 소프트웨어이다. DBMS를 이용하면 간접적으로 데이터베이스를 참조할 수 있고, 혹은 데이터를 추가하거나 삭제, 갱신할 수도 있다. 이 같은 DBMS와의 대화에 필요한 것이 SQL이다. SQL은 그중 '관계형 데이터베이스 관리 시스템(RDBMS: Relational Database Management System)'을 조작할 때 사용한다. *SQL 명령의 종류 DML(Data Manipulation Language) 데이터베에스에 새롭게 데이터를 추가하거나 삭제하거나 내용을 갱신하는 등, 데이터를 조작할 때 사용한다. SQL의 가장 기본이 되는 명령셋(set)이다. DDL(Data Definition Language) 데이터를 정의하는 명령어. 데이터베이스는 '데이..
[SQL] INNER JOIN, OUTER JOIN JOIN JOIN은 두 개 이상의 테이블에서 데이터를 가져와서 연결하는 것을 의미한다. 이를 통해 테이블 간의 관계를 이해하고 복잡한 데이터를 쉽게 처리할 수 있다. JOIN을 사용하는 방법은 크게 두 가지로, INNER JOIN 과 OUTER JOIN이 있다. INNER JOIN과 OUTER JOIN은 JOIN(조인)하는 대상 테이블 간에 일치하는 데이터를 가져오는 방식에서 차이가 있다. INNER JOIN은 두 테이블 간에 일치하는 데이터만 가져온다. 즉, JOIN하려는 두 테이블에서 모두 데이터가 존재하는 경우에만 결과로 나타난다. 반면, OUTER JOIN은 JOIN하려는 두 테이블 중 하나에 데이터가 있어도 결과를 가져오는 것이다. INNER JOIN(내부 조인) INNER JOIN은 조인 중 ..
[SQL] INSERT, SELECT, UPDATE, DELETE CRUD 기본적인 데이터 처리 기능인 Create(생성), Read(읽기), Update(갱신), Delete(삭제)를 묶어서 일컫는 말이다. Create 새로운 데이터를 추가할 때 사용한다. -- 형식 INSERT INTO table_name (column1, column2, ..) VALUES (value1, value2, ..); -- 예시 INSERT INTO students (name, age, gender) VALUES ('John', 20, 'M'); Read 데이터를 조회할 때 사용한다. -- 형식 SELECT column1, column2, ... FROM table_name WHERE condition; -- 예시 SELECT name, gender FROM students WHERE ..