본문 바로가기

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

2020.04.07

1. [과제] 쿼리문 12개 해결하기

-- 1. t_student 테이블에서 키(height)가 180 보다 크거나 같은 사람 출력
SELECT * FROM t_student;
SELECT * FROM t_student WHERE height >= 180;

-- 2. t_student 테이블에서 몸무게(weight)가 60~80 인 사람의 이름과 체중 출력
SELECT * FROM t_student WHERE weight BETWEEN 60 AND 80;

-- 3. t_student 테이블에서는 제1전공(deptno1) 이 101번 학과학생과 201번 학과 학생들을 모두 출력하세요 (IN 연산자 활용)
SELECT * FROM t_student WHERE deptno1 IN (101, 201);

-- 4. LIKE 연산자 사용:  t_student 테이블에서 성이 ‘김’ 씨인 사람 조회
SELECT * FROM t_student WHERE name LIKE '김%';

-- 5. t_student 테이블에서 4학년 학생중에 키 가 170cm 이상인 사람의 이름과 학년과 키를 조회하세요
SELECT name, grade FROM t_student WHERE height >= 170;

-- 6. t_student 테이블에서 1학년이거나 또는 몸무게가 80kg 이상인 학생들의 이름과 키와 학년과 몸무게를 출력하세요
SELECT name, height, grade FROM t_student WHERE grade = 1 OR weight >= 80;

-- 7. t_student 테이블을 사용해서 2학년 중에서 키가 180cm 보다 크면서 몸무게가 70kg 보다 큰 학생들의 이름과 학년과 키와 몸무게를 출력하세요
SELECT name, grade, height, weight FROM t_student WHERE grade = 2 AND height > 180 AND weight > 70;

-- 8. t_student 테이블: 2학년 학생중에서 키가 180cm보다 크거나 또는 몸무게가 70kg 보다 큰 학생들의 이름과 학년과 키와 몸무게를 출력하세요
SELECT name, grade, height, weight FROM t_student WHERE grade = 2 AND (height > 180 OR weight > 70);

-- 9. t_emp 테이블에서 고용일(hiredate)가 1992년 이전인 사람들의 이름(ename) 과 고용일을 출력하세요
SELECT * FROM t_emp;
SELECT ename, hiredate FROM t_emp WHERE hiredate < '19920101';

-- 10.  t_student 테이블: 1학년 학생의 이름과 생일과 키와 몸무게를 출력하세요, 단 생일이 빠른 사람 순서대로 정렬하세요.
SELECT name, birthday, height, weight FROM t_student WHERE grade = 1
ORDER BY birthday ASC;

-- 11.  t_student 테이블: 1학년 학생의 이름과 키를 출력하세요, 별명은 ‘이름’, ‘키’ 로 출력.  단 이름은 오름차순으로 정렬하세요
SELECT name 이름, weight 키 FROM t_student WHERE grade = 1
ORDER BY name ASC;

-- 12.  t_emp2 직원 테이블에서 생일(birthday) 이 1980년대생인 사람들의 이름과 생일만 출력하세요- 즉 (1980/01/01 ~ 1989/12/31 사이 출생한 직원들)
SELECT * FROM t_emp2 WHERE birthday BETWEEN '19800101' AND '19891231';

 

 

 

2. ermaster 설치
1) Install New Software 이용

 : Help > Install New Software... > Work with에 http://ermaster.sourceforge.net/update-site/ 입력 후 엔터
   > ERMaster 뜨면 체크 후 Next 클릭

> Next 클릭 > I accept the terms of the license agreements 선택 후 Finish 클릭
> Security Warning 팝업 뜨면 Install anyway 클릭 > Software Updates 팝업 뜨면 Restart Now 클릭
> 이클립스 재시작하면 다운로드 완..!!

 

2) 수동으로 설치하기
: ermaster 홈페이지 https://sourceforge.net/projects/ermaster/ 에 들어가서

  org.insightech.er_1.0.0.v20150619-0219.jar 다운 받기

> eclipse > plugins 경로로 들어가 다운 받은 org.insightech.er_1.0.0.v20150619-0219.jar 복사하기

> eclipse > configuration

> org.eclipse.equinox.simpleconfigurator 경로로 들어가서 bundles.info 파일을 이클립스로 끌어다가 보기

