본문 바로가기
자격증들/23) SQLD, SQLP

SQLD 2-1 - SQL 기본,문제풀이

by tonyhan18 2023. 6. 1.
728x90

로우 == 인스턴스, 칼럼 == 속성, 도메인 == 값의 범위 

 

DML = ISSUE(Insert, Select, Update, Delete) + Merge

DDL = TCARD(Truncate, Create, Alter, Rename, Drop)

DCL = R.G(Revoke, Grant)

TCL = C.R(Commit, Rollback)

 

또 집계함수를 사용하면서 중요한 점이 일반 칼럼을 사용할떄 반드시 group by로 묶어주어야 한다는 점이다. 이걸 안 지키고 그냥 일반 칼럼을 사용하면 에러난다.

집계함수는 NULL을 제외한 값들이 제외된다. 단, COUNT(*)는 NULL값을 포함한다. COUNT(표현식)은 포함 안 하기 때문에 COUNT(*)만 특수하다고 기억해주면 된다.

 

집계 함수의 인자에 연산이나 가공이 존재하면 일단 이거 수행한 후에 집계함수가 수행된다.

여기에서 보이는 NVL은 NULL값이 아니라면 원래의 값을 그대로 출력하고 NULL이면 지정값을 출력하라는 함수이다.

 

GROUP BY 없이 그냥 집계함수 쓰면 전체가 한 번에 묶인다. 틀린건 아니고 특징중 하나니 알아두면 좋다.

 

조인 사용하면 여러 테이블에 저장된 데이터를 함꼐 조회가능

사용법은 Inner join의 경우 그냥 FROM에 테이블들을 기술해주면된다.WHERE 조건에 해당되지 않으면 그냥 버린다.

 

Inner Join => 교집합

Outer Join => 합집합(맞지 않아도 그냥 넣는다), 

Cross Join => 조건 상관없이 합친다

 

이너조인은 ','로 이어준다.

a가 기준이 된다. (+)기호 반대쪽이 기준이 된다.

 

조인 조건이 없기 때문에 묶일 수 있는 모든 결과를 출력해준다.

DEPTNO 열이 두 개나 있는것을 볼 수 있다.

 

함수 중첩이 가능한데 안에서 밖으로 향한다.

 

보통 오른쪽을 쓰지만 왼쪽도 자주쓰니 알아놓자.

 

실패하면 Rollback 처리되기 때문에 취소된다.

 

삼품번호 3번 삭제 -> 저장

-> 4, 냉장고 데이터 저장 -> 3, 5

 

ROLLBACK이 중요한데 ROLLBACK은 COMMIT 이후의 것들만 돌리기 때문에 답은 2번이다.

 

DBMS SQL Server 을 사용한다는 힌트가 있기 때문에 SQL Server 인 경우의 특징을 따로 알아야 한다.(말이 없다면 오라클일 확률이 크다)

 

BEGIN TRAN 부터 시작해서 ROLLBACK까지 TRANSITION이 된다. SQL Server의 특징 중에 Auto Commit이라는 특징이 존재한다. 명령어만 치면 자동 commit 된다.

 

여기에서 BEGIN TRAN 부터 ROLLBACK 까지는 하나의 구문이기 때문에 INSERT 부분과 TRUNCATE 부분은 실행 안된다고 보면 된다.

 

따라서 답은 700(3번)이다.

 

* 주의 : TRUNCATE 부분은 DDL 문법으로 오라클에서는 Auto Commit이 기본이기 때문에 오라클이였다면 이 부분이 유지 되었을 것이다.

 

답 3번

지금 WHERE 조건에 맞는 녀석들을 찾아서 그 갯수를 모아 나누어주면 되는 거였다.

 

'_' : 한 개의 모든 문자를 다 매칭시켜준다는 의미이다.

'%' : 0 개 이상의 모든 문자를 의미한다.(올 수도 안 올 수도 있지만 암튼 문자들)

여기에서 원하는 것은 2번째 글자가 A 마지막이 D 인 사람을 찾는 것이다.

 

1,7 번만 가능하다

답 2

 

AND 우선 순위가 OR 우선 순위가 더 높다(왜냐하면 AND 로 잡히는 것의 갯수가 크게 적은 빡샌 조건이라서 그렇다)

