본문 바로가기
열심히 직장인/Hello World

비전공자 SQLD 독학 - 시험접수, 인강듣기

by 양파_ 2022. 6. 23.
728x90
반응형

 

SQL 기본 중의 기본은 충분히 봤다고 생각하는데, 아직 헷갈리는 부분이 꽤 있다.

서브 쿼리도 헷갈리고.. 뷰랑 인덱스 같은건 보다 말았고 계층형 서브쿼리는 아무리 봐도 이해가 잘 안된다.

혼자 인강을 듣다가, 회사에서 지원해주는 무료 인강을 또 신청했더니 갑자기 파이썬을 공부해야한다.

회사 인강은 안들으면 돈을 토해내야 해서 시간을 더 많이 투자했더니 이도 저도 아니게 뒤죽박죽 오히려 시간만 뺏기고 더 헷갈려짐 ㅠㅠ

그래서 5월 시험을 접수할까 말까 망설이며 회사 메신저 베프에게 자신있게 시험 본다고 했다가 떨어지면 쪽팔리자나여ㅠㅠㅠㅠㅠㅠ라고 하니 쿨하게 '별다쪽'이라고만 답을 해서 ㅋㅋㅋ 너무 맞는 말이라 그냥 등록했다.

그래 쪽팔릴게 뭐있어!!!! 나는 비전공잔데??????

그리고 주관식도 있지만 대부분 사지선다형이니 이제라도 다시 다잡고 공부를 해보려 한다.

내친김에 7월엔 정처기도 봐볼까 한다. 응시료가 만얼마로 저렴한데 올해 마지막 시험이고 SQL도 포함이라니 빠작 해보면 어떻게 될 것 같기도 하고..

스마트폰에 중독되서인지 혼자 진득하게 앉아서 집중하는 능력이 이제 현저하게 떨어져 누가 내 귀에 대고 주입해줄 수 있도록 유투브에서 문제풀이 영상을 찾아보기로 했다.

 

그래서 오늘 본건 메타코드의 무려 5시간짜리 문제풀의 영상

(사실 3시간밖에 못봤다.)

(사실 광주갔다가 귀경길 지옥의 5시간 동안 할 게 없어 3시간 겨우 봤다.)

 

https://youtu.be/8uP_E6SyiuM

 

오늘 본 내용 중 평소에 헷갈렸던 내용만 다시 정리해본다.

 

DDL

  • 테이블 명 변경 : ALTER TABLE 테이블명 RENAME TO 변경할 테이블명;

* ALTER 없이 그냥 RENAME TABLE 테이블명 TO 변경할 테이블명; 도 가능

  • 컬럼명 변경 : ALTER TABLE 테이블명 RENAME COLUM 컬럼명 TO 변경할 컬럼명;
  • DROP : 해당 테이블의 데이터를 외래키로 참조한 제약 사항도 모두 삭제하고 싶으면 DROP TABLE 테이블명 CASCADE CONSTRAINT; (ORACLE에만 있으며, SQL SERVER에는 없음. 따라서 제약 조건과 참조 테이블 먼저 삭제 후 해당 테이블을 삭제해야 함.)

 

DML

  • DELETE 테이블명 <- FROM을 생략해도 괜찮음.
  • INSERT INTO 테이블명 VALUES () <- 컬럼명 지정이 이뤄지지 않은 상태에서는 전체 값이 들어가야 함. (DEFAULT 제약 조건이 있는 컬럼이 있더라도!!) / 테이블명(컬럼명)인 경우에도 컬럼의 속성을 잘 살펴봐야 함. NOT NULL 인 컬럼의 값이 누락되진 않았는지, 데이터 길이는 맞는지.. 등

 

SELECT DISTINCT

  • DISTINCT는 NULL도 단일 행으로 본다.

EX) SELECT DISTINCT 성별 FROM C_INFO를 하면 F, M, NULL까지 총 3개가 나옴. (C.F. GROUP BY 성별을 하면은 마찬가지로 NULL을 포함해서 3개의 행으로 출력함// SQL SERVER는 NULL 제외)

 
성별
F
M
F
M

 

  • ORDER BY에 CASE 절이 들어간 경우

EX) SELECT 회원코드 AS ID, 연령 AS AGE, 이름 AS NAME

FROM C_INFO

ORDER BY CASE WHEN 회원코드 = 101 OR 회원코드 = 104 THEN 1 ELSE 2 END, 연령 DESC

-> 우선 회원코드가 101, 104인 행 먼저 정렬하되, 101과 104중에는 연령을 기준으로 내림차순 정렬.

이후 나머지 회원코드에 대해서도 연령을 기준으로 내림차순 정렬.

 

  • 전체 문자열의 길이를 모르는데 특정 단어를 포함한 데이터를 찾고 싶은 경우 -> %

전체 문자열의 길이를 아는 경우 -> _

EX) WHERE 단어 LIKE 'KI%' = KI로 시작하는 모든 문자 출력

WHERE 단어 LIKE 'KI__' => KI로 시작하는 문자 중 뒤에 두자리가 더 있는 ROW 출력

WHERE 단어 LIKE '____CE' => CE로 끝나는 6자리 문자 출력 (앞에 _가 4개 나오니까)

 

  • WITH 구문

서브쿼리를 사용해서 임시테이블이나 VIEW처럼 사용 가능하며, 별칭 지정이 가능함.

(뷰와 다른 점은 뷰처럼 저장되는 것은 아니라는 점)

EX) WITH TableName AS (

SELECT *

FROM C_INFO

WHERE NAME LIKE '%A%'

) < 이름에 A가 들어가는 사람을 대상으로 하는 임시 테이블

** 인라인뷰: 서브쿼리가 FROM절 내에 쓰여진 것

EX) SELECT * FROM (SELECT * FROM C_INFO WHERE NAME LIKE '%A%';

** 뷰테이블 : 가상 테이블로 실제 데이터가 하드에 저장되는 것은 아니며, 테이블 구조가 변경되더라도 독립적으로 존재함. 보안 관리에 용의하며, SQL 성능향상, 수행속도 향상 등의 목적으로 사용함.

 

  • NULL 관련 함수

- NVL(A,B) : A가 NULL이면 B출력 (아니면 A) ( ISNULL과 동일)

- NVL2(A,B,C) : A가 NULL이면 C, 아니면 B 출력

- NULLIF(A,B) : A==B이면 NULL, A!=B이면 A출력

- COALESCE(A,B,C,D,...) : NULL이 아닌 최초의 값 출력

 

  • 통계적 집계함수 연산 시 NULL은 제외하고 계산한다. (EX) SUM, AVG, MAX 등등)

 

  • GROUP BY 사용 시 조건을 지정하고 싶으면 HAVING절 사용

EX) SELECT 성별, AVG(연령)

FROM C_INFO

GROUP BY 성별

HAVING AVG(연령) >= 30 AND AVG(연령) < 40

 

  • ROWID

테이블에 데이터 입력 시 자동을 생성

ROWID의 번호는 데이터 블록에 데이터가 저장된 순서임.

해당 데이터가 어떤 데이터 파일 상에서 어느 블록에 저장되어 있는지 알려줌.

데이터베이스에 저장되어 있는 데이터를 구분할 수 있는 유일한 값임.

 

  • GROUP 함수 <-- 헷갈리니까 내일 더 봐야겠다........

1. ROLLUP : 부분합계와 전체 합계값을 보여주며, 인수의 순서에 영향을 받음

2. CUBE : 그룹화될 수 있는 모든 경우에 대한 합계 생성

 

 

반응형