> org.insightech.er,1.0.0.v20150619-0219,plugins/org.insightech.er_1.0.0.v20150619-0219.jar,4,false 추가 후 저장

 

 

3. ermaster 파일 만들기

 : New > Other... 클릭 
> Wizards에 ERM 검색 > ERMaster 클릭 > Next 클릭
> 파일 이름 설정 후 Next

> 데이터 베이스 Oracle로 설정 후 Finish 클릭 > .erm 파일 완성...!!

 

 

4. test_member_dml.sql, test_member.erm, test_member.sql

** test_member.erm

 

** test_member.sql

/* Drop Tables */

DROP TABLE test_member CASCADE CONSTRAINTS;




/* Create Tables */

CREATE TABLE test_member
(
	mb_no number,
	mb_name varchar2(40) NOT NULL,
	mb_birthdate date
);

 

** test_member_dml.sql

SELECT * FROM TEST_MEMBER;

-- INSERT INTO 테이블 이름 
-- UPDATE 테이블 이름 SET
-- DELETE FROM 테이블 이름

INSERT INTO test_member VALUES(10, '남윤주', SYSDATE);
SELECT * FROM TEST_MEMBER; 

INSERT INTO TEST_MEMBER VALUES(22, '이승환', '1994-02-21');
INSERT INTO TEST_MEMBER VALUES(17, '윤종섭', '2019-08-03');
INSERT INTO TEST_MEMBER VALUES('', '이예지', ''); -- 비어있는 '' 를 INSERT 하면 NULL값 처리
-- INSERT INTO TEST_MEMBER VALUES(10, '', SYSDATE);
INSERT INTO TEST_MEMBER VALUES(NULL, '문상현', '2017-01-01');


-- dBeaver 에서는 기본적으로 auto-commit 수행

 


5. Lec28_JDBC
1) com.lec.java.db01 패키지, DB01Main 클래스

package com.lec.java.db01;

import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Time;
import java.text.SimpleDateFormat;

/*
JDBC (Java DataBase Connectivity) 사용
 0. 라이브러리(jar) 추가:
  1) 이클립스 프로젝트 폴더에 libs 폴더를 생성
  2) C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib\ojdbc6_g.jar
 파일을 libs 폴더로 복사
  3) 복사한 라이브러리를 빌드패스에 추가   
		BulidPath - Configure Build Path..
		Libraries 탭에서  [Add JARs..]   ->  위 libs 폴더의 ojdbc6_g.jar 파일 추가
		Order and Export 탭에서  우선순위 Up (권장)

 1. Oracle 연동을 위한 정보들(상수들)을 정의(세팅)
 2. JDBC 드라이버 클래스를 메모리에 로드
 3. DB와 connection(연결)을 맺음
 4. Statement 인스턴스를 생성 (SQL을 사용하기 위한 인스턴스)
 5. SQL 문장 작성(SELECT, INSERT, UPDATE, DELETE)
 6. SQL 문장을 DB 서버로 전송
 7. 실행 결과 확인
*/

// er-diagram 만들기
// http://ermaster.sourceforge.net/update-site

public class DB01Main {
	
	// 1. Oracle 연동을 위한 정보들(상수들)을 정의(세팅)
	// JDBC 드라이버 클래스 정보
	public static final String DIVER = 
			"oracle.jdbc.driver.OracleDriver";
	
	// DB 서버 접속 주소(URL) 정보
	public static final String URL = 
			"jdbc:oracle:thin:@localhost:1521:XE";
	
