본문 바로가기

웹_프론트_백엔드/JAVA프레임윅기반_풀스택

2020.04.06

[과제] 자치구단위 서울 생활인구 일별 집계표

package daily.dailysum;

import java.io.IOException;
import java.net.URL;
import java.util.List;

import org.jsoup.Connection.Response;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;

/*
 * 연습 : 자치구단위 서울 생활인구 일별 집계표
 * ■자치구단위 서울 생활인구 일별 집계표
 * 	http://data.seoul.go.kr/dataList/datasetView.do?infId=OA-15379&srvType=S&serviceKind=1&currentPageNo=1
 * 	http://openapi.seoul.go.kr:8088/(인증키)/(요청파일타입)/SPOP_DAILYSUM_JACHI/(요청시작INDEX)/(요청종료INDEX)/(기준일ID)/(시군구코드)
 * 
 * 샘플url
 * 	XML 버젼 
 * 	http://openapi.seoul.go.kr:8088/704c4a6d7262696e33396a544e7551/xml/SPOP_DAILYSUM_JACHI/1/5/
 * 		예] http://openapi.seoul.go.kr:8088/4d46796d7366726f3833774a774955/xml/SPOP_DAILYSUM_JACHI/1/5/
 * 		예] http://openapi.seoul.go.kr:8088/4d46796d7366726f3833774a774955/xml/SPOP_DAILYSUM_JACHI/1/5/20190101
 * 		예] http://openapi.seoul.go.kr:8088/4d46796d7366726f3833774a774955/xml/SPOP_DAILYSUM_JACHI/1/5/20190101/11000
 * 
 * 	JSON 버젼
 * 	http://openapi.seoul.go.kr:8088/704c4a6d7262696e33396a544e7551/json/SPOP_DAILYSUM_JACHI/1/5/
 * 		예] http://openapi.seoul.go.kr:8088/4d46796d7366726f3833774a774955/json/SPOP_DAILYSUM_JACHI/1/5/	
 * 		예] http://openapi.seoul.go.kr:8088/4d46796d7366726f3833774a774955/json/SPOP_DAILYSUM_JACHI/1/5/20190101
 * 		예] http://openapi.seoul.go.kr:8088/4d46796d7366726f3833774a774955/json/SPOP_DAILYSUM_JACHI/1/5/20190101/11000
 * 
 * ※ 한번에 1000개 까지의 데이터만 볼수 있슴
 * 
 */

/*  입력예]
 *  날짜입력: 20190101
 *  시작Index : 1
 *  끝Index: 5
 *  
 *  [XML]
 *  날짜             구ID        총생활인구수           일최대이동인구수
 *  ----------------------------------------------------------------------
 *  20190101	11000    11121182.98210      4764635.18080 
 *  20190101    11110    274919.65940        177877.95000 
 *  20190101    11140    267096.65940        149729.45840 
 *  20190101    11170    315220.18480        149329.14120 
 *  20190101    11200    351993.77950        153738.94490
 *   
 *  [JSON]
 *  날짜             구ID        총생활인구수           일최대이동인구수
 *  ----------------------------------------------------------------------
 *  20190101	11000    11121182.98210      4764635.18080 
 *  20190101    11110    274919.65940        177877.95000 
 *  20190101    11140    267096.65940        149729.45840 
 *  20190101    11170    315220.18480        149329.14120 
 *  20190101    11200    351993.77950        153738.94490 
 * 
 */

// ★ 주목 ★
// XML 은 Jsoup 를 활용하여 파싱하세요
// JSON 은  jackson 을 활용하여 파싱하세요

public class DailySumMain {

