본문 바로가기
SQL

sqld 공부 ( 2 과목 : SQL 기본 )

by 뱅뱅뱅뱅뱅 2024. 11. 3.

SELECT SUBSTR('123456789', -4, 2) FROM DUAL;

답: 67

 

1앞 0

8 ~ 9 사이 -1

 

실제 인덱스는 다르다

 

아무리 복잡한 쿼리문이 나와도 순서대로 보자

 

F -> W -> G -> H -> S -> O

 

SELECT 다음 ORDER BY 자주 실수 함

 

 

문자열의 비교는 아스키 값으로 비교한다

 

 

연산자 우선순위

산술(+, -) -> 연결( | | ) -> 비교 -> NOT -> AND -> OR

 

 

 

DDL (Data Definition Language)

데이터 정의어

  • CREATE
  • ALTER
  • DROP
  • RENAME
  • TRUNCATE

DML (Data Manipulation Language)

데이터 조작어

  • SELECT
  • INSERT
    • INSERT INTO TBL VALUES(1, 100)  ->  TBL 매개변수가 없어 오류
    • INSERT INTO TBL(ID, AMT) VALUES(1, 100)  ->  SUCCESS
  • UPDATE
  • DELETE
  • MERGE

DCL (Data Control Language)

데이터 제어어

  • GRANT
  • REVOKE

TCL (Transaction Control Language)

트랜잭션 제어어

  • COMMIT
  • ROLLBACK
  • SAVEPOINT

 

 

 

 

 

 

데이터 무결성 종류

  • 개체 무결성
    • 기본키는 NULL 또는 중복값 가질 수 없음
  • 참조 무결성
    • 외래키 값은 NULL 이거나 참조 테이블의 기본키 값과 동일해야 함.
  • 도메인 무결성
    • 속성 값은 정의된 도메인에 속한 값 이어야 함
  • NULL 무결성
    • 특정 속성에 대해, NULL 허용하지 않는 특징
  • 고유 무결성
    • 특정 속성에 대해, 값이 중복되지 않는 특징
  • 키 무결성
    • 하나의 릴레이션에는 적어도 하나의 키가 존재해야 함

 

 

 

 

 

TRIM

  • DEFAULT -> BOTH
  • LTRIM == LEADING
  • RTRIM == TRAILING
  • SELECT TRIM(' GOOD ') FROM DUAL;
    • 결과: GOOD
    • 양쪽 공백제거
  • SELECT TRIM ( LEADING '가' FROM '가나다라' ) FROM DUAL;
    • 결과: 나다라
    • 앞에서 '가' 제거
  • SELECT TRIM ( BOTH '가' FROM '가나다라가' ) FROM DUAL;
    • 결과: 나다라

 

 

 

 

 

 

NULL

  • NVL(arg1, arg2)
    • arg1: 컬럼
    • arg2: NULL 치환값
  • NULLIF(arg1, arg2)
    • 두 인자가 같으면 null로 반환 
    • arg1: 컬럼
    • arg2: NULL 로 바꿀값
  • COALESCE
    • 입력된 순으로 NULL 이 아닌  첫 번째 인자 반환

 

 

 

 

 

 

 

SELECT 문

  • FROM 절의 Alias 는 띄어쓰기
  • SELECT 절의 Alias 는 AS ( 생략 가능 )

  • F W G H S O

 

 

 

 

 

 

WHERE 절

  • SELECT, UPDATE, DELETE 에 사용
  • INSERT 사용 불가

 

 

 

 

 

 

 

 

GROUP BY 절

  • 조건에 따라 그룹으로 분리하여 계산하도록 하는 절
  • SELECT 절에 집계함수를 사용하여 그룹연산 결과 표현
  • 집계 함수
    • GROUP BY 절로 그룹핑한 후에는 해당 그룹에 대해 집계 함수를 사용하여 개수, 합, 평균등을 계산
    • 그룹 상으로 연산 수행
    • GROUP BY 절 없이 집계함수 사용하면 전체 행 연산 수행
  • COUNT
    • 행 수를 계산
  • SUN
  • AVG
  • MIN
  • MAX

*를 사용할 수 있는 함수는 COUNT

 

 

 

 

 

 

 

 

