자바스크립트

 

자바스크립트 변수, 이렇게 사용하세요.

1. 전역 변수는 최소한으로 사용

2. var 변수는 함수의 시작 부분에서 선언

3. for 문에서 카운터 변수를 사용할 때는 var 예약어를 사용하지 않는다. ( let 사용 )

4. ES6를 사용한다면 예약어 var보다 let를 사용하는 것이 좋다.

 

 

 

재사용할 수 있는 함수 만들기

함수를 선언할 때 부터 외부에서 값을 받ㅇ ㅏ줄 변수를 미리 만드는게 매개변수라고 하고 함수를 호출할 때

괄호 안에 매개변수의 이름을 넣는다.

매개변수는 선언된 함수 안에서만 사용, 여러 개 사용할 때는 매개변수 이름 사이에 쉼표( , )를 찍어 나열

 

 

매개변수 기본값 지정하기

함수에서 매개변수 b와 c의 변숫값을 넘겨받지 못했을 때 기본값을 사용

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        function multiple(a, b = 5, c = 10){
            return a * b + c;

        }
        console.log(multiple(5, 10));
        console.log(multiple(5, 10, 20));
        console.log(multiple(10, 20));
        console.log(multiple(30));
    </script>
</body>
</html>

 

 

함수 표현식

함수 이름을 지정하지 않고 사용하거나, 함수를 호출하지 않고 바로 실행하는 방법도 있다.

 

 

익명함수

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        /*익명의 함수*/
        let sum = function(a, b){
            return a+b;
        }
        document.write(`함수 결과 ${sum(10, 20)}`);

    </script>
</body>
</html>

 

 

즉시 실행 함수

한 번만 실행하는 함수라면 함수를 정의하면서 동시 실행할 수 있는게 즉시 실행 함수

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        ( function() {
            var userName = prompt("이름을 입력하세요.");
            document.write("안녕하세요? <span class = >" + userName + "</span>님!");
            
    }())
    </script>
    
</body>
</html>

 

 

매개변수가 있는 즉시 실행 함수 만들기

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        (function(a, b){
            sum = a+b;
        }(100, 200));
        document.write(`<h1>결과 ${sum}</h1>`)
    </script>
</body>
</html>

 

 

 

화살표 함수

해당 함수로 함수선언을 좀 더 간단하게 작성할 수있다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 매개변수가 없는 함수
        // const hi = function(){
        //     return "안녕하세요";
        // }
        
        // 매개변수가 없는 화살표 함수
        //  const hi = () => {
        //      return "안녕하세요";
        //  }
        
        //매개변수가 없는 화살표 함수 (중괄호 생략)
        // const hi = () => "안녕하세요";

        // 매개변수가 1개인 함수
        // let hi = function(user){
        //     document.write(`${user} + 님, 안녕하세요?`)
        // }
        
        // 매개변수가 1개인 화살표 함수
        //let hi = user => { document.write(`${user} + 님, 안녕하세요?`) }
  
        // 매개변수가 2개인 함수
        // let sum = function(a, b){
        //     return a + b;
        // }
        
        // 매개변수가 2개인 화살표 함수
        // let sum = (a, b) => a + b;
  </script>
</body>
</html>

 

 

iframe (  inline frame의 약자)

효과적으로 다른 HTML 페이지를 현재 페이지에 포함시키는 중첩된 브라우저로

iframe 요소를 이용하면 해당 웹 페이지 안에 어떠한 제한 없이 다른 페이지를 불러와서 삽입 할 수 있다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
        <iframe src="https://hrd.go.kr" width="800" height="300"></iframe>
    
</body>
</html>

 

버튼을 클릭하면 배경색 바꾸기

a 태그를 빼면 글씨 누르지않고 버튼 전체 눌렀을때 변경 가능 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="css/function.css">
</head>

<body>
    <ul>
        
        <li onclick="changeBg('Green')">Green</li>
        
        <li><a href="#" onclick="changeBg('Orange')">Orange</a></li>
        <li><a href="#" onclick="changeBg('Purple')">Purple</a></li>

    </ul>
    <div id="result"></div>

    <script>
        function changeBg(color){
            let result = document.querySelector('#result');
            result.style.backgroundColor = color;
        }
    </script>
</body>
</html>

 

 

 

 

Ajax 기본 틀

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        let deptno = document.querySelector("#deptno");
        console.log(deptno.options[deptno.selectedIndex].value);

        let xhr = new XMLHttpRequest();
        let btn = document.querySelector("#btn");
        // 오류체크 할 필요가 없다면 onload로 사용
        xhr.onload = () => {
        // xhr.onreadystatechange = function(){
            if(xhr.status === 200){
                console.log("성공");
            }else{
                console.log("실패");
            }
        }
        // true 비동기 방식 / false 동기
        xhr.open('get', 'iframe.html', true);
        xhr.send();
    </script>
</body>
</html>

 

 

type 종류 테스트 (JSP )

form.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<form action="result.jsp">

<input type="text" name="item"/><br>
<input type="submit"/>
<input type="reset" />
</form>

</body>
</html>

 

result.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
String str = request.getParameter("item");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%=str %>
</body>
</html>

 

 

 

 

 

오라클

퀴즈 1 ( 부서 번호, 평균 급여, 최고 급여, 최저 급여, 사원 수 출력 ) 평균 급여는 소수점을 제외 

select deptno, TRUNC(avg(sal)), max(sal), min(sal), COUNT(*)
    from emp
    group by deptno

 

퀴즈 2 ( 같은 직책에 종사하는 사원이 3명 이상인 직책과 인원수 출력 ) 

select job, count(*)
from emp
group by job
having COUNT(*) >= 3

 

퀴즈 3 ( 사원들의 입사연도를 기준으로 부서별로 몇 명이 입사했는지 출력 ) 입사년도 내림차순

select to_char(hiredate, 'YYYY'), deptno, COUNT(*)
from emp
group by to_char(hiredate, 'YYYY'), deptno
order by to_char(hiredate, 'YYYY') DESC, deptno

 

 

퀴즈 4 ( 추가 수당을 받는 사원 수와 받지 않는 사원 수를 출력 ) 

select nvl2(comm, 'O', 'X') EXIST_COMM, count(*) CNT
from emp
GROUP BY nvl2(comm, 'O', 'X')

 

 

 

조인

조인은 두 개 이상의 테이블을 연결하여 하나의 테이블처럼 출력할 때 사용하는 방식

보통 inner join 많이 사용 

SELECT절의 여러 열을 구분할 때와 마찬가지로 FROM절에 여러 테이블을 명시할 때 쉼표(,)를

