[과제] 자치구단위 서울 생활인구 일별 집계표
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¤tPageNo=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 |