HAVING 절

  • 그룹 함수 결과를 조건으로 사용할 때 사용
  • GROUP BY 연산이 끝난 결과에 대해서 HAVING 절의 조건을 만족하는 그룹만 추출
  • 연산부하 ↑
  • WHERE 과 HAVING 의 차이점
    • WHERE
      • 집계함수 사용 x
    • HAVING
      • 집계함수 사용 가능
      • GROUP BY 결과를 필터링

 

 

 

 

 

 

 

 JOIN

  • SELECT * FROM TEAM A INNER JOIN STADIUM B ON A.ID = B.ID;
  • 컬럼명만 사용시 USING 사용
    • SELECT * FROM TEAM A INNER JOIN STADIUM B USING(ID)
  • SELECT * FROM TEAM A INNER JOIN STADIUM B ON(ID)
    • 이건 오류다 ON 절에는 조건식이 따라와야 한다.
  •  표준조인
    • DBMS 종류에 따라 문법이 달라 그에 맞는 SQL문을 작성해야 하므로 관리가 어려워진다는 문제 
    • 이러한 어려움을 줄이기 위해 ANSI 표준으로 작성  ->  ANSI SQL의 문법에 따른 조인 쿼리
    • INNER JOIN, OUTER JOIN, NATURAL JOIN, CROSS JOIN

 

  • INNER JOIN ( 교집합 )
    • 조건에 맞는 행들만 병합 
    • FROM 테이블1 INNER JOIN 테이블2 ON 조건식 
      • EQUI JOIN ( 등가 JOIN )
        • =
      • NON EQUI JOIN ( 범위 )
        • 부등식 ( BETWEEN, >, < , >=, <= )
        • BETWEEN A AND B
          • A 보다 크거나 같고 B 보다 작거나 같은  

 

조인 조건에 맞지 않는 행까지 병합

  • OUTER JOIN ( 합집합 )
    • LEFT OUTER JOIN
    • RIGHT OUTER JOIN
    • FULL OUTER JOIN

 

  • NATURAL JOIN
    • 두 테이블에서 같은 이름의 칼럼에 대해서는 동일한 칼럼값을 가지는 행만 병합
NAME CLUB
김유찬 탁구부
이에나 농구부
정시우 축구부
박준영 야구부


NATURAL JOIN

NAME CLASS CLUB
이예나 A 농구부
박준영 B 야구부
정유진 C 탁구부

 

결과

NAME CLUB CLASS
이예나 농구부 A
박준영 야구부 B

 

 

 

  • CROSS JOIN
    • 모든 경우 다 조합

 

 

 

 

 

함수

 

 

  • CHR(arg)
    • arg: ASCII 코드값
    • CHR(97) -> a

 

  •  ABS()
    • 절대값
    • ABS(-2) -> 2

 

  • MOD()
    • 나머지 반환
    • MOD(9, 2) -> 1

 

  • ROUND()
    • 반올림
    • ROUND(2.67, 1) -> 2.7
    • ROUND(2.67) -> 3

 

  • TRUNKC()
    • 특정 자릿수 버림 후 그 결과 반환
    • TRUNKC(2.67, 1) -> 2.6
    • TRUNKC(2.67) -> 2

 

  • SIGN()
    • 양수면 1, 음수면 -1, 0이면 0 반환
    • SIGN(2.3) -> 1

 

  • CEIL()
    • 크거나 같은 최소의 정수 반환
    • CEIL(2.3) -> 3

 

  • FLOOR()
    • 작거나 같은 최대의 정수 반환
    • FLOOR(2.3) -> 2

 

 

 

 

 

 

 

1. SELECT TRIM('     가나다라      ') FROM DUAL;

 

2. SELECT TRIM(LEADING '가' FROM '가나다라') FROM DUAL;

 

3. SELECT TRIM(TRAILING '라' FROM '가나다라') FROM DUAL;

 

4. SELECT TRIM('라' FROM '라가나다라') FROM DUAL;

 

5. SELECT LTRIM('    가   ') FROM DUAL;

 

5. SELECT LTRIM('가나다라', '가') FROM DUAL;

 

6. LENGTH('Good M')

 

7. SUBSTR('Good M', 1, 4)

 

8. SUBSTR('??_ERROR_CODE??', 3)

 

 

  • SUBSTR(기준, 시작점, 끝점)
  • 3 : 시작점이다.
  • 리턴값 : _ERROR_CODE??

 

8. REPLACE('GOOD MORNING', 'MORNING', 'Afternoon' )

 

9. REPLACE('GOOD MORNING', 'GOOD ')

 

10. CHR(97)

 

11. ABS(-2)

 

12. MOD(9, 2)

 

13. ROUND(2.67, 1)

 

14. TRUNKC(2.67, 1)

 