	// DB 접속 사용자 계정 정보
	public static final String USER = "scott0316";
	public static final String PASSWD = "tiger0316";
	
		
	public static void main(String[] args) {
		System.out.println("DB 1 : JDBC 프로그래밍");
		
		Connection conn = null;	// java.sql.Connection
		Statement stmt = null;	// java.sql.Statement
		ResultSet rs = null;	// java.sql.ResultSet
		
		try {
			// 2. JDBC 드라이버 클래스를 메모리에 로드
			Class.forName(DIVER); // <-- 동적 클래스 로딩
			System.out.println("드라이버 클래스 로딩 성공");
			
			// 3. DB와 connection(연결)을 맺음
			conn = DriverManager.getConnection(URL, USER, PASSWD);
			System.out.println("DB Connect 연결");
			
			// 4. Statement 인스턴스를 생성 (SQL을 사용하기 위한 인스턴스)
			stmt = conn.createStatement();
			System.out.println("Statement 생성 성공");
			
			// 5. SQL 문장 작성(SELECT, INSERT, UPDATE, DELETE)
			System.out.println();
			String sql_insert = "INSERT INTO test_member VALUES(100, '마징가', SYSDATE)";
			
			// 에러
			// ORA-01400: cannot insert NULL into ("SCOTT0316"."TEST_MEMBER"."MB_NAME")
			//sql_insert = "INSERT INTO test_member(mb_no) VALUES(101)";
			
//			int no = 200;
//			String name = "뽀로로";
//			sql_insert = "INSERT INTO test_member VALUES(" + no + ", '" + name + "', SYSDATE)";

			System.out.println(sql_insert);
			int cnt = stmt.executeUpdate(sql_insert);	// 'DML' 명령은 executeUpdate()로 실행
									// 리턴값은 정수(int)
			System.out.println(cnt + "개 row(행)이 INSERT 됨");
			
			// 5. SQL 문장 작성(SELECT, INSERT, UPDATE, DELETE)
			System.out.println();
			String sql_select = "SELECT mb_no, mb_name, mb_birthdate FROM test_member";
			System.out.println(sql_select);
			
			rs = stmt.executeQuery(sql_select);	// 'SELECT' 및 기타 쿼리의 경우 executeQuery()로 실행
								// 리턴값은 ResultSet 객체
			
			// 컬럼/별명이름 틀리면 아래의 에러 메시지 발생
			// java.sql.SQLException: 부적합한 열 이름
			
			// 7. ResultSet 에 담겨 있는 record 확인
			// 7-1 컬럼 이름으로 받기
//			System.out.println();
//			System.out.println("7-1) 컬럼 이름으로 받기");
//			while(rs.next()) { // next() 레코드 하나 추츨하고 true 리턴, 
//					   // 더이상 뽑아낼 레코드 없으면 false 리턴
//				
//				String no = rs.getString("mb_no");	// getXXX() 에 '컬럼명' 혹은 '별명' 명시
//				String name = rs.getString("mb_name");
//				String birthdate = rs.getString("mb_birthdate");
//				String result = no + "\t | " + name + "\t | " + birthdate;
//				System.out.println(result);
//				
//			} // end while
			
			// 7-2 컬럼 인덱스로 받기
//			System.out.println();
//			System.out.println("7-2) 컬럼 인덱스로 받기");
//			while(rs.next()) { // next() 레코드 하나 추츨하고 true 리턴, 
//					   // 더이상 뽑아낼 레코드 없으면 false 리턴
//				
//				String no = rs.getString(1);	// getXXX() 에 인덱스 명시 가능
//								// (디비는 인덱스 1부터 시작!!)
//				String name = rs.getString(2);
//				String birthdate = rs.getString(3);
//				String result = no + "\t | " + name + "\t | " + birthdate;
//				System.out.println(result);
//				
//			} // end while
			
			// 7-3 null 처리하기
			// getXXX() 로 가져온 데이터가 NULL 값이면 null 리턴한다.
//			System.out.println();
//			System.out.println("7-3) null 처리하기");
//			while(rs.next()) { // next() 레코드 하나 추츨하고 true 리턴, 
//					    // 더이상 뽑아낼 레코드 없으면 false 리턴
//				
//				String no = rs.getString("mb_no");	// getXXX() 에 '컬럼명' 혹은 '별명' 명시
//				if(no == null) {no = "";}
//				
//				String name = rs.getString("mb_name");	// name은 NULL 값을 가질 수 없기 때문에
//									// null 처리할 필요가 없음..!!
//				
//				String birthdate = rs.getString("mb_birthdate");
//				if(birthdate == null) {birthdate = "";}
//				
//				String result = no + "\t | " + name + "\t | " + birthdate;
//				System.out.println(result);
//				
//			} // end while
			
			// 7-4 개별적인 타입으로 get하기
			System.out.println();
			System.out.println("7-4) 개별적인 타입으로 get하기");
			while(rs.next()) { // next() 레코드 하나 추츨하고 true 리턴, 
					   // 더이상 뽑아낼 레코드 없으면 false 리턴
				
				int no = rs.getInt("mb_no");	// getXXX() 에 '컬럼명' 혹은 '별명' 명시
				// mb_no 컬럼값이 null 이면 0을 리턴
				
				String name = rs.getString("mb_name");	
				
				String birthdate = "";
				
				// java.sql.Date, java.sql.Time
				Date d = rs.getDate("mb_birthdate");	// 날짜만 가져온다
				Time t = rs.getTime("mb_birthdate");	// 시간만 가져온다
				
				if(d != null){
					birthdate = new SimpleDateFormat("yyyy년MM월dd일").format(d) + " "
							+ new SimpleDateFormat("hh:mm:ss").format(t);
				}
				
				String result = no + "\t | " + name + "\t | " + birthdate;
				System.out.println(result);
				
			} // end while
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				// 나중에 만들어진 인스턴스부터 먼저 close() 해주자.
				if(rs != null)	{rs.close();}
				if(stmt != null) {stmt.close();}
				if(conn != null) {conn.close();}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
		
		System.out.println("프로그램 종료");
	} // end main()

} // end class DB01Main


2) com.lec.java.db02 패키지, DB02Main 클래스

