본문 바로가기

programming/Gukbi

국비 교육 52일차 - 오라클 정리, css 마무리

728x90
반응형

오라클을 거의 다 배워서 마무리 하면서 정리하고, 실제 테이블 짜는 연습을 좀 해봤다. 

그리고 역시 오후에는 css 연습... 우선 오라클 정리부터 시작

 

 

-- 오라클 최종 정리 
/*
     자바 : 연결 (오라클 (자바) HTML= 연동이 안된다) => 오라클 연결 , 브라우저에 전송 
     오라클 : 데이터베이스 (데이터를 저장하는 장소) = 입출력이 쉽게... (SQL)
     HTML/CSS/JavaScript
        HTML : 화면 출력 (브라우저) => 이동하는 기능
        CSS  : 화면 디자인 (화면 UI)
        JavaScript : 브라우저에서 동작 (이미지변경,팝업,이전상태...) => 이벤트 
        =========== 화면변경 없이 내용이 변경(AJax)
                    JQuery
     ========================================================================
                    자바 => 오라클 => HTML => 서블릿
     JSP 자바와 HTML을 따라 사용이 가능 (자바와 HTML) : JavaServer Page
     ========================================================================
     Spring (통합)
     ======================
     VueJs
     Python(장고)
     ReactJs
     AI
     ======================
*/
/*
     오라클 정리 
     1. SQL : 구조화된 질의 언어 (문자열) => 주목적 검색
        1) SQL 종류 
           = 데이터를 제어 (입력,검색,수정,삭제) => DML
           DML명령어 (SELECT,INSERT,UPDATE, DELETE)
           = SELECT : 데이터 검색 
             형식)
              SELECT * (전체) | column1,column2..(원하는 값)
              FROM (table_name|view_name|SELECT~)
              [
                 WHERE 조건문
                 GROUP BY 그룹컬럼(함수,연산자)
                 HAVING 그룹 조건 
                 ORDER BY 컬럼,함수 ASC|DESC ==> ASC는 생략이 가능 
              ]
              = SELECT 
                 1. 연산자 
                    산술(/ => 실수),비교(=,!=(<>),논리,대입)
                    NULL = IS NULL, IS NOT NULL (오라클)
                    BETWEEN ~ AND : 페이지 나누기,호텔예약
                    LIKE : 유사문자 검색 ( % , _ )
                    NOT , IN
                 2. 내장함수 
                    단일행 
                      = 문자함수
                         SUBSTR()
                         RPAD() : 비밀번호,아이디찾기
                         LENGTH()
                      = 숫자함수
                         CEIL() : 올림 함수 => 총페이지 구하기
                         ROUND()
                      = 날짜함수
                         SYSDATE : 시스템의 날짜 읽기
                      = 변환함수
                         TO_CHAR : 문자열 변환 
                      = 기타함수 
                         NVL() : NULL값을 대체
                    다중행(그룹)
                      = COUNT() : 아이디중복체크 , 로그인 ...
                      = MAX() : 자동 증가 번호 만들때 
                      = SUM(),AVG()
                 3. 여러개 테이블 연결 (JOIN)
                      = EQUI_JOIN
                        = 오라클 조인
                        SELECT A.col,B.col
                        FROM A,B
                        WHERE A.col=B.col;
                        = ANSI 조인
                        SELECT A.col,B.col
                        FROM A JOIN B
                        ON  A.col=B.col;
                      = NON_EQUI_JOIN
                 4. 여러개 SQL문장을 한개 통합 (SUBQUERY)
                      = 단일행 서브쿼리(컬럼1)
                        메인 = (서브쿼리) ========> 비교연산자 
                            ============ 서브쿼리에서 실행한 결과가 1개
                        
                      = 다중행 서브쿼리(컬럼 1)
                        메인 = (서브쿼리) =======> IN,(ANY,ALL=> MAX,MIN)
                            ============ 서브쿼리에서 실행한 결과가 여러개
                               
                      = 스칼라 서브쿼리
                        컬럼명 대신 SELECT~를 이용해서 처리 
                        SELECT ename,(SELECT dname~),(SELECT loc~)...
                        FROM table_name
            = INSERT : 데이터 추가 
              = 원하는 데이터만 추가
                INSERT INTO table_name(컬럼1,컴럼2...) VALUES(값1,값2..) => DEFAULT를 설정했을 경우
                  => 문자 : ' ' , 날짜 : 오늘(SYSDATE), 'YY/MM/DD')
              = 전체 추가 
                INSERT INTO table_name VALUES(순서 => 오라클에 저장된 순서로 값을 대입)
            =====================================================================
            = UPADTE : 데이터 수정 
                UPDATE table_name SET
                컬럼명=값,컬럼명=값...
                [WHERE 컬럼명 연산자 값]
            = DELETE : 데이터 삭제
                DELETE FROM table_name
                [WHERE 컬럼명 연산자 값]
            ===================================================================== 자바(AutoCommit)
        DDL : 데이터베이스 객체 생성
              ==============
                1. 테이블 : 데이터를 저장하는 공간 (2차원 형식 : row,col)
                   SELECT name,subject....FROM board
                          ================
                     bit => byte => word => record => table
                     bit => byte => 단어  => 문장  => 파일
                   ===============================================
                     컬럼 1     컬럼  2    컬럼  3    컬럼  4
                   ===============================================
                     값         값          값         값  ===========> 레코드단위 (ROW,튜플)
                     값         값          값         값 
                   ===============================================
                   = 생성 : CREATE  (= new)
                     ** 데이터베이스 : 공유된 데이터 , 필요한 데이터만 첨부 (정형화된 데이터)
                        제약조건 
                         = NOT NULL : NULL값을 허용하지 않는다 
                         = UNIQUE : 중복허용하지 않는다 (NULL허용) => 후보키 (이메일,전화번호)
                         = PRIMARY KEY : NOT NULL+UNIQUE => 기본키 (모든 테이블에는 한개이상 PRIMARY KEY)
                           = 이상현상 발생 (수정,삭제) => 데이터 무결성
                         = FOREIGN KEY : 참조키 (테이블에 존재하는 데이터만 사용이 가능)
                             게시판   댓글(게시판의 번호를 참조) 
                         = CHECK : 지정된 데이터만 추가 (직위,부서,학과...) = 라디오,체크박스,콤보
                         = DEFAULT : 자동으로 추가 데이터를 지정 (오늘 날짜,조회수...)
                   = 변경 : ALTER (ADD,MODIFY,DROP) => 컬럼단위
                   = 삭제 : DROP 
                   = 이름 변경 : RENAME
                   = 데이터를 삭제 : TRUNCATE
                   
                2. 뷰
                   = 인라인뷰 : 페이지 나누기 
                     SELECT ~
                     FROM (SELECT~)
                   = 복합뷰 : 테이블 여러개 연결 (JOIN) => 자바에서 SQL문장을 단순화 
                3. 시퀀스 
                   = 자동 증가 번호 
                ============
                4. SYNONYM : 테이블 별칭 
                5. PL/SQL : 
                     PROCEDURE 사용(자바)
                     FUNCTION 
                =======================================================================================
                     TRIGGER : 다른 테이블에 연결 동시에 변경(INSERT,UPDATE,DELETE) => COMMIT은 사용하지 않다
                         입고  => 재고(자동)
                         출고  => 재고(자동)
                6. INDEX : 찾기 (최적화된 검색) => 자동 SORT
                =======================================================================================
        DCL : 권한 부여 (GRANT), 권한 해제(REVOKE) => DBA 
        TCL : COMMIT , ROLLBACK
              자바에서도 트랜잭션 프로그램 (일괄 처리)
              ===============
              댓글 => 댓글 
                SELECT => UPDATE => INSERT => UPDATE ==> 전체가 완료 
*/
DROP TABLE you;
DROP TABLE my;
CREATE TABLE my(
   id VARCHAR2(10),
   name VARCHAR2(20),
   sex VARCHAR2(10),
   CONSTRAINT my_id_pk PRIMARY KEY(id,name)
);
/*
    aaa 홍길동
    bbb 홍길동
    aaa 심청이
*/
CREATE TABLE you(
   no NUMBER,
   id VARCHAR2(10),
   name VARCHAR2(20),
   CONSTRAINT you_id_fk FOREIGN KEY(id,name)
   REFERENCES my(id)
);
CREATE TABLE you2(
   no NUMBER,
   id VARCHAR2(10),
   name VARCHAR2(20),
   CONSTRAINT you2_name_fk FOREIGN KEY(id,name)
   REFERENCES my(name)
);

