상세 컨텐츠

본문 제목

Oracle MySQL 명령어 (create, select, where, set)

DataBase/Oracle

by H_Develop 2022. 6. 7. 13:54

본문

cmd

cd C:\ enter

dir 디렉토리 / Oracle 설치 확인.

sqlplus hr 접속 Oracle

 

CREATE

문자 CREATE

 

Create table char_tbl (
name01 varchar2(1000),
name02 char(4),
name03 char(10)
);

insert into char_tbl (name01, name02, name03) values('100','대한민국','Hello World');
// 오류, '대한민국' 8bit name02 char(4) / 'Hello World' 11bit name03 char(10)
insert into char_tbl values('100','대한민국','Hello World'); // 생략 가능
insert into char_tbl (name01, name03) values('100','Hello World');

alter table char_tbl modify name02 char(20)
// '대한민국' 8bit name02 char(4)이 오류를 name02 char(20)으로 바꿈으로써, 해결함

숫자 CREATE

create table num_tbl (
no1 number, no2 float(6), no3 number(6,2)
);

// float(6) 소수점 포함 숫자 6자리, number(6,2) 소수점 2자리 표현 숫자 6자리
// 정수에서 6자리가 넘어가면 오류. 소수점이 걸리면 잘라버림.

alter table num_tbl modify no3 number(15,2);

날짜

select sysdate, to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') "CUR_TIME", systimestamp from dual;
SYSDATE		  CUR_TIME           	 SYSTIMESTAMP
22/06/03	  2022-06-03 14:26:15	 22/06/03 14:26:15.223000 +09:00

 

수정 UPDATE

UPDATE table_name SET column = 'record'

UPDATE empss SET hired = '2018' WHERE emp_id = '8';

// empss table 의 emp_id 가 8인 곳의 hired 를 '2018' 로 변경

ALTER TABLE empss ADD(addr varchar2(100));

// empss table 의 title 을 addr(title_name) 추가한다. varchar2 형식으로.

ALTER TABLE empss DROP COLUMN addr;

// empss table 의 addr column을 삭제한다.

DELETE FROM empss WHERE l_name = 'baek'

// empss table 에서 l_name 이 'baek' 인 row를 삭제한다.

ALTER TABLE empss RENAME COLUMN l_name TO last_name;

// empss table 의 title인 l_name 을 last_name으로 변경한다

DELETE empss

// table data 삭제, table 구조는 남음.

DROP TABLE empss

// table 자체가 삭제.

테이블(table) 복사

// create table AS select * from , employees table와 같이 구조와 데이터를 복사
create table EMPLOYEES1 AS select * from employees;
create table DEPARTMENTS1 AS select * from employees;
create table JOBS1 AS select * from employees;

// 테이블 구조만 복사 (테이터 복사 X)
CREATE TABLE new_table AS SELECT * FROM old_table WHERE 1=2 (where 절에 거짓조건을 넣어줌,)

// 테이블 복사 (테이터 복사 O)
CREATE TABLE new_table AS SELECT * FROM old_table [WHERE 절]

// 테이블 생성되어있는 상태, 데이터만 복사 (테이블 구조가 같을 때)
INSERT INTO old_table SELET * FROM new_table [WHERE 절]

// 테이블 생성되어있는 상태, 데이터만 복사 (테이블 구조가 다를 때)
INSERT INTO old_table (NUM, TITEL, CONTENTS) SELECT NUM, TITLE, CONTENTS FROM new_table

select * from employees where rownum <= 5
// row 행 5개만 보여라, sql에서는 limit 사용

connect scott/rootoor scott/tiger 실습을 위해 자동으로 만들어진 사용자 비밀번호는 tiger로 변경
select * from tabs; show tables; 와 같음
connect system/rootoor 관리자 로그인 conn system/rootoor
create tablespace MY_TBL datafile 'C:\oracle\product\10.2.0\users_tbl.dbf'

size 300M autoextend on next 10M maxsize 500M; // tablespace 생성
select file_name, tablespace_name, bytes, status from DBA_DATA_FILES;

