Q. 포드와 입사일이 같은 직원은?

 

SELECT ENAME
FROM EMP
WHERE HIREDATE = (SELECT HIREDATE
FROM EMP
WHERE ENAME = 'FORD');


 

Q. 포드와 워드의 월급과 같은 월급을 받고 있는 직원은?

 

SELECT ENAME
FROM EMP
WHERE SAL IN (SELECT SAL
FROM EMP
WHERE ENAME IN ('WARD','FORD'));  

 

* IN 은 레코드가 두 개 또는 두 행 이상일 때 쓰인다.


ALL 연산자

SAL < ALL (100,200) 일 경우 SAL의 결과값은 ALL의 최소값 100미만을 찾음

SAL> ALL (100,200) 일 경우 SAL의 결과값은 ALL의 최대값 200 초과를 찾음

 

ANY 연산자

SAL > ANY(100, 200) 일 경우 SAL의 결과값은 ANY 안에 있는 100보다 큰 걸 찾음

SAL < ANY(100, 200) 일 경우 SAL의 결과값은 ANY 안에 있는 200보다 작은 걸 찾음.

 

EXISTS

서브 쿼리의 값 하나라도 만족하면 메인 쿼리를 실행한다.

 

EX)

SELECT EMPNO, SAL
FROM EMP
WHERE EXISTS(SELECT EMPNO
FROM EMP
WHERE SAL > 3000);

 

 여기서 서브쿼리의 값이 메인쿼리에 존재한다면 메인쿼리의 모든 정보를 출력한다.

 

 

'DataBase > DQL' 카테고리의 다른 글

7/1 SQL 다중 컬럼 서브쿼리  (0) 2021.07.01
6/30 SQL 서브쿼리  (0) 2021.06.30
6/30 SQL ANSI  (0) 2021.06.30
6/29 SQL 조인  (0) 2021.06.30
6/29 SQL 그룹함수 보충  (0) 2021.06.29
변수(variable)

 

 

변수는 우리가 원하는 데이터를 저장하는 공간정도로 생각해주면 좋다.

 

작성예시는 다음과 같다.

 

a_string = 'liek this'

a_number = 3 

a_float = 3.12

a_boolean = False 

a_none = None

 

print(type(a_number))

 

      : 변수명 *python 이용 시 변수명이 길어질 때 snake case으로 작성하는 것이 암묵적인 룰이다. 

      : 변수 값

 

변수 종류

변수 종류는 string, int, float, boolean, none

 

string 은 문자열이라고 하는데 ""(큰따옴표) or ''(작은따옴표)로 위와 같이 감싸주면 된다.

 

int는 정수인 숫자를 가리킨다.

 

float는 소수점으로 이뤄진 숫자를 말한다.

 

boolean는 true or false 을 나타내는 값을 말한다. 여기서 true = 1, false = 0 .

 

none 말 그대로 none이다. 비슷한 예로 자바스크립트 null 이 있다.

 

filter

특정 조건을 만족하는 원소들을 찾아 그 원소들을 이용하여 새로운 배열을 만드는 함수.

 

 

배열 안에 객체가 있는 todos

 

여기서 다음과 같이 입력하면 필터를 걸어 새로운 배열을 만들 수 있다.

 

방법1
방법2

 

'JS' 카테고리의 다른 글

#JavaScript 함수호출하는 방법  (0) 2021.08.10
#JavaScript 데이터 타입  (0) 2021.08.10
<JavaScript> map  (0) 2021.06.30
<Java Script> forEach  (0) 2021.06.29
<자바스크립트> function  (0) 2021.06.18
서브쿼리

SELECT 문(MAINQUERY)에 포함되어 있는 또 하나의 다른 SELECT 문(SUBQUERY)를 말한다.

 

EX)

SELECT ename
FROM EMP
WHERE SAL >= (SELECT SAL
                FROM EMP
                WHERE ENAME = 'SMITH');

 

ㅁ MainQuery  

    SubQuery    

 

 

서브쿼리 특징

-단일 행 연산자 

: >, =, >=, <, !=

 

-복수 행 연산자

: IN, ANY, ALL, EXISTS

 

-서브쿼리는 반드시 괄호를 사용한다.

-서브쿼리에는 ORDER BY 절 사용불가.

 

 

서브쿼리가 사용가능한 곳

1. SELECT 절

2. FROM 절

3. WHERE 절

4. HAVING 절

5. ORDER BY 절

6. INSERT 문의 VALUES 절

7. UPDATE문의 SET절

 

'DataBase > DQL' 카테고리의 다른 글