"삼품가격 >= 3000 AND 상품번호 = 200" 것을 먼저 고르면 200-4000이 먼저 걸리고

"상품가격 < 2000" 인 것을 고르면 400-1000이 걸리게 된다.

 

따라서 답은 3번

 

함수 중첩된 경우 안쪽 함수를 먼저 수행해준다.

TO_DATE를 진행시 원래는 "YYYY-MM-DD 00:00:00"으로 바뀌게 된다.

+1 => 일일 더하기

+1/24 => 일일을 24시간으로 나누면 1시간

+1/24/3 => 20분

 

ex) 1/24/60 => 1분, 20/24/60 => 20분

 

MI는 분만 가져다가 문자로 만들라는 이야기이다.

 

결국에는 20만 남게 된다.

 

답 2

 

 NULLIF 함수는 두 값의 결과가 같다면 NULL을 반환해주는 것이다.

 

첫번째 행은 결과가 100이니 NULL

두번째 행은 결과가 80

세번째 행은 그냥 NULL

 

답 4

 

AVG는 집계함수

 

50

30

50

 

답 4

 

테이블을 문자로 생성했다. 그렇기 때문에 MIN(C2)라고 해서 그냥 1번 고르면 안된다.

 

문자로 제일작은 2가 가장 작아서 답은 2번이다.

 

C2가 문자이기 때문에 문자순으로 내림정렬해준다.

800 -> 5000 -> 3500 -> 2000

여기에서 ROWNUM 1 이하 즉 첫 번째 것을 고르라고 했으니

답은 4번이다.

 

조건이 JOIN 조건과 일반조건이 있다. 이런경우 일반조건을 먼저 봐야한다.

 

10, 30 잡히고

유재석, 하하 빼고 가져와야 한다

 

답은 3

 

 

유형 3 : SQL 작성

Oracle DB 기준 3,4 번은 존재할 수 없다.

그리고 ALTER TABLE 문은 간단하게

`ALTER TABLE <테이블명> MODIFY (<칼럼명> DATE NOT NULL);`

만 해주면 된다.

 

답 2번

 

3.  SQL 작성

DELETE는 삭제는 하지만 데이터는 남아서 나중에 복구 가능

TRUNCATE는 삭제는 하지만 테이블 형은 남겨 놓는다

DROP은 싹다 없앤다

 

답 4

 

BETWEEN A AND B는 A이상 B 이하의 문법이기 때문에 1,3번 안된다.

4번도 뭐 안된다

DISTINCT도 PK에 썼기 때문에 좀 이상한 문법이다.

 

답 2

 

GROUP BY로 쓰면 내용이 세로로 출력되기 때문에 관련된 것들(2,4번)은 모두 틀렸다.

 

DECODE는 if-else문과 같아서 DECODE(변수, 기준, 결과) 로 구성한다.

답은 1인데

 

3이 아닌 이유는 SUM과 같은 집계함수를 상품번호와 같은 일반 칼럼과 함께 사용할 수 없어서이다.

 

답은 3인데

1은 TOP(3)라서 3개만 뽑고

2, 4는 ROWNUM이라서 3개만 뽑느다

 

3번은 TOP(3)이지만 WITH TIES 가 붙어 있어서 중복도 뽑아준다.

 

 

4. 빈칸 채우기

 

ㄱ은 ROLLBACK이고 ㄴ은 COMMIT이다.

 

답 4

 

답은 1번 밖에 없다.

 

NVL이면 null인 경우 변환이니 맞다

NULLIF는 A와 B가 같으면 null로 바꾸라는 것이다. 그래서 이게 틀렸다.

ISNULL 이건 SQL Server 함수인데 NVL과 같은 역활을 수행한다.

DECODE는 조건절이기 때문에 맞다.

 

https://congsoony.tistory.com/222

 

SQL 문법 수행 우선순위