	public static void main(String[] args) throws IOException {

		System.out.println("[XML]");
		
		String needUrl = "http://openapi.seoul.go.kr:8088/704c4a6d7262696e33396a544e7551/xml/SPOP_DAILYSUM_JACHI/1/5/";
		Response response;
		Document doc;
		Element element;
		Elements elements;
		
		response = Jsoup.connect(needUrl).execute();
		//System.out.println(response.statusCode());
		
		doc = response.parse();
		//System.out.println(doc.outerHtml());
		
		elements = doc.select("row");
		//System.out.println(elements.outerHtml());
		//System.out.println(elements.size() + " 개");
		
		System.out.println("      날짜\t\t구ID\t총생활인구수\t일최대이동인구수");
		System.out.println("----------------------------------------------------------------------");
		for(Element e : elements) {
			System.out.println(
					e.select("STDR_DE_ID").text().trim() + "\t"
					+ e.select("SIGNGU_CODE_SE").text().trim() + "\t"
					+ e.select("TOT_LVPOP_CO").text().trim() + "\t"
					+ e.select("DAIL_MXMM_LVPOP_CO").text().trim());
		}
				
		
		
		
		System.out.println("\n[JSON]");
		ObjectMapper mapper = new ObjectMapper();
		
		String urladdress = "http://openapi.seoul.go.kr:8088/704c4a6d7262696e33396a544e7551/json/SPOP_DAILYSUM_JACHI/1/5/";
		
		URL url = new URL(urladdress);
		
		Subway subway = mapper.readValue(url, Subway.class);
		
		System.out.println("      날짜\t\t구ID\t총생활인구수\t일최대이동인구수");
		System.out.println("----------------------------------------------------------------------");
		
		for(Row e : subway.getSPOP_DAILYSUM_JACHI().getRow()) {
			System.out.println(e.getDate() + "\t" + e.siGunGuCode + "\t" + e.total + "\t" + e.max);
		}
		
	} // end main

} // end class


class Subway{
	
	public Stats SPOP_DAILYSUM_JACHI;

	public Stats getSPOP_DAILYSUM_JACHI() {return SPOP_DAILYSUM_JACHI;}
	public void setSPOP_DAILYSUM_JACHI(Stats sPOP_DAILYSUM_JACHI) {SPOP_DAILYSUM_JACHI = sPOP_DAILYSUM_JACHI;}
	
} // end class Subway

@JsonIgnoreProperties(ignoreUnknown = true)
class Stats {
	
	private List<Row> row;

	public List<Row> getRow() {return row;}
	public void setRow(List<Row> row) {this.row = row;}
	
} // end class Stats

@JsonIgnoreProperties(ignoreUnknown = true)
class Row {
	
	@JsonProperty("STDR_DE_ID")
	int Date ;	// 기준일ID
	
	@JsonProperty("SIGNGU_CODE_SE")
	int siGunGuCode;	// 시군구코드
	
	@JsonProperty("TOT_LVPOP_CO")
	double total;	// 총생활인구
	
	@JsonProperty("DAIL_MXMM_LVPOP_CO")
	double max;	// 일최대인구수

	public int getDate() {return Date;}
	public void setDate(int date) {Date = date;}

	public int getSiGunGuCode() {return siGunGuCode;}
	public void setSiGunGuCode(int siGunGuCode) {this.siGunGuCode = siGunGuCode;}

	public double getTotal() {return total;}
	public void setTotal(double total) {this.total = total;}

	public double getMax() {return max;}
	public void setMax(double max) {this.max = max;}
	
} // end class Row

 

 

1. Oracle11g Express Edition(XE, 학습용)을 사용 예정



2. Oracle11g Express Edition(XE, 학습용) 다운로드

 : https://www.oracle.com/database/technologies/xe-prior-releases.html > 로그인 후 운영체제에 맞게 다운로드

> setup.exe 실행

> Next 클릭 > I accept the terms in the license agreement 선택 후 Next 클릭

> 저장 경로 확인 후 Next > 비밀번호는 1234로 설정

> [변경 안함, Port for 'Oracle Database Listener' : 1521] 과 

   [변경할 예정, Port for 'Oracle Http Listener' : 8080]는 잘 봐두기 > Finish 클릭

> 정상적으로 다운로드 되면 아래의 사진처럼 확인됨!!

 

 

3. OracleServiceXe, OracleXETNSListener 실행 안되어 있으면 Oracle DB 사용 불가

 : 윈도키 + R > 실행창 열기 > services.msc 입력 > OracleServiceXe, OracleXETNSListener 실행되어 있나 확인!

 

 

