OPEN between Secret

SQL 기본 및 활용(where, function ) 본문

DB/SQLD

SQL 기본 및 활용(where, function )

해가꿈꾸는달 2015. 3. 5. 17:47
반응형

WHERE 절 학습하기


- 두개 이상의 테이블에 대한 INNER JOIN을 지원하는 다른 기능도 갖고 있다.

- 사용자들이 원하는 자료만을 검색하기 위해 WERHE절을 이용하여 자료들에 대하여 제한할 수 있음.

- 조회하려는 데이터의 특정 조건을 부여할 목적으로 사용하기 때문에 from 절 뒤에 오게 되있음.



연산자 종류






EX) 


a.


SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키

FROM PLAYER

WHERE(TEAM_ID = 'K02' OR TEAM_ID = 'K07')

AND POSITION = 'MF'

AND HEIGHT >= 170

AND HEIGHT <= 180



b. 


SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키

FROM PLAYER

WHERE TEAM_ID IN('K02','K07)

AND POSITION = 'MF'

AND HEIGHT BETWEEN 170 AND 180;


---> CHAR 변수나 VARCHAR2 같은 문자형 타입을 비교하기 위해선

  인용부호(작은 따옴표, 큰 따옴표)로 묶어서 비교처리를 해야 한다.

---> a. 랑 b.는 같은 내용이다.






WHERE 조건 -IN


a.


SELECT ENAME, JOB, DEPTNO FROM EMP

WHERE (JOB. DEPTNO) IN (('MANAGER', 20), ('CLERK', 30));


 ---> 사원(EMP) 테이블에서 JOB이 MANAGER 이면서 20번 부서에 속하거나 JOB이 CLERK 이면서        30번 부서에 속하는 사원의 정보를 IN 연산자의 다중 리스트를 이용해 출력

    In 안에서는 or로 작용하는것 같음






WHERE 조건 - LIKE


와일드 카드 종류


% :  0개 이상의 어떤 문자를 의미

_  :  1개인 단일 문자를 의미(_가 한 글자를 의미함)



a.


SELECT xxx FROM PLAYER WHERE PLAYER_NAME LIKE '장%';

-> 선수 이름이 장 씨인 사람



b.


SELECT  xxx FROM PLAYER WHERE POSITION LIKE '_F%';

-> 포지션값의 두번째 자리의 값이 F인 선수






WHERE 조건 - IS NULL



- ''(공백) 이나 0과는 다른 값이다.

- NULL 값의 수치연산은 NULL 리턴

- NULL 값과 비교 연산은 거짓(FALSE) 리턴

- 어떤 값과 비교할수 없음, 특정 값보다 크다, 작다 표현할수 없음

- NULL 값의 비교 연산은 IS NULL, IS NOT NULL 이라는 정해진 문구를 사용해야 제대로 된 결과를 얻음.


  EX)


SELECT xxx  FROM PLAYER WHERE POSITION = NULL;    (X)


---> 제대로 비교 할수 없음


SELECT xxx  FROM PLAYER WHERE POSITION IS NULL    (O)






WHERE 조건 - 부정연산자



a. 


SELECT xxx FROM PLAYER WHERE TEAM_ID = 'K02'

AND NOT POSITION = 'MF' AND NOT HEIGHT BETWEEN 175 AND 185 ;


--->  팀명이 K02 이고 포지션이 MF가 아니며 키가 175~185가 아닌 선수



b.


SELECT xxx WHERE PLAYER WHERE NATION IS NOT NULL


---> 국적이 NULL이 아닌 사람






WHERE 조건 - ROWNUM( ORACLE 에서 사용)


---> 원하는 만큼의 행만 가져오는 것?



a.

SELECT PLYER_NAME FROM PLAYER ROWNUM = N ;

SELECT PLYER_NAME FROM PLAYER ROWNUM <= N ;

SELECT PLYER_NAME FROM PLAYER ROWNUM < N+1 ;






WHERE 조건 - TOP    (SQL Server 에서 사용)


---> TOP 절을 사용하여 결과 집합으로 출력되는 행 수를 제한할수 있음.



a.


SELECT TOP(1) PLAYER_NAME FROM PLAYER;


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






********** 정 리 **********


 - WHERE 조건절에 제한을 두어 원하는 자료만 조회 가능

 - WHERE 절에 사용되는 연산자(비교, SQL. 논리, 부정)가 있다.

 - NULL 값의 비교 연산은 IS NULL, IN NOT NULL 이라는 정해진 문구를 사용해야 됨.

 - 테이블에서 원하는 행만 가져오고 싶을때는 

ORACLE 은 ROWNUM, SQL Server는 TOP 을 이용한다.






