일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- SQLD 내용 정리
- 자바 이분 탐색 예제
- SQLD SQL 활용
- 백준 예산 코드
- SQL 기본 및 활용
- 백준 2512 자바
- SQLD
- 백준 1141 접두사
- 백준 2293 자바
- 자바 DP 예제
- 백준 2293 동전 1
- SQLD 책
- 백준
- 백준 접두사 자바
- SQLD 내용
- 알고리즘
- SQLD SQL 최적화 기본 원리
- 백준 예산 자바
- 백준 동전1 자바
- 백준 접두사 로직
- 백준 부분합 로직
- 자바 예제
- 너비우선탐색
- 오라클 예제
- BFS
- 백준 1141
- 백준 1141 로직
- 자바 문자열 예제
- SQLD 요약
- SQLD 정리
- Today
- Total
혼자 공부하는 공간
[SQL기본 및 활용] 2020년 SQLD 내용 정리 :: SQL 기본 #5 본문
<목차>
<< WHERE 절 >>
* SELECT - FROM 을 통해 테이블의 전체 데이터를 조회한다.
* 전체 데이터 중에서 필요한 데이터만을 검색하기 위해 WHERE 절을 사용해 데이터에 조건을 부여할 수 있다.
* WHERE 조건을 사용하지 않고 필요없는 많은 데이터를 요청하는 SQL 문은 대량의 데이터를 검색하므로 서버의 CPU, MEMORY와 같은 시스템 자원(Resource)들을 과다하게 사용한다.
* 기본 Format
SELECT [DISTINCT/ALL] 칼럼명 [ALIAS명]
FROM 테이블명
WHERE 조건;
1. 연산자의 종류
- 연산자의 종류
- 연산자의 우선 순위
2. 비교 연산자
-
비교연산자의 종류
-
예시 - 문제
* 키가 170인 선수의 이름, 포지션, 키를 출력하라. -
예시 - 결과
123SELECT PLAYER_NAME 선수이름, POSITION 포지션, HEIGHT 키FROM PLAYERWHERE HEIGHT >= 170;cs -
문자 유형 비교 방법
3. SQL 연산자
* SQL 문장에서 사용하도록 기본적으로 예약되어 있는 연산자.
* 모든 데이터 타입에 대해서 연산이 가능한 4가지 종류의 연산자 존재.
-
예시 - 문제(IN)
* 소속팀 코드가 K02, K07인 선수의 이름, 포지션, 백넘버, 키를 출력하라.
-
예시 - 결과(IN)
123456789101112131415161718192021SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키FROM PLAYERWHERE TEAM_ID IN ('K02','K07');/*선수이름 포지션 백넘버 키------- ----- ------ ----데니스 FW 11 176서정원 FW 14 173손대호 DF 17 186오규찬 MF 24 178윤원일 MF 45 176김동욱 MF 40 176김회택 DF서현옥 DF정상호 DF최철우 DF정영광 GK 41 185: : : :100개의 행이 선택되었다.*/cs -
예시 - 문제2(IN)
* 사원 테이블에서 JOB이 MANAGER이면서 20번 부서에 속하거나, JOB이 CLERK이면서 30번 부서에 속하는 사원의 정보를 IN 연산자의 다중 리스트를 이용해 출력하라.
-
예시 - 결과2(IN)
1234567891011SELECT ENAME, JOB, DEPTNOFROM EMPWHERE (JOB, DEPTNO) IN (('MANAGER',20),('CLERK',30));/*ENAME JOB DEPTNO------ -------- ------JONES MANAGER 20JAMES CLERK 302개의 행이 선택되었다.*/cs 1234567891011121314SELECT ENAME, JOB, DEPTNOFROM EMPWHERE JOB IN ('MANAGER','CLERK') AND DEPTNO IN (20,30);/*ENAME JOB DEPTNO------ -------- ------SMITH CLERK 20JONES MANAGER 20BLAKE MANAGER 30ADAMS CLERK 20JAMES CLERK 305개의 행이 선택되었다.*/cs * 아래의 결과는 MANAGER인데도 30에 속하는, CLERK 인데도 20에 속하는 데이터가 같이 출력되었다.
* 다중 리스트를 이용한 IN 연산자는 SQL문을 간단하게 만들어 주면서도 성능 측면에서도 장점을 가질 수 있지만, 문제를 잘 파악하여 사용해야한다.
-
예시 - 문제(LIKE)
* "장"씨 성을 가진 선수들의 정보를 출력하라.
-
예시 - 결과(LIKE)
12345678910111213141516171819202122SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키FROM PLAYERWHERE PLAYER_NAME LIKE '장%';/*선수이름 포지션 백넘버 키------- ------ ---- ---장성철 MF 27 176장윤정 DF 17 173장서연 FW 7 180장재우 FW 12 172장대일 DF 7 184장기봉 FW 12 180장철우 DF 7 172장형석 DF 36 181장경진 DF 34 184장성욱 MF 19 174장철민 MF 24 179장경호 MF 39 174장동현 FW 39 17813개의 행이 선택되었다.*/cs -
예시 - 문제(IS NULL)
* NULL은 값이 존재하지 않는 것으로 비교 자체가 불가능한 값.
* NULL 값과의 수치연산은 NULL 값을 반환, 비교연산은 항상 False를 반환. 즉, 어떤 값과 비교할 수도, 크거나 작다고 표현할 수 없음.
* NULL 값과의 비교연산은 IS NULL, IS NOT NULL 을 통해서만 결과를 얻을 수 있다.
* 포지션이 NULL 값인 선수들을 출력하라.
-
예시 - 결과(IS NULL)
1234567891011121314151617SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키FROM PLAYERWHERE POSITION = NULL;/* 선택된 레코드가 없다. */SELECT PLAYER_NAME 선수이름, POSITION 포지션, TEAM_IDFROM PLAYERWHERE POSITION IS NULL;/*선수이름 포지션 TEAM_ID------- ------ -------정학범 K08안익수 K08차상광 K083개의 행이 선택되었다.*/cs
4. 논리 연산자
* 비교 연산자, SQL 연산자들로 이루어진 여러 조건들을 논리적으로 연결시키기 위해 사용하는 연산자.
* 종류
-
예시 - 문제 (AND)
* 소속이 K02이고 키가 170cm 이상인 선수들의 데이터를 출력하라.
-
예시 - 결과 (AND)
1234567891011121314151617181920SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키FROM PLAYERWHERE TEAM_ID = 'K02' AND HEIGHT >= 170;/*선수이름 포지션 백넘버 키------- ------ ---- ---김반코비 MF 47 185김선우 FW 33 174김여성 MF 36 179김용우 FW 27 175김종민 MF 30 174박용훈 MF 9 175김만근 FW 34 177김재민 MF 35 180김현두 MF 12 176이성용 DF 20 173하태근 MF 29 182: : : :45개의 행이 선택되었다*/cs -
예시 - 문제 (OR)
* 소속팀이 K02이거나 K07이고, 포지션이 MF이고, 키는 170cm 이상, 180cm이하인 선수들의 정보를 출력하라.
-
예시 - 결과 (OR)
1234567891011121314151617181920212223SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키FROM PLAYERWHERE (TEAM_ID = 'K02' OR TEAM_ID = 'K07')/* TEAM_ID IN ('K02', 'K07') 과 동일. */AND POSITION = 'MF'HEIGHT >= 170 AND HEIGHT <= 180;/* HEIGHT BETWEEN 170 AND 180 과 . *//*선수이름 포지션 백넘버 키------- ------ ---- ---가비 MF 10 177강대희 MF 26 174고종수 MF 22 176고창현 MF 8 170정기범 MF 28 173정동현 MF 25 175정두현 MF 4 175정준 MF 44 170오규찬 MF 24 178윤원일 MF 45 176김동욱 MF 40 176:::: 33개의 행이 선택되었다.*/c
5. 부정 연산자
* 종류
-
예시 - 문제
* 소속이 K02 이고, 포지션이 MF가 아니고, 키가 175cm 이상 185cm 이하가 아닌 선수들의 정보를 출력하라.
-
예시 - 결과
123456789101112131415161718SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키FROM PLAYERWHERE TEAM_ID = 'K02'AND NOT POSITION = 'MF'AND NOT HEIGHT BETWEEN 175 AND 185;/*선수이름 포지션 백넘버 키------- ------ ----- ---서정원 FW 14 173손대호 DF 17 186김선우 FW 33 174이성용 DF 20 173미트로 FW 19 192최호진 GK 31 190정유진 DF 37 188손승준 DF 32 1868개의 행이 선택되었다.*/cs -
예시 - 문제2
* 국적 칼럼이 NULL이 아닌 선수와 국적을 출력하라. (내국인들은 국적이 NULL 값이다.)
-
예시 - 결과2
1234567891011121314151617181920212223SELECT PLAYER_NAME 선수이름, NATION 국적FROM PLAYERWHERE NATION IS NOT NULL;/*선수이름 국적------- ------가비 루마니아데니스 러시아우르모브 유고이고르 브라질디디 브라질하리 콜롬비아빅토르 나이지리아콜리 세네갈김징요 브라질미트로 보스니아산드로 브라질안드레 브라질뚜따 브라질마르코 브라질.. ..27개의 행이 선택되었다.*/cs
6. ROWNUM, TOP 사용
-
ROWNUM (Oracle)
* Oracle의 ROWNUM은 칼럼과 비슷한 성격의 Pseudo Column으로써 SQL 처리 결과 집합의 각 행에 대해 임시로 부여되는 일련번호.
* 테이블이나 집합에서 원하는 만큼의 행만 가져오고 싶을 때 WHERE 절에서 행의 개수를 제한하는 목적으로 사용됨.
* Ex. 한 건의 결과 행만 출력하고 싶을 때,
SELECT PLAYER_NAME FROM PLAYER WHERE ROWNUM = 1;
* Ex. 2이상의 N개의 행을 출력하고 싶을 때,
SELECT PLAYER_NAME FROM PLAYER WHERE ROWNUM <= N; (ROWNUM = N은 사용 불가)
* 테이블 내 고유한 키, 인덱스 값을 만들 수 있음.
-
TOP (SQL Server)
* 결과 집합으로 출력되는 행의 수를 제한하기 위해 사용.
* Ex. 한 건의 결과 행만 출력하고 싶을 때,
SELECT TOP(1) PLAYER_NAME FROM PLAYER;
* Ex. 2이상의 N개의 행을 출력하고 싶을 때,
SELECT TOP(N) PLAYER_NAME FROM PLAYER;
* 표현식
TOP (Expression) [PERCENT] [WITH TIES]
- Expression : 반환할 행의 수 지정
- PERCENT : 쿼리 결과 집합에서 처음 Expression%의 행만 반환
- WITH TIES : ORDER BY 절과 함께 사용.
* SQL 문장에서 ORDER BY 절이 사용되지 않으면 Oracle의 ROWNUM, SQL Server의 TOP 절은 같은 기능을 하지만, ORDER BY 절과 함께 사용되면 서로 기능이 달라짐.
출처
질문은 댓글로 남겨주시면 되겠습니다. 감사합니다.
'자격증 > SQLD' 카테고리의 다른 글
[SQL기본 및 활용] 2020년 SQLD 내용 정리 :: SQL 기본 #7 (0) | 2020.08.22 |
---|---|
[SQL기본 및 활용] 2020년 SQLD 내용 정리 :: SQL 기본 #6 (0) | 2020.08.21 |
[SQL기본 및 활용] 2020년 SQLD 내용 정리 :: SQL 기본 #4 (0) | 2020.08.16 |
[SQL기본 및 활용] 2020년 SQLD 내용 정리 :: SQL 기본 #3 (0) | 2020.08.16 |
[SQL기본 및 활용] 2020년 SQLD 내용 정리 :: SQL 기본 #2 (0) | 2020.08.15 |