16장. 테이블의 변경 새로운 행 삽입 테이블에서 테이블로 행을 복사 행 값의 변경 테이블에서 행 삭제

Slides:



Advertisements
Similar presentations
CUBRID 소개 (Object 개념) 서비스 사업부 / 기술지원팀. 목차 구조 일반적 특징 객체지향 특징 ORDB 개념을 이용한 스키마 ORDB 개념을 이용한 질의.
Advertisements

1 SQL 정보보호학과 양 계 탁. 2 SQL 개요 SQL 개요 3 Database u 연관된 데이터들의 집합 u 데이터를 쉽게 관리하는 프로그램 종 류종 류 관계형 데이터베이스 객체지향형 데이터베이스 계층형 데이터베이스 네트워크 데이터베이스 데이터를 2 차원적인 테.
널 (null) 의 처리 널을 검색하는 방법 형식 예 ) takes 테이블에서 아직 학점이 부여되지 않은 학생의 학번을 검색 is null is not null ( 질의 64) select stu_id from takes where grade is null.
SQL 언어 SQL.
PARK SUNGJIN Oracle 설치 PARK SUNGJIN
소리가 작으면 이어폰 사용 권장!.
제로보드 소개 제로보드 설치하기 제로보드 관리하기
소프트웨어시스템설계(6주) 데이터베이스 연동
질의어와 SQL 기본 SQL 고급 SQL 데이타의 수정 데이타 정의 언어 내장 SQL
관계 대수와 SQL.
Database & Internet Computing Laboratory 한 양 대 학 교
제 5 장 인덱스 생성 및 관리.
4장. 관계 대수와 SQL SQL 관계 데이터 모델에서 지원되는 두 가지 정형적인 언어
APM 실습 (MySQL).
SQL-99: 스키마 정의, 기본제약조건, 질의어 충북대학교 구조시스템공학과 시스템공학연구실
제 09 장 데이터베이스와 MySQL 학기 인터넷비즈니스과 강 환수 교수.
JDBC 프로그래밍 이수지 이동주 1.
You YoungSEok 고급 SQL You YoungSEok
3장. MySQL 5.x 설치와 정보 MySQL의 특징 MySQL 설치 MySQL의 데이터베이스 관리 툴
SQL 개요 SQL 개요 - SQL은 현재 DBMS 시장에서 관계 DBMS가 압도적인 우위를 차지하는 데 중요한 요인의 하나
10장. 데이터베이스 보안과 권한 관리 데이터베이스 보안과 권한 관리
MySQL performance Xhark 김재홍.
데이터베이스 담당교수 신정식 Chapter 4 SQL(1).
6장 Mysql 명령어 한빛미디어(주).
모의 데이터베이스 시스템 구현 – 인터넷 웹 서점
18장. 뷰(View) 뷰의 생성 뷰의 열 이름 뷰의 변경 : WITH CHECK OPTION 뷰 테이블의 정보와 네비게이터
데이터베이스 와 JDBC 1.데이터베이스와 데이터베이스 관리 시스템은? 2.데이터베이스 장점?
11장. 데이터베이스 서버 구축과 운영.
kHS 데이터베이스 테이블 및 인덱스 kHS.
14장 뷰.
Chapter 05 데이터베이스 프로그래밍.
4.2 SQL 개요 SQL 개요 SQL은 IBM 연구소에서 1974년에 System R이라는 관계 DBMS 시제품을 연구할 때 관계 대수와 관계 해석을 기반으로, 집단 함수, 그룹화, 갱신 연산 등을 추가하여 개발된 언어 1986년에 ANSI(미국 표준 기구)에서 SQL.
ER-Win 사용 방법.
14 뷰(View) 뷰의 개념 뷰 관리.
뷰와 저장 프로시저 뷰의 개념을 이해한다. 뷰의 정의와 관리 방법을 이해한다. 뷰를 사용함으로써 생기는 장점을 알아본다.
19장. 트랜잭션과 락(LOCK) 트랜잭션이란? MySQL의 트랜잭션 락(LOCK) 쉽게 배우는 MySQL 5.x
DP-ORA 쿼리 최적화 가이드 쿼리 최적화 방법 2014년 7월.
SQL.
YOU Youngseok 트랜잭션(Transaction) YOU Youngseok
01 데이터베이스 개론 데이터베이스의 등장 배경 데이터베이스의 발전 과정 데이터베이스의 정의 데이터베이스의 특징
You YoungSEok Oracle 설치 You YoungSEok
2장. 학사관리 예제 DATABASE 학사 데이터베이스의 해설 테이블의 내용 무결성 규칙 쉽게 배우는 MySQL 5.x
4장. 데이터베이스와 테이블 MySQL 데이터베이스 테이블의 생성 테이블 데이터 처리(삽입, 변경, 삭제) 작업
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
Chapter 3: Introduction to SQL
고급 T-SQL.
CHAPTER 06. 데이터베이스 자료의 조직적 집합체_데이터베이스 시스템의 이해
SQL Query in the SSMS : DB, Table
JSP 게시판 구현.
12장. SELECT 명령문: ORDER BY절 단일 열 정렬 순서번호로 정렬 오름차순과 내림차순 정렬 하나 이상의 행 정렬
View(뷰) 1 가상 테이블(Virtual Relation)
데이터베이스 (Database) SQL 추가 기능: 주장, 뷰, 프로그래밍 기법 문양세 강원대학교 IT대학 컴퓨터과학전공.
Database 중고차 매매 DB 비즈니스IT 윤동섭.
인터넷응용프로그래밍 과제 실습.
11장. GROUP BY와 HAVING 열의 그룹화 2개 이상의 열에 대한 그룹화
10장. SELECT명령문 : 통계함수 모든 열 선택(*) 2. SELECT 절의 수식
3장. SQL Server 2008전체 운영 실습 및 DB와 프로그램의 연동
컬럼 대칭키 암호화 작업(SQL 2008) ① 마스터 키 생성 ② 인증서 생성 초기 한번만 실행 ③ 대칭키 생성
MS-SQL7.0 Implementation 강의 노트
06. SQL 명지대학교 ICT 융합대학 김정호.
13장 자바빈과 데이터베이스를 연동한 게시판 시스템
20장. SQL명령문의 최적화 1. OR연산자의 사용을 피하라. 2. 불필요한 UNION연산자의 사용을 피하라.
테이블 관리 테이블 생성,수정,삭제 데이터 입력 수정, 삭제 2010학년도 2학기.
뇌를 자극하는 Windows Server 장. 데이터베이스 서버.
Stored program 2 장종원
1장. 서 론 데이터베이스의 개요 모델의 종류 관계형 모델과 객체 지향형 데이터베이스 SQL이란 무엇인가?
Stored program 장종원
Data Base Mysql.
제 5 장 MariaDB인덱스 생성 및 관리.
8장. SELECT명령문 : FROM 절 FROM 절에서 테이블 명세 열 명세 다중 테이블 명세 가명 FROM절의 다양한 예제
Presentation transcript:

