DB 연습하기 03 - where, 정렬
-
혹시 미리 만들어 놓았을 수도 있는, 동일한 이름의 테이블 제거하기
Drop Table 테이블명
-
행을 추가할 때는 순서가 중요하다
(여기 있는 컬럼명 순서대로) values (이쪽에 자료를 넣어야 한다 대응되도록)
insert into 테이블명(a, b, c) values (1, 2, 3) 이런식으로 대응되도록 -
조건부로 내용 수정하기
update 테이블명 set 속성명=바꿀데이터 where 조건
-
조건부로 자료 삭제하기
delete from 테이블명 where 컬럼명=값
-
컬럼명 설정을 바꾸고 싶다면
alter table 테이블명 modify (바꿀 속성)
-
바뀐 구조를 확인하고 싶다면 select 문이 아니라
desc 테이블명
-
DB 이름 변경하려면
`rename 현재 테이블명 to 바꿀 테이블명 -
출력하는데 만약 컬럼의 값이 null 이라면 그냥 0으로 출력해라
select nvl(컬럼명, 0) from 테이블명
-
값과 값 사이의 것을 보겠다면
select * from 테이블명 where 컬럼명 >= 값 and 컬럼명 <= 값
select * from 테이블명 where 컬럼명 detween 값 and 값
-
이거 혹은 저거인 내용만 보겠다
select * from 테이블명 where 컬럼명=이것 or 컬럼명=저것
select * from 테이블명 where 컬럼명 in(이것, 저것)
-
특정 글자가 있는가?
%
는 있거나 없거나 /_
는 딱 한글자가 그 자리에 있을것이다
select * from emp where ename like '김%'
select * from emp where ename like '_이%'
-
'이것'이 값이 null인 컬럼의 내용만 출력해라
select * from 테이블명 where 이것 is null
-
오름차순 =
asc
내림차순 =desc
연습
사용할 테이블 만들기
-- 혹시 미리 만들어 놓았을 수 있는, 동일한 이름의 테이블 제거하기
DROP TABLE EMP;
DROP TABLE DEPT;
DROP TABLE SALGRADE;
DROP TABLE EMPLOYEE;
DROP TABLE DEPARTMENT;
DROP TABLE SALGRADE;
-- 부서 테이블 생성하기
CREATE TABLE DEPT(
DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
DNAME VARCHAR2(14),
LOC VARCHAR2(13) ) ;
-- 사원 테이블 생성하기
CREATE TABLE EMP(
EMPNO NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT);
-- 급여 테이블 생성하기
CREATE TABLE SALGRADE(
GRADE NUMBER,
LOSAL NUMBER,
HISAL NUMBER );
-- 사원 테이블에 데이터 추가하기
INSERT INTO DEPT VALUES(10, '경리부', '서울');
INSERT INTO DEPT VALUES(20, '인사부', '인천');
INSERT INTO DEPT VALUES(30, '영업부', '용인');
INSERT INTO DEPT VALUES(40, '전산부', '수원');
-- 부서 테이블에 데이터 추가하기
INSERT INTO EMP VALUES(1001, '김사랑', '사원', 1013, to_date('2007-03-01','yyyy-mm-dd'), 300, NULL, 20);
INSERT INTO EMP VALUES(1002, '한예슬', '대리', 1005, to_date('2007-04-02','yyyy-mm-dd'), 250, 80, 30);
INSERT INTO EMP VALUES(1003, '오지호', '과장', 1005, to_date('2005-02-10','yyyy-mm-dd'), 500, 100, 30);
INSERT INTO EMP VALUES(1004, '이병헌', '부장', 1008, to_date('2003-09-02','yyyy-mm-dd'), 600, NULL, 20);
INSERT INTO EMP VALUES(1005, '신동협', '과장', 1005, to_date('2005-04-07','yyyy-mm-dd'), 450, 200, 30);
INSERT INTO EMP VALUES(1006, '장동건', '부장', 1008, to_date('2003-10-09','yyyy-mm-dd'), 480, NULL, 30);
INSERT INTO EMP VALUES(1007, '이문세', '부장', 1008, to_date('2004-01-08','yyyy-mm-dd'), 520, NULL, 10);
INSERT INTO EMP VALUES(1008, '감우성', '차장', 1003, to_date('2004-03-08','yyyy-mm-dd'), 500, 0, 30);
INSERT INTO EMP VALUES(1009, '안성기', '사장', NULL, to_date('1996-10-04','yyyy-mm-dd'),1000, NULL, 20);
INSERT INTO EMP VALUES(1010, '이병헌', '과장', 1003, to_date('2005-04-07','yyyy-mm-dd'), 500, NULL, 10);
INSERT INTO EMP VALUES(1011, '조향기', '사원', 1007, to_date('2007-03-01','yyyy-mm-dd'), 280, NULL, 30);
INSERT INTO EMP VALUES(1012, '강혜정', '사원', 1006, to_date('2007-08-09','yyyy-mm-dd'), 300, NULL, 20);
INSERT INTO EMP VALUES(1013, '박중훈', '부장', 1003, to_date('2002-10-09','yyyy-mm-dd'), 560, NULL, 20);
INSERT INTO EMP VALUES(1014, '조인성', '사원', 1006, to_date('2007-11-09','yyyy-mm-dd'), 250, NULL, 10);
-- 급여 테이블에 데이터 추가하기
INSERT INTO SALGRADE VALUES (1, 700,1200);
INSERT INTO SALGRADE VALUES (2, 1201,1400);
INSERT INTO SALGRADE VALUES (3, 1401,2000);
INSERT INTO SALGRADE VALUES (4, 2001,3000);
INSERT INTO SALGRADE VALUES (5, 3001,9999);
-- 테이블 작성을 다 했다면 변경 내용을 커밋!
COMMIT;
테이블 사용하기
--dept 테이블 모두 검색--
select * from dept;
-- 행 추가하기 : insert into --
/* (여기 있는 컬럼명 순서대로) values (자료를 넣어야 한다 대응되도록)
따라서 dname, loc, deptno 로 컬럼명을 적어준다면 자료 넣을때도 그 순서대로 값을 입력 */
-- 만약 컬럼명을 생략하면 자료 순서는 이미 정해진 순서대로 넣어야 한다 --
insert into dept(deptno, dname, loc) values (50, '총부무', '서울');
/*총무부인 사람들의 loc를 모두 부산으로 바꿔보자*/
update dept set loc = '부산' where dname='총부무';
/* deptno=50인 자료를 삭제해라*/
delete from dept where deptno=50;
/* 만약 컬럼명 설정을 바꾸고 싶다면 */
alter table dept modify (dname varchar(15) );
/* 바뀐 구조 확인하기 */
desc dept;
/* DB 이름 변경하기 */
rename dept to dept01;
select * from dept; --에러
select * from dept01; --확인 가능
-- emp 확인하기
select * from emp;
select ename, sal, sal from emp;
select ename 사원명, sal 급여, sal*12 연봉 from emp; --간단한 계산은 이런식으로도 작성 가능
select ename 사원명, sal 급여, sal*12 연봉, sal*0.03 세금 from emp; -- 이런식으로.
-- null 넣어보기
INSERT into emp (EMPNO) values(1015); --1015인 사원을 추가하겠다. 단 뒤에 아무 내용도 없음
select * from emp; --확인 가능
--출력하는데 만약 sal 컬렴의 값이 null이라면 그냥 0으로 출력해라
select ename 사원명, nvl(sal, 0) 급여, sal*12 연봉 from emp;
--출력을 연결해서 하기
select nvl(ename, '홍길동') || '의 직급은 ' || job || ' 입니다' as 직급 from emp;
-- 급여가 500 이상이면서 과장이거나 부장인 사람만 보겠다
select * from emp where sal >= 500 and job= '과장' or job='부장' ;
-- 급여가 500이상 800 이하인 사람만 보겠다
select * from emp where sal >=500 and sal <= 800 ;
select * from emp where sal BETWEEN 500 and 800;
-- deptno가 20부터 50 사이
select * from emp where deptno between 20 and 50;
-- 사원 혹은 대리인 사람들만 보겠다
select * from emp where job='사원' or job='대리' ;
select * from emp where job in('사원', '대리');
-- MGR 이 1005, 1006, 1007 인 사람들만
select * from emp where mgr in(1005, 1006, 1007);
-- 이름에 특정 글자가 들어가는 사람만 / %=있거나 없거나 / _ = 한글자 있음
select * from emp where ename like '김%';
select * from emp where ename like '_이%';
-- 보너스가 없는 사람의 이름과 직위 comm 출력하기
select ename, job, comm from emp where comm is null;
-- 보너스 없는 사람들에게 보너스로 만원씩 주기
select ename, job, nvl(comm, 10000) 보너스 from emp where comm is null;
-- 보너스 있는 사람들 출력하기
select ename, job, comm 보너스, comm*0.1 반납금액 from emp where comm >0;
select ename, job, comm 보너스, comm*0.1 반납금액 from emp where comm is not null;
-- sal을 기준으로 오름차순 정렬
select * from emp order by sal asc;
-- sal를 기준으로 내림차순 정렬하는데, 급여가 똑같으면 MGR 오름차순으로
select * from emp order by sal desc, mgr asc;
-- 이름 순서대로 오름차순정렬하고, 같으면 deptno 순서대로 내림차순
select * from emp order by ename asc, deptno desc;
문제 풀어보기
-- 문제 1. 사원의 이름과 급여와 입사일자만 출력
select ename 이름, sal 급여, hiredate 입사일자 from emp;
-- 문제 2. 컬럼 이름에 별칭 지정하기 (부서번호, 부서명)
select deptno 부서번호, dname 부서명 from dept01;
-- 문제 3. 직급을 중복하지 않고, 한번씩 나열하기 (직급만 출력)
SELECT DISTINCT job FROM emp;
-- 문제 4. 급여가 300 이하인 사원의 사원번호, 사원이름, 급여 출력
select empno, ename, sal from emp where sal >=300;
-- 문제 5. 이름이 '오지호' 인사원의 사원번호, 사원명, 급여 출력
select empno, ename, sal from emp where ename='오지호';
-- 문제6. 급여가 250이거나 300이거나 500인 사원들의 사원번호, 사원명, 급여를 출력
select empno, ename, sal from emp where sal in(250, 300);
-- 문제 7. 급여가 250도, 300도 500도 아닌 사원들을 출력
select ename, sal from emp where sal not in(250, 300, 500);
-- 문제 8. 사원들 중에서 이름이 '이'로 시작하는 사람과 이름 중에 '기'를 포함하는 사원의 사원번호와 사원이름 출력
select empno, ename from emp where ename like '이%' or ename like '%기%';
-- 문제 9. 상급자가 없는 사원을 출력
select * from emp where mgr is null;
-- 문제 10. 사원테이블의 최급 입사한 직원 순으로 사원번호, 사원명, 직급, 입사일 컬럼만 출력
select empno, ename, job, hiredate from emp order by hiredate desc;
-- 문제11. 부서 번호가 빠른 사원부터 출력하되 같은 부서내의 사원을 출력할 경우 입사한 지 가장 오래된 사원부터 출력
select * from emp order by deptno asc, hiredate asc;
Author And Source
이 문제에 관하여(DB 연습하기 03 - where, 정렬), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@cyhse7/DB-연습하기-03저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)