데이터베이스
데이터베이스#3
DGeon
2023. 2. 7. 23:01
-- 교수 테이블에서 이름, 직급, 보직수당을 출력하여라
SELECT name, position, comm
from professor;
-- 교수 테이블에서 보직수당이 없는 교수의 이름, 직급, 보직수당을 출력하여라
-- is not null is null 예제
SELECT name, position, comm
from professor
where comm is not null;
-- ? 교수 테이블에서 급여에 보직수당을 더한 값은 sal_com이라는 별명으로 출력하여라
-- NVL(null이 올 수 있는 컬럼 값, 널 일경우 대체값) 스칼라함수
select name, position, sal, NVL(comm,0), sal+NVL(comm,0) as "sal_com" from professor;
-- 102번 학과의 학생 중에서 1학년 또는 4학년 학생의 이름, 학년, 학과 번호를 출력하여라
SELECT NAME, GRADE, DEPTNO FROM STUDENT WHERE (GRADE =1 OR GRADE = 4) AND DEPTNO =102;
SELECT NAME, GRADE, DEPTNO FROM STUDENT WHERE GRADE IN (1,4) AND DEPTNO =102;
-- 1학년 이면서 몸무게가 70kg 이상인 학생의 집합(stud_heavy)과1학년 이면서 101번 학과에 소속된 학생(stud_101)으로 구성된 두 개의 테이블 생성
CREATE table stud_heavy as
select *
from student
where weight >=70 and grade = 1;
create table stud_101 as
select *
from student
where deptno = 101 and grade = 1;
-- union | union all | intersect | minus
select * from stud_heavy
minus
select * from stud_101;
-- order by order by studno(컬럼명 대신 행 번호를 써도됨)
select * from student order by studno;
-- 학생 테이블에서 이름을 가나다순으로 정렬하여 이름, 학년, 전화번호를 출력하여라
select name, grade, tel from student order by 1;
select ename, job, deptno, sal
from emp
order by deptno, sal desc;
-- 학생 테이블에서 학번이 '20101'인 학생의 사용자 아이디를 소문자와 대문자로 변환하여 출력하여라
select userid, upper(userid), lower(userid) , upper(null)
from student where studno = '20101';
-- 문자열 길이 반환 함수
select length('홍길동'), lengthb('홍길동') from dual;
-- 부서 테이블에서 부서 이름의 길이를 문자 수와 바이트 수로 각각 출력하여
select dname, length(dname), lengthb(dname)
from department;
-- substr (길이를 벗어나면 가져올 값이 없으면 null)
select substr('ABCDE', -2, 3) from dual;
select substrb('가나다',2,5)from dual;
-- 학생 테이블에서 1학년 학생의 주민등록 번호에서 생년월일과 태어난 달을 추출하여 이름, 주민번호, 생년월일, 태어난 달을 출력하여라
select name, idnum, CONCAT(substr(idnum, 1,6),'년생') as "생년월일", CONCAT(substr(idnum, 3,2),'월') as "월"
, DECODE(substr(idnum, 7, 1), 1, '남자','여자') as "성별"
from student
where grade ='1';
select * from student;
select mod(3,2) from dual;
--'CD'에 해당하는 문자 인덱스를 찾음 5는 5번인덱스 뒤부터(음수는 오른쪽 기준) 2는 2번째 CD가 나오는 인덱스 찾음 찾는 값이 없으면 0을 출력
SELECT INSTR('ABCDABCDABCD', 'CD',1, 2) FROM DUAL;
--교수테이블에서 직급 칼럼의 왼쪽에 '*' 문자를 삽입하여 10바이트로 출력하고 교수 아이디 칼럼은 오른쪽에 '+'문자를 삽입하여 12바이트로 출력하여라
SELECT LPAD(POSITION, 10, '*'), RPAD(USERID, 12, '+'),
RPAD(SUBSTR(USERID, 1,3),LENGTH(USERID), '*')
FROM PROFESSOR;
-- 부서 테이블에서 부서 이름의 마지막 글자인 '과'를 삭제하여 출력하여라
SELECT DNAME, RTRIM(DNAME,'과') FROM DEPARTMENT;
-- 양쪽 끝에 공백 제거 중간은 제거 안됨
SELECT TRIM(' 가나다 ***') FROM DUAL;
-- 'A'문자를 'F'로 바꿈
SELECT REPLACE('ABCDEABCDE','A','F') FROM DUAL;
-- 교수 테이블에서 101학과 교수의 일급을 계산(월 근무일은 22일)하여 소수점 첫째 자리와 셋째 자리에서 반올림 한 값과 소숫점 왼쪽 첫째 자리에서 반올림하고 값을 출력하여
SELECT NAME, SAL, SAL/22 AS"일급", ROUND(SAL/22), ROUND(SAL/22,2), ROUND(SAL/22,-1)
FROM PROFESSOR;
-- 교수 테이블에서 101번 학과 교수의 급여를 보직수당으로 나눈 나머지를 계산하여 출력하여라
SELECT NAME, SAL, COMM, MOD(SAL,COMM)
FROM PROFESSOR
WHERE DEPTNO ='101';
-- 교수 번호가 9908인 교수의 입사일을 기준으로 입사 30일 후와 60일 후의 날짜를 출력하여라
SELECT NAME, HIREDATE, HIREDATE+30, HIREDATE+60
FROM PROFESSOR
WHERE PROFNO = 9908;
-- 수요일
SELECT TO_CHAR(SYSDATE,'YY/MM/DD HH24:MI:SS')
,CONCAT(TRUNC(TO_DATE('23/06/30 18:30:00','YY/MM/DD HH24:MI:SS')-SYSDATE),'일') AS "D-DAY"
FROM DUAL;
-- 태어난지 10000일 되는날
SELECT SYSDATE-10000 FROM DUAL;