구분자로 사용

각 집합을 이루는 모든 원소의 순서쌍을 데카르트 곱(카테시안 곱)이라고 하고

조인 이름으로는 크로스 조인 또는 교차 조인이라고 한다.

 

FROM절에 여러 테이블 선언하기

select *
    from emp, dept
    order by empno
     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM     DEPTNO     DEPTNO DNAME          LOC          
---------- ---------- --------- ---------- ---------- ---------- ---------- ---------- ---------- -------------- -------------
      7369 SMITH      CLERK           7902 1980/12/17        800                    20         10 ACCOUNTING     NEW YORK     
      7369 SMITH      CLERK           7902 1980/12/17        800                    20         30 SALES          CHICAGO      
      7369 SMITH      CLERK           7902 1980/12/17        800                    20         20 RESEARCH       DALLAS       
      7369 SMITH      CLERK           7902 1980/12/17        800                    20         40 OPERATIONS     BOSTON       
      7499 ALLEN      SALESMAN        7698 1981/02/20       1600        300         30         20 RESEARCH       DALLAS       
      7499 ALLEN      SALESMAN        7698 1981/02/20       1600        300         30         30 SALES          CHICAGO      
      7499 ALLEN      SALESMAN        7698 1981/02/20       1600        300         30         40 OPERATIONS     BOSTON       
      7499 ALLEN      SALESMAN        7698 1981/02/20       1600        300         30         10 ACCOUNTING     NEW YORK     
      7521 WARD       SALESMAN        7698 1981/02/22       1250        500         30         10 ACCOUNTING     NEW YORK     
      7521 WARD       SALESMAN        7698 1981/02/22       1250        500         30         40 OPERATIONS     BOSTON       
      7521 WARD       SALESMAN        7698 1981/02/22       1250        500         30         20 RESEARCH       DALLAS       

     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM     DEPTNO     DEPTNO DNAME          LOC          
---------- ---------- --------- ---------- ---------- ---------- ---------- ---------- ---------- -------------- -------------
      7521 WARD       SALESMAN        7698 1981/02/22       1250        500         30         30 SALES          CHICAGO      
      7566 JONES      MANAGER         7839 1981/04/02       2975                    20         10 ACCOUNTING     NEW YORK     
      7566 JONES      MANAGER         7839 1981/04/02       2975                    20         40 OPERATIONS     BOSTON       
      7566 JONES      MANAGER         7839 1981/04/02       2975                    20         30 SALES          CHICAGO      
      7566 JONES      MANAGER         7839 1981/04/02       2975                    20         20 RESEARCH       DALLAS       
      7654 MARTIN     SALESMAN        7698 1981/09/28       1250       1400         30         30 SALES          CHICAGO      
      7654 MARTIN     SALESMAN        7698 1981/09/28       1250       1400         30         20 RESEARCH       DALLAS       
      7654 MARTIN     SALESMAN        7698 1981/09/28       1250       1400         30         10 ACCOUNTING     NEW YORK     
      7654 MARTIN     SALESMAN        7698 1981/09/28       1250       1400         30         40 OPERATIONS     BOSTON       
      7698 BLAKE      MANAGER         7839 1981/05/01       2850                    30         40 OPERATIONS     BOSTON       
      7698 BLAKE      MANAGER         7839 1981/05/01       2850                    30         10 ACCOUNTING     NEW YORK     

     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM     DEPTNO     DEPTNO DNAME          LOC          
---------- ---------- --------- ---------- ---------- ---------- ---------- ---------- ---------- -------------- -------------
      7698 BLAKE      MANAGER         7839 1981/05/01       2850                    30         20 RESEARCH       DALLAS       
      7698 BLAKE      MANAGER         7839 1981/05/01       2850                    30         30 SALES          CHICAGO      
      7782 CLARK      MANAGER         7839 1981/06/09       2450                    10         10 ACCOUNTING     NEW YORK     
      7782 CLARK      MANAGER         7839 1981/06/09       2450                    10         30 SALES          CHICAGO      
      7782 CLARK      MANAGER         7839 1981/06/09       2450                    10         40 OPERATIONS     BOSTON       
      7782 CLARK      MANAGER         7839 1981/06/09       2450                    10         20 RESEARCH       DALLAS       
      7788 SCOTT      ANALYST         7566 1987/07/13       3000                    20         20 RESEARCH       DALLAS       
      7788 SCOTT      ANALYST         7566 1987/07/13       3000                    20         40 OPERATIONS     BOSTON       
      7788 SCOTT      ANALYST         7566 1987/07/13       3000                    20         10 ACCOUNTING     NEW YORK     
      7788 SCOTT      ANALYST         7566 1987/07/13       3000                    20         30 SALES          CHICAGO      
      7839 KING       PRESIDENT            1981/11/17       5000                    10         20 RESEARCH       DALLAS       

     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM     DEPTNO     DEPTNO DNAME          LOC          
---------- ---------- --------- ---------- ---------- ---------- ---------- ---------- ---------- -------------- -------------
      7839 KING       PRESIDENT            1981/11/17       5000                    10         40 OPERATIONS     BOSTON       
      7839 KING       PRESIDENT            1981/11/17       5000                    10         10 ACCOUNTING     NEW YORK     
      7839 KING       PRESIDENT            1981/11/17       5000                    10         30 SALES          CHICAGO      
      7844 TURNER     SALESMAN        7698 1981/09/08       1500          0         30         20 RESEARCH       DALLAS       
      7844 TURNER     SALESMAN        7698 1981/09/08       1500          0         30         10 ACCOUNTING     NEW YORK     
      7844 TURNER     SALESMAN        7698 1981/09/08       1500          0         30         30 SALES          CHICAGO      
      7844 TURNER     SALESMAN        7698 1981/09/08       1500          0         30         40 OPERATIONS     BOSTON       
      7876 ADAMS      CLERK           7788 1987/07/13       1100                    20         20 RESEARCH       DALLAS       
      7876 ADAMS      CLERK           7788 1987/07/13       1100                    20         30 SALES          CHICAGO      
      7876 ADAMS      CLERK           7788 1987/07/13       1100                    20         40 OPERATIONS     BOSTON       
      7876 ADAMS      CLERK           7788 1987/07/13       1100                    20         10 ACCOUNTING     NEW YORK     

     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM     DEPTNO     DEPTNO DNAME          LOC          