INSERT INTO my VALUES('aaa','hong','man');
INSERT INTO my VALUES('bbb','hong','man');
INSERT INTO my VALUES('bbb','shim','man');
-- 프로젝트 
-- 1. 맛집의 카테고리 
DROP TABLE food_category;
CREATE TABLE food_category(
   no NUMBER,
   title VARCHAR2(100) CONSTRAINT fc1_title_nn NOT NULL,
   subject VARCHAR2(100) CONSTRAINT fc1_subject_nn NOT NULL,
   poster VARCHAR2(260) CONSTRAINT fc1_poster_nn NOT NULL,
   link VARCHAR2(100),
   CONSTRAINT fc1_no_pk PRIMARY KEY(no)
);
-- 2. 맛집 
CREATE TABLE food_house(
   no NUMBER, -- 고유번호 
   cno NUMBER, -- 카테고리 참조 
   poster VARCHAR2(4000) CONSTRAINT fh1_poster_nn NOT NULL,
   title VARCHAR2(200) CONSTRAINT fh1_title_nn NOT NULL,
   score NUMBER(2,1) CONSTRAINT fh1_socre_nn NOT NULL,
   address VARCHAR2(300) CONSTRAINT fh1_address_nn NOT NULL,
   tel VARCHAR2(30) CONSTRAINT fh1_tel_nn NOT NULL,
   type VARCHAR2(100) CONSTRAINT fh1_type_nn NOT NULL,
   price VARCHAR2(50) CONSTRAINT fh1_price_nn NOT NULL,
   parking VARCHAR2(20),
   time VARCHAR2(50),
   menu VARCHAR2(1000),
   good NUMBER,
   soso NUMBER,
   bad NUMBER,
   CONSTRAINT fh1_no_pk PRIMARY KEY(no),
   CONSTRAINT fh1_cno_fk FOREIGN KEY(cno)
   REFERENCES food_category(no)
);

 앞으로 웹 프로그램을 짜면서 사용하게될 오라클 문법을 최종적으로 정리해봤다. 아래는 실제 사이트를 보고 어떤 데이터들이 테이블 구조로 짜여야하는지 연습을 해봤다. 

 