4. 최초 설치 직후라면 Start Database 실행(다음부터는 cmd 창에서 해도 됨)

 

 

5. sqlplus system 입력 후 엔터치면 비밀번호 입력 가능
> 이때 비밀번호 입력할때, 화면에 보이지 않음 > 사용자 ID와 PW가 일치하면 이제부터 사용 가능..!!



6. 오라클 명령어 입력후 세미콜론 꼭 작성하기!!
** 오라클 버전 확인 : SELECT * FROM v$version;  
** SID(오라클에서 SID는 서버 가동할 때의 DB 인스턴스) 확인 : SELECT name FROM v$database; 
** http 포트 번호 확인 : SELECT dbms_xdb.gethttpport() FROM dual;  
** 포트 번호 바꾸기 : exec dbms_xdb.sethttpport(9090);
    [여기서 포트 번호 바꾸는 이유?] 나중에 사용할 TOMCAT 서버의 기본 포트와 충돌을 방지하기 위해

 


7. 수정된 사항이 완전히 저장 : commit;
** Oracle 커맨드 종료 : quit    
    [이때!] 오라클 데이터베이스가 종료된게 아니라, 오라클 데이터베이스와 연결되어 있던

             오라클 커맨드 입력 콘솔이 종료

 


8. Database
 : 여러 사람이 공동으로 공유하여 사용할 목적으로, 통합하여 관리되는 저장된 형태의 데이터의 집합
   자료의 중복을 없애고 자료를 구조화하여 저장함으로써 자료 검색과 갱신 등 운영의 효율을 높인 데이터의 집합


9. DBMS(Database Management System) : 수업에서는 Oracle11g Express Edition(XE) 사용
 : '사용자'와 '데이터베이스(DB)' 사이에서 사용자의 요구(query)에 따라 정보를 생성해주고 
   데이터베이스를 관리해주는 소프트웨어 집합이다.

   사용자 -요구(질의: query)-> DB서버(DBMS)
   사용자 <----query 결과----  DB서버(DBMS)

 


10. DBMS > database > table > 데이터(열과 행으로 구성)
** 열 : column, field, attribute(속성)
** 행 : row, record, tuple
** 테이블의 구조 : 테이블 스키마 (schema)

 

 

11. primary key (PK, 기본키), 관계형 데이터베이스 (Relational database)

 

 

12. SQL (Structured Query Language) :  구조화된 질의 언어

** 관계형데이터베이스시스템(RDBMS)에서 데이터를 다루기 위한 목적으로 설계된 프로그래밍 언어

** SQL 문법으로 짜여진 쿼리(Query)문으로 DBMS에 실행(execute)하면,

    DBMS는 그에 따른 결과 출력 -> 이때, “쿼리문을 (DB에) 날린다”라고 표현

 

** DDL(Data Definition Language) : CREATE, ALTER, DROP
** DML(Data Manipulation Language) : INSERT, UPDATE, DELETE, SELECT
** DCL(Data Control Language) : GRANT,  REVOKE
** TCL(Transaction Control Language) : COMMIT(확정), ROLLBACK(취소)

 

 

13. 사용자 생성은 관리자만 가능
** 로그인 : sqlplus system/1234
** 현재 접속 사용자 확인 : show user;
** 새로운 사용자 생성 : CREATE USER scott0316 IDENTIFIED BY tiger0316;
** 권한 부여 : GRANT connect, resource, create view TO scott0316;
    [connect] DB 접속을 위한 권한
    [resource] 테이블 (등) 생성 권한
    [create view] 뷰(view) 를 생성할수 있는 권한
    [create procedure] 프로시져(procedure) 를 생성할수 있는 권한

 

 

14. 명령어는 대소문자 구분 안함  
** 사용자에게 부여된 권한 확인 : SELECT GRANTED_ROLE FROM DBA_ROLE_PRIVS WHERE GRANTEE ='SCOTT0316';
** 사용자 권한 제거 : REVOKE connect, resource, create view FROM scott0316;
** 사용자 비밀번호 변경 : ALTER USER scott0316 IDENTIFIED BY tiger;