create user paul identified by rootoor; // 사용자 생성
create user paul identified by rootoor default tablespace MY_TBL temporary tablespace TEMP;
// paul 사용자를 생성하고, 이 파일에 저장을 하겠다.

grant connect, resource, dba to paul; paul에 권한 부여
connect paul/rootoor as sysdba;
!!!alter user SCOTT account lock;
!!!alter user SCOTT account unlock;
alter user SCOTT identified by tiger;
conn scott / tiger;
show user;
// 사용자 만들어서 바꿔 사용하기.

drop user paul cascade; // paul 사용자를 삭제, cascade 깡그리 전부 삭제
desc jobs; // desc - describe 묘사하다 만들다[형성하다]
SELECT city, country_name FROM emp_details_view WHERE salary=12000;
// 12000 불 이상 받는 인간들 나와랏 where position = '과장'; << 과장은 문자열이기에 ' ' 홑따음표 사용

select * from tabs; 메모리에 저장되어 실행됨 (메모리안에서 실행)
/ (슬레쉬, 메모리에 저장된 값을 불러온다.)

commit; // 명령어를 실행하면, 메모리에 저장됨 하지만 데이터는 저장되지 않고 화면에는 메모리에 저장된 값을 불러옴.
set 으로 변경을 했다면, 메모리에서 저장되어 화면상에서만 바뀌어 보이는데, commit을 해야 데이터가 저장된다.

adit // 작업한 것들이 나옴
edit // 작성한 명령어가 메모장으로 뜸

set autocommit on; // 자동으로 commit
set autocommit off;

select last_name, first_name AS FULL_NAME FROM employees where rownum <=5;
// AS 키워드는 속성이나 테이블의 이름을 새로 지정하여 사용할 때 사용한다.

ex)
last_name FULL_NAME
Hong kildong
select last_name || ' ' || first_name AS FULL_NAME from employees where rownum <= 5;
// || ' ' || last_name 과 first_name을 ' ' 한칸 벌려서 연결.

ex)
FULL_NAME
Hong kildong
concat : connect strings // 문자열 연결
!! as full_name =>"full_name"
// select last_name || ' ' || first_name AS FULL_NAME from employees where rownum <= 5; 여기 명령어에서 사용

set sqlprompt "_USER>"; // sql> 에서 HR> 로 바뀜. 사용자 이름 변경
conn scott/tiger; // conn ID/비밀번호; SCOTT> 로 바뀜

set time on; // 시간이 사용자 이름 왼쪽에 표기
set timing on; // database tuning 시점을 가늠할 수 있다. 매우 중요. Query 시간을 표기해줌(경과시간)
다른 사용자가 내 테이블을 건들 수 있다. 내가 권한을 부여해준다면.

select city, country_name from emp_details_view where rownum <= 5;
// 열의 길이 조절 5가지. 5개 열만 봤는데, city와 country_name 간격이 크다면,

column city format A10; // 간격조절
column country_name format A25;
select city, country_name from emp_details_view where rownum <= 5;
// 다시 불러오면 간격이 좁혀서 보임 !

column country_name format A15;
select city, country_name from emp_details_view where rownum <= 5;
// A15로 country_name 의 긴 문장이 두 줄로 보여진다. (상황에 따라 좋을 수도 안좋을 수도.)

set linesize 150; // row 행 사이즈 조절
set pagesize 50; // column 열 사이즈 조절
set pages 14; // 페이지 크기가 14가 됨.
set feedback 10; // 10자리 이상이 되면
set pause on; // 한페이지 씩 자른다.
set termout off; // 출력의 결과가 화면에 안뜬다. 쓰지맛 !


select employee_id, last_name from employees
// set pause on; 때문에 나오는 것 !

column last_name heading 'last|name';
last
name

------------------------------------------------------------------------------------------------------------------------------------------------------

 

내용

column salary format 000,000; // salary 항목에서 세자리마다 , 쉼표 찍으셈 / 1,000,000

96/01/12 보다는 1996 - Jan - 12 이렇게 보는 것이 확실히 좋다

** DB query는 보통 Supervisor 가 의사 결정을 내리기 위해 하는 경우가 대부분이기에, 그들이 보기 좋게 하는 것이 필수이다 **


