본문 바로가기

Learning/SQL

수강편람 테이블에서 과목별 현재 수강인원도 함께 출력하기 내가 보여주고 싶은 결과값 위와 같이 수강편람 테이블이 있다. 맨 우측 열에서 알 수 있듯이 나는 현재 수강인원도 출력하고 싶다. 그러나 과목코드, 강의명, 교사명, 정원은 subject 테이블에 있고, 현재 수강인원은 select count(*)를 해서 attend 테이블에서 가져와야한다. 1. 비조인 select / left outer join 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 --내가 보여주고 싶은 결과값: 수강편람(subject) 테이블에서 과목별 현재 수강인원 컬럼(attend 테이블을 이용)도 함께 출력하기 --결국 attend 테이블에서 subno별 count를 구한 컬럼이 붙어있도록 하는 것. (조인/비조인 방법) --1. 비조인 select --데이터가 많은.. 더보기
namecard 완성하기 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 package com.oracle.namecard; //테이블 NAMECARD의 열들을 멤버변수로 하는 클래스 Namecard public class Namecard { private int no; private String name; private String mobile; private String email;.. 더보기
PreparedStatement 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455package com.oracle.namecardTest; import java.sql.*; //자바 sql 라이브러리 public class PrepareSTMT { public static void main(String[] args) { //(oracle) jdbc:oracle:thin:@localhost:1521:xe //(mySQL) jdbc:mysql://localhost:3306/db이름// 미리 입력할 오라클 주소, 계정, 비밀번호를 변수로 저장 String DB_URL = "jdbc:oracle:thin:@127.. 더보기
JDBC SELECT 1 2 3 SELECT * FROM NAMECARD ORDER BY NO; commit; cs 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 package com.oracle.namecardTest; import java.sql.*; //자바 sql 라이브러리 public class Select { public static void main(String[] args) { //(oracle) jdbc:oracle:thin:@localhost.. 더보기
JDBC INSERT SCOTT 계정에서 NAMECARD라는 명함 테이플을 만들기 DROP TABLE NAMECARD; CREATE TABLE NAMECARD( NO NUMBER CONSTRAINT PK_NAMECARD PRIMARY KEY, NAME VARCHAR2(20) NOT NULL, MOBILE VARCHAR2(20) NOT NULL, EMAIL VARCHAR2(40), COMPANY VARCHAR2(60) ); 시퀀스 만들기 DROP SEQUENCE CARD_NO; CREATE SEQUENCE CARD_NO INCREMENT BY 1 START WITH 1; NAMECARD 테이블에 값 입력 INSERT INTO NAMECARD VALUES ( CARD_NO.NEXTVAL, 'LALA', '010-1234-5678.. 더보기
JDBC Test 자바 웹 애플리케이션 (이클립스)과 오라클을 연결해주는 JDBC (Java DataBase Connectivity) 필요 오라클 JDBC 드라이버를 다운로드 후 C:\Program Files\Java\jre1.8.0.251\jre\lib\ext에 옮겨놓음 이클립스에서 확인 JDBC 테스트 1. 드라이버 로딩 Class.forName("oracle.jdbc.driver.OracleDriver"); 2. DB 연결 Connection conn=null; conn=DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD); 3. SQL문 준비 stmt=conn.createStatement(); 4. SQL쿼리 실행하고 결과 받기 stmt.executeUpdate().. 더보기
DCL: 데이터 제어어 DCL: DATA CONTROL LANGUAGE 데이터 제어 언어 데이터의 사용권한을 관리 GRANT: 특정 사용자에게 수행 권한을 부여 REVOKE: 특정 사용자에게 수행 권한을 회수 및 박탈 새 유저 만들기 1 CREATE USER John Identified by 1234; --새유저 존을 만들고 비밀번호 1234 cs HR 계정에서 나오고 Oracle-XE로 연결 데이터베이스 접속 선택 시 접속권한이 없어서 실패함 접속 권한 주기 1 2 GRANT CREATE SESSION TO John; --John 유저에게 접속 권한 주기 cs 존 계정으로 접속 성공 테이블 생성 CREATE TABLE t1 ( id NUMBER PRIMARY KEY ); 1 2 3 CREATE TABLE t1 ( id NUM.. 더보기
시퀀스 기본키와 같이 순차적으로 증가하는 컬럼을 자동적으로 생성해주는 오라클 객체 테이블과는 독립적으로 저장, 생성 (테이블을 삭제해도 관련 시퀀스는 삭제되지 않음) 시퀀스 생성 1 2 3 4 5 6 7 CREATE SEQUENCE 시퀀스1; --생성 --DROP SEQUENCE 시퀀스1; --삭제 --시퀀스 이름으로 시퀀스 정보출력 SELECT * FROM USER_SEQUENCES WHERE sequence_name = '시퀀스1'; --MIN_VALUE부터 MAX_VALUE까지 사용 가능 --INCREMENT_BY씩 증가 cs 1 2 3 4 --시퀀스 테스트 듀얼 테이블에서 SELECT 시퀀스1.NEXTVAL FROM DUAL; --시퀀스 사용.nextval 실행하는 만큼 증가 Colored by Colo.. 더보기
인덱스 인덱스: RDBMS에서 검색속도를 높이기 위해 사용하는 하나의 기술 WHERE절로 행을 찾을때 전체 테이블을 다 훑어서 비효율적. 자주 찾는 열은 별개의 공간에 인덱스를 만들어서 검색하도록 함 키 값을 기초로 하여 테이블에서 검색과 정렬 속도 향상시킴 테이블의 기본키는 자동으로 인덱스됨 인덱스 확인하기 1 2 3 4 5 6 SELECT TABLE_NAME 테이블명, INDEX_NAME 인덱스이름, COLUMN_NAME 컬럼이름 FROM ALL_IND_COLUMNS --오라클에서 자동 생성됨 WHERE TABLE_NAME = 'DEPARTMENTS'; --테이블 이름을 대문자로 cs 1 2 3 4 5 6 7 8 9 10 11 --실습으로 테이블 만들기 CREATE TABLE members ( member_.. 더보기
뷰: 가상의 테이블. 직접 테이블에 접근하는 것이 아니라 테이블에서 사용자가 필요로 하는 부분만 선택하여 만들어놓은 데이터의 집합. 가상의 테이블 원본 테이블에 직접 접근하지 않아도 사용자가 임의의 뷰를 구성하여 별도의 이름을 붙이거나 접근 가능한 사람들 지정할 수 있음 -> 데이터의 보안 유지 복잡한 SQL문을 매번 작성하지 않도록 할 수 있음 기본테이블로부터 유도된 테이블이기 때문에 기본 테이블과 같은 형태의 구조를 사용. 조작도 거의 비슷 가상 테이블이기 때문에 물리적으로 구현되어 있지 않음 필요한 데이터만 뷰로 정의해서 처리하여 관리가 용이 뷰를 통해서만 데이터에 접근하게 하면 뷰에 나타나지 않는 데이터를 안전하게 보호가능 단순한 view 만들기 EMP_V1 (하나의 원본테이블 사용, 함수나 그룹.. 더보기