** 타 계정으로 접속 전환 : CONN system/1234;



15. 사용자 삭제 : DROP USER scott0316 CASCADE; 
     [주의] 해당 사용자가 사용하던 모든 데이터베이스 객체들 모두 삭제 되어 복구 불가
** 오라클 DBMS 내 사용자 계정 목록 : SELECT username FROM DBA_USERS;

 


16. 오라클은 문자열은 작은따옴표로 받기
** 테이블 생성 : 
CREATE TABLE phonebook (
    pb_uid NUMBER PRIMARY KEY,
    name VARCHAR2(10) NOT NULL,
    phone VARCHAR2(14) DEFAULT '010-0000-0000',
    memo CLOB,
    regDate DATE
);
[PRIMARY KEY] 고유한 키값을 같는 필드
[NOT NULL] 반드시 입력되어야 하는 필드 (즉, NULL로 두어서는 안되는 필수요소)
[DEFAULT] 입력 안되면 기본값으로 지정된 값이 필드에 저장됨.
** 테이블 구조 확인 : DESC phonebook;

 


17. 오라클 필드 데이터 타입
** 문자형 : VARCHAR, CHAR, CLOB 
** 숫자형 : NUMBER 
** 날짜형 : DATE


18. 오라클에서는 새로 추가되는 컬럼은 항상 맨 뒤에 위치
** 테이블 구조 변경(컬럼 수정) : 
ALTER TABLE phonebook
MODIFY (
    name VARCHAR2(15),
    phone VARCHAR2(20)
);
** 테이블 구조 변경(컬럼 추가) : 
ALTER TABLE phonebook
ADD (   
       email VARCHAR2(20),
       addr VARCHAR2(100),
       age NUMBER DEFAULT 21
);
** 테이블 구조 변경(컬럼 삭제) : ALTER TABLE phonebook DROP (addr, age);

 

 

19. 현재 계정이 소유한 테이블 목록 확인 : SELECT tname FROM tab;
** 테이블 삭제 : DROP TABLE phonebook  CASCADE CONSTRAINT PURGE;
    (휴지통도 거치지 않고 이 테이블과 지정된 제약조건도 함께 완전 삭제)



20. 데이터 다룰때 사이클 기본 : 생성(Create) + 읽기(Read) + 수정(Update) + 삭제(Delete) 

 


21. SQL 명령어 작성시 반드시 알아야 하는 것들

 : 명령문’과 ‘키워드’들은 대소문자 구분 없음,
   문자열은 홀따옴표로,  
   문자열 내의 내용은 대소문자 구분, 
   여러 줄에 걸쳐 명령문 입력 가능, 
   하나의 명령문입력이 끝나면 반드시 세미콜론

 

 

22. DML은 COMMIT 명령을 실행하기 전까지는 임시저장만 됨!

    [그렇기 때문에] 반드시 COMMIT;을 해야 한다

    [그렇게 해야] 데이터베이스로 내용이 업데이트 된다

    [추가] ROLLBACK;은 가장 최근에 COMMIT; 한 이후 적용된 DML 명령 취소하고 원위치시킨다

 

 

** 테이블 생성
CREATE TABLE phonebook(
    id NUMBER PRIMARY KEY,
    name VARCHAR2(50) NOT NULL,
    phone VARCHAR2(100),
    email VARCHAR2(100),
    age NUMBER DEFAULT 21,
    memo CLOB,
    regdate DATE
);
** INSERT : 추가
INSERT INTO phonebook (id, name, phone, email) VALUES (12, '오형돈', '010-1111-2222', 'jff@test.com');
INSERT INTO phonebook VALUES (23, 'jake', '010-1234-5678', 'test@test.com', 38, '', '2018-08-02');

