2019. 12. 3. 10:21ㆍSecurity/sql
* 연결 연산자의 사용
연결 연산자
SELECT 컬럼 || '리터럴' || ... FROM 테이블;
-> 연결 연산자의 사용. 문장으로 출력할때 많이 사용한다. 연결 연산자의 우선순위가 높기 때문에 산술연산자와 같이 사용할때는 반드시 괄호가 필요하다.
[예제]
#SQL > SELECT ename||sal 이름_급여 FROM emp;
-> 사원의 이름을 급여와 함께 검색. 그러나 가독성이 좋지 않다.
#SQL > SELECT ename||' '||sal 이름_급여 FROM emp;
-> 사원의 이름을 급여와 함께 검색. 가독성 문제를 ' '를 사용해서 해결.
#SQL > SELECT ename||'의 업무는 '||job||'입니다.' FROM emp;
-> [ ]의 업무는 [ ]입니다의 형태로 출력
중복 제거(출력되는 데이터 기준으로)
SELECT [DISTINCT | ALL] 컬럼, 컬럼, ... FROM 테이블;
-> DISTINCT가 중복된 데이터를 출력하지 말라는 옵션. 기본 옵션은 ALL로 되어 있음.
[예제]
#SQL > SELECT DISTINCT job 업무 FROM emp;
-> 직원들의 업무는 어떤 것이 있는지 검색.
[실습]
1. '[ ]학과인 [ ]학생의 현재 평점은 [ ]입니다.' 형태로 학생의 정보를 출력
#SQL > SELECT MAJOR||'학과인 '||sname||' 학생의 현재 평점은 '||avr||'입니다.' from student;
2. '[ ]과목은 [ ]학점 과목입니다' 형태로 과목의 정보를 출력
#SQL > SELECT CNAME||' 과목은 '||ST_NUM||'학점 과목입니다.' from course;
3. '[ ]교수는 [ ]학과 소속입니다' 형태로 교수의 정보를 출력
#SQL > SELECT PNAME||' 교수는 '||SECTION||'학과 소속입니다.' from professor;
4. 학교에는 어떤 학과가 있는지 검색(학생 테이블 기반)
#SQL > SELECT DISTINCT MAJOR 학과 FROM student;
5. 학교에는 어떤 학과가 있는지 검색(교수 테이블 기반)
#SQL > SELECT DISTINCT SECTION 학과 FROM professor;
6. 교수의 지위는 어떤 것들이 있는지 검색
#SQL > SELECT DISTINCT ORDERS 지위 FROM professor;
7.'[ ]학생의 4.5 환산 평점은 [ ]입니다.' 형태로 학생의 환산 평점을 출력
#SQL > SELECT SNAME||' 학생의 4.5 환산 평점은 '||(avr*4.5/4)||'입니다.' FROM student;
8.'[ ]과목의 담당 교수 번호는 [ ]입니다.' 형태로 과목의 정보를 출력
#SQL > SELECT PNAME||' 과목의 담당 교수 번호는 '||PNO||'입니다.' FROM professor;
9. 학교에 개설된 과목들은 몇 학점짜리인지 검색
#SQL > SELECT CNAME 과목, ST_NUM 학점 FROM course;
10. 학생들이 수강중인 과목의 과목번호를 검색
#SQL > SELECT DISTINCT CNO 과목번호 FROM score;
* 정렬을 이용한 자료 검색과 묶음 검색
정렬된 데이터 검색
SELECT [DISTINCT | ALL] 컬럼, 컬럼, ... FROM 테이블 ORDER BY 컬럼 [ASC/DESC], 컬럼[ASC/DESC]......
-> ORDER BY는 정렬할때 사용. 디폴트 옵션은 ASC(오름차순)
[예제]
#SQL > SELECT eno 사번, ename 이름, sal 급여 FROM emp ORDER BY sal DESC;
-> 사원의 이름을 급여 순으로 검색
#SQL > SELECT eno 사번, ename 이름 FROM emp ORDER BY sal*12+NVL(comm,0) DESC;
-> 사원의 사번과 이름을 연봉 순으로 검색. 단, 이렇게 뽑으면 무엇을 기준으로 뽑았는지 알 수 없다.
#SQL > SELECT eno 사번 ,ename 이름, sal*12+NVL(comm, 0) 연봉 FROM emp ORDER BY 연봉 DESC;
-> 사원의 사번과 이름을 연봉순으로 연봉이 출력되게 검색.
주의
이런식으로 숫자로 ORDER BY를 지정해줄수 있지만 실제로는 사용하지 않는다. 옵션을 사용할때 보면 알 수 있지만 테이블의 컬럼명은 숫자로만 만들수 없다.
* 정렬을 이용한 묶음 검색
[예제]
#SQL > SELECT job 업무, eno 사번, ename 이름, sal 급여 FROM emp ORDER BY 업무;
-> 업무별로 사원의 사원의 급여를 검색
#SQL > SELECT dno 부서번호, eno 사번, ename 이름, sal 급여 FROM emp ORDER BY 부서번호, 급여 DESC;
-> 각 부서별로 사원의 급여를 많이 받는 사람부터 검색. DESC는 급여에만 해당된다.
[실습]
1. 성적순으로 학생의 이름을 검색
#SQL > SELECT SNO 학번, SNAME 이름, AVR 학점 FROM student ORDER BY 학점 DESC;
2. 학과별 성적순으로 학생의 정보 검색
#SQL > SELECT SNO 학번, SNAME 이름, SEX 성별, SYEAR 학년, MAJOR 학과, AVR 학점 FROM student ORDER BY 학과, 학점 DESC;
3. 학년별 성적순으로 학생의 정보 검색
#SQL > SELECT SNO 학번, SNAME 이름, SEX 성별, SYEAR 학년, MAJOR 학과, AVR 학점 FROM student ORDER BY 학년 DESC, 학점 DESC;
4. 학과별, 학년별로 학생의 정보를 성적순으로 검색
#SQL > SELECT SNO 학번, SNAME 이름, SEX 성별, MAJOR 학과, SYEAR 학년, AVR 학점 FROM student ORDER BY 학과 DESC, 학년 DESC, 학점 DESC;
5. 학점 순으로 과목 이름을 검색
#SQL > SELECT CNAME 과목명, ST_NUM 학점 FROM course ORDER BY 학점 DESC;
6. 각 학과별로 교수의 정보를 검색
#SQL > SELECT SECTION 학과, PNO 교수번호, PNAME 교수이름, ORDERS 직급, HIREDATE 고용일 FROM professor ORDER BY 학과;
7. 직위별로 교수의 정보를 검색
#SQL > SELECT ORDERS 직위, PNO 교수번호, PNAME 교수이름, SECTION 학과, HIREDATE 고용일 FROM professor ORDER BY 직위;
8. 각 학과별로 교수의 정보를 부임일자 순으로 검색
#SQL > SELECT SECTION 학과, PNO 교수번호, PNAME 교수이름, ORDERS 직위, HIREDATE 고용일 FROM professor ORDER BY 학과, 고용일;
9. 급여가 10% 인상된 경우 부서별로 각 사원의 연봉을 연봉순으로 검색
#SQL > SELECT job 부서, eno 사번, ename 이름, sal*1.1*12 급여, comm 상여, (sal*1.1*12)+NVL(comm, 0) 연봉 FROM emp ORDER BY 부서, 연봉 DESC;
10. 보너스가 100% 인상된 경우 업무별로 각 사원의 연봉을 연봉순으로 검색
#SQL > SELECT JOB 업무, eno 사번, ename 이름, sal*12 급여, comm*2 상여, (sal*12)+NVL(comm*2, 0) 연봉 FROM emp ORDER BY 연봉 DESC;
'Security > sql' 카테고리의 다른 글
SQL-서브쿼리 (0) | 2019.12.06 |
---|---|
SQL-모델링, join (0) | 2019.12.05 |
SQL-관계 연산자와 LIKE 연산자, BETWEEN, IN (0) | 2019.12.04 |
SQL-WHERE (0) | 2019.12.03 |
RDB & SQL-SELECT (0) | 2019.12.02 |