💎 SQL 문법 순서 SELECT >FROM >WHERE > GROUP BY >HAVING >ORDER BY 💎 SQL 실제 실행 순서 FROM > ON > JOIN > WHERE > GROUP BY > HAVING >SELECT > DISTINCT >ORDER BY FROM : 각 테이블 확인 ON : 조인 조건 확인 JOIN : 테이블 조인 (

congsoony.tistory.com

1순위 : 테이블 가져오기

2-3순위 : 테이블 묶기

---

4순위 : 조건

5순위 : 데이터 묶기(4-5 순위의 서열 비교는 자주 나오는 기억)

6순위 : 데이터 묶은거에 조건 걸기

4,5,6 만 기억해주어도 된다. WHERE > GROUP BY > HAVING

---

7순위, 8순위 : 데이터를 예쁘게 표현하기라서 뒤쪽

9순위 : 예쁘게 표현한걸 더 예쁘게 표현해야해서 뒤쪽

 

 

답은 3번이다.

 

참고로 GROUP BY는 묶이는 속성을 제외하고는 집계함수를 반드시 사용해서 속성을 표현해주어야 한다. 이것도 시험에 많이 나오는 주의!

 

 

ORDER BY는 먼저 나온 순서대로 정렬한다.

 

그렇기 때문에 C3는 DESC

C2는 ASC

C1은 DESC

 

2번이 답이다.

 

 답 2번

 

 

5번재 유형 : 기타

LTRIM : 왼쪽부터 두 번째 문자를 제거해라 / RTRIM : 오른쪽부터 두 번째 문자를 제거해라

1 => ABZCD

 

TRIM : 양쪽에서 문자를 제거

2 => ABZCD

 

SUBSTR(문자, 시작, 갯수) or SUBSTR(문자, 시작) 여기에서는 시작만 적혀있었으니 2번째 문자부터 끝까지이다.

3 => ABZCD

 

REPLACE(문자열, 바꿀 문자, 변환될 문자) : 여기에서는 변환될 문자가 없으니 공백으로 남겨야 한다

4 => ABCD (답)

 

1번과 2번은 결과가 짜피 PK를 가지고 이상한 짓 해서 결과가 같다.

3번은 집계함수를 쓰기는 했지만 어짜피 unique한 값이기 때문에 합치어도 결과가 같아서 의미없다.

 

4번은 집계로 1 초과이기때문에 나오는게 없다.

 

답은 4번

 

ORDER BY에 숫자를 쓰면 SELECT 절의 컬럼을 이야기 한다.

그리고 DESC 와 ASC가 안 써 있으면 그냥 ASC이다.

 

2번은 '*'를 가지고 ORDER BY를 했는데 이렇게 하면 테이블의 컬럼순이다.

 

<> 은 != 과 같은 의미이다.

1번은 맞는 것이다.

 

BETWEEN하면 이상 이하 이기 때문에 005 ~ 008까지 다 걸러서 2번은 틀리다

3번은 001~009 ~ 0012 등등 모두 걸러서 안된다.

4번은 NOT이 AND에도 영향을 미친다.

005가 아니거나 008이 아닌것을 의미

 

첫번째는 GROUP BY에 두가지를 넣었는데 이렇게하면 첫 번째걸로 일단 묶이고 그 다음 두 번째걸로 묶인다.

 

두 번째것이 문제인데 GROUP BY를 사용했는데 일반 칼럼이 왔기 때문이다.

 

답 2번

 

답 3번

가는 칼럼이 없지만 칼럼에 있는 순서대로 모두 데이터를 넣어주었으니 성공이다

나는 칼럼이 없지만 전체 칼럼을 넣지 않아서 에러다.

다는 칼럼이 있기에 성별이 NULL이여도 되기 때문에 에러가 안난다.

라는 뭐... 메일주소 NOT NULL인데 아 넣어주어서 에러다.

 

정답 : DCL

 

정답 : Foreign Key(외래키)

 

* 참조 무결성 : 데이터에 결함이 없게 만든다.

 

 

SUM 함수를 사용하면 NULL인 결과를 제외한 합을 구해준다.

 

따라서 답은 1700

 

Inner Join 한 문장인데 특이하게 BETWEEN을 썼다.

 

CUSTNO 10에 대해서 GRADE D에 해당한다

CUSTNO 20에 대해서 GRADE B에 해당한다

CUSTNO 30에 대해서 GRADE B에 해당한다

 

답은 D이다.

 

답은 110이다.

 

SAVEPOINT s1;

 

COMM IS NULL THEN 0

SUBSTR

728x90