WHERE

 

 - 테이블에 있는 모든 자료가 아닌 원하는 자료를 검색하기 위해 사용

 - 두 개 이상의 테이블에 대한 조인 조건을 기술하거나 결과를 제한하기 위해 사용

 - 조건절을 사용하지 않고 필요없고 많은 자료들을 요청하는 SQL 문장은 cpu,memory,resources 를 과다하게 사용한다

 

SELECT(ALL/DISTINCT) 칼럼명 (ALIAS명)
FROM 테이블명
WHERE 조건식;

 

where 조건식에는 아래 내용으로 구성된다

1. 칼럼명

2. 비교 연산자

3. 문자, 숫자, 표현식

4. 비교 칼럼명(join 사용시)

 

where PLAYER_NAME = 58; 

 

PLAYER_NAME (칼럼명)

= (비교연산자)

58 (문자, 숫자, 표현식)

 

 

 

 

연산자의 종류

 

 

 

 

 

연산자의 우선순위

 

 

( ) -> NOT -> 비교 연산자, SQL 비교연산자, AND, OR

 

 

 

비교 연산자

 

 - 같다, 보다 크다, 보다 작다 등... 이런거.

 

 

당연히 숫자, 날짜가 아닌이상 ' ' 이런걸로 묶어줘야하는데 그냥 K02 라고 썼으니.. 'K02' 라고 고치면 문제안된다.

 

 

 

위에 where HEIGHT >= 170 을 '170' 이라고 표현해도. height 라는 칼럼이 숫자 타입이라서

내부적으로 '170' 이라는 문자를 숫자 170으로 바꾸어 처리한다.

 

 

 

 

SQL 연산자

 

 - 모든 데이터 타입에 대해서 연산이 가능하다.

 

 

 

 

1. BETWEEN a AND b 

 - a ~  b (a와 b포함)

 

 

2. IN (list)

 (list) 안에 있는 값 중에서 어느 하나라도 일치하면 된다. 

 TEAM_ID 칼럼 안에 'K02' 와 'K07' 어느 하나라도 있는거 다 표시해!

 이건 단일 리스트

 

 

JOB 이 MANAGER 이면서 20번 DEPTNO 에 속하거나

JOB 이 CLERK 이면서 30번 DEPTNO 에 속하는거 표시해줘.

이건 다중 리스트

 

 

 

 

LIKE

 

 - ~와 같다. 

SELECT PLAYER_NAME 선수이름, POSTION 포지션, BACK_NO 백넘버, HEIGHT 키
FROM PLAYER
WHERE POSITION LIKE 'MF';
 

 

POSITION 칼럼에서 MF 같은 결과를 찾아줘!

... 당연히 비교연산자 = 와 같은 결과가 나올것이다. 그럼 왜쓸까.

 

와일드카드를 쓰려고 like 를 쓴다!

 

 

 

장% 이면 장으로 시작하는... 모든것. 뭐.. '장' 도 되고 장으로 시작하는 모든것이니까.

장_ 이면 장으로 시작하고 다음 문자는 단 한글자만 오는것.

%장 하면 ~~~~~~장 이겠지.

 

 

 

 

 

 

IS NULL

 

 - NULL 은 값이 존재하지 않는 것. 확정되지 않은 값을 표현할 때 사용.

   is null? 자바 함수같다.. 혹시 거기 칼럼 비었습니까?? 물어보는건가

 

NULL 의 특성이라고 한다.

1. NULL 값과의 수치 연산은 NULL 값을 리턴한다.

 -> +, -, *, / 이런거랑 NULL 이랑 계산하면. NULL.

2. NULL 값과의 비교연산은 FALSE 값을 리턴한다.

 -> =, >, 이런 비교연산을 NULL 과 비교하면. false 를 리턴

3. NULL 은 어떤 값과 비교할수도 없고 특정 값보다 크다 작다 라고 표현할 수 없다

 -> 무슨 신 인가..??;;

 

 

 null 이랑 비교연산을 하셨네요. 

 

 

 

 