7/1 SQL 다중 컬럼 서브쿼리  (0) 2021.07.01
7/1 SQL SUBQUERY 2  (0) 2021.07.01
6/30 SQL ANSI  (0) 2021.06.30
6/29 SQL 조인  (0) 2021.06.30
6/29 SQL 그룹함수 보충  (0) 2021.06.29
ANSI

- JOIN의 형식이 FROM 절에서 지정된다.

- JOIN 조건이 WHERE절이 아닌 ON에 입력된다.

- NATURAL JOIN 과 USING절에서는 공통 컬럼명에 ALIAS 사용을 못함.

 

CROSS JOIN

SELECT ENAME, DNAME, E.DEPTNO

FROM EMP CROSS JOIN DEPT D;

 

CROSS JOIN 은 오라클 조인 CARTESIAN과 같다.

 

NATURAL JOIN

NATURAL 조인은 EQUI-JOIN과 동일하게 1개의 공통 컬럼명만 추출한다.

 

SELECT EMP EMPNO, ENAME, DNAME, LOC FROM EMP NATURAL JOIN DEPT;

 

USING 

동일 이름의 컬럼이 여러 개인 경우 조인 컬럼을 지정.

단, 공통 컬럼명에 TABLE ALIAS 명을 사용할 수 없다.

SELECT EMPNO, ENAME, DNAME, LOC FROM EMP INNER JOIN DEPT

USING(DEPTNO); *INNER은 생략가능

 

JOIN ~ ON

NON-EQUI 조인 또는 임의의 조건으로 조인 시 사용.

복잡한 조건의 조인 가능하다.

(서브쿼리, AND/OR 연산자, EXSIT, IN 연산자)

ON 조건 절에 JOIN 조건 외에도 데이터 검색조건을 추가할 수 있지만,

검색 조건이 목적인 경우에는 WHERE절을 사용하는 게 낫다.

 

EX)

SELECT EMPNO
FROM EMP
JOIN DEPT
ON EMP.DEPTNO = DEPT.DEPTNO
AND DEPT.DEPTNO = 10;

 

EX)

SELECT EMPNO 
FROM EMP 
JOIN DEPT 
ON EMP.DEPTNO = DEPT.DEPTNO 
WHERE DEPT.DEPTNO = 10; 

'DataBase > DQL' 카테고리의 다른 글

7/1 SQL SUBQUERY 2  (0) 2021.07.01
6/30 SQL 서브쿼리  (0) 2021.06.30
6/29 SQL 조인  (0) 2021.06.30
6/29 SQL 그룹함수 보충  (0) 2021.06.29
6/28 SQL 그룹함수  (0) 2021.06.28
JOIN

여러 테이블을 묶어서 필요한 데이터를 찾을 수 있는 방법을 말함.

 

예를 들어 회사 내에 구매팀에서 일하는 사람이 누군인 지 알아보고 싶다고 하자.

A테이블에 사원들의 이름과 부서번호가 있고 B테이블은 부서번호와 부서의 이름이 있다.

이 경우 A,B테이블에 모두 접근해야 구매팀에서 일하는 사람을 찾을 수 있다.

 

B테이블에서 구매팀의 부서번호를 알아 낸뒤 

그 번호를 이용하여 A테이블에서 찾아야한다.

이 경우 SELECT를 두 번 입력해서 검색해야하는 번거로운 문제가 발생한다.

 

하지만, A와 B테이블을 묶어 C테이블을 만든다면 내가 찾고자 하는 데이터가 모두 포함되어 있어

SELECT를 두 번 입력해야되는 불편함을 피할 수 있다.

 

 JOIN 의 종류
종류   설명
오라클 조인 CARTESIAN PRODUCT 조인 조건을 생략하거나 조인이 잘못된 경우 발생된다.
EQUI 조인 기본 키(Primary Key)와 참조키(Foreign Key)을 사용하여 반드시 조건이 일치하는 데이터만 조회하는 방법이다.
NON-EQUI 조인 조건이 반드시 일치하지 않더라도 범위에 포함되는 경우에 조회하는 방법이다.

** 조인 종류는 이것보다 더 많지만 금일 배운 내용만 기재하였습니다.

 

CARTESIAN PRODUCT

다음과 같은 경우 CARTESIAN PRODUCT 가 발생한다.

- 조인 조건이 생략된 경우

- 조인 조건이 잘못된 경우

- 첫 번째 테이블의 모든 행이 두 번째 테이블의 모든 행이 조인되는 경우

 

만일 CARTESIAN PRODUCT가 실행된다면 양쪽 ROW의 개수를 곱한 결과를 반환한다. 