---------- ---------- --------- ---------- ---------- ---------- ---------- ---------- ---------- -------------- -------------
      7900 JAMES      CLERK           7698 1981/12/03        950                    30         30 SALES          CHICAGO      
      7900 JAMES      CLERK           7698 1981/12/03        950                    30         20 RESEARCH       DALLAS       
      7900 JAMES      CLERK           7698 1981/12/03        950                    30         10 ACCOUNTING     NEW YORK     
      7900 JAMES      CLERK           7698 1981/12/03        950                    30         40 OPERATIONS     BOSTON       
      7902 FORD       ANALYST         7566 1981/12/03       3000                    20         30 SALES          CHICAGO      
      7902 FORD       ANALYST         7566 1981/12/03       3000                    20         20 RESEARCH       DALLAS       
      7902 FORD       ANALYST         7566 1981/12/03       3000                    20         10 ACCOUNTING     NEW YORK     
      7902 FORD       ANALYST         7566 1981/12/03       3000                    20         40 OPERATIONS     BOSTON       
      7934 MILLER     CLERK           7782 1982/01/23       1300                    10         30 SALES          CHICAGO      
      7934 MILLER     CLERK           7782 1982/01/23       1300                    10         20 RESEARCH       DALLAS       
      7934 MILLER     CLERK           7782 1982/01/23       1300                    10         10 ACCOUNTING     NEW YORK     

     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM     DEPTNO     DEPTNO DNAME          LOC          
---------- ---------- --------- ---------- ---------- ---------- ---------- ---------- ---------- -------------- -------------
      7934 MILLER     CLERK           7782 1982/01/23       1300                    10         40 OPERATIONS     BOSTON       

56개 행이 선택되었습니다.

이렇게 출력하면 생각보다 많은 양의 데이터가 출려된다. 이는 FROM절에 명시한 각 테이블을 구성하는 행이 모든 경우의

수로 조합되어 출력되기 때문이다.

 

 

위에 2개의 테이블 구조를 보면 EMP테이블에 14개 행 DEPT 테이블에 4개 행이 가로로 조합되어 출력된다는 뜻이다.

즉 조인한 결과 값의 행 수는 14에 4를 곱한 56개가 된다.

따라서 서로 다른 테이블인 EMP 테이블과 DEPT 테이블에 같은 이름의 DEPTNO 열을 구별하는 방법이 필요하다.

이때 사용하는 것이 열 앞에 테이블 이름을 명시하여 특정 열이 어느 테이블에 속한 열인지 구별하는 방식이다.

테이블 이름.열이름

 

열 이름을 비교하는 조건식으로 조인하기

select *
    from emp, dept
    where emp.deptno = dept.deptno
    order by empno

 

해당 방식이 현업에서도 가장 많이 다루게 될 대표적인 조인 방식 

 

 

테이블의 별칭 설정

FROM절에 지정한 테이블에는 SELECT절의 열에 사용한 것처럼 별칭을 지정할 수 있다.

테이블에 별칭을 지정할 때는 명시한 테이블 이름에서 한 칸 띄운 후에 지정한다.

FROM 테이블이름1 별칭1, 테이블이름2 별칭2.....

지정한 별칭은 테이블의 열을 지칭하는 데 사용할 수 있다.

밑에 실습은 EMP 테이블과 DEPT 테이블의 별칭을 각각 E, D로 지정한 결과다.

 

테이블 이름을 별칭으로 표현

select E.ename, E.deptno, D.dname, D.loc
    from emp E, dept D
    where E.deptno = D.deptno
    order by empno

 

 

 

 

조인 종류

조인은 대상 데이터를 어떻게 연결하느냐에 따라 등가 조인, 비등가 조인, 자체 조인, 외부 조인 등으로 구분

 

데이터 중복 

 

데이터 중복 해결법

 

 

 

등가 조인

등가 조인은 내부 조인(inner join) 또는 단순 조인으로 부른다. 등가 조인은 일반적으로 가장 많이 사용되는 조인 방식

 

 

 

'프로젝트 기반 자바(JAVA) 응용 SW개발자 취업과정' 카테고리의 다른 글

2023-07-11 38일차  (1) 2023.07.11
2023-07-10 37일차  (0) 2023.07.10
2023-07-06 35일차  (0) 2023.07.06
2023-07-05 34일차  (0) 2023.07.05
2023-07-04 33일차  (0) 2023.07.04

자바스크립트

 

마무리 문제

1. 4의 배수인지 확인하는 프로그램

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <style>
        h3 {
            text-align: center;
        }

    </style>
</head>
<body>
    <h1 style="text-align: center;">4의 배수일까 아닐까?</h1>
    <script>
        var n = prompt("숫자를 입력하세요.");
        

        if(n !== null){
            if(n % 4 === 0 ){
                document.write(`<h3>${n}는 4의 배수입니다.</h3>`);
            }else{
                document.write(`<h3>${n}는 4가 아닙니다.</h3>`);
            }
        }else{
            document.write("다시 입력해주세요.");
        }
        
    </script>
</body>
</html>

 

 

 

1. 숫자 입력 후 1부터 그 숫자까지 3의 배수 모두 출력 / 3의 배수 갯수까지

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
<style>
    h3{
        color: red;
        text-align: center;
    }
</style>
    
</head>
<body>
    <h1 style="text-align: center;">3의 배수 찾기</h1>
    <script>
        var n = prompt("몇 까지 3의 배수를 찾을까요?");
        var sum = 0;
        var str = "";
        if(n != null){
            for(i = 1; i <= n; i++){
                if (i % 3 == 0){
                    document.write(`${i}  ,`);
                        

                    sum++;

                    

                }
                }
        }
            document.write(`<h3><br>${n}까지 3의 배수의 개수 : ${sum}</h3>`);
        
    </script>
</body>
</html>

함수 선언 및 호출

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    <script>
        // 함수 만들기
        function addNumber(a, b){ 
            var sum = a + b;
            alert(sum);
        }
        // 함수 호출
        addNumber(12, 56);

    </script>

</body>
</html>

 

 

 

var를 사용한 변수의 특징

 

변수의 적용 범위 스코프

변수를 선언하고 사용할 때 변수가 적용되는 범위를 스코프라고 한다. ( 변수 유효 범위 )

한 함수안에서만 사용할 수 있는 변수를 지역변수 또는 로컬 변수라고 하고,

스크립트 소스 전체에서 사용할 수 있는 변수를 전역 변수 또는 글로벌 변수라고 한다.

 

 

var 예약어로 지역 변수 선언하기 ( 오류 발생 sum이 지역 변수이기 때문에 ) 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    <script>
        function addNumber(){
           var sum = 10 + 20;

        }
        addNumber();
        console.log(sum);
    </script>

</body>
</html>

 

 

