자바스크립트

 

객체생성, 배열 생성, 출력 

HTML

<!DOCTYPE html>
<html lang="ko">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<meta http-equiv="X-UA-Compatible" content="ie=edge">
	<title>도서 관리 프로그램 - 객체 만들기</title>
	<link rel="stylesheet" href="css/book.css">
</head>
<body>
	

	<script src="js/book-result.js"></script>
</body>
</html>

 

CSS

body { background:url('../images/bg.png') repeat-x top left;	}
h1 { margin-top:180px; }
p { width:400px; margin-bottom:10px; padding:10px; border:1px solid #ccc;
     color: #ccc; background-color: black;}

 

JS

// 생성자
function Book(title, author, volume, price){
    this.title = title,
    this.author = author,
    this.volume = volume,
    this.price = price;
}
// 객체 생성
let html = new Book('웹표준의 정석', 'ko', '608', '28,000');
let youtube = new Book('유튜브 영상 만들기', 'Kim', '368', '16,000');
let python = new Book('점프 투 파이썬', 'Park', '352', '18,800');

// 배열 생성, 출력
let booklist = [html, youtube, python];
for(let i = 0; i < booklist.length; i++){
    document.write(`<p>${booklist[i].title}</p>`);
}

 

결과

 

 

 

객체 선언 / 프로퍼티와 메서드 정의 / 호출

HTML

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>사용자 정의 객체</title>
    <link rel="stylesheet" href="css/obj.css">
</head>
<body>
    <div id="display"></div>
    <script src="js/object-result.js"></script>
   
</body>
</html>

CSS

        #display {
            width:500px;
            margin:20px auto;
            padding:10px;
            border:1px solid #ccc;
            text-align:center;
            font-size:20px;
            line-height:30px;
        }


JS

var toyRobot = { // toyRobot 객체를 선언한 후 프로퍼티와 메서드 정의
    productID : "123-12",
    name : "Robot",
    price : "25,000",
    madein : "Korea",
    quantity : 10,
    showStock : function(){ // showStock( ) 메서드 정의
        document.querySelector('#display').innerHTML
        = this.name + "제품은" + this.quantity + "개 남아있습니다.";
    }
}
toyRobot.showStock();

//,
// showPrice : function(){
//     alert(this.name + "제품의 가격은" + this.price + "입니다.");
// }

 

결과

Quiz 1 _ 변수 선언 후 객체 생성 / 출력

HTML + CSS

<!doctype html>
<html lang="ko">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>memeber 객체</title>
    <style>
        body {font-size:1.2em; line-height: 2em;}
    </style>
</head>
<body>
    <script src="js/quiz1-result.js"></script>
</body>
</html>

 

JS

const id = 123;
const name = '홍길동';
const age = 25;
const address = '구로구'

const member1 = {id, name, age, address}



document.write("<h2>" + member1.name + "</h2>");
document.write("<ul><li>id : " + member1.id + "</li>");
document.write("<li>나이 : " + member1.age + "</li>");
document.write("<li>주소 : " + member1.address + "</li></ul>");  

 

결과

 

Quiz 2 _ 명언 배열 생성 후 2초마다 새로운 명언 출력

HTML + CSS

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>연습문제</title>
    <style>
            body {
                font-family:'Nanum Pen Script', "맑은 고딕";
                padding-top:20px;
                font-size:2.5em;
                text-align: center;
            }
        </style>
</head>
<body>
    <div id="quiz">
    <script src="js/quiz-2.js"></script>
</div>
</body>
</html>

JS

var quotes = [];
quotes[0] = "당신은 지금도 최고고, 이전에도 최고였으며 앞으로도 최고일 것입니다.";
quotes[1] = "성공하는 사람은 실패하는데 익숙한 사람이다.";
quotes[2] = "후회를 최대한 이용하라. 깊이 후회한다는 것은 새로운 삶은 산다는 것이다.";
quotes[3] = "가짜 친구는 소문을 믿고 진짜 친구는 나를 믿는다.";
quotes[4] = "성공이라는 못을 박으려면 끈질김이라는 망치가 필요하다.";
quotes[5] = "인생이란 결코 공평하지 않다. 이 사실에 익숙해져라.";
quotes[6] = "'언젠가'라는 날은 영원히 오지 않는다.";
quotes[7] = "문제점을 찾지 말고 해결책을 찾으라.";
quotes[8] = "착한 일은 작다 해서 아니하지 말고, 악한 일은 작다 해도 하지 말라.";
quotes[9] = "자존심은 어리석은 자의 소유물이다";

// var index = 0;
//let index = Math.floor(Math.random()*10);
//document.write("<p>&quot;" + quotes[index] + "&quot;</p>")

// 2초마다 출력
// document.querySelector('#quiz').innerHTML ( div id )
setInterval(() => {
    const index = Math.floor(Math.random()*10);
    document.querySelector('#quiz').innerHTML=("<p>&quot;" + quotes[index] + "&quot;</p>");
         }, 2000);

결과

 

 

오라클

 

서브쿼리

SQL문을 실행하는 데 필요한 데이터를 추가로 조회하기 위해 SQL문 내부에서 사용하는 SELECT문 의미