FUNCTION 학습하기!



- 벤더에서 제공하는 함수인 내장함수(Built-in Function)

- 사용자가 정의할 수 있는 함수(User Defined Function)로 나뉨.

- 일반적으로 함수는 입력되는 값이 많아도 출력은 하나만 된다는 M:1 관계를 가짐

- 단일 행 함수는 각 행에 대해 개별적으로 작용, 각각의 행에 대한 조작 결과를 리턴함.

- 단일 행 함수의 경우 SELECT, WHERE, ORDER BY 절에 사용 가능.

- 특별한 제약이 없으면 함수의 인자(Arguments)로 함수를 사용하는 함수의 중첩 가능



FUNCTION 종류




문자형 함수


---> 문자를 입력하면 문자나 숫자 값 반환


LOWER, UPPER, CONCAT, SUBSTR/SUBSTRING, LENGTH/LEN, LTRIM, RTRIM,TRIM, ASCII





숫자형 함수


---> 숫자를 입력하면 숫자 값을 반환한다.


ABS, MOD, ROUND, TRUNC, SIGN, CHR/CHAR, CEIL/CEILING, FLOOR, EXP, LOG, LN, POWER, SIN, COS,TAN






날짜형 함수


---> DATE 타입의 값을 연산한다.


SYSDATA/GETDATE, EXTRACT/DATEPART,TO_NUMBER(TO_CHAR(d, 'DD' |'MM'|'YY'))/DAY|MONTH\YEAR





변환형 함수


---> 문자, 숫자, 날짜형 값의 데이터 타입을 변환한다.

---> 특정 데이터 타입을 다양한 형식으로 출력하고 싶을 경우에 사용.

---> 명시적(Explicit) 데이터 유형변환, 암시적(Implicit)데이터 유형 변환 이 있다.



명시적 데이터 유형 변환


TO_CHAR ( 숫자|날짜 [ , FORMAT ] )  -  숫자나 날짜를 주어진 format 형태로 변환


TO_NUMBER ( 문자열 ) - 문자열을 숫자로 변환


TO_DATE ( 문자열  [ , FORMAT ) - 문자열을 주어진 FROMAT 형태로 날짜 타입으로 변환


CAST ( expression As data_type [ ( length) ] ) 

---> expression을 목표 데이터 유형으로 변환


CONVERT ( data_type [ ( length ) ] , expression [ , style ] ) 

---> expression을 목표 데이터 유형으로 변환



암시적 데이터 유형변환


---> 인덱스 미사용으로 인한 성능 저하가 발생 할수 있음.

  자동적으로 데이터베이스가 알아서 계산하지 않는 경우가 있어 에러를 발생할수 있음

  명시적 데이터 유형변환을 사용하는걸 추천.




CASE 표현


---> CASE는 IF-THEN-ELSE 논리와 유사한 방식



SIMPLE_CASE_EXPRESSION


---> case 다음에 바로 조건에 사용되는 칼럼이나 표현식을 표시.


SEARCHED_CASE_EXPRESSION


---> case 다음에 칼럼이나 표현식을 표시하지 않고, 다음 when 절에서 조건절을 사용.

---> SIMPLE_CASE_EXPRESSION 보다 다양한 조건을 적용할 수 있음.




NULL 관련함수


---> 널 값은 아직 정의되지 않은 값으로 0 또는 공백과 다르다.

NVL/ISNULL, NULLIF, COALESCE



NVL/ISNULL(표현식1, 표현식2)

-> 표현식1이 NULL 이면, 표현식2가 출력됨.


NULL 과 공집합.(NULL 과 공집합은 좀 다르다)


NULLIF(EXPR1, EXPR2)

-> EXPR1 과 EXPR2 가 같으면 NULL, 같지 않으면 EXPR1을 리턴함.


COALESCE

EX)

SELECT ENAME, COMM, SAL,

CASE WHEN COMM IS NOT NULL

   THEN COMM

ELSE (CASE WHEN SAL IS NOT NULL

  THEN SAL

  ELSE NULL

  END)

ENDCOAL

FROM EMP;

책 다시 보기!!



출처 : The Guide for SQL Professional Sql 전문가 가이드 2013 Edition


반응형

'DB > SQLD' 카테고리의 다른 글

SQL 활용(STANDARD JOIN)  (0) 2015.03.30
SQL 기본 및 활용(JOIN)  (0) 2015.03.30
SQL 기본 및 활용 (집계함수(GROUP BY, HAVING), ORDER BY)  (0) 2015.03.30
SQL 기본 및 활용  (0) 2015.03.09
Sql 기본 및 활용(DDL, DML, TCL)  (0) 2015.03.05