16장. 테이블의 변경 새로운 행 삽입 테이블에서 테이블로 행을 복사 행 값의 변경 테이블에서 행 삭제 2018-12-30 쉽게 배우는 MySQL 5.x

16.1 새로운 행 삽입 -INSERT 명령문은 테이블에 새로운 행을 삽입하기 위해서 사용 -첫 번째 형식은 오직 새로운 행만 삽입 -두 번째 형식은 다른 테이블로부터 필요한 행을 가져와 테이블에 삽입 -꼭 필요한 데이터(NOT NULL로 지정된 값 포함) 만을 선택하여 입력가능 [예제 16-1] 교수코드 “6001”과 교수이름 “대조영”을 추가하라. (단, 데이터는 교수코드와 교수명만 입력한다.) mysql> insert into professor(prof_code, prof_name)     -> values('6001','대조영'); Query OK, 1 row affected (0.06 sec) 위의 예제는 INSERT 명령문에서 지정하지 않는 모든 열(PROF_ENAME, CREATE_DATE)은 NULL 값이 삽입된다. 만약 NULL이 리터럴로 지정되었다면 그 행에서 지정된 열은 NULL 값으로 채워진다. 2018-12-30 쉽게 배우는 MySQL 5.x

[예제 16-2] 새로운 과목을 추가하라. 단, 데이터는 다음과 같다. (‘5001', 'JSP프로그래밍', 'JSP Programming', '2006'); mysql> insert into subject values     -> (‘5001','JSP프로그래밍','JSP Programming',2006'); Query OK, 1 row affected (0.00 sec) -SUB_CODE, SUB_NAME 열은 반드시 데이터를 입력 -이유는 2개의 열은 NOT NULL로 지정되어 있기 때문 -NULL 대신에 문자열의 NULL을 나타내는 ‘ ’와 같이 입력하여도 무관 [예제 16-2]를 열의 순서와 상관없이 다음과 같이 입력하여도 동일 mysql> INSERT INTO SUBJECT     -> ( CREATE_YEAR, SUB_CODE, SUB_NAME, SUB_ENAME)     -> VALUES ('2006', ‘5001', 'JSP프로그래밍', 'JSP Programming'); 열의 이름을 지정하지 않았다면 결과는 완전히 다르다. SQL은 값 ‘2006’을 교과목코드로 간주하고, 값 ‘5001’를 교과목명으로 간주 2018-12-30 쉽게 배우는 MySQL 5.x

