권한받기
Database |
D (C) L - (C) : Control 컨트롤
GRANT : 권한 줌
REVOKE : 권한 뺏음
테이터 구조 정의
이름 | 생년 | Phone |
varchar2(5) | number(4) | varchar2(15) |
D (D) L - (D) : Definition 데퍼니션
CREATE : 생성
DROP : 삭제
ALTER : 변경
TRUNCATE : 테이블 초기화
데이터 변형 - 조회
이름 | 생년 | PHONE |
이자바 | 19xx | 010-1234-5678 |
김이썬 | 19xx | 010-1111-2222 |
D (M) L - (M) : Manipulation 머니펄레이션
INSERT : 데이터 입력
DELETE : 데이터 삭제
UPDATE : 데이터 수정
SELECT : 조회
DCL : 데이터베이스 사용자에게 권한을 부여/회수 하는 언어
GRANT - 권한(줌)
ON - 테이블
TO - 유저;
REVOKE - 권한(뺏음)
ON - 테이블
FROM - 유저;
권한의 종류 -
SELECT , INSERT , UPDATE, DELETE //
REFERENCES, ALTER, INDEX //
ALL
문제 1 . 유저 haha가 아래의 코드와 같은 작업을 수행할 수 있도록 권한을 부여하는 DCL을 작성하시오.
UPDATE haha_qualification SET col2 = '합격' WHERE col1 = 'SQLD'; |
정답 : GRANT SELECT, UPDATE ON haha_ qualification.data TO HAHA; |
* GRANT 권한 ON 테이블명 TO 유저명 ;
* WHERE 조건문을 사용가능하기 위한 SELECT 권한도 수여
문제 2 . 데이터베이스상에서 많은 사용자들에게 개별적으로 권한을 부여하고 관리하는 어려움을 해소하고자 다양한 권한을 하나의 구룹으로 묶어서 관리할 수 있도록 하는 논리적인 권한의 그룹을 칭하는 말은?
정답 : ROLE
ex) GRANT 관리자권한 TO HAHA;
* 다양한 권한을 다양한 유저를 대상으로 관리하기 위한 명령어다.
* 여러 사용자에게 동일한 ROLL 부여 가능하다.
* ROLE의 생성은 [ CREATE ROLE ] 권한을 가진 유저가 할 수 있다.
DDL : 데이터를 보관하고 관리하기 위한 객체의 구조를 정의하기 위한 언어
1. CREATE : 데이터베이스 상 테이블 구조 생성
CREATE : 구조 생성
ALTER : 구조 변경
DROP : 구조 삭제
RENAME : 이름 변경
TRUNCATE : 테이블 초기화
이름 | 생년 | PHONE |
이자바 | 1990 | 010-1234-5678 |
CREEATE TABLE C_INFO ( 이름 : varchar2(10), 생년 : number(4), Phone : varchar2(15), 첫방문일 : date, 고객번호 : varchar2(10) ); |
Point 1 - 구조
* 컬렁명
영문, 한글, 숫자 모두 가능
(시작만 문자로)
* 데이터 타입
number : 숫자형
date : 날짜형
varchar2 : 가변길이 문자열
char : 고정된 크기 문자열 할당된 길이만큼 문자 채움
Point 2 - 제약조건 (CONSTRAINT)
CREATE TABLE C_INFO ( 이름 : varchar2(10), 생년 : number(4) default 9999, phone : varchar(15) not null, 첫방문일 : date, 고객번호 : varchar2(10) primary key |
* DEFAILT : 기본값 지정
* not null : null 입력 불가
* primary key : 기본키 지정
* PK는 not null
* PK는 unique 한 값
(테이블 내 중복 없음)
* foreign key : 외래키 지정
>> 테이블당 여러개 가능
문제 3 . 하하씨가 아래와 같이 테이블 menu를 생성한 후, 유요한 튜플 값 4개를 삽입했다. 이 경우, SQL-a와 SQL-b의 실행 결과를 각각 구하시오.
< 테이블 생성 > CREATE TABLE MENU ( 메뉴명 varchar2(10) PRIMARY KEY, 가격 number(10) ); |
< SQL-a > SELECT count(*) FROM MENU; < SQL-b > SELECT count(메뉴명) FROM MENU; |
정답 : 4
count(*) : 전체 행의 수 카운트, Null 포함
count(칼럼명) : null 제외한 행 수 카운트
메뉴명 컬럼은 PK이므로 null값을 가질 수 없다.
따라서 (*)을 통해 전체 행을 추출한 sql-a 와 메뉴명이란 컬럼명을 명시한 sql-b 결과가 동일하다.
문제 4. 하하씨가 아래와 같이 테이블 menu를 생성한 후, 유요한 튜플 값 4개를 삽입했다. 이경우, SQL-a 와 SQL-b의 실행할 경우엔 어떤 결과가 출력될까?
< 테이블 생성 > CREATE TABLE MENU ( 메뉴명 varchar2(10) PRIMARY KEY , 가격 number(10) ); |
< SQL -a > SELECT count(*) FROM MENU; < SQL-b > SELECT count(가격) FROM MENU; |
정답 :
[가격] 컬럼에 포함된 null 값의 개수에 따라 서로 실행 결과가 다를 수 있다.
[가격] 컬럼은 NOT NULL 제약조건이 붙지도 않았고 , primary key 도 아니다.
1.NULL 은 모르는 값을 상징하고 , 값이 없음(부재)을 의미함
2.NULL IS NULL = TRUE
3.NULL 과의 모든 비교 (ex. NULL = 0 ) 은 알 수 없음 (NULL)을 반환함
4.NULL은 숫자 0이나 공백문자(' ')와 동일하지 않음 (값이 있음)
2. ALTER : 테이블과 컬럼에 대해 이름 및 속성 변경, 추가/삭제 등 구조 수정을 위해 사용
테이블명 변경 | ALTER TABLE MENU | RENAME | TO ha_MENU; |
컬럼명 변경 | ALTER TABLE MENU | RENAME | COLUMN phone TO 전화번호 |
테이블 세부명령 대상
테이블명 변경 | ALTER TABLE MENU RENAME TO ho_MENU; |
컬럼명 변경 | ALTER TABLE MENU RENAME COLUMN phone TO 전화번호 |
컬럼 속성 변경 | ALTER TABLE MENU MODIFY (이름 varchar(20) not null); |
컬럼 추가 | ALTER TABLE MENU ADD (거주지역 varvhar(10)); |
컬럼 삭제 | ALTER TABLE MENU DROP COLUMN 이름 ; |
제약조건 추가/삭제 | ALTER TABLE MENU ADD CONSTRAINT; DROP CONSTRAINT; |
테이블명 변경 | RENAME TABLE MENU TO HA_MENU; ( 다수 테이블명 동시에 변경 가능 ) |
문제 5. 아래의 테이블 RIDING 에서 현재 null 값이 존재하는 컬럼에 대하여 null이 발생할 수 없도록 제약조건을 추가하고자 한다. 올바른 SQL 문장을 기술하라.
ride_date date |
rider_no number(5) |
phone varchar(15) |
2021-12-15 | 20136 | 010-555-6666 |
2021-12-19 | 20136 |
정답:
ALTER TABLE RIDING MODIFY ( phone varchar(15) NOT NULL ) ;
3. DROP : 테이블 및 컬럼 삭제
칼럼 삭제 | ALTER TABLE MENU DROP COLUMN 이름; |
테이블 삭제 | DROP TABLE MENU |
테이블 삭제 (유의) |
DROP TABLE MENU CASCADE CONSTRAINT; >>해당 테이블의 데이터를 외래키 (FK)로 참조한 제약사항도 모두 삭제 >>[말] Oracle 에만 있는 옵션, SQL Server 에는 존재하지 않음 >>[말] FK 제약조건과 참조테이블 먼저 삭제하고, 해당 테이블을 삭제한다. |
테이블 삭제 DROP |
DROP TABLE MENU >> 테이블 관련해서 모두 삭제된다. 구조도, 데이터도! |
테이블 초기화 TRUNCATE |
TRUNCATE TABLE MENU >> 테이블 데이터만 삭제되고 구조는 살아있다. |
문제 7. 하하씨는 F_INFO 테이블에 대해 DDL을 통해 삭제를 진행하고자 한다. 변경 후 모습이 아래와 같도록 만들기 위해서 , A 와 B 에 각각 알맞은 SQL을 작성하시오.
이름 | 생년 | PHONE |
김자바 | 19xx | 010-1234-2345 |
이자바 | 19xx | 010-1111-2222 |
> 아무 것도 없음.
정답 : DROP TABLE F_INFO
DROP =
1. 테이블 정의를 완전 삭제함 .
2. 테이블이 사용했던 모든 저장공간을 Release 됨
이름 | 생년 | PHONE |
김자바 | 19xx | 010-1234-2345 |
이자바 | 19xx | 010-1111-2222 |
>
이름 | 생년 | PHONE |
정답 : TRUNCATE TABLE F_INFO (뼈대만 살렸다.)
TRUNCATE =
1. 테이블을 초기상태로 만듦
2. 테이블 최초 형성시 사용했던 저장공간만 남기고 Release
'DB(SQL)' 카테고리의 다른 글
SQL 언어 (3) (0) | 2023.11.07 |
---|---|
SQL 언어 (2) (0) | 2023.11.07 |
ERD , Level Schema (0) | 2023.07.26 |
PART1: 데이터 모델링 SECTION 01 데이터 모델링의 이해 (0) | 2023.07.24 |
SQL (1) 기본정리 (0) | 2023.07.24 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!