var 예약어로 지역 변수 선언하기 ( sum이 전역 변수이기 때문에 출력 가능)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    <script>
        function addNumber(){
            sum = 10 + 20;

        }
        addNumber();
        console.log(sum);
    </script>

</body>
</html>

 

 

 

 

 

 

var와 호이스팅

호이스팅이란 '끌어올린다'를 뜻한다. 상황에 따라 변수의 선언과 할당을 분리해서 선언 부분을 스코프의 가장 위쪽으로

끌어올리는 것이다. 끌어올린다는 뜻은 실제로 코드를 끌어올리는 것은 아니고 자바스크립트가 소스를 그런 식으로 해석

한다는 의미이다. 

 

변수와 호이스팅

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    <script>

        var x = 10;

        function displayNumber(){
            console.log("x is " + x)
            console.log("y is " + y)
            var y = 20;
        }
        displayNumber();

    </script>

</body>
</html>

 

해당 처럼 결과가 나오는 이유는 자바스크립트 해석기는 함수 소스를 훑어보면서 var를 사용한 변수는 따로 기억해 둔다.

즉, 변수를 실행하기 전이지만 '이런 변수가 있구나' 하고 기억해 두기 때문에 마치 선언한 것과 같은 효과가 있는 것

 

 

var 예약어를 사용한 변수의 재할당과 재선언

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    <script>

        function addNumber(num1, num2){
            return num1 + num2; // 2개의 수 더하기
        }
        
        var sum = addNumber(10, 20);// sum 변수 선언, 함수 호출
        console.log(sum);
        sum = 50; // 변수 재할당
        console.log(sum);
        var sum = 100;// 변수 재선언
        console.log(sum);

    </script>

</body>
</html>

 

 

 

 


 

 

let와 const의 등장

 

let을 사용한 변수의 특징

 

ES6에서는 변수를 선언하기 위한 예약어로 let와 const가 추가되었고, 되도록이면 var예약어는 사용하지 않을 것을 권장

예약어 var와 let, const의 가장 큰 차이는 스코프의 범위이다. var는 함수 영역(레벨)의 스코프를 가지지만,

let와 const는 블록 영역의 스코프를 가진다. 

 

블록 안에서만 쓸 수 있는 변수

let 예약어로 선언한 변수는 변수를 선언한 블록 { } 에서만 유효하고 블록을 벗어나면 사용할 수 없다. 

 

 

블록 변수 선언하기

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    <script>
        // 블록 변수 선언하기
        function calcSum(n){
            let sum = 0; // 변수 sum의 적용 범위 ( for문빼고 전체 ) 

            for(let i = 1; i < n + 1; i++){
                sum += i; // 변수 i 적용 범위 ( for문 안에서만 )
            }
            console.log(sum);
        }
        calcSum(10);

    </script>

</body>
</html>

 

 

 

전역 변수 선언하기

만약 전역 변수를 선언하고 싶다면 let 예약어를 쓰지 않고 변수이름과 초깃값만 할당하면 된다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    <script>
        // 전역 변수 선언하기
        function calcSum(n){
            sum = 0; // 전역 변수 선언

            for(let i = 1; i < n + 1; i++){
                sum += i; 
            }
            
        }
        calcSum(10);
        console.log(sum); // 전역 변수 사용
    </script>

</body>
</html>

 

Ajax 기본 개념 ( JSP 테스트 )

밑에 코드는 클릭 이벤트가 발생하면 서버로부터 데이터를 비동기적으로 가져와서 웹 페이지에 표시하는 예제

 

클라이언트 측 코드

1. 사용자가 "클릭" 버튼을 클릭하면 ajax() 함수가 실행

2. ajax() 함수 내에서 XMLHttpRequest 객체를 생성하여 비동기 요청을 처리

3. xhr.onreadystatechange 이벤트 핸들러를 등록하여 서버의 응답 상태를 감지

4. xhr.open("get", "add.jsp?name=김길동", true)에서 GET 방식으로 "add.jsp" 페이지에 "name" 파라미터를 전달

5. xhr.send()를 호출하여 서버로 요청을 보낸다.

6. 서버로부터 응답이 도착하면 xhr.onreadystatechange 이벤트 핸들러가 호출되고, 상태가 4 (완료)이고 상태 코드가            200 (성공)인 경우에만 응답 데이터를 처리하고 웹 페이지에 표시

 

서버 측 코드

1. add.jsp" 페이지에서는 request.getParameter("name")을 사용하여 "name" 파라미터의 값을 가져온다.

2. out.println()을 사용하여 가져온 "name" 파라미터 값을 출력

 

<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%

%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div id="result"></div>
<button id="btn" onclick = "ajax()">클릭</button>
    <script>
        // A가 붙으면 비동기
        function ajax(){
            var res = document.getElementById("result");
            //var btn = document.getElementById("btn");
            var xhr = new XMLHttpRequest();

            xhr.onreadystatechange = function(){
                if(xhr.readyState === 4){
                    if(xhr.status === 200){
                        console.log(xhr.responseText);
                        res.innerHTML = xhr.responseText;
                    }
                }
            };

            xhr.open("get", "add.jsp?name=김길동", true);
            xhr.send();
        }
	
    </script>
</body>
</html>

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
out.println(request.getParameter("name"));
%>

 

 

 

 

 

 

 

 


 

 

 

오라클

 

PIVOT, UNPIVOT 함수 ( 서로 반대 ) 

PIVOT 함수는 기존 테이블 행을 열로 바꾸고, UNPIVOT 함수는 기존 테이블 열을 행으로 바꿔서 출력한다.

 

밑에 예제 비교 

기본 GROUP BY절을 활용해서 부서별, 직책별로 그룹화하여 최고 급여 데이터 출력하기

SELECT deptno, job, MAX(sal)
from emp 
GROUP BY deptno, job
ORDER BY deptno, job;

 

 

PIVOT 함수를 사용하여 직책별, 부서별 최고 급여를 2차원  표 형태로 출력

SELECT *
FROM(SELECT deptno, job, sal FROM emp)
 PIVOT(MAX(sal) FOR deptno in(10, 20, 30))
ORDER BY job;

 

PIVOT 함수를 사용하여 부서별, 직책 최고 급여를 2차원  표 형태로 출력

 

SELECT *
FROM(SELECT job, deptno, sal FROM emp)
 PIVOT(MAX(sal) FOR job in('CLERK' 
                        , 'SALESMAN'
                        , 'MANAGER'))
ORDER BY deptno;

 

 

'프로젝트 기반 자바(JAVA) 응용 SW개발자 취업과정' 카테고리의 다른 글