** SET, COL : 컬럼, 페이지 조정 
SET LINESIZE 120; 하나의 라인에 120문자 출력   
SET PAGESIZE 100; 한 페이지에 100라인 출력
COL id FOR 999;  id 컬럼은 숫자 3자리     
COL name FOR a8; name 컬럼은 문자 8자리      
COL phone FOR a13;  phone 컬럼은 문자 13자리 
COL email FOR a20; email 컬럼은 문자 20자리
COL age FOR 99;  age 컬럼은 숫자 2자리
COL memo FOR a10;  memo 컬럼은 문자 10자리  
COL regdate FOR a10; regdate 컬럼은 문자 10자리
** SELECT : 검색하여 보기 
SELECT * FROM phonebook;   
SELECT uid, name FROM phonebook;  

** 시퀀스 (Sequence) 객체 : 사용될 때마다 내부적으로 일정량씩 증가하는 객체
CREATE SEQUENCE phonebook_seq;
** 시퀀스 객체는 생성되면 seq 테이블에 정보가 저장된다.
DESC seq;
** 생성된 시퀀스 Sequence 확인
SELECT * FROM seq WHERE sequence_name = 'PHONEBOOK_SEQ';
**시퀀스 사용한  INSERT :  시퀀스.nextval 사용
INSERT INTO phonebook (id, name, phone, email, regDate)
VALUES (phonebook_seq.nextval, '김철수', '010-1111-2222', 'ssamsung@test.com',  SYSDATE);

** UPDATE : 수정
UPDATE phonebook SET name = 'jesse' WHERE id = 4;
UPDATE phonebook SET email = 'jesse@mail.com' WHERE id = 4;
UPDATE phonebook SET email = 'jake@mail.com' WHERE id = 3;
** DELETE : 삭제
   [주의] WHERE 조건식이 없을 경우, 테이블의 모든 레코드가 삭제됨!!
DELETE FROM phonebook WHERE id = 3;

 

 

23. DBeaver 다운

 : Help > Eclipse Marketplace 클릭

> Find에서 dbeaver 검색 > DBeaver 7.0.2 Install 클릭

> 설정 아무것도 손대지 말고 Confirm 클릭 > I accept the terms of the license agreements 선택 후 Finish
> 시간 지나면 Security Warming 팝업 뜸, Install anyway 클릭
> 다운로드가 끝나면 Software Updates 팝업이 뜨고 Restart Now 클릭하여 이클립스 재시작

> 재시작 후 이클립스 화면 보면 제목표시줄에 SQL 편집기, 데이터 베이스가 생겼음..!!

 

[드라이버 관리자는 단 한 번만] 데이터 베이스 > 드라이버 관리자 클릭

> Oracle 선택 후 Edit 클릭

> 설정되어 있는 Libraries 삭제 후 내가 설정하기 > ADD File

> ojdbc6_g.jar 선택( 경로 : C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib )

> Driver class는 oracle.jdbc.OracleDriver 선택 > OK 클릭


[데이터 베이스 연결은 프로젝트 단위로] 데이터베이스 > 새 데이터베이스 연결 클릭

> Oracle 선택, 데이터베이스 연결할 Project 선택 > Next

> Host, Database, Username, Password 입력 후 Test Connection 클릭
> Connection Test 팝업창에서 Connected 화면 뜨면 정상 연결된 것...!!

 

 

24. 프로젝트 생성

 : Project Explorer > 우클릭 > Project 클릭 > General의 Project 선택 > Next > 이름 설정 후 Finish

 

 

25. 폴더 생성
 : 폴더를 생성하고자 하는 프로젝트 선택 > 우클릭 > New > Folder 클릭 > 이름 설정 > Finish

 

 

26. SQL 파일 생성
 : 파일을 생성하고자 하는 폴더 선택 후 우클릭 > New > SQL File 클릭 > 이름 설정 > Finish

 

 

27. DBeaver 다운로드 후 설정해야 하는 것들

1) 글꼴

 : Window > Preferences 클릭 > General > Colors and Fonts > 폰트 설정 후 Apply 클릭

 

2) 숫자 3자리 구분점 설정 해지
 : Window > Preferences 클릭 > DBeaver > 편집기 > 데이터 편집기 > 데이터 포맷
   > Use Grouping 체크 해지

 