16.2 테이블에서 테이블로 행을 복사 -새로운 행을 삽입하는 것이 아니라 각 행은 한 테이블에서 다른 테이블로 이동 16.2 테이블에서 테이블로 행을 복사 -새로운 행을 삽입하는 것이 아니라 각 행은 한 테이블에서 다른 테이블로 이동 -한 테이블에서 다른 테이블로 복사하는 것과 동일 [예제 16-3] 새로운 전라남도 순천시 향우회 테이블을 생성시켜 보자. 향우회테이블은 학생의 학번, 이름, 우편번호, 현주소, 전화번호로 구성되어 있다. (1) 먼저 새로운 테이블을 생성한다. mysql> create table hang(                       -> stu_no char(10) Not null,     -> stu_name char(10) Not null,     -> hyun_post_no varchar(7) Not null,     -> hyun_add varchar(100) Not null,     -> hyun_tel varchar(14),     -> primary key (stu_no)     -> ) type = innoDB; (2) STUDENT 테이블에 등록되어 있는 전라남도 순천시(현주소 우편번호 3자리가 540으로 시작하는)의 학생에 관한 정보를 HANG 테이블로 복사한다. mysql> insert into hang                                        -> (stu_no, stu_name, hyun_post_no, hyun_add, hyun_tel)     -> select stu_no, stu_name, post_no, address, tel     -> from student     -> where substring(post_no, 1, 3) = '540'; Query OK, 5 rows affected (0.03 sec) 2018-12-30 쉽게 배우는 MySQL 5.x

(3) 다음은 전라남도 순천시 향우회의 내용을 확인하여 보자. mysql> select * from hang; +----------+----------+--------------+-------------------------+--------------+ | stu_no   | stu_name | hyun_post_no | hyun_add                | hyun_tel     | | 20001015 | 박도준   | 540-130      | 16-2번지                | 061)744-6126 | | 20041007 | 정인정   | 540-850      | 부영7차APT 304동 1210호 | 061)723-1078 | | 20071022 | 이순신   | 540-170      | 560-18번지              | 061)745-7667 | | 20071307 | 김문영   | 540-170      | 380-2번지               | 061)745-5485 | | 20071405 | 최차영   | 540-310      | 금사리 1427             | 061)745-6893 | 5 rows in set (0.00 sec) 다음의 insert문은 [예제 16-3]의 insert문과 동일한 결과 생성 INSERT INTO  HANG SELECT STU_NO, STU_NAME, POST_NO, ADDRESS, TEL FROM  STUDENT WHERE SUBSTRING(POST_NO, 1, 3) = '540'; INSERT INTO HANG (HYUN_ADD, HYUN_POST_NO, HYUN_TEL, STU_NAME, STU_NO) SELECT ADDRESS, POST_NO, TEL, STU_NAME, STU_NO FROM  STUDENT 2018-12-30 쉽게 배우는 MySQL 5.x