package com.lec.java.db02;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DB02Main {

	// 1. Oracle 연동을 위한 정보들(상수들)을 정의(세팅)
	// JDBC 드라이버 클래스 정보
	public static final String DRIVER =
			"oracle.jdbc.driver.OracleDriver";
	// DB 서버 정보
	public static final String URL =
			"jdbc:oracle:thin:@localhost:1521:XE";
	// DB 사용자 계정 정보
	public static final String USER = "scott0316";
	public static final String PASSWD = "tiger0316";

	public static final String TBL_NAME = "test_member";
	public static final String COL_LABEL_NO = "mb_no";
	public static final String COL_LABEL_NAME = "mb_name";
	public static final String COL_LABEL_BIRTHDATE = "mb_birthdate";

	public static void main(String[] args) {
		System.out.println("DB 2 - Statement");
		
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
		
		try {
			// 1.
			Class.forName(DRIVER);
			System.out.println("드라이버 로딩 성공");
			
			// 2.
			conn = DriverManager.getConnection(URL, USER, PASSWD);
			System.out.println("Connection 성공");	// 1, 2, 3 중에 여기가 가장 많이 시간 걸림
			
			// 3.
			stmt = conn.createStatement();
			System.out.println("Statement 생성 성공");
			
			String sql = "UPDATE " + TBL_NAME 
					+ " SET " + COL_LABEL_NAME + " = '슈퍼맨', "
					+ COL_LABEL_BIRTHDATE + " = '1996-07-17' "
					+ " WHERE " + COL_LABEL_NO + " = 10";
			System.out.println(sql);	// 확인
			
			int cnt = stmt.executeUpdate(sql);
			System.out.println(cnt + " 개 행(row) UPDATE 성공");
			
			sql = "DELETE FROM " + TBL_NAME 
					+ " WHERE " + COL_LABEL_NAME + " = '마징가'";
			System.out.println(sql);
			cnt = stmt.executeUpdate(sql);
			System.out.println(cnt + "개 행(row) DELETE 성공");
			
			// JDBC DML 명령 실행 --> auto-commit (기본동작)
			
			sql = "SELECT * FROM " + TBL_NAME;
			System.out.println(sql);
			
			rs = stmt.executeQuery(sql);
			
			while(rs.next()) {
				String no = rs.getString(COL_LABEL_NO);
				String name = rs.getString(COL_LABEL_NAME);
				String birthdate = rs.getString(COL_LABEL_BIRTHDATE);
				
				System.out.println(no + " | " + name + " | " + birthdate);
			}
			
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			if(rs != null) {
				try {
					rs.close();
					if(stmt != null) {stmt.close();}
					if(conn != null) {conn.close();}
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}

		System.out.println("\n프로그램 종료");
	} // end main()

} // end class DB02Main

 

 

3) com.lec.java.db03 패키지, DB03Main 클래스 / com.lec.java.db 패키지, Query 인터페이스

** com.lec.java.db03 패키지, DB03Main 클래스

package com.lec.java.db03;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.lec.java.db.Query;

// 공통적으로 사용하는 상수들 인터페이스에 담아서 처리.
public class DB03Main implements Query {
	
	//Statement 자유로운 영혼, 정해져 있지 않다, 하나 만들어 넣고 sql문 바꿔가면서 사용할 수 있다
	//PreparedStatement 정해져있다, sql문 바꿔가면서 사용할 수 없다,
	//                  바꾸고 싶다면 close 하고 새롭게 만들어야 한다.

	public static void main(String[] args) {
		System.out.println("DB 3 - PreparedStatement");
		
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		try {
			// OracleDriver 클래스를 메모리에 로딩
			Class.forName(DRIVER);
			System.out.println("드라이버 로딩 성공");
			
			// DB Connection
			conn = DriverManager.getConnection(URL, USER, PASSWD);
			System.out.println("Connection 성공");	// 1, 2, 3 중에 여기가 가장 많이 시간 걸림
			
			pstmt = conn.prepareStatement(SQL_INSERT);
			// "INSERT INTO test_member VALUES(?, ?, ?)"
			// 첫번째 ? 는 1부터 시작!
			// 장점 : 직접 + 넣어서 조립할 필요가 없다!!
			pstmt.setInt(1, 10);
			//pstmt.setString(1, "호에엥... 에러난다");	// 타입이 달라서 에러
			pstmt.setString(2, "헐크");
			pstmt.setString(3, "2000-10-10");
			//pstmt.setString(3, "꾸엉 꾸엉 에러난다");	// 타입이 달라서 에러
			int cnt = pstmt.executeUpdate();		// DML 명령어, int 리턴
			System.out.println(cnt + " 개 행(row) INSERT 성공");
			
			// 많이 발생할 수 있는 에러 : 누락하면 안되고 타입이 달라서는 안된다..!!
			// java.sql.SQLException: 인덱스에서 누락된 IN 또는 OUT 매개변수:: 3
			// java.sql.SQLSyntaxErrorException: ORA-01722: invalid number
			// java.sql.SQLDataException: ORA-01841: 
			// (full) year must be between -4713 and +9999, and not be 0
			
			System.out.println();
			System.out.println("UPDATE");
			// sql문을 바꿀려고 하면 자원을 close()를 해주고 새롭게 만들어줘야 한다!
			pstmt.close();
			pstmt = conn.prepareStatement(SQL_UPDATE_BIRTHDATE);
			// "UPDATE test_member SET mb_birthdate = ? WHERE mb_no = ?"
			pstmt.setString(1, "2020-01-01");
			pstmt.setInt(2, 10);
			cnt = pstmt.executeUpdate();
			System.out.println(cnt + " 개(row) INSERT 성공");
			
			System.out.println();
			System.out.println("SELECT");
			pstmt.close();
			pstmt = conn.prepareStatement(SQL_SELECT_ALL);
			
			rs = pstmt.executeQuery();
			
			while(rs.next()) {
				String no = rs.getString(COL_LABEL_NO);
				String name = rs.getString(COL_LABEL_NAME);
				String birthdate = rs.getString(COL_LABEL_BIRTHDATE);
				
				System.out.println(no + " | " + name + " | " + birthdate);
			}
		
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if(rs != null) {rs.close();}
				if(pstmt != null) {pstmt.close();}
				if(conn != null) {conn.close();}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
	} // end main()

} // end class DB03Main


** com.lec.java.db 패키지, Query 인터페이스

package com.lec.java.db;

public interface Query {
	// 1. Oracle 연동을 위한 정보들(상수들)을 정의(세팅)
	// JDBC 드라이버 클래스 정보
	public static final String DRIVER =
			"oracle.jdbc.driver.OracleDriver";
	// DB 서버 정보
	public static final String URL =
			"jdbc:oracle:thin:@localhost:1521:XE";
	// DB 사용자 계정 정보
	public static final String USER = "scott0316";
	public static final String PASSWD = "tiger0316";

	public static final String TBL_NAME = "test_member";
	public static final String COL_LABEL_NO = "mb_no";
	public static final String COL_LABEL_NAME = "mb_name";
	public static final String COL_LABEL_BIRTHDATE = "mb_birthdate";
	public static final String SEQ_NAME = "test_member_seq";
	
	// PreparedStatement에서 사용될 SQL 문장
	public static final String SQL_SELECT_ALL =
			"SELECT * FROM " + TBL_NAME;
	
	public static final String SQL_INSERT =
			"INSERT INTO " + TBL_NAME + " VALUES(?, ?, ?)";
	
	public static final String SQL_INSERT_SEQ = 
			"INSERT INTO " + TBL_NAME + " VALUES(" + SEQ_NAME + ".nextval, ?, SYSDATE)";
	
	public static final String SQL_UPDATE_BIRTHDATE =
			"UPDATE " + TBL_NAME 
			+ " SET " + COL_LABEL_BIRTHDATE + " = ?"
			+ " WHERE " + COL_LABEL_NO + " = ?";
	
	public static final String SQL_DELETE_BY_NO =
			"DELETE FROM " + TBL_NAME 
			+ " WHERE " + COL_LABEL_NO + " = ?";

} // end Query(I)

 

 

6. SingleRow1_String.sql

-- INITCAP() 함수 : 첫 문자 대문자로 바꾸어 출력
SELECT INITCAP('pretty girl') 
FROM dual;

-- 학생 테이블(t_student)에서 제1전공(deptno1)이 
-- 201번인 학생들의 id를 첫 글자만 대문자로 출력
-- 별칭은 “ID” 로 출력
SELECT id, INITCAP(id) id  
FROM t_student 
WHERE deptno1 = 201;


-- LOWER(), UPPER() 함수

-- t_student 테이블 : 1전공(deptno1)이 
-- 201번인 학생들의 id를 이름과 함께 소문자, 대문자로 출력
SELECT name, id, UPPER(id) 대문자, LOWER(id) 소문자 
FROM t_student
WHERE deptno1 = 201;


-- LENGTH() /LENGTHB() 함수

-- t_student 테이블 : ID가 9글자 이상인 학생들의 이름과 ID와 글자수 출력
SELECT name, id, LENGTH(id) 글자수
FROM t_student
WHERE LENGTH(id) >= 9;	-- 단일행 함수는 WHERE 조건절에서 사용 가능!

-- t_student 테이블 : 1전공이 201번인 학생들의 이름과 이름의 글자수, 
-- 이름의 바이트 수를 출력하세요
SELECT name 이름, LENGTH(name) 길이, LENGTHB(name) 바이트 
FROM t_student;


-- CONCAT 함수 ( || 연산자와 동일 )

-- t_professor 테이블 : 101번 학과 (deptno)의 교수들의 
-- 이름(name)과 직급(position)을 하나의 컬럼으로 출력하세요.  
-- 컬럼명은 "교수님명단"
SELECT concat(name, POSITION) 교수님명단
FROM t_professor
WHERE deptno = 101;


-- SUBSTR 함수 : 문자열에서 특정 길이의 문자를 추출 
SELECT SUBSTR('ABCDE', 2, 3)	-- 두번째 문자열부터 3개의 문자를 추출 
FROM dual;						-- 'BCD' 문자열 인덱스 1부터 시작

SELECT SUBSTR('abcde', 20, 3)	-- null 값 출력, 에러 아님 
FROM dual;

SELECT SUBSTR('ABCDE', -2, 2)
FROM dual;

-- t_student 테이블 : jumin 칼럼을 사용해서 1전공(deptno1)이 
-- 101번인 학생의 이름과 생년월일 출력
SELECT name 이름, SUBSTR(jumin, 1, 6) 생년월일 
FROM t_student
WHERE deptno1 = 101;

-- t_student 테이블 : jumin 칼럼을 사용해서  태어난 달이 8월인 
-- 사람의 이름과 생년월일을 출력하세요
SELECT name 이름, SUBSTR(jumin, 1, 6) 생년월일 
FROM t_student
--WHERE SUBSTR(jumin, 3, 2) = '08';
WHERE jumin LIKE '__08%';

-- t_student 테이블 : 4학년 학생들중 ‘여학생’들의 
-- 이름과 주민번호 출력
SELECT name, jumin
FROM t_student
WHERE grade = 4 AND SUBSTR(jumin, 7, 1) = '2';

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

2020.04.09  (0) 2020.04.09
2020.04.08  (0) 2020.04.08
2020.04.06  (0) 2020.04.06
2020.04.03  (0) 2020.04.03
2020.04.02  (0) 2020.04.02