조회 대상의 오른쪽에 놓이며 괄호 ( ) 로 묶어서 사용

 

예) 
사원이름이 ALLEN인 사원의 추가 수당보다 많은 추가 수당을 받는 사원 정보를 출력

select *
 from emp
where comm > (select comm
               from emp
               where ename = 'ALLEN'
                        )

 

 

 

실행 결과가 하나인 단일행 서브쿼리

서브쿼리에서 출력되는결과가 하나이므로 메인쿼리와 서브쿼리 결과는 단일행 연산자를 사용해서 비교

 

서브쿼리의 결과 값이 날짜형인 경우 ( 빨리 입사한 사원 목록 조회 )

select *
 from emp
where hiredate < (select hiredate
               from emp
               where ename = 'SCOTT'
                        )

SCOTT보다 빨리 입사한 직원 목록

 

 

테이블 조인 후 SELECT문에 서브쿼리 적용 ( 서브쿼리 안에서 함수 사용 ) 

select e.empno, e.ename, e.job, e.sal, d.deptno, d.dname
 from emp e, dept d
where e.deptno = d.deptno
 and e.deptno = 20
 and e.sal > (select avg(sal) from emp)

 

 

실행 결과가 여러 개인 다중행 서브쿼리

단일행 서브쿼리와 달리 서브쿼리 결과가 여러 개이므로 단일행 연산자는 사용할 수 없고 다중행 연산자를 사용해야

메인쿼리와 비교할 수 있다.

 

IN연산자

메인쿼리의 데이터가 서브쿼리의 결과 중 하나라도 일치한 데이터가 있다면 true

부서 번호가 20이거나 30인 사원의 정보만 출력 

select *
 from emp
where deptno in (20, 30);

 

각 부서별 최고 급여와 동일한 급여를 받는 사원 정보 출력

select *
 from emp
where sal in (select max(sal)
                from emp
               group by deptno   )

 

서브쿼리의 SELECT문 결과 값이 밑에 쿼리문 처럼 2850, 3000, 5000이 출력되는데 IN연산자를 사용해 메인쿼리에서는

세 값 중 일치하는 값을 가진 행만 출력한다.

select max(sal)
 from emp
group by deptno

 

EXISTS 연산자

서브쿼리에 결과 값이 하나 이상 존재하면 조건식이 모두 true ( 전부 출력 ), 존재하지 않으면 모두 false 

 

서브쿼리 결과 값이 존재하는 경우

모두 출력 

select *
 from emp
where EXISTS ( select dname
                from dept
                where deptno = 10);

서브쿼리 결과 값이 존재하지 않는 이유

아무것도 출력 안됨 50은 없기 때문에 

select *
 from emp
where EXISTS ( select dname
                from dept
                where deptno = 50);

 

 

 

 

비교할 열이 여러 개인 다중열 서브쿼리

서브쿼리의 SELECT절에 비교할 데이터를 여러 개 지정하는 방식

select *
 from emp
where (deptno, sal) in ( select deptno, max(sal)
                			from emp
                		group by deptno);

 

 

오라클 퀴즈 

Quiz-1 

전체 사원 중 ALLEN과 같은 직책인 사원들의 사원 정보, 부서 정보를 출력

select e.job, e.empno, e.ename, e.sal, d.deptno, d.dname
    from emp e, dept d
    where e.deptno = d.deptno
     and job = (select job from emp where ename = 'ALLEN')

 

Quiz-2

전체 사원의 평균 급여보다 높은 급여를 받는 사원들의 사원 정보, 부서 정보, 급여 등급 정보 출력 

( 단 출력할 때 급여가 많은 순으로 정렬하되 급여가 같을 경우에는 사원 번호를 기준으로 오름차순 정렬 ) 

select e.empno, e.ename, d.dname, e.hiredate, d.loc, e.sal, s.grade
    from emp e, dept d, salgrade s
    where e.deptno = d.deptno
     and e.sal between s.losal and s.hisal
     and sal > (select avg(sal) 
                from emp )
                order by e.sal desc, e.empno;

 

Quiz-3

10번 부서에 근무하는 사원 중 30번 부서에는 존재하지 않는 직책을 가진 사원들의 사원 정보, 부서 정보 출력

select e.empno, e.ename, e.job, d.deptno, d.dname, d.loc
 from emp e, dept d
 where e.deptno = d.deptno
  and e.deptno = 10
  and job not in (select distinct job from emp where deptno = 30);

 

결과가 해당처럼 나와야 됨

 

 

 

서브 쿼리 뺀 결과 값

select e.empno, e.ename, e.job, d.deptno, d.dname, d.loc
 from emp e, dept d
 where e.deptno = d.deptno
  and e.deptno = 10

 

 

 

해당 문제 풀때는 서브쿼리 문 안에 내용을 확인 후 제외 시킬 인원 목록 확인 

select distinct job from emp where deptno = 30

 

 

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

2023-07-17 42일차  (0) 2023.07.17
2023-07-14 41일차  (0) 2023.07.14
2023-07-11 38일차  (1) 2023.07.11
2023-07-10 37일차  (0) 2023.07.10
2023-07-07 36일차  (0) 2023.07.07

+ Recent posts