논리 연산자

 

 - AND, OR, NOT. 비교 연산자(<,=,...) 나 SQL 연산자 조건 들을 연결시켜주는것.

 

 

 

1) 소속팀이 K02 or K07

2) and 포지션이 미드필더

3) and 키는 170 이상

4) and 키는 180 이하

 

 

66 개의 결과값이 나왔다. 그런데 포지션을 보면 DF 도 있고 FW 도 있고. 뭔가 이상하다.
괄호가 누락됨으로서 OR 연산자보다 AND 연산자를 먼저 실행했기 때문에 엉켜버렸다.
 
논리연산자들이 여러개가 같이 사용되었을 때에는 ( ), NOT, AND , OR 의 순서대로 처리된다.

다시 바로잡으면...

 

정상적으로 33개의 결과가 나왔다.
 
아까 위에서 배운 in (list) / between a and b 와 or / and  같은말 아닌가??
 
where TEAM_ID in ('K02', 'K07) 과
where (TEAM_ID = 'K02' or TEAM_ID = 'K07')
 

and HEIGHT BETWEEN 170 and 180 과

and HEIGHT >= 170

and HEIGHT <= 180

 

결국. 같은 기능이다. 결과도 같고, 내부적으로 처리되는 방법도 같고.. 

 

 

 

부정 연산자

 

 - ~가 아닌 것.

 

TEAM_ID 이 K02 이며, 포지션이 미드필더가 "아니고", 키가 175 이상 185 이하가 "아닌" 자료들을 표시해줘!

 

 

NOT 칼럼명 =, <>, ^=, !=

이 4개가 모두 같은 뜻인데, != 이게 제일 편한거같다.

 

 

ROWNUM

 

 - ROWNUM (오라클 전용)

 - SQL 결과 표시할때 각 행에 대해 임시적으로 부여되는 일련번호이다

 - 원하는 만큼의 행만 표시할때 where 에서 써준다.

 

SELECT PLAYER_NAME
FROM PLAYER
WHERE ROWNUM (1 건, 2건이상)​

 

1. 한 건의 행만 가져오고 싶을 때 ROWNUM =1 , ROWNUM <2, ROWNUM <=1

 

하면 예를들어 결과가 100개이면, 그중에 처음부터 그냥 1번 2번... 이렇게 매기면서

그 중에 줄 1개만 표시하라는 뜻이다.

그런데, 2 줄을 표시하고 싶다? 그러면

 

ROWNUM =2 라고 쓰면 될거 같지만 안된다.

 

2. 두 건 이상의 행을 가져오고 싶을때 ROWNUM <= N 

 

이렇게 써야한단다. <= 기억. <= <= <= <= 이하. 

 

추가적인 ROWNUM 의 용도르는 태이블 내의 고유한 키나 인덱스 값을 만들 수 있다고 한다

- UPDATE 테이블명

  SET 칼럼명 = ROWNUM;

 

 

 

TOP

 

 - TOP (SQL SERVER 전용)

 - 결과 집합으로 출력되는 행의 수를 제한. 위의 오라클의 rownum 과 같은거 같은데?

 - 한 건의 행만 가져오고 싶을 때 

 - SELECT TOP(1) PLAYER_NAME FROM PLAYER;

 - 두 건 이상의 N 행을 가져오고 싶을 때

 - SELECT TOP(N) PLAYER_NAME FROM PLAYER;

 

SQL 문장에서 ORDER BY 절이 사용되지 않으면 오라클의 ROWNUM 과 SQL SERVER 의 TOP 은 똑같은 기능인데

ORDER BY 사용되면 기능 차이가 발생한다고 한다. 

 

 

 

반응형


글이 도움이 되셨다면 공감과 광고 클릭 한번 부탁드립니다! 💕
감사합니다 ✨