15. SIGN(2.3)

 

16. CEIL(2.3)

 

17. FLOOR(2.3)

 

 

 

 

 

 

 

 

  • 가나다라
  • 나다라
  • 가나다
  • 가나다
  • '가   '
  • 나다라
  • 6
  • Good
  • GOOD Afternoon
  • MORNING

 

 

 

 

 

 

 

변환함수

 

암시적 형변환과 명시적 형변환

 

명시적 형변환

  • 작성자가 형변환을 명시

 

암시적 형변환

  • 데이터베이스가 연산 수행하면서 내부적으로 형변환 수행한 것
  • 결과를 예측할 수 없음
  • 성능 저하
  • 에러 발생

 

가급적 명시적 형변환

 

 

 

1. TO_NUMBER

숫자형 변환

 

2. TO_CHAR

문자열형 변환

 

3. TO_DATE

날짜형 변환

 

4. SYSDATE

오늘의 날짜를 날짜형으로 변환

 

5. EXTRACT

  • 날짜로부터 년, 월, 일 추출
  • EXTRACT(A FROM B)
  • A: YEAR / MONTH  / DAY  / HOUR  / MINUTE  / SECOND
  • B: 날짜형값
  • EXTRACT(DAY FROM SYSDATE)
    • 쿼리문 실행한 시간의 일 추출

 

 

 

 

 

 

 

 

CASE - WHEN - THEN - ELSE - END

 

형식1

CASE 

WHEN 칼럽1 = 값1 THEN 값A

 

형식2
CASE 칼럽1

WHEN 값1 THEN 값A



SELECT DEPTNO,

CASE DEPTNO WHEN 10 THEN 'NEW YORK'

ELSE 'ETC'

END AS CITY

FROM EMP;

 

값이 10 이면 NEW YORK 으로 치환

다른 모든 값은 ETC

컬럼 이름은 CITY

 

 

 

 

IF)

TBL

NUM

100

200

200

500

999

999

 

SELECT NUM FROM TBL

GROUP BY NUM

HAVING COUNT (*) = 2

ORDER BY (CASE WHEN NUM = 999 THEN 0 ELSE NUM END);

 

답)

NUM

999

200

ORDER BY 절에서는 999 가 0 으로 처리

출력은 999 그대로 출력

 

 

 

 

CASE 3 WHEN 1 THEN 'Y' ELSE NULL END

3 이 1 이면 Y 

아님 NULL

 

DECODE(2, 1, 'Y', NULL)

2 == 1 -> Y   아님 NULL

 

 

비교 연산자

 

단일행 비교연산자

  • =
  • <
  • >
  • >=
  • <=
  • IS NULL

 

 

다중행 비교연산자

  • IN
    • 리스트 중 하나라도 있음 참
    • IN(10, 20, 30)....
  • EXISTS
    • 하나라도 존재하면 참
  • ALL
    • 모두 참이면 참
  • ANY
    • 하나라도 참이면 참

 

 

 

 

 

부정 비교연산자

 

단일행 부정 비교연산자

 

두 값이 다르면 참

  • !=
  • ^=
  • <>

NULL 이 아니면 참

  • IS NOT NULL

 

다중행 부정 비교연산자

 

  • NOT IN
    • 리스트 중 동일한 값이 하나도 없으면 참
  • NOT EXISTS
    • 하나라도 존재하지 않으면 참

 

IN 차이점 NOT IN

 

C1 IN (10, 20, 30) -> C1 = 10 OR C1 = 20 OR  C1 = 30  

C1 NOT IN (10, 20, 30) -> C1 != 10 AND C1 != 20 AND C1 != 30  

 

 

 

 

 

 

 

ORDER BY 
ASC / DESC

 

ORDER BY 절에는 앞 컬럼 먼저 정렬 후 다름 컬럼 정렬 

 

ORDER BY 총점 DESC, 수학 -> 총점 내림차순으로 정렬 후 동점은 수학 오름차순으로 정렬

 

ASC 는 생략 가능

 

NULL 값을 어떻게 처리할지 지정 가능

NULLS FIRST

NULLS LAST

 

 

'SQL' 카테고리의 다른 글

SQLD 마무리  (1) 2024.11.12
sqld 공부 ( 2 과목 : 관리구문 )  (0) 2024.11.10
sqld 공부 ( 2 과목 : SQL 활용 )  (0) 2024.11.09
sqld 공부 ( 1 과목 : 데이터 모델링의 이해 )  (4) 2024.11.02