DDL(Data Definition Language) 데이터 정의어
create : 생성
alter : 변경
drop : 삭제
rename
DML(Data Manipulation Language) 데이터베이스 조작어
select
delete
update
insert
DCL 데이터 제어어
GRANT, REVOKE
TCL
commit
rollback
[SELECT 예제]
select * from sample21;
'*' 을 붙이면 전체 선택
select name from sample21;
select from 사이에 name을 붙이면 name만 출력 할 수 있다.
위 sample21 테이블을 만드는 법
create table sample21(
no int,
name varchar(4),
birthday date,
address varchar(30)
)
desc sample21;
Field : 필드의 이름이 들어감, 열(Column) 또는 속성(attribute)라고 불림
Type : 타입형[ int(integer), char, varchar, date 등 들어감 ]
Null : 널이여도 되는지 여부(YES, NO)
Key : 현재는 키값이 없음
Default(기본값) : 따로 지정해주지 않으면 기본값으로 NULL값이 들어감
숫자 : int(integer) 정수값을 저장할 수 있는 자료형
문자(char, varchar) :
char - 고정문자열(데이터 길이 고정)
varchar - 가변문자열(데이터 길이 가변)
날짜 : date 날짜값을 저장할 수 있는 자료형
시간 : time 시간을 저장할 수 있는 자료형
Syntax
SELECT 열1, 열2 FROM 테이블명 WHERE 조건식
[예제]
select * from sample21;
Syntax
SELECT 열1, 열2 ··· FROM 테이블명
원본 테이블
select name, address from sample21;
select gender from sample21;
select no, name from sample21;
원본 테이블에 없는 값을 불러오라고 하면 오류를 발생시킴.
Syntax
SELECT 열 FROM 테이블명 WHERE 조건식
[예제]
-- no 열의 값이 2인 행만 검색
select *
from sample21
where no = 2
;
-- no 열의 값이 2가 아닌 행만 검색
select *
from sample21
where no != 2
;
-- NAME열의 값이 박준영인 행만 검색
SELECT *
FROM SAMPLE21
WHERE NAME='박준용'
;
-- 문자열의 경우 ' ' 혹은 " "를 꼭 넣어줘야한다.
-- 생일을 입력하지 않는 사람 조회하기
SELECT *
FROM SAMPLE21
WHERE BIRTHDAY IS NULL
;
-- NULL 값을 검색할 경우에는 IS NULL을 사용
= NULL << 안됨.
- SELECT 쿼리 실행 순서와 생략
SQL에서 실행 순서가 정해져 있어 바꿔적으면 에러가 발생한다.
WHERE 처럼 생략 가능한 것도 있다.
만약 생략한 경우는 테이블 내의 모든 행이 검색 대상이 된다.
SELECT 쿼리문은 FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY 총 6단계를 거친다.
FROM절(+ Join) : FROM 절에서는 조회하는 테이블 전체를 가져온다. INDEX 를 사용하지 않는다는 가정에서 WHERE이나 SELECT 절에서 일부 행이나 열을 제거하여 출력한다고 해도 가장 처음에 테이블의 모든 데이터를 가져온다.
WHERE : FROM절에서 읽어온 테이블에서 조건에 맞는 결과만 갖도록 데이터를 필터링한다.
GROUP BY : 선택한 칼럼으로 그룹핑한다.
HAVING : 그룹핑 후에 각 그룹에 사용되는 조건 절이다. HAVING절의 조건을 WHERE 절에도 사용할 수 있는 경우라면 WHERE 절에 사용하는 것이 바람직하다. HAVING절은 각 그룹에 조건을 걸기 때문에 퍼포먼스가 떨어지게 된다.
예를 들어 MONEY > 10000은 모든 레코드에 MONEY가 10000이 넘어야 한다는 조건이다.
이는 각 그룹에 따로 거는 것보다는 WHERE절로 한번에 거는 것이 좋다. (현재는 내부적으로 Optimize 해준다.)
반면, AVG(MONEY) > 10000처럼 집계함수의 경우에는 각 그룹별로 평균을 구하는 것과 전체 평균을 구하는 것은
다르게 동작하기 때문에 HAVING절을 사용해야 한다.
SELECT : 여러 조건들을 처리한 후 남은 데이터에서 어떤 열을 출력해줄지 선택한다.
ORDER BY : 어떤 열까지 출력할지 정했다면 행의 순서를 어떻게 보여줄지 정렬해주는 절이 ORDER BY이다.
LIMIT : 결과 중 몇개의 행을 보여줄 지 선택한다.
Syntax AND, OR, NOT
조건식 1 AND 조건식2
조건식 1 OR 조건식2
NOT 조건식
[예제]
원본 테이블 SAMPLE24
SELECT * FROM SAMPLE24;
-- A열과 B열이 모두 0이 아닌 행 검색
SELECT *
FROM SAMPLE24
WHERE A AND B <> 0
;
-- A열과 B열이 모두 0이 아닌 행 검색
SELECT *
FROM SAMPLE24
WHERE A <> 0
AND B <> 0
;
-- A열이 0이 아니거나 B열이 0이 아닌 행을 검색
SELECT *
FROM SAMPLE24
WHERE A <> 0
OR B <> 0
;
-- a열이 1또는 2이고, b열이 1또는 2인 행을 검색
SELECT * FROM SAMPLE24 WHERE (A = 1 OR A = 2) AND (B = 1 OR B = 2);
AND는 OR에 비해 우선순위가 높다.
조건이 잘못 지정되는것을 방지하기 위해 위와같이 괄호로 묶는게 좋다.
-- a열이 0이 아니거나 b열이 0이 아닌 행을 제외한 나머지 행을 검색
SELECT * FROM SAMPLE24 WHERE NOT(A<>0 OR B<>0);
Syntax LIKE
열 LIKE 패턴
LIKE에서 사용할수 있는 메타문자
%(퍼센트)
_(언더스코어)
임의의 문자 또는 문자열에 매치하는 부분을 지정하기 위해 쓰이는 특수 문자
퍼센트는(%)는 임의의 문자열을 의미하며,
언더스코어(_)는 임의의 문자 하나를 의미한다.
[예제]
LIKE 'SQL%'
- SQL로 시작하는 문장
LIKE '%SQL%'
- SQL단어가 포함된 문장
LIKE '%SQL'
- SQL 단어가 포함된 문장
LIKE 'SQL_'
- SQL로 시작하되, 총 글자수가 4글자인 문장
LIKE '_SQL_'
- SQL단어가 포함하되, 총 글자수가 5글자인 문장
LIKE '_SQL'
- SQL로 끝나되, 총 글자수가 4글자인 문장
[원본 테이블 SAMPLE25]
SELECT * FROM SAMPLE25
WHERE text LIKE 'SQL%'
;
SELECT * FROM SAMPLE25
WHERE text LIKE 'SQL%'
;
%(퍼센트)는 위처럼 임의의 문자열을 의미하는ㄴ데 이것을 검색하고 싶다면 아래와 같이 사용한다.
%\%%
%를 LIKE로 검색할 경우에는 \%로
_를 LIKE로 검색할 경우에는 \_로 한다.
[예제]
SELECT * FROM SAMPLE25
WHERE text LIKE '%\%%'
;
Syntax 문자열 상수 안에 ' 기술하기
'It'S'라는 문자열을 문자열 상수로 표기하면 'It''s''로 쓴다.
It's → 'It''s'
' → ''''
'을 문자열 상수 안에 포함할 경우는 '를 2개 연속해서 기술한다.
참고한 블로그
: https://jaehoney.tistory.com/191