2023-07-10 37일차  (0) 2023.07.10
2023-07-07 36일차  (0) 2023.07.07
2023-07-05 34일차  (0) 2023.07.05
2023-07-04 33일차  (0) 2023.07.04
2023-07-03 32일차  (0) 2023.07.03

자바스크립트

 

타입 체크

String

        var n = prompt("숫자를 입력하세요.",4); /* 4입력하면 기본값으로 출력 */
        console.log(typeof n);/*콘솔에서 타입 확인*/

 

 

입력 값 숫자로 변경

        var n = prompt("숫자를 입력하세요.",4);
        console.log(typeof parseInt(n));/*콘솔에서 타입 확인*/

 

 

 

 

 

 

취소 버튼 클릭 시 이벤트 처리 / 4x4x4x 마지막 x 안붙히기

        if(n !== null){/*취소 버튼 클릭 시 이벤트*/
            var nFact = 1;
            var i = 1;
            str = "";
            
            while(i <= n){
                if( i != n ){ /*마지막에 X 안붙히기*/
                    str += i + "X";
                  
                }else{
                    str += i;
                }
                
                
                i++;
            }
            console.log(str);
            msg = n + "!=" + nFact;
        }else
            msg = "값을 입력하지 않았습니다.";

 

 

While 문으로 팩토리얼 만들기 ( 3의 팩토리얼은 1 x 2 x 3 ) 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1 style="text-align: center">
        while문을 사용한 팩토리얼 계산
    </h1>
    <script>
        var n = prompt("숫자를 입력하세요.");
        var msg = "";

        if(n !== null){/*취소 버튼 클릭 시 이벤트*/
            var nFact = 1;
            var i = 1;
            
            
            while(i <= n){
                
                nFact *= i;
                                
                i++;

                console.log(`nFact = ${nFact}`);
            }
            msg = n + "!=" + nFact;
        }else
            msg = "값을 입력하지 않았습니다.";
        
            document.write(msg);
    </script>

</body>
</html>

 

 

 

 

 

 

break 문으로 구구단을 3단까지만 출력

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="gugudan.css">
</head>
<body>

    <script>
        var i, j;

        for(i = 1; i<=9; i++){
            document.write("<div>");
            document.write(`<h3>${i}단</h3>`)
            for(j = 1; j <= 9; j++){
                document.write(`${i} X ${j} = ${i*j} <br>`)
            }
            document.write("</div>");
            if(i === 3) break;
        }
        
            
        

    </script>

</body>
</html>


CSS

div{
    display: inline-block;
    padding: 0 20px 30px 20px;
    margin: 15px;
    border: 1px solid #ccc;
    line-height: 2;

    background-color: black;
    color: white;
    border-radius: 30px;
    box-shadow: 5px 5px 5px 5px gray inset;
}

div h3{
    text-align: center;
    font-weight: bold;
}

 

 

 

1부터 10까지 짝수만 더하기

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1 style="text-align: center;">짝수끼리 더하기</h1>
    <script style>
        var i;
        var n = 10;
        var sum = 0;

        for(i = 1; i <= n; i++){
            if(i % 2 === 1)
                continue
                sum += i;
            
            document.write(i + "---------" + sum + "<br>")
        }

    </script>

</body>
</html>

 

 

 

 

 

좌석 배치도 만들기

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=<device-width>, initial-scale=1.0">
    <title>Document</title>
        
    <style>
        table, td {
            border: 1px solid #ccc;
            border-collapse: collapse;
        }
        td {
            padding: 5px;
            font-size: 0.9em;
        }

    </style>

</head>
<body>
    <h1 style="text-align: center;">자리 배치도</h1>
    <script>
        var i, j;
        var memNum = prompt("입장객 수는 ?");
        var colNum = prompt("한 줄에 몇 명씩 앉습니까?");

        if(memNum % colNum === 0){
            rowNum = parseInt(memNum / colNum);
        }else{
            rowNum = parseInt(memNum / colNum)+1;
        }

        /*document.write(`모두 ${rowNum}개의 줄이 필요합니다.`)*/

        
        document.write("<table>");
        for(i = 0; i < rowNum; i++){
            document.write("<tr>");
            for(j = 1; j <= colNum; j++){
                seatNo = i * colNum + j;
                if(seatNo > memNum) break;
                document.write("<td> 좌석 " + seatNo + "</td> ");
            }
            
            document.write("</tr>");
        }
        document.write("</table>");
    </script>
</body>
</html>

 

 


 

 

 

 

오라클

 

DEPTNO를 먼저 그룹화한 후 ROLLUP 함수에 JOB 지정하기

SELECT deptno, job, count(*)
    FROM emp
    GROUP BY deptno, ROLLUP(job);

 

JOB을 먼저 그룹화한 후 ROLLUP 함수에 DEPTNO 지정하기

SELECT deptno, job, count(*)
    FROM emp
    GROUP BY job, ROLLUP(deptno);

두 SELECT문의 결과 값은 각각 10번 부서에 존재하는 각 직책별 사원 수와 각 부서별 사원수의 합,

그리고 특정 직책인 사람들의 부서별 인원수와 각 직책별 사원 수의 합형태로 다르게 출력 

 

 

 

 

 

GROUPING SETS 함수 

해당 함수는 같은 수준의 그룹화 열이 여러 개일 때 각 열별 그룹화를 통해 결과 값을 출력하는데 사용한다.

 

 

GROUPING SETS 함수를 사용하여 열별로 그룹으로 묶어 출력하기

부서별 인원수, 직책별 인원수의 결과 값을 하나의 결과로 출력할 수있음

( 열을 계층적으로 분류하지 않고 각각 따로 그룹화한 후 연산을 수행 )

SELECT deptno, job, count(*)
    FROM emp
    GROUP BY GROUPING SETS(deptno, job)
    ORDER BY deptno, job;

 

 

 

그룹화 함수

해당 함수는 데이터 자체의 가공이나 특별한 연산 기능을 수행하지는 않지만 그룹화 데이터의 식별이 쉽고 가독성을

높이기 위한 목적으로 사용한다.

 

 

GROUPING 함수

해당 함수는 ROLLUP 또는 CUBE 함수를 사용한 GROUP BY절에 그룹화 대상으로 지정한 열이 그룹화된 상태로 결과가

집계되었는지 확인하는 데 사용

 

SELECT deptno, job, count(*), GROUPING(deptno), GROUPING(job)
    FROM emp
    GROUP BY CUBE(deptno, job)
    ORDER BY deptno, job;

실행 결과를 살펴보면 GROUPING 함수에 DEPTNO와 JOB열을 각각 적용한 결과가 0, 1로 출력되는 것을 알 수 있다.