EX) SELECT EMPNO, ENAME, DEPT.DNAME, LOC
     FROM DEPT, EMP; 

 

EQUI JOIN

EQUI JOIN 방법

- SELECT 절은 검색할 열 이름을 명시

- FROM절은 데이터베이스가 ACCESS해야 하는 두 개의 테이블을 입력

- WHERE절은 테이블의 조인 조건을 명시

- 양쪽 테이블에 공통으로 존재하는 열 이름을 열 이름앞에 테이블명을 기술함.

EX) DEPT.DEPTNO

 

1)

SELECT * 
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO;

 

2) 

SELECT S.GRADE, COUNT(*)
FROM EMP E, SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL 
AND S.GRADE = 2
GROUP BY S.GRADE;

'DataBase > DQL' 카테고리의 다른 글

6/30 SQL 서브쿼리  (0) 2021.06.30
6/30 SQL ANSI  (0) 2021.06.30
6/29 SQL 그룹함수 보충  (0) 2021.06.29
6/28 SQL 그룹함수  (0) 2021.06.28
6/28 SQL 조건문  (0) 2021.06.28

1.

SELECT DEPTNO, SUM(SAL) FROM EMP

WHERE SAL >= 800

GROUP BY DEPTNO

HAVING SUM(SAL) >7000;

 

주의! WHERE절 뒤에는 그룹함수 EX) SUM(SAL), AVG(SAL) 등이 올 수 없음.

 

2.

SELECT DEPTNO, AVG(SAL), SUM(SAL)

FROM EMP

GROUP BY DEPTNO

HAVING DEPTNO = 10; 

HAVING 절GROUP BY에 의해 분류된 그룹들을 제한하기 위한 방법이며 WHERE 처럼 컬럼의 조건을 걸 수 있음. 

 

3. 

SELECT JOB, SUM(SAL) PAYROLL

FROM EMP

WHERE JOB NOT LIKE 'SALE%' --1

GROUP BY JOB --2

HAVING SUM(SAL) > 5000 --3

ORDER BY SUM(SAL) DESC;

ㄴ 여러 조건이 있을 시 우선순위 잘 정해서 입력하기.

 

4.

SELECT

  SUM(CASE JOB WHEN 'CLERK' THEN 1 ELSE 0 END)"CLERK",

  SUM(CASE JOB WHEN 'SALESMAN' THEN 1 ELSE 0 END)"SALESMAN",

  SUM(CASE JOB WHEN 'MANAGER' THEN 1 ELSE 0 END)"MANAGER",

  SUM(CASE JOB WHEN 'ANALYST' THEN 1 ELSE 0 END ) "ANALYST",

  SUM(CASE JOB WHEN 'PRESIDENT' THEN 1 ELSE 0 END ) "PRESIDENT",

  COUNT(*)

FROM EMP

GROUP BY JOB;

 

SELECT COUNT(*) 총인원수,

      SUM(CASE TO_CHAR(HIREDATE,'YY') WHEN '80' THEN 1 ELSE 0 END) "80년도",

      SUM(CASE TO_CHAR(HIREDATE,'YY') WHEN '81' THEN 1 ELSE 0 END) "81년도",

      SUM(CASE TO_CHAR(HIREDATE,'YY') WHEN '82' THEN 1 ELSE 0 END) "82년도",

      SUM(CASE TO_CHAR(HIREDATE,'YY') WHEN '83' THEN 1 ELSE 0 END) "83년도",

      SUM(CASE TO_CHAR(HIREDATE,'YY') WHEN '84' THEN 1 ELSE 0 END) "84년도"

FROM EMP;

GROUP BY HIREDATE;

'DataBase > DQL' 카테고리의 다른 글

6/30 SQL ANSI  (0) 2021.06.30
6/29 SQL 조인  (0) 2021.06.30
6/28 SQL 그룹함수  (0) 2021.06.28
6/28 SQL 조건문  (0) 2021.06.28
6/28 SQL 변환함수 보충  (0) 2021.06.28

 

forEach

forEach() 메소드는 배열에 있는 원소들을 일괄적으로 실행시킬 때 이용한다.

 

 

코드 입력 예시

추가로, 위 사진보다 더 간단하게 표현할 수 있는 방법이 있다.

 

코드 입력 예시2

화살표함수로도 표현할 수 있다.

 

코드 입력 예시3

'JS' 카테고리의 다른 글

#JavaScript 데이터 타입  (0) 2021.08.10
<JavaScript> filter  (0) 2021.06.30
<JavaScript> map  (0) 2021.06.30
<자바스크립트> function  (0) 2021.06.18
<Java script> if 조건문  (0) 2021.06.13

+ Recent posts