2020년 7월 19일 일요일

오라클 기본 SQL쿼리, SELECT

3.2 기본 쿼리문

3.2.1 SELECT

테이블(Table)에서 DATA를 검색하기 위한 문장으로 가장 많이 사용하는 SQL문장이다.

- 모든 SQL문장은 세미콜론(;)으로 종료 되어야 한다.

- SELECT… FROM…은 필수 입력 사항.

- SQL 구문은 대소문자를 구분하지 않지만 문자상수(문자 리터럴)의 경우 대/소문자를 구분한다.

(where ename = ‘smith’, where ename = ‘ SMITH’은 두 조건절은 다른 의미다.)

- SQL키워드(SELECT, FROM, WHERE)는 주로 대문자로 사용하고 테이블명, 칼럼 이름은 소문자로 작성하는 것을 권장한다.

[기본형식]

SELECT * | {[ALL | DISTINCT] column | expr [alias],...}

FROM table

[WHERE conditions]

[GROUP BY group_by_expression]

[ HAVING group_condition]

[ORDER BY column ];

SELECT : 추출하고자 하는 칼럼 나열(습관처럼 ‘*’ 사용하지 말고 필요한 칼럼 만 선택하라)

DISTINCT : 중복 제거, 같은 값이면 하나만 출력

FROM : 질의에서 필요로 하는 테이블 또는 테이블 역할을 하는 것을 기술(뷰, 인라인뷰, 가상테이블)

WHERE : 데이터 필터링, 행을 제한하거나 조인조건을 기술한다. WHERE 절을 사용하지 않으면 FROM 절에 명시된 테이블의 모든 ROW(로우, 레코드, 행)를 조회한다.

GROUP BY : 그룹핑 칼럼을 기준으로 한 그룹으로 묶어서 합계, 평균, 최대, 최소, COUNT등에서 사용

예 : MYEMP1 테이블에서 부서별로 급여의 평균을 추출

HAVING : 그룹핑 기준칼럼이나 그룹함수에 조건을 줄 때 사용한다.

ORDER BY : SELECT에서 추출하는 데이터의 정렬(기본 asc, 역순 정렬은 desc), 나타나는 칼럼의 순서를 기준으로 정렬하는 것도 가능하다.( order by 1). ORDER BY를 제외한 쿼리를 먼저 실행하고 ORDER BY의 조건에 따라 레코드를 정렬한다.

-- DEPTNO값에 중복이 있더라도 다 출력된다. SELECT ALL DEPTNO FROM EMP와 같은 의미이다.

SQL> SELECT DEPTNO FROM EMP;

DEPTNO

----------

20

30

30

20

30

30

10

20

10

30

20

30

20

10

14 개의 행이 선택되었습니다.

SQL> SELECT DISTINCT DEPTNO FROM EMP;

DEPTNO

---------

30

20

10

-- emp테이블에서 10번 부서 사원의 사번, 이름출력

SQL> SELECT empno, ename FROM emp

WHERE deptno = 10;

EMPNO ENAME

----- --------------------

7782 CLARK

7839 KING

7934 MILLER

-- emp 테이블에서 데이터 4건 출력

SQL> select empno, ename from emp where rownum < 5;

EMPNO ENAME

---------- --------------------

7369 SMITH

7499 ALLEN

7521 WARD

7566 JONES

-- emp테이블에서 부서별 급여의 평균, 합계를 출력

SQL> SELECT deptno, avg(sal), sum(sal) FROM emp

GROUP BY deptno;

DEPTNO AVG(SAL) SUM(SAL)

----------------------------------------------

30 1566.66667 9400

20 2175 10875

10 2916.66667 8750

-- EMP 테이블에서 부서별 급여의 평균, 합계를 구하는데 부서 급여평균이 2000이상만 출력, 아래는 그룹함수에 조건을 주기 때문에 반드시 HAVING절에 조건을 줘야 한다. 만약 그룹핑 기준칼럼(DEPTNO)에 조건을 주는 경우라면 WHERE절 또는 HAVING절 모두에서 조건부여가 가능하다.

SQL> select deptno, avg(sal), sum(sal) from emp

group by deptno

having avg(sal) > 2000;

DEPTNO AVG(SAL) SUM(SAL)

---------- ---------- ----------

20 2175 10875

10 2916.66667 8750

-- EMP 테이블에서 DEPTNO, JOB이 동시에 중복되는 경우라도 중복을 행을 출력된다.

SQL> SELECT ALL deptno, job FROM EMP ;

DEPTNO JOB

---------- ---------

20 CLERK

30 SALESMAN

30 SALESMAN

……

10 CLERK

-- 칼럼앞에 DISTINCT, ALL이 없다면 기본적으로 ALL이 적용된다. 즉 중복되더라도 SELECT된다는 것이다.

SQL> SELECT deptno, job FROM EMP;

DEPTNO JOB

---------- ---------

20 CLERK

30 SALESMAN

30 SALESMAN

……

10 CLERK

-- deptno, job 칼럼 값이 같은 경우 중복을 제거하고 하나만 출력

SQL> SELECT DISTINCT deptno, job FROM EMP ORDER BY deptno, job;

DEPTNO JOB

---------- ---------

10 CLERK

10 MANAGER

10 PRESIDENT

20 ANALYST

20 CLERK

20 MANAGER

30 CLERK

30 MANAGER

30 SALESMAN

9 개의 행이 선택되었습니다.

-- DISTINCT와 같은 의미

SQL> SELECT UNIQUE deptno, job FROM EMP ORDER BY deptno, job;

DEPTNO JOB

---------- ---------

10 CLERK

10 MANAGER

10 PRESIDENT

20 ANALYST

20 CLERK

20 MANAGER

30 CLERK

30 MANAGER

30 SALESMAN

9 개의 행이 선택되었습니다.

-- MYEMP1 테이블에서 사번, 이름출력을 출력하는데 이름 오름차순(가,나,다순)으로 정렬, ASC는 생략해도 오름차순으로 정렬된다.

SQL> SELECT empno, ename FROM myemp1

ORDER BY ename ASC;

EMPNO ENAME

-------------------------------------

10000001 가길동10000001

1000001 가길동1000001

1000007 가길동1000007

100001 가길동100001

1000013 가길동1000013

……

-- MYEMP 테이블에서 사번, 이름출력을 출력하는데 이름 내림차순(다,나,가순)으로 정렬

SQL> SELECT empno, ename FROM myemp1

ORDER BY ename DESC;

EMPNO ENAME

-------------------------------------

9999997 홍길동9999997

9999991 홍길동9999991

9999985 홍길동9999985

9999979 홍길동9999979

……

-- MYEMP1 테이블에서 급여가 100만원에서 200만원 사이인 사원의 수를 출력

SQL> SELECT COUNT(*) FROM MYEMP1

WHERE SAL >= 1000000

AND SAL <= 2000000;

COUNT(*)

----------

2000002

댓글 없음:

댓글 쓰기

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...