여기서 0은 GROUPING함수에 지정한 열이 그룹화되었음을 의미하고

1이 나왔다는 것은 그룹화되지 않은 데이터를 의미한다.

 

 

 

DECODE문으로 GROUPING 함수를 적용하여 결과 표기하기

SELECT DECODE(GROUPING(deptno), 1, 'ALL_DEPTNO', deptno) AS DEPTNO,
        DECODE(GROUPING(job), 1, 'ALL_JOB', job) AS JOB,
        COUNT(*)
    FROM emp
    GROUP BY CUBE(deptno, job)
    ORDER BY deptno, job;

 

 

 

GROUPING_ID 함수

해당 함수는 GROUPING 함수와 동일하게 특정 열이 그룹화되었는지 출력하는 함수이지만 다른 점은 

GROUPING 함수는 그룹화 여부를 검사할 열을 하나씩 지정하지만GROUPING_ID함수는 한 번에 여러 열을 지정할 수 있다. GROUPING_ID함수를 사용한 결과는 밑에 이미지처럼 그룹화 비트 백터값으로 나타낸다. 

 

각 열의 그룹화 유무에 따라 0과 1이 결과 값으로 나오는 것은 GROUPING과 같다. 하지만 GROUPING_ID 함수는 여러 개

열을 지정할 수 있으므로 지정한 열의 순서에 따라 0, 1값이 하나씩 출력된다. 이렇게 0과 1로 구성된 그룹화 비트 백터 값을 2진수로 보고 10진수로 바꾼 값이 최종 결과로 출력된다.

 

 

DEPTNO, JOB을 함께 명시한 GROUPING_ID 함수 사용하기

SELECT deptno, job, count(*), sum(sal),
        GROUPING(deptno),
        GROUPING(job),
        GROUPING_ID(deptno, job)
    FROM emp
    GROUP BY CUBE(deptno, job)
    ORDER BY deptno, job;

 

 

 

LISTAGG 함수 

그룹에 속해 있는 데이터를 가로로 나열할 때 사용 

 

GROUP BY절로 그룹화하여 부서 번호와 사원 이름 출력하기

SELECT deptno, ename
    from emp
   GROUP BY deptno, ename

 

부서별 사원 이름을 나란히 나열하여 출력하기

SELECT deptno, LISTAGG(ename, ', ')
                WITHIN GROUP(ORDER BY SAL DESC) AS ENAMES
    from emp
   GROUP BY deptno;

 

 

 

 

 

 


 

 

DBCP 설정

 

 

context.xml
0.00MB

 

 

 

해당 파일 밑에 이미지 경로에 설정 ( 이클립스 기준 ) 

 

접속 코드 

	@Override
	public Connection getConnection() {
		Context initCtx;
		Connection conn = null;
		try {
			initCtx = new InitialContext();
			DataSource source
			= (DataSource)initCtx.lookup(
					"java:comp/env/jdbc/OracleDB");
			conn = source.getConnection();
			System.out.println("DB 커넥션 성공");
			
		} catch (NamingException | SQLException e) {
			// TODO: handle exception
		}
		return conn;
	}

 

'프로젝트 기반 자바(JAVA) 응용 SW개발자 취업과정' 카테고리의 다른 글

2023-07-07 36일차  (0) 2023.07.07
2023-07-06 35일차  (0) 2023.07.06
2023-07-04 33일차  (0) 2023.07.04
2023-07-03 32일차  (0) 2023.07.03
2023-06-30 31일차  (0) 2023.06.30

자바스크립트

 

자바스크립트 연산자 ( 몫 구하기 )

Math.floor(15/7);

parseInt(15/7);

 

 

자바스크립트 연산자 비교 연산자

3 == "3" 피연산자가 서로 같으면 true

3 === "3" 피연산자도 같고 자료형도 같으면 true

 

 

자바스크립트 연산자 문자열의 비교

"A" > "B" A의 아스키값(65), B의 아스키값(66) 비교

 

 

자바스크립트  ( if ) 조건문 3의 배수 확인

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        var userNumber = prompt("숫자를 입력하세요.");
    if(userNumber !== null){
        if(userNumber % 3 === 0){
            alert("3의 배수 입니다.")
        }else{
            alert("3의 배수가 아닙니다.")
        }
    }else{
        alert("입력이 취소 되었습니다.")
    }

    
    </script>
</body>
</html>

취소 클릭시

 

 

 

자바스크립트 ( if )조건문 3의 배수 확인 ( 삼항 연산자 ) 결과는 위와 동일

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        var userNumber = prompt("숫자를 입력하세요.");
    if(userNumber !== null)
    (userNumber % 3 === 0 ) ? alert("3의 배수입니다.") : alert("3의 배수가 아닙니다.");
    else
    alert("입력이 취소 되었습니다.");
        
    
    </script>
</body>
</html>

 

 

자바스크립트 ( switch )조건문 숫자 입력은 case 번호 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=<device-width>, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        var s = prompt("숫자입력?")
        switch(s){
            case "1" :
                var b = 100 + parseInt(s);/*숫자로 변환*/
                console.log(b);
                break;
            default : 
                console.log("잘못 입력")
                break;
        }

    </script>
</body>
</html>

 

 

 

자바스크립트 ( if ) 조건문 좌석 자리배치도 만들기

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=<device-width>, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        var memNum = prompt("입장객 수는 ?");
        var colNum = prompt("한 줄에 몇 명씩 앉습니까?");

        if(memNum % colNum === 0){
            rowNum = parseInt(memNum / colNum);
        }else{
            rowNum = parseInt(memNum / colNum)+1;
        }

        document.write(`모두 ${rowNum}개의 줄이 필요합니다.`)
    </script>
</body>
</html>

 

 

 

자바스크립트 ( for ) 반복문 1~10 합계

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

    <script>
        var i;
        var sum = 0;

        for(i = 1; i < 10; i++){
            sum += i;
        }
        document.write(`<h1>1~10 더하면 = ${sum}</h1>`);
        document.write(`<h3>i의 값은 = ${i}</h3>`);
    </script>

</body>
</html>

 

 

 

자바스크립트 중첩( for ) 구구단

 

스크립트

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="gugudan.css">
</head>
<body>

    <script>
        var i, j;

        for(i = 1; i<=9; i++){
            document.write("<div>");
            document.write(`<h3>${i}단</h3>`)
            for(j = 1; j <= 9; j++){
                document.write(`${i} X ${j} = ${i*j} <br>`)
            }
            document.write("</div>");
        }

    </script>

</body>
</html>

 

CSS

