July 28, 2020
SELECT * FROM 테이블명;
SELECT
와 *
그리고 FROM
사이에는 Space를 넣어 구분FROM
과 sample21
사이에도 Space가 필요;
은 명령의 마지막을 나타낸다.만약
;
을 붙이지 않고 명령 실행 시 아직 입력 중인 것으로 간주 된다.
DML
에 속하는 명령SELECT * FROM sample21;
SELECT
는 SQL 명령의 한 종류로 SELECT
명령을 실행하라는 의미*
)는 ‘모든 열’을 의미FROM
은 처리 대상 테이블을 지정하는 키워드SQL
명령은 키워드에 의해 ‘구’라는 단위로 나눌 수 있다.
💡위 명령은 SELECT
구 와 FROM
구 라는 단위로 나눌 수 있다.
SELECT
와 FROM
이 구를 결정하는 키워드이자 예약어이다.같은 이름으로 다른 데이터베이스 객체를 만들 수 없다.
💡위 예제에서 sample21
은 기존 데이터베이스 내에 존재하는 테이블이므로 동일한 이름인 sample21
이 라는 동일한 이름의 새 테이블을 만들 수 없다.
데이터베이스 객체명에는 예약어와 동일한 이름을 사용할 수 없다.
💡예약어인 SELECT
과 이름이 같은 테이블을 생성 할 수 없다.
select * from sample21;
Select * From Sample21;
SELECT * FROM SAMPLE21;
위 예제는 모두 동일하게 동작 한다.
SQL
명령과 달리 많은 데이터베이스 제품들은 데이터의 대소문자를 구별한다.열은 하나의 자료형만 가질수 있다.
💡수치형의 열에 문자형의 데이터를 저장 할 수 없음
NULL
이라는 데이터가 저장되어 있는 것이 아닌 ‘아무것도 저장되어 있지 않은 상태’DESC 테이블명;
Field
: 열의 이름이 표시된다.Type
: 해당 열의 ‘자료형’Null
: NULL
값을 허용할 것인지 아닌지를 나타내는 제약사항Key
: 해당 열이 ‘키’로 지정되어 있는지를 나타냄
💡Key
: 행을 특정하기 위해 사용할 수 있는 열
Default
: 그 열에 주어진 ‘기본값’ 즉CHAR(10)
)CHAR
와 같이 최대 길이를 지정해야 한다.WHERE
구를 사용한다.SELECT
구를 사용한다.SELECT 열1, 열2 ... FROM 테이블명;
,
)로 구분하며 여러 개를 지정 할 수 있다,SELECT FROM sample21;
과 같이 열을 전혀 지정하지 않으면 구문 에러가 발생한다.SELECT no, no ,no ,no FROM sample21;
)SELECT 열 FROM 테이블명 WHERE 조건식;
WHERE
구는 FROM
구의 뒤에 표기WHERE
뒤에 검색 조건을 표기SELECT
의 결과로 반환구의 순서가 정해져 있어 바꿔 적을 수 없다.
💡SELECT 구 → WHERE 구 → FROM 구의 순으로 적으면 에러
WHERE
처럼 생략 가능한 것도 있다.SELECT
의 결과로 반환no=2
는 조건식이다.no
는 열의 이름=
는 연산자로 서로 같은 값이면 참을, 같지 않으면 거짓을 반환하며 ‘비교 연산자’라 한다.<>
연산자는 값이 서로 다른 경우 참이 되는 조건식' '
)로 둘러싸 표기' '
로 둘러싸 표기하며 이때 연월일은 하이픈(-
)으로 구분하고 시각의 시분초는 콜론(:
)으로 구분하여 표기Literal
이라 한다.=
연산자로 검색할 수 없다.IS NULL
을 사용하여 검색NULL
이 아닌 값을 행을 검색할 때는 IS NOT NULL
=
: 좌변과 우변의 값이 같을 경우 참이 된다.<>
: 좌변과 우변의 값이 같지 않을 경우 참이 된다.>
: 좌변의 값이 우변의 값보다 클 경우 참이 된다. 같거나 작을 경우는 거짓이 된다.>=
: 좌변의 값이 우변의 값보다 크거나 같을 경우 참이 된다. 작을 경우는 거짓이 된다.<
: 좌변의 값이 우변의 값보다 작을 경우 참이 된다. 같거나 클 경우는 거짓이 된다.<=
: 좌변의 값이 우변의 값보다 작거나 같을 경우 참이 된다. 클 경우는 거짓이 된다.조건식1 AND 조건식2;
조건식1 OR 조건식2;
NOT 조건식1
SELECT * FROM sample24 WHERE no=1 OR 2;
SELECT * FROM sample24 WHERE no=1 OR no=2;
위 AND예제의 조건식 SELECT * FROM sample24 WHERE a<>0 AND b<>0;
을 OR
연산자를 활용하여 바꾸면 다음과 같이 될 수 있다.
SELECT * FROM sample24 WHERE a=1 OR a=2 AND b=1 OR b=2;
그러나 앞서 AND연산자 예시의 결과와는 다른 것을 확인 할 수 있다.
이는 연산자의 계산 우선 순위가 다르기 때문이다.
a=2 AND b=1
이 먼저 계산된다.즉, 위 예제는 결국 3개의 OR
로 연결된 것과 같아진다.
a=1
a=2 AND b=1
b=2
()
)를 통해 우선순위를 변경 할 수 있다.SELECT * FROM sample24 WHERE (a=1 OR a=2) AND (b=1 OR b=2);
OR
조건식은 괄호로 묶어 지정하는 경우가 많다.⚠️ AND는 OR에 비해 우선 순위가 높다.
열명 LIKE '패턴'
**%
나 _
같은 메타문자를 사용한다.**%
는 임의의 문자열을 의미_
는 임의의 문자 하나를 의미*
는 LIKE
에서는 사용 불가능‘SQL’이라는 문자를 포함한 데이터를 검색한다.
하지만 no
가 3인 행에도 text
에 ‘SQL’이 포함되어 있으나 검색되지 않은걸 알 수 있는데 이는 시작문자가 ‘SQL’이 아니기 때문이다.
따라서 문자열 도중에 존재하는 ‘SQL’을 검색하고자 한다면 다음과 같이 패턴을 바꿀 필요가 있다.
SELECT * FROM sample25 WHERE text LIKE '%SQL%';
여기서 핵심은 메타문자 %가 빈 문자열과도 매치 되는 것이다. no
의 값 1번의 행의 text
의 경우 ‘SQL’앞에 %
와 매치되는 문자열은 없는데도 검색이 되었다.
⚠️ %는 임의의 문자열과 매치하며, 빈 문자열에도 매치한다.
전방일치
SQL%
과 같이 문자열 앞쪽에 지정한 문자와 일치하는 것중간일치
%SQL%
과 같이 지정 문자열이 중간에 있는 것후방일치
%SQL
과 같이 문자열 뒤쪽에 지정한 문자와 일치하는 것\%
와 같이 \
을 %
앞에 붙인다.WHERE text LIKE '%\%%';
%
는 메타문자%
는 앞에 \
가 있어 이스케이프 되어 일반 문자 ’%“가 되었다.%
도 메타문자⚠️ 요약
- ’%’ →
\%
- ’_’ →
\_
'It''s'
''''
IS NULL
AND