sql 기초 모음
0. 기초 용어
- FIELD : COLUMN
- RECORD : ROW
- as(alis) : 별명, 테이블 혹은 field에 임시이름을 지정
SELECT column_name AS alias_name FROM table_name; |
SELECT column_name(s) FROM table_name AS alias_name; |
1. 데이터 조작어(DML:data Manipulation language)
- select: 데이터베이스에 들어 있는 데이터를 조회하거나 검색하기 위한 명령어
SELECT column1, column2, ... FROM table_name; -- FIELD에 해당하는 RECORD를 불러옴 |
SELECT * FROM table_name; -- 모든 FIELD의 RECORD를 불러옴 |
- distict: 데이터의 중복을 배제함
SELECT DISTINCT column1, column2, ... FROM table_name; -- 테이블에서 특정 FIELD를 기준으로 구별되는 값만 불러옴 |
SELECT COUNT(DISTINCT column1) FROM grade_table; -- 구별된 column1의 개수를 나타냄 |
- insert into: 데이터베이스 테이블에 새로운 행을 넣음
INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...); |
INSERT INTO table_name VALUES (value1, value2, value3, ...); |
INSERT INTO table2 – 한 테이블의 모든 열을 다른 테이블에 복사 SELECT * FROM table1 WHERE condition; |
INSERT INTO table2 (column1, column2, column3, ...) SELECT column1, column2, column3, ... FROM table1 WHERE condition; - 한 테이블의 일부 열만 다른 테이블로 복사 |
- update: 데이터베이스 테이블에 데이터를 수정함
UPDATE table_name SET column1=value1, column2=value2, ... WHERE condition; |
- delete: 데이터베이스 테이블에 RECORD를 삭제함
DELETE FROM grade_table WHERE id=1009; -- id(필드)가 1009인 RECORD만 삭제 |
DELETE FROM grade_table — RECORD 전체 삭제 |
- TRUNCATE TABLE : 테이블 자체는 삭제되지 않고 RECORD만 삭제
TRUNCATE TABLE table_name; |
- where: 컬럼을 기준으로 특정조건(and/or), 비교, 논리
- like ‘%문자%’: ‘문자’가 포함된 데이터 보이기, ‘%문자_’: 오른쪽에서 두 번째 위치에 ‘문자’를 갖고 있는 데이터
SELECT column1, column2, ... FROM table_name WHERE columnN LIKE pattern; |
- in(‘문자1’, ‘문자2’) : 문자1 혹은 문자2인 데이터
SELECT column_name(s) FROM table_name WHERE column_name IN (value1, value2, ...); |
SELECT column_name(s) FROM table_name WHERE column_name IN (SELECT STATEMENT); |
- not in(‘문자1’, ‘문자2’) : 문자1 혹은 문자2가 아닌 데이터
- between : 특정 조건의 사이
column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2; |
- ‘=’: 동일 / ‘<>’|‘!=’: 동일하지 않음 등 연산부호 사용
- any : 서브쿼리 값 중 하나가 조건을 충족하면 TRUE 반환
SELECT column_name(s) FROM table_name WHERE column_name operator ANY (SELECT column_name FROM table_name WHERE condition); |
- all : 서브쿼리 값 모두가 조건을 충족해야 TRUE 반환
SELECT column_name(s) FROM table_name WHERE column_name operator ALL (SELECT column_name FROM table_name WHERE condition); |
- order by : 특정 기준으로 데이터를 보임, 여러 기준 동시 사용가능
- asc : 오름차순
- desc : 내림차순
- 집계함수
- sum: 총합
- avg : 평균
- min : 최소값
- max : 최대값
- count : 건수
- group by : 특정 기준으로 건수 계산
- having : 데이터 산출 값을 기준으로 나눌 때.
- null: null값이 포함된 데이터 확인
column_names FROM table_name WHERE column_name IS NULL; -- NULL이 있는 RECORD |
column_names FROM table_name WHERE column_name IS NOT NULL; -- NULL이 아닌 RECORD |
- isnull / IFNULL : NULL 대체값을 반환
SELECT isnull (column_name, 대체값) - null을 ‘대체값’으로 변경 FROM table_name |
SELECT isnull (column_name, 대체값) + 500 – null을 ‘대체값으로 변경 후 500을 더함 FROM table_name |
- LIMIT/TOP : 반환할 RECORD 수
SELECT column_name(s) FROM table_name WHERE condition LIMIT number; -- CONDITION 기준으로 상위 RECORD를 NUMBER만큼 반환 | |
SELECT * FROM grade_table LIMIT 5 OFFSET 2; | SELECT * FROM grade_table LIMIT 2,5; -2부터 5개 반환 |
SELECT TOP (NUMBER) column1, column2, ... FROM table_name |
- join
- (INNER) JOIN
SELECT column_name(s) FROM table1 INNER JOIN table2 ON table1.column_name=table2.column_name; |
- LEFT (OUTER) JOIN
SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1.column_name=table2.column_name; |
- RIGHT (OUTER) JOIN
SELECT column_name(s) FROM table1 RIGHT JOIN table2 ON table1.column_name=table2.column_name; |
- FULL (OUTER) JOIN
SELECT column_name(s) FROM table1 FULL JOIN table2 ON table1.column_name=table2.column_name; |
- SELF JOIN : 하나의 테이블을 여러 개로 설정하여 JOIN함.
SELECT column_name(s) FROM table1 T1, table1 T2 WHERE condition; |
- JOIN EXPLAIN
- UNION : 두 개 이상의 SELECT 문에 대한 결과집합(RESULT-SET)을 결합 사용
(조건1: UNION 내의 SELECT 문은 동일한 수의 RECORD를 가져야 함)
(조건2: RECORD는 비슷한 데이터 형식을 가져야 함)
(조건3: 각 SELECT 문의 RECORD는 같은 순서로 있어야 함)
SELECT column_name(s) FROM table1 UNION — 구별되는(DISTINCT) 값만 선택 SELECT column_name(s) FROM table2; |
SELECT column_name(s) FROM table1 UNION ALL — RECORD의 중복 값도 선택 SELECT column_name(s) FROM table2; |
- GROUP BY : 결과집합(RESULT-SET)을 하나 이상의 열에 대해 그룹화하기 위해 사용하며 보통 집계합수와 함께 사용함
SELECT column_name(s) FROM table_name WHERE condition GROUP BY column_name(s) ORDER BY column_name(s); |
- HAVING 절: WHERE절에 집계함수를 사용할 수 없기 때문에 사용
SELECT column_name(s) FROM table_name WHERE condition GROUP BY column_name(s) HAVING condition ORDER BY column_name(s); |
- ANY / ALL (WHERE 참조)
- EXIST : 서브쿼리(subquery)의 레코드 존재 여부 테스트 => 존재
SELECT column_name(s) FROM table_name WHERE EXISTS (SELECT column_name FROM table_name WHERE condition); |
2. 데이터 정의어(DDL: data definition language)
- create: 생성
- DATABASE
CREATE DATABASE databasename; |
- TABLE
CREATE TABLE table_name ( column1 datatype, column2 datatype, column3 datatype, .. ); - 새로운 테이블 만들기 |
CREATE TABLE new_table_name AS SELECT column1, column2, ... FROM existing_table_name WHERE ...; - 기존 테이블을 이용해서 새로운 테이블 만들기 |
- alter: 테이블 변경
- drop: 삭제
- DATABASE
DROP DATABASE databasename; |
- TABLE
DROP TABLE Tablename; |
- rename:
3. 데이터 제어어(DCL: data control language)
- grant: 사용자권한 지정
- revoke:
- savepoint:
4. 트랜잭션 제어어(TCL: transaction control language)
- commit:
- rollback:
sql statement :
데이터 조회: select 컬럼들 from 데이터셋 where 조건
예시: select * from data.dbo.dataset where 작성일 between 2000 and 2017
데이터 수정: update 테이블명 set 바꾸려는 내용(컬럼의 데이터) where 바꾸려는 데이터 조건
예시: update dataset set 작성일 = null where 작성일 = ‘null’
'DBMS' 카테고리의 다른 글
DB 관리툴 - DBeaver 설치 및 사용하기 (0) | 2021.06.30 |
---|---|
[mysql] 파이썬으로 이미지 데이터 mysql에 저장하고 읽어들여오기 (0) | 2019.07.24 |
[mssql] Excel, csv 파일 쉽게 넣기_발생 가능한 오류도 정리 (0) | 2018.06.29 |
데이터 컬럼/필드 삭제 (0) | 2018.06.15 |
[sql] mssql 데이터 삽입 방법 모음 (0) | 2018.05.23 |