SELECT * FROM 테이블명;
- 가장 기본적인 sql문 구조
EX)
sample1
NO | NAME | BIRTH | ADDRESS |
1 | 홍길동 | 1970-11-12 | 대구광역시 수성구 |
2 | 강감찬 | NULL | 서울특별시 마포구 |
> SELECT * FROM sample1;
명령어 실행시 위에 표가 그대로 나오며 명령어를 해석하자면 sample1에 있는 곳에서 *(모두) 출력
- MySQL 특징:
-대소문자를 구별하지 않는다.
-데이터는 자료형으로 분류할 수 있다.
-열은 하나의 자료형만 갖는다.
-NULL은 데이터가 들어있지 않은 것을 의미하는 값이다.
- 테이블 구조 설명
sample1
NO | NAME | BIRTH | ADDRESS |
1 | 홍길동 | 1970-11-12 | 대구광역시 수성구 |
2 | 강감찬 | NULL | 서울특별시 마포구 |
위 같은 테이블이 있다고 할 때
-테이블 명은 sample1
-행(row), 레코드, 튜플(tuple), 카디널리티 = 가로
-열(column), 속성(Attribute), 차수(Degree) = 세로
쉽게 외우는 법_
- 튜카행(튜플, 카디널리티, 행)
- 열차속(열, 차수, 속성)
DESC 테이블명;
- 해당 테이블 구조 참조(sql 명령어는 아님)
EX)
sample2
name | AGE | address |
A | 23 | 대구 |
B | 18 | 부산 |
C | 53 | 서울 |
> DESC sample2;
FIELD | TYPE | NULL | KEY | DEFAULT | EXTRA |
name | varchar(20) | YES | NULL | ||
age | int | YES | NULL | ||
address | varchar(40) | YES | NULL |
SELECT 열 FROM 테이블명 WHERE 조건식;
- 해당 테이블에서 조건에 해당하는 행만 출력
EX)
sample2
name | AGE | address |
A | 23 | 대구 |
B | 18 | 부산 |
C | 53 | 서울 |
> SELECT * FROM SAMPLE2 WHERE AGE = 18;
name | AGE | address |
B | 18 | 부산 |
해석: SAMPLE2라는 테이블에서 AGE가 18인 행을 출력
- 조건식에서 다른 값을 출력하고 싶으면 <>을 사용
> SELECT * FROM SAMPLE2 WHERE AGE <> 18;
name | AGE | address |
A | 23 | 대구 |
C | 53 | 서울 |
해석: SAMPLE2라는 테이블에서 AGE가 18이 아닌 행을 출력
- 문자열을 비교한다면 ' ' 을 사용해야함
> SELECT * FROM SAMPLE2 WHERE NAME = 'A';
name | AGE | address |
A | 23 | 대구 |
- NULL 값을 검색한다면 IS NULL을 사용하고 NULL 값이 아닌 행을 검색한다면 IS NOT NULL을 사용해야함
> SELECT * FROM SAMPLE2 WHERE NAME IS NOT NULL;
name | AGE | address |
A | 23 | 대구 |
B | 18 | 부산 |
C | 53 | 서울 |
- <, >, <=, >=도 사용가능
> SELECT * FROM SAMPLE2 WHERE AGE >= 23;
name | AGE | address |
A | 23 | 대구 |
C | 53 | 서울 |
SELECT 열 FROM 테이블명 WHERE 조건식1 AND 조건식2;
- 여러가지 조건식을 사용하고 싶을 때 사용
- AND는 두 조건식 모두 참이여야 함
- OR는 한 조건식만 참이여도 됨
- AND는 OR보다 우선순위가 높으며 ( )괄호를 통해 변경 가능
- NOT은 해당 조건식이 아닌 나머지 부분을 반환
EX)
SAMPLE
NO | A | B | C |
1 | 1 | 0 | 0 |
2 | 0 | 1 | 0 |
3 | 0 | 0 | 1 |
4 | 2 | 2 | 0 |
> SELECT * FROM SAMPLE WHERE A <> 0 AND B <> 0;
NO | A | B | C |
4 | 2 | 2 | 0 |
해석: SAMPLE 테이블에서 A가 0이 아니고 B도 0이 아닌 값을 검색
> SELECT * FROM SAMPLE WHERE NOT (A <> 0 OR B <> 0);
NO | A | B | C |
3 | 0 | 0 | 1 |
해석: SAMPLE 테이블에서 A가 0이 아니거나 B도 0이 아닌 행을 제외한 나머지 행 검색
SELECT 열 FROM 테이블명 WHERE 열명 LIKE '패턴';
- 부분적으로 일치하는 열값을 검색할 때 사용
- =는 모두가 일치해야함
- 패턴자리에는 %(임의의 문자열), _(임의의 문자 하나)가 들어갈 수 있으며 검색하려는 문자중 어느 위치에 두냐에 따라 결과가 달라짐
- 문자열에 '를 넣고 싶으면 앞에 '를 한번 더 넣으면 됨
EX)
SAMPLE
NO | TEXT |
1 | SQL은 RDBMS를 조작하기 위한 언어이다. |
2 | LIKE에서는 메타문자 %와 _를 사용할 수 있다. |
3 | LIKE는 SQL에서 사용할 수 있는 술어 중 하나이다. |
> SELECT * FROM SAMPLE WHERE TEXT LIKE 'SQL%';
NO | TEXT |
1 | SQL은 RDBMS를 조작하기 위한 언어이다. |
해석: SAMPLE이라는 테이블에서 TEXT라는 열에서 'SQL'로 시작하는 열을 검색(전방일치)
> SELECT * FROM SAMPLE WHERE TEXT LIKE '%SQL%';
NO | TEXT |
1 | SQL은 RDBMS를 조작하기 위한 언어이다. |
3 | LIKE는 SQL에서 사용할 수 있는 술어 중 하나이다. |
해석: TEXT라는 열에서 'SQL'이 들어가는 열 검색(중간일치)
> SELECT * FROM SAMPLE WHERE TEXT LIKE '%\%%';
NO | TEXT |
2 | LIKE에서는 메타문자 %와 _를 사용할 수 있다. |
해석: 메타 문자인 %이나 _을 검색하고 싶으면 앞에 \를 써서 사용
SELECT 열 FROM 테이블명 WHERE 조건식 ORDER BY 열명;
- 검색 결과를 정렬할 때 사용
- 검색시 조건이 필요없다면 FROM 테이블명 ORDER BY 열명;으로 사용
- ASC(오름차순), DESC(내림차순)으로 정렬할 수 있으며 열명 뒤에 사용
- 행 순서가 바뀌 출력되지만 저장장치에는 영향을 주지않음 -> 단지 참조만 변경은 안됨
- 문자열은 사전식으로 순서가 배치됨
EX)
SAMPLE
name | AGE | address |
A | 23 | 대구 |
B | 18 | 부산 |
C | 53 | 서울 |
> SELECT * FROM SAMPLE ORDER BY ADDRESS DESC';
name | AGE | address |
C | 53 | 서울 |
B | 18 | 부산 |
A | 23 | 대구 |
해석: SAMPLE 테이블에서 ADDRESS열을 DESC(내린차순)으로 정렬해 검색
> SELECT * FROM SAMPLE ORDER BY ADDRESS DESC';
SELECT 열 FROM 테이블명 WHERE 조건식 ORDER BY 열명1, 열명2;
- 복수 열을 정렬하고 싶으면 각 열을 ,(콤마)로 구분하고 각 열 뒤에 ASC, DESC를 사용
- NULL값은 대소비교를 할 수 없어 특정 값을 기준으로 비교 정렬
- NULL값은 DBMS에 따라 순서가 달라지는데 MySQL에서는 ASC(오름차순)에서는 가장 먼저, DESC(내림차순)에서는 가장 나중에 표시
EX)
SAMPLE
a | b |
1 | 1 |
2 | 1 |
2 | 2 |
1 | 3 |
1 | 2 |
> SELECT * FROM SAMPLE ORDER BY a, b;
a | b |
1 | 1 |
1 | 2 |
1 | 3 |
2 | 1 |
2 | 2 |
해석: SAMPLE 테이블에서 a, b열을 오름차순으로 정렬하되 앞에 있는 a먼저 정렬 검색
> SELECT * FROM SAMPLE ORDER BY b, a;
a | b |
1 | 1 |
2 | 1 |
1 | 2 |
2 | 2 |
1 | 2 |
해석: b열 먼저 정렬하고 a열을 그에 맞게 정렬 검색
SELECT 열 FROM 테이블명 LIMIT 행수 [OFFSET 시작행];
- 결과 행을 제한할 때 사용
- LIMIT 절은 MySQL에서 사용가능한 문법으로 WHERE, ORDER BY 절 뒤에 사용
ex) SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열명 LIMIT 행수
- 만약 LIMIT 3으로 지정해도 테이블에 행이 하나만 있으면 1개 행만 검색됨
- OFFSET은 N번째 행부터 검색하라는 것으로 배열의 주소라고 생각하면 편함(시작점을 0으로 보면 편함)
ex) SELECT * FROM TABLE LIMIT 3 OFFSET 4; => 4번째 행부터 행 3개 검색
- SQL sever에서는 TOP을 사용하고 Oracle에서는 ROWNUM을 사용해 행 수를 제한
EX)
SAMPLE
no |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
> SELECT * FROM SAMPLE ORDER BY no DESC LIMIT 3;
no |
7 |
6 |
5 |
해석: SAMPLE 테이블에서 no열을 내림차순으로 정렬하고 이를 3개 행만 검색
> SELECT * FROM SAMPLE LIMIT 3 OFFSET 0;
no |
1 |
2 |
3 |
해석: OFFSET이 0이므로 첫 번째 행부터 3개 행만 검색
> SELECT * FROM SAMPLE LIMIT 3 OFFSET 1;
no |
2 |
3 |
4 |
해석: OFFSET이 1이므로 두 번째 행부터 3개 행만 검색
> SELECT * FROM SAMPLE LIMIT 3 OFFSET 3;
no |
4 |
5 |
6 |
해석: OFFSET이 3이므로 4번째 행부터 3개 행만 검색
최종 해석_
no | OFFSET(주소) |
1 | 0 |
2 | 1 |
3 | 2 |
4 | 3 |
5 | 4 |
6 | 5 |
7 | 6 |
=> 첫 번째 행이 0부터 시작한다고 보고 OFFSET 뒤에 수 +1을 하면 그 행부터 시작한다고 볼 수 있음