div{
    display: inline-block;
    padding: 0 20px 30px 20px;
    margin: 15px;
    border: 1px solid #ccc;
    line-height: 2;

    background-color: black;
    color: white;
    border-radius: 30px;
    box-shadow: 5px 5px 5px 5px gray inset;
}

div h3{
    text-align: center;
    font-weight: bold;
}

 

 

 

 

 

 

오라클

 

Group BY절에 조건을 줄 때 사용하는 HAVING절

HAVING절은 SELECT문에 GROUP BY절이 존재할 때만 사용할 수 있다. GROUP BY절을 통해 그룹화된 결과 값의 범위를 제한하는 데 사용된다. 

 

SELECT deptno, job, avg(sal)
    FROM emp
 GROUP BY deptno, job
 HAVING AVG(SAL) >= 2000
ORDER BY deptno, job;

 

HAVING절을 추가하지 않았을 때

 

HAVING절을 추가했을 때

 

 

 

 

HAVING절을 사용할 때 유의점

HAVING절도 WHERE절처럼 지정한 조건식이 참인 결과만 출력한다는 점에서 비슷한 부분이 있으나

WHERE절은 출력 대상 행을 제한하고, HAVING절은 그룹화된 대상을 출력에서 제한하므로 쓰임새는 전혀 다름

 

HAVING절 대신 WHERE절을 잘못 사용했을 경우

에러  = "그룹 함수는 허가되지 않는다"

SELECT deptno, job, avg(sal)
    FROM emp
  WHERE avg(sal) >= 2000  
 GROUP BY deptno, job
ORDER BY deptno, job;

 

 

 

WHERE절과 HAVING절의 차이점

 

WHERE절을 사용하지 않고 HAVING절만 사용한 경우

SELECT deptno, job, avg(sal)
    FROM emp
 GROUP BY deptno, job
  HAVING avg(sal) >= 2000  
ORDER BY deptno, job;

 

 

WHERE절과 HAVING절을 모두 사용한 경우

SELECT deptno, job, avg(sal)
    FROM emp
    WHERE SAL <= 3000
 GROUP BY deptno, job
  HAVING avg(sal) >= 2000  
ORDER BY deptno, job;

WHERE절이 GROUP BY 절, HAVING절보다 먼저 실행 된다.

위에 쿼리문을 보면 WHERE절을 추가한 SELECT문에서는 10번 부서의 PRESIDENT 데이터가 출력되지

않는다. 이는 WHERE절이 GROUP BY절과 HAVING절을 사용한 데이터 그룹화보다 먼저 출력 대상이 될

행을 제한하기 때문이다.

 

 

 

 

그룹화와 관련된 여러 함수

ROLLUP, CUBE, GROUPING SETS 함수는 GROUP BY절에 지정할 수 있는 특수 함수이다.

ROLLUP 함수와 CUBE 함수는 그룹화 데이터의 합계를 출력할 때 유용하게 사용할 수 있다. 

 

 

기존 GROUP BY 절만 사용한 그룹화

SELECT DEPTNO, JOB, COUNT(*), MAX(sal), SUM(sal), AVG(sal)
    FROM emp
   GROUP BY deptno, job
   ORDER BY deptno, job;

 

ROLLUP 함수를 적용한 그룹화

SELECT DEPTNO, JOB, COUNT(*), MAX(sal), SUM(sal), AVG(sal)
    FROM emp
   GROUP BY ROLLUP(deptno, job);

결과를 보면 ROLLUP 함수는 명시한 열을 소그룹부터, 대그룹의 순서로 각 그룹별 결과를 출력하고

마지막에 총 데이터의 결과를 출력한다.

 

ROLLUP함수에는 그룹 함수를 지정할 수 없다.

n개의 열을 지정하면 기본적으로 n+1개의 조합이 출력된다.

 

 

 

CUBE 함수를 적용한 그룹화

SELECT DEPTNO, JOB, COUNT(*), MAX(sal), SUM(sal), AVG(sal)
    FROM emp
   GROUP BY CUBE(deptno, job)
  ORDER BY deptno, job

 

결과를 보면 CUBE 함수는 ROLLUP 함수를 사용했을 때 보다 좀 더 많은 결과가 나온다.

여기서 확인해야 하는 부분은 부서와 상관없이 직책별 결과가 함께 출력되고 있는 부분(밑줄)

CUBE함수는 지정한 모든 열에서 가능한 조합의 결과를 모두 출력한다.

CUBE 함수에 n개 열을 지정하면 2n개 조합이 출력 ( 제곱수 ) 

 

'프로젝트 기반 자바(JAVA) 응용 SW개발자 취업과정' 카테고리의 다른 글

2023-07-06 35일차  (0) 2023.07.06
2023-07-05 34일차  (0) 2023.07.05
2023-07-03 32일차  (0) 2023.07.03
2023-06-30 31일차  (0) 2023.06.30
2023-06-29 30일차  (0) 2023.06.29

자바스크립트

 

자바스크립트_태어난 연도 입력해서 나이 출력 하기 

document.write(" "+ currentYear +"년 현재<br> ") 이렇게 사용하는거 보다 밑에 처럼 사용

document.write(`${currentYear}년 현재<br>`);  백틱 `${ }` 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>나이 계산하기</title>
</head>
<body>
    <script>
        var currentYear = 2023;
        var birthYear;
        var age;

     birthYear = prompt("태어난 연도를 입력하세요. (YYYY)", "")
    age = currentYear - birthYear + 1;
    document.write(`${currentYear}년 현재<br>`);
    document.write(`${birthYear}년에 태어난 사람의 나이는 ${age}세입니다.`);

    </script>


</body>
</html>

 

 

자바스크립트_현재시간 출력

<!DOCTYPE html>
<html lang="ko">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>What time is it?</title>
	<style>
		body {
			font-size:2em;
			text-align: center;
		}
	</style>
</head>
<body>
	<script>
		var now = new Date();
		var display = now.toLocaleTimeString();
		document.write(`현재 시각은 ${display}`);
		
		
	</script>
</body>
</html>

 

자바스크립트_이름 입력 받은 후 출력

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    <script>
        var name = prompt("이름을 입력하세요");
        document.write(`<b><big>${name}</big></b>님, 환영합니다.`);
    </script>

</body>
</html>

 

 

 

오라클

 

다중행 함수와 데이터 그룹화

다중행 함수는 여러행을 바탕으로 하나의 결과 값을 도출해 내기 위해 사용하는 함수

 

실습 SUM 함수를 사용하여 급여 합계 출력하기

select sum(sal)
    from emp

 

 

 

SUM 함수를 사용하여 사원 이름과 급여 합계 출력하기