INSERT 명령문에서 SELECT문 사용시 규칙 - SELECT 명령문은 새로운 행이 복사될 테이블을 참조하지 않는다(이러한 제한이 모든 SQL 제품에서 적용되는 것은 아니다). - 여기서 사용되는 SELECT 명령문은 완전히 동일한 SELECT 명령문이다. 따라서 부속 질의어, JOIN, GROUP BY등의 기능을 그대로 사용 INSERT INTO 절에 있는 열의 수는 SELECT 절에 있는 수식의 수와 동일 INSERT INTO 절에 있는 열의 자료형은 SELECT 절에 있는 수식의 자료형과 일치해야 한다. INSERT   INTO STUDENT SELECT   * FROM    STUDENT; 전라남도 순천시 지역 향우회가 되지 않고, 학적 테이블에 있는 모든 행을 복사하므로 오류 INSERT   INTO HANG FROM    STUDENT WHERE   SUBSTRING(POST_NO, 1, 3) = '540'; 참조할 테이블(STUDENT)의 열의 수와 실제로 복사할 테이블(HANG)의 열의 수가 서로 다르기 때문에 오류 2018-12-30 쉽게 배우는 MySQL 5.x

[예제 16-4] 교수(PROFESSOR) 테이블에서 PROF_ENAME 열을 삭제하라. (1) PROFESSOR 테이블과 동일한 열을 가지는 테이블을 생성하는데, 이 때 PROF_ENAME 열을 제외하고 새로운 “DUMMY”테이블을 생성한다. mysql> create table dummy     -> (prof_code char(4) not null,     -> prof_name char(10) not null,     -> create_date date,     -> primary key (prof_code)) type = innoDB; Query OK, 0 rows affected, 1 warning (0.13 sec) (2) PROFESSOR 테이블에서 DUMMY 테이블로 모든 행을 복사한다. mysql> insert into dummy     -> (prof_code, prof_name, create_date)     -> select prof_code, prof_name, create_date     -> from professor; Query OK, 12 rows affected (0.02 sec) Records: 12  Duplicates: 0  Warnings: 0 (3) PROFESSOR 테이블을 삭제하라. mysql> drop table professor; Query OK, 0 rows affected (0.06 sec) 2018-12-30 쉽게 배우는 MySQL 5.x

(4) DUMMY 테이블의 구조와 동일한 PROFESSOR 테이블을 생성하라. mysql> create table professor as select * from dummy; Query OK, 12 rows affected (0.08 sec) Records: 12  Duplicates: 0  Warnings: 0 (5) DUMMY 테이블을 삭제하라. mysql> drop table dummy; Query OK, 0 rows affected (0.02 sec) (6) PROFESSOR 테이블을 질의하라. mysql> select * from professor; +-----------+-----------+-------------+ | prof_code | prof_name | create_date | | 4001      | 정진용    | 1995-09-01  | | 4002      | 나인섭    | 2006-02-02  | | 4003      | 정창부    | 2003-03-01  | | 4004      | 박상철    | 2000-01-15  | | 4005      | 정병열    | 1998-03-01  | | 4006      | 고진광    | 1988-03-01  | | 4007      | 김영식    | 1986-03-01  | | 4008      | 최우진    | 1997-03-01  | | 4009      | 문창수    | 1995-03-01  | | 5010      | 정종필    | 1997-03-01  | | 5011      | 최종주    | 1992-03-05  | | 6001      | 대조영    | NULL        | 12 rows in set (0.00 sec) 2018-12-30 쉽게 배우는 MySQL 5.x