select last_name, salary from employees
SQL> get ex1.txt
1. select last_name, salary from employees

SQL> list
1. select last_name, salary fom employees

SQL> i
2. where last_name = 'King';

LAST_NAME SALARY

------------------------- ----------

King 10000

King 24000

where last_name = 'King'; 에서, King 에 ' ' 홑 따음표도 중요하지만, Data값을 작성할 때, 대소문자 구분 확실히 해야할 것.
외부에 있는 SQL 파일을 불러서 사용할 수 있다.

@ C:\USER\Win7\Desktop\Disk1\test_data.sql // @파일경로\파일명.sql
C:\TEMP\~.sql 파일로 된 것을 불러 오려면,

@ C:\TEMP\test_data.sql;

conn sysdba/rootoor as sysdba; // 관리자 연결
shutdown immediate; // 멈춰 !
startup; // 다시 시작 !

DB 조작하는 manipulation(조작)
select * from tabs;
emp table 구조
desc emp2

select * from emp2 where rownum <= 10;
select * from emp2 where pay >= 5000000 and rownum <=3;

select * from jobs;
desc employees;
select employee_id, last_name, salary, hire_date from employees where first_name = 'Steven';
// steven 쓰면 인식안됨. 대소문자 필히 구별하여, Steven으로 작성

select employee_id, last_name, salary from employees where 20000 >= salary and salary >= 10000;
select employee_id, last_name, salary from employees where salary between 10000 and 20000;
// salary 값이 10000 부터 20000까지 가져와라. 부등호 사용보다 between 사용이 더 간편함

FI_MGR 이거나 FI_ACCOUNT 인 사원들의 employee_id, first_name, salary를 보이시오.
SQL> select employee_id, first_name, salary form employees where job_id = 'FI_MGR' or job_id = 'FI_ACCOUNT';
SQL> select employee_id, job_id, first_name, salary from employees where job_id in ('FI_MGR','FI_ACCOUNT');

​

 

DISTINCT 구별하다

 

select DISTINCT job_id from employees; // 중복 데이터 제거

SQL> select employee_id, last_name, salary from employees
where salary between 10000 and 20000
order by salary DESC, last_name ASC;
// salary 는 DESC 내림차순, 그 중 중복은 last_name 기준으로 ASC 오름차순으로.

IS NULL, IS NOT NULL <= == 0, !=0 존재 유무를 나타냄
SQL> select salary, last_name, commission_pct from employees
where commissioin_pct is not null; // null 값이 아니닷
SQL> select salary, last_name, commission_pct from employees
2 where commission_pct != 0;
// commission 받는 사람만 나타내거랏

SQL> select salary, last_name, commission_pct from employees
2 where commission_pct is not null;
3 and last_name = 'King';
// commission 받는 사람 중, last_name이 king인 친구들 모여랏

SQL> select employee_id, last_name, hire_date from employees
2 where hire_date between '97/01/01' and '97/12/31'
3 order by hire_date asc;
// 97년도 입사자 나와랏

SQL> select employee_id, last_name, hire_date from employees
2 where hire_date LIKE '97/__/__';
( 2 where hire_date LIKE '97%'; 같은 내용, 97% - 97뒤에는 뭐가 와도 상관 없음
/ 97/__/__ - __안의 내용이 뭐가 와도 상관 없음)

SQL> select * from employees where last_name LIKE 'A%o_';
// last_name 에서 A로 시작하고 마지막에서 두번째 o 인 친구들 모여랏 !

LIKE, NOT LIKE => ~%~, ~_~ .. / .. 이 아닌 것을 골라내자

 

 

WHERE  문의 or 와 and 같이 쓰는 조건.

 

select last_name, job_id, salary
from employees
where ( job_id in ('SA_MAN')
    or  job_id LIKE '%CLERK%' )
and salary not in ('1600','2000','1300')

// where 문에서 job_id안에서 'SA_MAN'과 '%CLERK%' 합집합으로 값을 가져오고 나서,
// salay가 1600, 2000, 1300 아닌 사람들을 출력하기에
// job_id의 in 과 LIKE 사용하는 두가지에 괄호로 묶어준다.

관련글 더보기