SELECT절에는 기본적으로 여러 행이 결과로 나올 수 있는 열을 함께 사용할 수 없다.

select ename ,sum(sal)
    from emp

오류 ( 단일 그룹의 그룹 함수가 아닙니다 ) 

결과 값이 한행으로 나온 데이터(SUM(SAL))와 여러 행이 나올 수 있는 데이터(ENAME)를 함께 명시했을때

에러 발생

 

 

SUM 함수와 같이 간단하게 사용할 수 있는 다중행 함수

함수 설명
SUM 지정한 데이터의 합 반환
COUNT 지정한 데이터의 개수 반환
MAX 지정한 데이터 중 최댓값 반환
MIN 지정한 데이터 중 최솟값 반환
AVG 지정한 데이터의 평균값 반환

 

 

 

 

실습_급여 합계 구하기 (DISTINCT, ALL 사용 )

SUM 함수를 작성할 때 생략 가능 옵션 DISTINCT, ALL을 사용한 결과를 비교 

DISTINCT : 중복 제거 

ALL : 중복 허용  ( 작성안해도 무관 ) 옵션 지정 안 하면 ALL이 기본

select sum(DISTINCT sal),
       sum(ALL SAL),
       sum(SAL)
    FROM emp

 

 

 

데이터 개수를 구해 주는 COUNT 함수

COUNT 함수에 *을 사용하면 SELECT문의 결과 값으로 나온 행 데이터의 개수를 반환해준다.

SUM 함수와 마찬가지로 DISTINCT나 ALL을 사용 가능

select count(*)
from emp;

 

 

select count(*)
from emp
where deptno = 30;

 

 

COUNT 함수와 DISTINCT, ALL 함께 사용하기

select count(DISTINCT sal),
       count(ALL SAL),
       count(SAL)
       from emp

 

 

 

COUNT 함수를 사용하여 추가 수당 열 개수 출력하기

COUNT 함수를 사용하면 추가 수당 열처럼 NULL이 데이터로 포함되어 있을 경우, NULL데이터는 반환 개수 제외두 코드 결과값이 같음 

select count(comm)
from emp
select count(comm)
from emp
where comm is not null

 

 

 

 

 

최댓값과 최솟값을 구하는 MAX, MIN 함수

 

select max(sal)
    from emp
   where deptno = 10

 

 

select min(sal)
    from emp
   where deptno = 10

 

 

 

날짜 데이터에 MAX, MIN 함수 사용하기

오라클 데이터베이스에서는 날짜 및 문자 데이터 역시 크기 비교가 가능

 

부서 번호가 20인 사원의 입사일 중 제일 최근 입사일 출력하기

select max(HIREDATE)
    from emp
   where deptno = 20

 

 

부서 번호가 20인 사원의 입사일 중 제일 오래된 입사일 출력하기

select min(HIREDATE)
    from emp
   where deptno = 20

 

 

 

평균 값을 구하는 AVG 함수

AVG 함수는 입력 데이터의 평균 값을 구하는 함수이다. 숫자 또는 숫자로 암시적 형 변환이 가능한 데이터만 사용할 수 있다. 

 

부서 번호가 30인 사원들의 평균 급여 출력하기

select avg(sal)
    from emp
   where deptno = 30

 

 

DISTINCT로 중복을 제거한 급여 열의 평균 급여 구하기 

select avg(distinct sal)
    from emp
   where deptno = 30

 

 

 

 

 

결과 값을 원하는 열로 묶어 출력하는 GROUP BY 절

앞에 다중행 함수는 지정 테이블의 데이터를 가공하여 하나의 결과 값만 출력했다.

그렇기 때문에 부서를 의미하는 부서 번호, 즉 DEPTNO 열 값별로 급여의 평균 값을 구하려면 각 부서의 평균 값을 구하기

위헤 SELECT문을 밑에 처럼 하나하나 제작해야 했다.

 

집합 연산자를 사용하여 각 부서별 평균 급여 출력하기

select avg(sal), '10' as deptno from emp where deptno = 10
UNION all
select avg(sal), '20' as deptno from emp where deptno = 20
UNION all
select avg(sal), '30' as deptno from emp where deptno = 30

 

 

GROUP BY절의 기본 사용법

위에 실습 같이 여러 데이터에서 의미 있는 하나의 결과를 특정 열 값별로 묶어서 출력할 때 데이터를 '그룹화'한다고 표현

SELECT문에서는 GROUP BY절을 작성하여 데이터를 그룹화할 수 있는데 밑에 처럼 순서에 맞게 작성하면 그룹으로 

묶을 기준 열을 지정한다.

SELECT [조회할 열1 이름], [열2 이름], ..., [열 N 이름]
FROM [조회할 테이블 이름]
WHERE [조회할 행을 선별하는 조건식]
GROP BY [그룹화할 엽을 지정(여러 개 지정 가능)]
ORDER BY [정렬하려는 열 지정]

 

GROUP BY를 사용하여 부서별 평균 급여 출력

select avg(sal), deptno
    from emp
   GROUP BY DEPTNO

 

 

부서 번호 및 직책별 평균 급여로 정렬하기 ( ORDER BY 정렬 ) 

select deptno, job, avg(sal)
    from emp
   group by deptno, job
   order by deptno, job

 

 

 

GROUP BY절에 없는 열을 SELECT절에 포함했을 경우

GROUP BY절을 사용하여 출력 데이터를 그룹화할 경우 유의해야 할 점은 다중행 함수를 사용하지 않은 일반 열은 

GROUP BY절에 명시하지 않으면 SELECT절 사용할 수 없다. 

밑에 쿼리문은 DEPTNO를 기준으로 그룹화되어 DEPTNO 열과 AVG(SAL)열은 한 행으로 출력되지만, ENAME 열은 

여러 행으로 구성되어 각 열별 데이터 수가 달라져 출력이 불가능해진다. 

select ename, deptno, avg(sal)
    from emp
   group by deptno

 

 

select ename, deptno, avg(sal)
    from emp
   group by deptno, ename

해당 처럼 바꾸면 출력 가능

 

GROUP BY절을 사용할 때에는 SELECT절의 열도 유심히 살펴 볼 것

 

'프로젝트 기반 자바(JAVA) 응용 SW개발자 취업과정' 카테고리의 다른 글

2023-07-05 34일차  (0) 2023.07.05
2023-07-04 33일차  (0) 2023.07.04
2023-06-30 31일차  (0) 2023.06.30
2023-06-29 30일차  (0) 2023.06.29
2023-06-28 29일차  (0) 2023.06.28

+ Recent posts