16.3 행 값의 변경 UPDATE 명령문은 테이블에 있는 값을 변경하기 위해서 사용 16.3 행 값의 변경 UPDATE 명령문은 테이블에 있는 값을 변경하기 위해서 사용 [예제 16-5] 자바프로그래밍의 생성년도를 2006년으로 갱신하라. mysql> update subject     -> set create_year = '2006'     -> where sub_name = '자바프로그래밍'; Query OK, 1 row affected (0.05 sec) Rows matched: 1  Changed: 1  Warnings: 0 과목명이 자바프로그래밍인 행에 대하여 CREATE_YEAR를 변경전의 값 ‘1999’을 ‘2006’으로 변경 [예제 16-6] 모든 등록금총액을 5% 증가시켜라. mysql> update fee     -> set fee_total = fee_total * 1.05; Query OK, 26 rows affected (0.08 sec) Rows matched: 26  Changed: 26  Warnings: 0 WHERE 절이 생략되었기 때문에 갱신은 테이블에서 관련된 모든 행에 대하여 수행 2018-12-30 쉽게 배우는 MySQL 5.x

변경된 데이터를 확인하기 위해서 다음과 같은 SELECT문을 사용 mysql> select stu_no, fee_year, fee_term, fee_total     -> from fee; +----------+----------+----------+-----------+ | stu_no   | fee_year | fee_term | fee_total | | 20001015 | 2000     |        1 |   3150000 | | 20001015 | 2000     |        2 |   2625000 | | 20001015 | 2001     |        1 |   2940000 | | 20001015 | 2001     |        2 |   2940000 | | 20001015 | 2006     |        1 |   3150000 | | 20001015 | 2006     |        2 |   3150000 | | 20001015 | 2007     |        1 |   3150000 | | 20001015 | 2007     |        2 |   3150000 | | 20061011 | 2006     |        1 |   3675000 | | 20061011 | 2006     |        2 |   3150000 | | 20061011 | 2007     |        1 |   3150000 | | 20061011 | 2007     |        2 |   3150000 | | 20071001 | 2007     |        1 |   3675000 | | 20071001 | 2007     |        2 |   3150000 | | 20071010 | 2007     |        1 |   3675000 | | 20071010 | 2007     |        2 |   3150000 | | 20071022 | 2007     |        1 |   3675000 | | 20071022 | 2007     |        2 |   3150000 | | 20071300 | 2007     |        1 |   3675000 | | 20071300 | 2007     |        2 |   3150000 | | 20071307 | 2007     |        1 |   3675000 | | 20071307 | 2007     |        2 |   3150000 | | 20071405 | 2007     |        1 |   3675000 | | 20071405 | 2007     |        2 |   3150000 | | 20081001 | 2008     |        1 |   3675000 | | 20081002 | 2008     |        1 |   3675000 | 26 rows in set (0.00 sec) 2018-12-30 쉽게 배우는 MySQL 5.x

하나의 UPDATE 명령문으로 행에 있는 다수의 열을 갱신할 필요가 있는 경우 [예제16-9]김문영 학생 가족이 서울특별시 영등포구 신길1동 652-9번지 3통 5반으로 이사하였다. 신길1동의 우편번호는 150-051이고, 전화번호 02)652-2298번이다. 데이터를 변경하라. mysql> update student                         -> set address = '652-9번지 3통 5반',     ->     post_no = '150-051',     ->     tel = '02)652-2298'     -> where stu_name = '김문영'; Query OK, 1 row affected (0.00 sec) Rows matched: 1  Changed: 1  Warnings: 0 하나의 UPDATE 명령문으로 행에 있는 다수의 열을 갱신할 필요가 있는 경우 -SET 절의 각 항목 간에는 콤마를 사용하여 다수의 열을 변경 -예제에서 ADDRESS, POST_NO, TEL 열을 변경하기 위하여 콤마를 사용 SQL은 UPDATE 명령문을 어떻게 수행하는가? -각 행에 대하여 SQL은 WHERE 절에 있는 조건이 참인지 조사 -참이면 관련된 행의 복사가 이루어지고, 변경될 각 행에 대하여 수식이 처리 -계산 또는 처리는 복사본의 열에서 수행 -수식의 결과는 원래의 행에 기록되어 실제적인 변경이 이루어짐 -행이 처리된 후에 복사본은 자동적으로 삭제 2018-12-30 쉽게 배우는 MySQL 5.x