그걸 vuerd로 짜보면 이런 모양이다

 

foreign key 설정을 어떻게 해주면 좋을지 생각해보는게 중요한거 같다. 

 

나도 프로젝트에 필요한 테이블을 짜봤다. 아직 최종은 아니라서 업로드는 안할거지만 다 완성되면 한번 올려보도록 하겠다. 

 

그럼 오후에 한 css 포스팅

 

<!-- 
	HTML 태그
	<input>
		type: button, submit, text, date, password
				hidden, file
		<table>
		<form>
		<a>
		<div>
		<span>
		<hr>
		<br>
		<p>
		<img>
		==> <fieldset><label>
		
		==>  <header><footer><section><aside><article>
	CSS 속성 
		margin, padding, font, text
		=> id속성, class속성, 하위..., 속성값, input[type=""]
						* ^ $
						img[src*=/recipe/]
 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
fieldset{
	width:350px;
}
label {
	width:100px;
	display:table-cell;
}
ul {
	width:330px;
	list-style-type:none;
	display: table;
	border-collapse:collapse;
}
ul li {
	width: 300px;
	display:table-row;
}
input[type="text"],input[type="password"]{
	width:150px;
	padding-left:10px;
}
</style>
<script type="text/javascript">
function login()
{
	var f=document.frm; // form객체를 받아온다
	if(f.id.value=="")
	{
		f.id.focus()
		return;
		}
	if(f.pwd.value==""){
		f.pwd.focus()
		return;
	}
	f.submit();
	/*
		계층구조
			window
			  |
			------------------
			|				|
			document		history
			|
			form
			|
			input
	*/
	}
</script>
</head>
<body>
	<form name=frm action="Login_ok.html">
	<fieldset>
		<legend>login</legend>
		<ul>
		<li>
			<label for=id>ID</label>
			<input type=text id=id>
		</li>
		<li>
			<label for=pwd>Password</label>
			<input type=password id=pwd>
		</li>
		<li>
			<input type=button value="로그인" onclick="login()">
		</li>
		</ul>
	</fieldset>
	</form>
</body>
</html>

 css가 끝나면 자바스크립트를 배우는데, 오늘 아주 잠깐 자바스크립트를 배웠다. 자바스크립트에도 계층 구조가 있다는걸 몰랐는데 새롭게 배웠다. form이 input위에 있는 층이라서 감싸주고 값을 보낸거 였다니.. 몰랐다. 

 

그리고 또 부트스트랩 활용

 

 div와 container로 영역 나누기 연습.. 언젠간 쓰겠지?

 

728x90
반응형