## SELECT 구문 기본형식
SELECT * | 컬럼명 | 수식 |
[FROM] 테이블명
;
-- DUAL 테이블
>> 테이블이 없는 경우 SELECT 구문에 대한 DUMMY 테이블명
## SELECT 구문 전체형식
## SELECT 구문 전체형식
SELECT * | 컬럼명 | 수식 |
FROM 테이블명
WHERE 검색조건
GROUP BY 그룹핑컬럼명1, 그룹핑컬럼명X
HAVING 그룹핑조건
ORDER BY 정렬컬럼명 정렬방법, 정렬컬럼명 정렬방법
;
## SELECT
-- * : 테이블 구조에 맞는 모든 컬럼 순서대로
-- 컬럼명A, 컬럼명C : 원하는 컬럼을 원하는 순서대로
-- 수식
-- 컬럼명 별명, 컬럼명 "별 명", 수식 "별명"
>> 별명에 공백이 있는 경우에는 " " 감싸주어야함
-- DISTINCT 컬럼명1, 컬럼명X
## SELECT 구문 파싱(처리) 순서
from where group having select order
## 연산자
-- 사칙연산: + - * / % MOD(분모, 분자)
-- 비교연산:
<, <=, >, >=
= (같다)
!=, <> (다르다)
-- 논리연산: AND, OR, NOT
-- SQL 전용연산자:
BETWEEN A 이상 AND B 이하
IN (값1, 값2, 값X) => OR
NOT IN()
IS NULL, IS NOT NULL
LIKE 'ABC%', '%ABC', '%ABC%'모든문자, '_' 한문자
## DML: 데이터조작어
-- INSERT
-- UPDATE
-- DELETE
## UPDATE 형식
UPDATE 테이블명
SET 수정할컬럼명=수정할값,
수정할컬럼명2=수정할값2,
WHERE 변경조건 (OR/AND);
## INSERT 형식
1.
테이블 구조에 맞는 모든 컬럼에 매핑되는 값을 지정,
데이터가 없는 컬럼인 경우에도 값을 지정(기본값 임의지정, NULL)
INSERT INTO 테이블명
VALUES(컬럼값1, 컬럼값2, 컬럼값X)
2.
지정한 컬럼명에 매핑되는 값을 지정
생략가능한 컬럼: NULL, DEFAULT 설정, AUTO_INCREMENT 설정
주의: 필수컬럼(NOT NULL, PRIMARY KEY)은 누락되어서는 안됨
INSERT INTO 테이블명(컬럼명A, 컬럼명B)
VALUES(컬럼A값, 컬럼B값, 컬럼값X)
3.
INSERT INTO 테이블명(컬럼명A, 컬럼명B)
VALUES
(컬럼A값, 컬럼B값),
(컬럼A값, 컬럼B값),
(컬럼A값, 컬럼B값);
-- 단일행 컬럼 지정 추가:
INSERT INTO EMPLOYEES(EMPLOYEE_ID, LAST_NAME, EMAIL, HIRE_DATE, JOB_ID)
VALUES (300, '고', 'holmir@naver.com', '2018-03-01', 'AD_PRES');
-- 다중행 컬럼 지정 추가:
INSERT INTO EMPLOYEES(EMPLOYEE_ID, LAST_NAME, EMAIL, HIRE_DATE, JOB_ID)
VALUES
(207, 'Heo', 'uiu1442@naver.com', 20220115, 'IT_PROG'),
(300, '고', 'holmir@naver.com', '2018-03-01', 'AD_PRES');
## SQL 데이터 처리(표기방법)
-- 숫자: 1234, 123.456
-- 문자, 날짜: '문자열', '날짜', '2022-03-16'
-- 값은 대소문자 구분
## DELETE 형식
DELETE FROM 테이블명
[WHERE 조건절;]
## ----------------------------
## 함수
## ----------------------------
## 작성자 기준
-- ANSI 표준 함수
-- 특정 DBMS 벤더 전용 함수: MYSQL 전용, ORACLE 전용
-- 사용자 정의 함수
>> PL/SQL
>> stored Function, Stored Procedure
## 수행결과 반환 기준
-- 단일행 함수
>> 하나의 레코드에 대해서 하나의 결과를 반환하는 함수
>> length(), trim()
-- 그룹(복수행 함수)
>> 여러개의 레코드에 대해서 연산후 하나의 결과
>> count(*), max()
## 문자관련 함수
-- length
>> 문자길이 반환
>> 영문, 숫자는 한자리는 1byte
>> 한글 한자리는 2byte, 3byte 반환: db 설정
>> 테이블 설계시에 한글데이터 컬럼의 경우는 길이 * db설정byte길이
-- trim(), ltrim(), rtrim(): 공백 제거
>> 문자열 타입
>> char(고정길이)
>> varchar(가변길이)
>> datal char(10) => 'abc '
>> data2 varchar(10) => 'abc'
insert into table-name(data1, data2)
values('abc', 'abc');
-- insert()
-- replace()
-- instr()
-- substring()
-- mid()
-- lower()
-- upper()
-- concat()
## 숫자 관련 함수
-- abs(숫자) : 절댓값
-- truncate(숫자, [자릿수]) : 버림
-- round(숫자, [자릿수]) : 반올림
-- ceil(숫자, [자릿수]) : 올림
-- floor(숫자, [자릿수]) : 내림
-- mod() : 나머지
## 날짜/시간 관련 함수
-- 현재 날짜 시간: yyyy-mm-dd hh:mi:ss
-- now(), sysdate(), current_timestamp();
-- current_date(), curdate();
-- current_time(), curtime();
-- year(now()), month(now());
## 복수행(그룹함수)
-- count(*), count(pk) : 전체 레코드 행수 반환
-- count(컬럼명): null을 제외한 행수 반환
-- sum() : 총액
-- max() : 최대
-- min() : 최소
-- avg() : 평균
## null
-- null의 의미는 어떠한 값인지 알 수 없음
-- 연산 수행 불가
-- true and null => null
-- false and null => false
-- 올림차순정렬: null -> 작은값 -> 큰값
-- 내림차순정렬: 큰값 -> 작은값 -> null
-- ifnull(값1 null이면, 값2 대체)
-- if(조건식, true시 반환값, false시 반환값)
-- nullif(값1, 값2)
>> 값1 = 값2 같으면 null
>> 값1 != 값2 다르면 값1 반환
## 정렬
-- 정렬방법
>> 올림차순: asc(생략 기본)
>> 내림차순: desc(명시적 표기)
-- 정렬데이터순서
>> abc, 가나다
>> 숫자, 날짜: 작은것 ~ 큰것
-- 정렬대상
>> 컬럼명
>> 컬럼에대한 별명
>> select 항목에대한 index번호: index 시작 1번
>> 수식
## 그룹핑
-- select 절에 제약
>> group by 사용컬럼, 그룹함수
-- group by 그룹핑컬럼명1, 그룹핑컬럼명X having 그룹핑조건
-- having 절만 사용할 수 없음 => 이유: 그룹핑 결과에 대한 조건
## TCL: 트랜잭션 제어
-- transaction: 최소 작업단위
-- 계좌이체
>> a계좌 인출
>> b계좌 입금
-- 도서관 도서 대량구매
>> 동일한 도서가 중복 존재
>> 마스터 테이블: 단일 도서에 대한 정보
>> 디테이 테이블: 중복된 도서의 수량만큼 정보
-- start transaction
>> 트랜잭션 시작
-- savepoint 포인트명
>> 복구지점 지정
-- rollback
>> 원래상태 복구: 트랜잭션 시작 전체 원래상태 복구
-- rollback to 포인트명;
>> 포인트지점까지만 원래상태 복구
-- commit
>> 영구 반영
## commit
-- DDL : auto commit
>> 객체 생성, 변경, 삭제
-- DML :
>> 레코드 추가, 변경, 삭제: 명시적 commit, rollback
>> 개발자가 명시적으로
-- 콘솔, workbench 종료: auto commit
-- 콘솔, workbench 설정
>> auto commit : 설정
>> auto commit : 미사용
## view
-- 가상 테이블
-- 보안: 일부 컬럼에 대해서만 접근, 조회 전용
-- 편리성
-- view 생성
create view 뷰이름
as
select 구문
;
-- view 삭제
drop view 뷰이름;
-- 30번 부서원들의 부서번호, 사번, 이름, 급여정보를 갖는 view 생성
>> view이름: view_emp30
-- view를 통해서 레코드 추가 가능: 필수항목 포함하는 view 구조 생성
직원테이블 필수항목:
employees_id, last_name, email, hire_date, job_id
-- 부서번호, employee_id, last_name, email, hire_date 구조를 갖는 view 생성
create view view_emp30
as
select department_id, employee_id, last_name, email, hire_date, job_id, salary
from employees
where department_id=30;
## 인덱스
-- 레코드 검색 기준: 책 목차 개념
-- PK 컬럼에는 자동으로 인덱스 객체 생성
-- 검색 속도 빠름
-- cud: 레코드 추가, 변경, 삭제 속도 저하
-- where 조건절에 많이 사용하는 컬럼에 인덱스 추가
'프로그래밍 > DB' 카테고리의 다른 글
[SQL][프로그래머스] SELECT 문제 풀이 (0) | 2022.10.15 |
---|---|
[SQL][프로그래머스] JOIN 문제 풀이 (0) | 2022.10.14 |
[mysql] 데이터 가공(csv, json, import, export) 오류 (0) | 2022.06.15 |
mysql - 실습(5-3) (0) | 2022.03.16 |
mysql - 실습(6-3) (0) | 2022.03.16 |