3) sql, xml Default Associations 변경

 : SQL 파일 같은 경우는 이클립스에서 기본 제공하는 편집기가 있다

   내가 다운 받은 DBeaver을 사용하려면 아래와 같은 파일 마다 번거로운 작업을 해야한다

   이러한 번거로운 작업을 방지하기 위해 default Associations을 변경해주면 된다

 

[추가] .xml 같은 경우는 이클립스에서 제공되는 편집기가 훨씬 더 편리하다

 

** 아래의 사진은 이클립스에서 기본 제공되는 편집기

 

** DBeaver 편집기로 변경

 

** Default Associations 변경

 : Window > Preferences 클릭 > Editors > File Aoosciations 클릭

> *.sql 선택 > SQL 편집기 선택 후 Default 클릭

> *.xml 선택 > XML Editor 선택 후 Default 클릭

 

4) 자동 완성 설정 취소하기

 : Window > Preferences 클릭 > DBeaver > 편집기 >

   SQL 편집기 > SQL 자동완성 선택 > Insert table aliases (in FROM clause) 해지

 

 

28. DBeaver 관점으로 변경 가능

 : 해당 관점에서 Oracle Connections을 설정 및 해지가 가능하다

 

[실습코드]

 

1. Select01.sql

-- dual 은 ROW 1개 짜리 dummy TABLE;
SELECT 'abcde' FROM dual;
SELECT '안녕하세요' FROM dual;
SELECT 100 FROM dual;
SELECT 100 + 10 FROM dual;

-- * : '모든 컬럼'
SELECT * FROM t_emp;

-- 원하는 컬럼만 조회
SELECT EMPNO , ENAME 
FROM T_EMP;

SELECT * FROM T_PROFESSOR;
SELECT name FROM T_PROFESSOR;
SELECT bonus FROM T_PROFESSOR;
SELECT '안녕하세요' FROM T_PROFESSOR;

SELECT name, '교수님 사랑해요' FROM T_PROFESSOR;

-- 컬럼 별명(alias) 사용한 출력
SELECT studno 학번, name 이름
FROM T_STUDENT;

SELECT studno "학번", name AS 이름
FROM T_STUDENT;

SELECT studno "학생 학번", name AS 이름
FROM T_STUDENT;

-- t_emp 테이블에서  empno를 사원번호, ename을 사원명, job을 직업으로 별명을 설정하여 출력
SELECT * FROM T_EMP;
SELECT empno 사원번호, ename 사원명, job 직업
FROM T_EMP;

-- t_dept 테이블을 사용하여 deptno를 ‘부서#’, dname을 ‘부서명’, loc를 ‘위치’ 로 별명을 설정하여 출력
SELECT * FROM T_DEPT;
SELECT deptno 부서#, dname 부서명, loc 위치
FROM T_DEPT;

-- DISTINCT : 중복값 제거하고 출력
SELECT * FROM t_emp;
SELECT deptno FROM T_EMP;
SELECT DISTINCT deptno FROM t_emp;

-- 학생테이블(t_student) 에서 제1전공 (deptno1) 을 중복값을 제거하여 출력해보기
SELECT * FROM T_STUDENT;
SELECT DISTINCT deptno1 FROM T_STUDENT;

--직원(t_emp) 들의 직책(job) 을 중복값 제거하여 출력해보기
SELECT DISTINCT job FROM t_emp;

-- || : 필드, 문자열 연결 연산
SELECT name, POSITION 
FROM T_PROFESSOR;

SELECT name || '-' || position 
FROM t_professor;

-- 학생테이블(t_student)를 사용하여 모든 학생들이 ‘서진수의 키는 180cm, 몸무게는 55kg 입니다’ 와 
-- 같은 형식으로 출력되도록 문자를 추가하고, 칼럼 이름은 ‘학생의 키와 몸무게’ 라는 별명으로 출력하세요
SELECT * FROM T_STUDENT;
SELECT name, height, weight
FROM T_STUDENT;
SELECT name || '의 키는 ' || height || ', 몸무게는 ' || weight || 'kg 입니다.' "학생의 키와 몸무게"
FROM T_STUDENT;

 


2. Select01.sql

-- 산술연산자

SELECT ename, sal, sal * 1.1	-- 급여 10% 인상분
FROM t_emp;

