- 엑셀에서의 워크시트처럼 행(row)과 열(columm)을 갖는 2차원 구조로 구성 - 데이터를 입력하여 저장하는 최소 단위 => 세로 열(Columm) / 가로 열(Row)
특징
- 하나의 테이블은 반드시 하나의 유저(계정) 소유여야 함
- 데이블간 관계는 1:1, 1:N, N:N의 관계를 가질 수 있음
- 데이블명은 중복될 수 없지만, 소유자가 다른 경우 같은 이름으로 생성 가능
- 테이블은 행 단위로 데이터가 입력, 삭제되며 수정은 값의 단위로 가능
SQL
- 관계형 데이터베이스에서 데이터 조회 및 조작, DBMS 시스템 관리 기능을 명령하는 언어 - DDL, DML, DCL 등으로 구분 - SQL 문법은 대, 소문자 구분 X
데이터 무결성(integrity)
- 데이터의 정확성과 일관성을 유지하고, 데이터에 결손과 부정합이 없음을 보증하는 것 - 데이터베이스에 저장된 값과 그것이 표현하는 현실의 비즈니스 모델의 값이 일치하는 정확성을 의미
종류
1. 개체 무결성
2. 참조 무결성
3. 도메인 무결성
4. NULL 무결성
5. 고유 무결성
6. 키 무결성
- 도메인: 각 컬럼(속성)이 갖는 범위 - 릴레인션: 테이블간 관계 - 튜플: 하나의 행 - 키: 식별자
ERD
- 테이블 간 서로의 상관 관계를 그림으로 표현한 것 - 엔터티, 관계, 속성으로 구성됨
2.2 SELECT문
*FROM => WHERE => GROUP BY => HAVING => SELECT => ORDER BY 순서대로 실행 ★★★
SELECT
- 저장되어 있는 데이터를 조회하고자 할 때 사용하는 명령어 - *를 사용하여 테이블 내 전체 컬럼명을 불러올 수 있다. - 원하는 컬름을 ,로 나열하여 작성 가능(순서대로 출력) - 표현식: 원래의 컬럼명을 제외한 모든 표현 가능한 대상
특징
- SELECT절에서 표시할 대상 컬럼에 Alias(별칭) 지정 가능
- 대소문자 구분하지 않아도 인식
# Alias(별칭)
- 컬럼명 대신 출력할 임시 이름 지정 (SELECT절에서만 정의 가능, 원본 컬럼명은 변경되지 않는다.)
- 컬럼명 뒤에 AS와 함께 컬럼 별칭 전달 (AS 생략 가능)
특징 및 주의 사항
- SELECT문 보다 늦게 수행되는 ORDER BY절에서만 컬럼 별칭 사용 가능 (그 외 절에서 사용시 ERROR)
- 한글 사용 가능
- 이미 존재하는 예약어는 별칭 사용 불가
- 다음의 경우 별칭에 반드시 쌍따옴표(" ") 전달 필요
1. 별칭에 공백을 포함하는 경우
2. 별칭에 특수문자를 포함하는 경우("_" 제외)
3. 별칭 그대로 전달할 경우 (입력한 대소를 그대로 출력하고자 할 때)
FROM절
- 데이터를 불러올 테이블명 또는 뷰명 전달 - 테이블 여러 개 전달 가능 - 테이블 별칭 선언 가능 (ORACLE은 AS 사용 불가, SQL Server는 사용/생략 가능) => 테이블 별칭 선언 시 컬럼 구분자는 테이블 별칭으로만 전달 (테이블명으로 사용 시 ERROR) - ORACLE에서 FROM절 생략 불가 - SQL Server에서는 FROM절 필요 없을 경우 생략 가능
* 뷰: 테이블과 동일하게 데이터를 조회할 수 있는 객체지만 테이블처럼 실제 데이터가 지정된 것이 아닌, SELECT문 결과에 이름을 붙여 그 이름만으로 조회가 가능하도록 한 기능
2-3. 함수
함수
- input value와 output value의 관계를 정의한 객체 - FROM절을 제외한 모든 절에서 사용 가능
기능
- 기본적인 쿼리문을 더욱 강력하게 해줌
- 데이터의 계산을 수행
- 개별 데이터의 항목을 수정
- 표시할 날짜 및 숫자 형식을 지정
- 열 데이터의 유형을 반환
종류
- 단일행 함수: input과 output의 관계가 1:1
- 복수행 함수(그룹함수, 집계함수): 여러 건의 데이터를 동시에 입력 받아서 하나의 요약값을 return
문자 함수
1. Lower(문자열): 문자열을 소문자로 변환
EX) LOWER('JENNIE') => jennie
2. UPPER(문자열): 문자열을 대문자로 변환
EX) UPPER('jennie') => JENNIE
3. LTRIM(문자열 [,특정 문자])/ RTRIM(문자열 [,특정 문자]): 왼쪽/ 오른쪽 공백 제거, 왼쪽/ 오른쪽부터 한 글자씩 특정 문자와 비료하여 특정 문자에 포함되어 있으면 제거, 포함되지 않았으면 멈춘다.
EX) LTRIM(' JENNIE') => JENNIE
EX) LTRIM('AABABAA', 'A') => BABAA
4. TRIM([위치] [특정문자] [FROM] 문자열): 왼쪽, 오른쪽 공백 제거, 지정된 곳부터 한 글자씩 특정 문자와 비교하여 같으면 제거, 같지 않으면 멈춘다.
EX) TRIM(LEADING '블' FROM '블랙핑크') => 랙핑크
EX) TRIM(TRAILING '크' FROM '블랙핑크') => 블랙핑
5. SUBSTR(문자열, 시작점 [,길이]): 문자열의 원하는 부분만 잘라서 반환
EX) SUBSTR('블랙핑크제니', 3, 2) => 핑크
EX) SUBSTR('ABCDE', -4, 3) = BCD
6. INSTR(문자열, 찾을 문자열, m, n): 대상에서 찾을 문자열 위치 변환, m 위치에서 시작/ n번째 발견된 문자열 위치
EX) INSTR('A#B#C#', '#') => 2
EX) INSTR('A#B#C#', '#', 3, 2) => 6
7. LENGTH(문자열): 문자열의 길이를 반환
EX) LENGTH('JENNIE') => 6
8. REPLACE(문자열, 변경 전 문자열 [,변경 후 문자열]): 변경 전 문자열을 찾아 변경 후 문자열로 바꿔줌, 문자열 명시하지 않으면 문자열에서 변경 전 문자열을 제거
EX) REPLACE('블랙핑크제니', '제니', '지수') => 블랙핑크지수
EX) REPLACE('블랙핑크제니', '블랙') => 핑크제니
9. LPAD(대상, n, 문자열)/ RPAD(대상, n, 문자열): 대상 왼쪽/ 오른쪽에 문자열을 추가하여 총 n의 길이 리턴
EX) LPAD('ABC', 5, '*') => **ABC
EX) RPAD('ABC', 5, '*') => ABC**
숫자형 함수
1. ABS(수): 수의 절대 값을 반환
EX) ABS(-1) => 1
2. SIGN(수): 양수이면 1, 음수이면 -1, 0이면 0을 반환
EX) SIGN(-7) => -1
3. ROUND(수 [,자리수]): 수를 지정된 소수점 자릿수까지 반올림하여 반환, 자리수 명시하지 않으면 기본값 0
EX) ROUND(163.76, 1) => 163.8
EX) ROUND(163.76, -2) => 200
4. TRUNC(수 [,자리수]): 수를 지정된 소수점 자리수까지 버림 , 자리수 명시하지 않으면 기본값 0
EX) TRUNC(54.29, 1) => 54.2
EX) TRUNC(54.29, -1) => 50
5. CEIL(수): 소수점 이하의 수를 올림한 정수를 반환
EX) CEIL(72.86) => 73
6. FLOOR(수): 소수점 이하의 수를 버림한 정수를 반환
EX) FLOOR(22.3) => 22
7. MOD(수1, 수2): 수1을 수2로 나눈 나머지를 반환
EX) MOD(15, -4) => 3
날짜형 함수
1. SYSDATE: 현재의 연, 월, 일, 시, 분, 초를 반환
EX) SYSDATE => 2024-11-12 16:04:45
2. EXTRACT(특정단위 FROM 날짜 데이터): 날짜에서 특정 단위만을 출력하여 반환
EX) EXTRACT(YEAR FROM SYSDATE) => 2024
3. ADD_MONTHS(날짜 데이터, 특정 개월 수): 날짜 데이터에서 특정 개월 수를 더한 날짜를 반환
- 테이블의 데이터중 원하는 조건에 맞는 데이터만 조회하고 싶을 경우 사용 - 여러 조건 동시 전달 가능 - NULL 조회시 ISNULL/ ISNOTNULL 연산자 가능('='연산자로 조회 불가) - 연산자를 이용하여 다양한 표현 가능 (= , !=, <>, >, <, <=, >=)
*주의사항
- 문자나 날짜 상수 표현 시 반드시 홀따옴표('') 사용 (다른 절에서도 동일 적용)
- ORACLE은 문자 상수의 경우 대소문자 구분
- MSSQL은 기본적으로 문자상수의 대소문자를 구분하지 않는다
부정 비교 연산자
- !=: 같지 않음
- ^=: 같지 않음
- <>: 같지 않음
- not 컬럼명: 같지 않음
- not 컬럼명 >: 크지 않음
SQL 연산자
- BETWEEN A AND B: A와 B 사이(A,B 포함)
EX) where col between 1 and 10 (1, 10 포함)
- LIKE '비교 문자열': 비교 문자열을 포함
1) %: 자리수 제한 없는 모든이라는 의미
2) _: 하나 당 한 자리수를 의미하며 모든 값을 포함
EX) ENAME LIKE 'S%' => 이름이 S로 시작하는
EX) ENAME LIKE '%S%' => 이름에 S를 포함하는
EX) ENAME LIKE '%S' => 이름이 S로 끝나는
EX) ENAME LIKE '_S%' => 이름의 두 번째 글자가 S인
EX) ENAME LIKE '__S__' => 이름의 가운데 글자가 S이며 이름의 길이가 5글자인
- IN(LIST): LIST 중 하나와 일치
EX) where col in (1, 3, 5)
- ISNULL: NULL 값
EX) where col is null
부정 SQL 연산자
- NOT BETWEEN A AND B: A와 B사이가 아님 (A, B 미포함)
- NOT IN(LIST): LIST 중 일치하는 것이 없음
- IS NOT NULL: NULL 값이 아님
논리 연산자
- AND: 모든 조건이 TRUE여야 함
- OR: 하나 이상의 조건이 TRUE여야 함
- NOT: TRUE이면 FALSE, FALSE이면 TRUE
2-5. GROUP BY, HAVING 절
GROUP BY
- 각 행을 특정 조건에 따라 그룹으로 분리하여 계산하도록 하는 구문식 - 그룹에 대한 조건을 WHERE절에서 사용할 수 없음 - GROUP BY절을 사용하면 데이터가 요약되므로 요약되기 전 데이터와 함께 출력할 수 없다.