등록 테이블의 FEE_PRICE, FEE_TOTAL, FEE_PAY가 변경되었는지 질의해 보자. mysql> update fee     -> set fee_price = fee_price + 5000,     ->     fee_total = fee_total + 5000,     ->     fee_pay = fee_pay + 5000     -> where stu_no in     -> (select stu_no     -> from circle); Query OK, 18 rows affected (0.08 sec) Rows matched: 18  Changed: 18  Warnings: 0 등록 테이블의 FEE_PRICE, FEE_TOTAL, FEE_PAY가 변경되었는지 질의해 보자. mysql> select stu_no, fee_year, fee_term,     -> fee_price, fee_total, fee_pay     -> from fee 2018-12-30 쉽게 배우는 MySQL 5.x

+----------+----------+----------+-----------+-----------+---------+ | stu_no   | fee_year | fee_term | fee_price | fee_total | fee_pay | | 20001015 | 2000     |        1 |   2505000 |   3155000 | 2005000 | | 20001015 | 2000     |        2 |   2505000 |   2630000 |    5000 | | 20001015 | 2001     |        1 |   2805000 |   2945000 |  305000 | | 20001015 | 2001     |        2 |   2805000 |   2945000 |  305000 | | 20001015 | 2006     |        1 |   3005000 |   3155000 |  505000 | | 20001015 | 2006     |        2 |   3005000 |   3155000 |  505000 | | 20001015 | 2007     |        1 |   3005000 |   3155000 | 1005000 | | 20001015 | 2007     |        2 |   3005000 |   3155000 |  505000 | | 20061011 | 2006     |        1 |   3005000 |   3680000 | 3005000 | | 20061011 | 2006     |        2 |   3005000 |   3155000 |  505000 | | 20061011 | 2007     |        1 |   3005000 |   3155000 | 1005000 | | 20061011 | 2007     |        2 |   3005000 |   3155000 | 2205000 | | 20071001 | 2007     |        1 |   3005000 |   3680000 | 3005000 | | 20071001 | 2007     |        2 |   3005000 |   3155000 | 3005000 | | 20071300 | 2007     |        1 |   3005000 |   3680000 | 3005000 | | 20071300 | 2007     |        2 |   3005000 |   3155000 | 1005000 | | 20071307 | 2007     |        1 |   3005000 |   3680000 | 3005000 | | 20071307 | 2007     |        2 |   3005000 |   3155000 | 3005000 | 18 rows in set (0.00 sec) 2018-12-30 쉽게 배우는 MySQL 5.x

16.4 테이블에서 행의 삭제 DELETE 명령문은 테이블에서 행을 삭제하기 위해서 사용 16.4 테이블에서 행의 삭제 DELETE 명령문은 테이블에서 행을 삭제하기 위해서 사용 [예제 16-10] 전자상거래 실무 과목을 삭제하라. mysql> delete from subject     -> where sub_name = '전자상거래 실무'; Query OK, 1 row affected (0.03 sec) 만약 WHERE 절이 생략되면 지정된 테이블에 있는 모든 행이 삭제 -DELETE 명령문은 명령문이 수행 후에 테이블에 관한 정보 테이블의 정의, 칼럼 내용(칼럼이름, 데이터 형, 크기, NOT NULL 유무, PRIMARY KEY), 뷰, 인덱스 등은  그대로 남아 있고 테이블에 있는 내용만 삭제 -DROP 명령문은 테이블의 내용을 삭제할 뿐만 아니라 카탈로그 테이블에 있는 테이블의 정의, 뷰, 인덱스도 삭제 -DELETE 명령문에서 WHERE 절에 있는 부속 질의어는 행이 삭제될 테이블을 참조하지 않아야 한다. 따라서 다음 명령문은 잘못된 것이다. DELETE FROM STUDENT WHERE  STU_NO IN   (SELECT STU_NO FROM   STUDENT  WHERE  CLASS = 2); 2018-12-30 쉽게 배우는 MySQL 5.x