SELECT ename, sal, comm, sal + comm	-- NULL 값과의 산술연산은 무.조.건 NULL!!
FROM t_emp;

-- WHERE 조건절
SELECT * FROM t_emp WHERE job='SALESMAN';
SELECT * FROM t_emp WHERE job='SALESMAm';	-- 문자열은 대소문자 구분!(에러는 아님, 결과값이 안나올뿐..!)

-- 직원 테이블(t_emp) 에서 10번 부서(deptno)에 근무하는 직원의 이름(ename)과 급여(sal)와 부서번호(deptno) 출력
SELECT ename, sal, deptno
FROM T_EMP 
WHERE deptno = 10;

--직원 테이블(t_emp) 에서 급여(sal) 가 2000보다 큰 사람의 이름(ename)과 급여(sal)를 출력하세요
SELECT ename, sal
FROM T_EMP 
WHERE sal > 2000;

-- 직원 테이블(t_emp) 에서 이름이 SCOTT인 사람의 이름(ename)과 사원번호(empno), 급여(sal) 출력
SELECT ename, empno, sal
FROM T_EMP 
WHERE ename = 'SCOTT'

-- 연습
-- 학생 테이블(t_student) 에서
-- 2, 3학년(grade) 학생의 이름(name), 학년(grade) 출력
SELECT * FROM t_student;

SELECT name, grade FROM t_student WHERE grade = 2 OR grade = 3;
SELECT name, grade FROM t_student WHERE grade IN (2, 3);
SELECT name, grade FROM t_student WHERE grade > 1 AND grade < 4;
SELECT name, grade FROM t_student WHERE grade NOT IN (1, 4);
SELECT name, grade FROM t_student WHERE grade BETWEEN 2 AND 3;

-- 교수님 (t_professor) 중에서
-- 급여 (pay) 가 300 보다 크고,
-- 직급 (position) 이 '정교수' 인 분들의
-- 이름(name), 급여(pay), 직급(position) 을 출력하세요
SELECT * FROM t_professor;

SELECT name, pay, POSITION FROM t_professor WHERE pay > 300 AND POSITION = '정교수';

-- 보너스(bonus)를 못받고 있는 
-- 교수님의 이름(name)과 직급(position)를 출력하세요
SELECT name, POSITION FROM t_professor WHERE bonus IS NULL;

-- LIKE
-- 교수님 중에서 김씨 성을 가진 교수님의 이름만 출력 (LIKE 사용)
SELECT name FROM t_professor WHERE name LIKE '김%';

-- 직원 테이블(t_emp)에서 직원이름 (ename) 중에
-- NE 문자열이 포함된 직원만 출력
SELECT ename FROM t_emp WHERE ename LIKE '%NE%';

-- 직원 테이블(t_emp)에서 직원이름 (ename) 중에
-- 두번째 글자가 'A' 인 사람의 이름(ename)만 출력
SELECT ename FROM t_emp WHERE ename LIKE '_A%';

-- ORDER BY
-- 직원중 이름에 L이 들어간 사람의 이름을 사전내림차순으로 출력하기
SELECT ename FROM t_emp WHERE ename LIKE '%L%'
ORDER BY ename DESC;

-- 직원의 이름, 직책, 급여를 출력하되 우선은 직책(job) 사전 내림차순으로, 그리고 급여(sal) 오름차순으로 출력
SELECT ename, job, sal FROM t_emp
ORDER BY job DESC, sal ASC;

-- 학생 테이블(t_student) 에서  학생의 이름(name)과 학년(grade)와 키(height)를 출력하세요, 
-- 단 학년은 1학년부터 출력하고, 키는 큰사람부터  출력하세요
SELECT name, grade, height FROM t_student
ORDER BY grade ASC, height DESC;

'웹_프론트_백엔드 > JAVA프레임윅기반_풀스택' 카테고리의 다른 글

2020.04.08  (0) 2020.04.08
2020.04.07  (0) 2020.04.07
2020.04.03  (0) 2020.04.03
2020.04.02  (0) 2020.04.02
2020.04.01  (0) 2020.04.01