| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 정보처리기사
- 캐글
- TTS
- python기초
- 객체지향
- 에이전트
- 딥러닝
- CNN
- 랭그래프
- 힙정렬
- RNN
- 머신러닝
- LangGraph
- dementional reduction
- 트랜스포머
- 기초
- UMAP
- Transformer
- python 기초
- 생성형 인공지능
- 자연어처리
- 데이터엔지니어
- RDBMS
- ASR
- Python
- 알고리즘
- 데이터 시각화
- CLIP
- SQL
- 소프트웨어 개발
- Today
- Total
수달이네 기술 블로그
1. SQL 문 (오라클) 본문
오라클문법
디비버 스크립트 파일: 명령어를 작성할 수 있는 파일
쿼리문 작성법: 여러줄에 걸쳐 작성 가능, 대소문자 구분 X, 들여쓰기 활용, 세미콜론으로 마무리.
주석가능: 한줄 --, 범위 /* ~ */
자료형
문자형
- VARCHAR2(용량)
- CHAR(용량)
- COLB
숫자형
- NUMBER(p, s) : s부분에 실수부분
날짜형
- DATE
- TIMESTAMP
논리형
- 오라클엔 존재하지 않는다
연산자
산술 연산자
- 숫자타입끼리 연산 가능(+,-,*,/)
- 날짜타입끼리 연산 가능(-) : 날짜끼리의 차이
- 날짜타입, 숫자타입끼리 연산 가능(+,-): 몇일 후인지, 전인지
- NULL + 숫자 : NULL
관계연산자
- =.<>,!=, >,<,>=,<=등등
- null 값은 확인불가
논리연산자
- AND, OR, NOT 등등
SQL연산자
- IS NULL, IS NOT NULL, IN(값1, 값2….), BETWEEN A AND B(A이상B이하)
- LIKE: 문자 패턴 확인 %(앞 뒤에 어떤 문자열이 오는지 확인), _(문자열 개수에 따라 정해짐)
연결 연산자
- ||
SELECT문
SELECT [DISTINCT(중복 제거)] COLUMN [AS “별칭]….
FROM 테이블명
WHERE 조건식
ORDER BY 정렬기준 컬럼 ASC(오름차), DESC(내림차);
실행순서: FROM>WHERE> SELECT>ORDERBY
작성순서
- SELECT → 가져올 컬럼 선택
- FROM→ 어떤 테이블에서 가져올지 선택
- WHERE→ 조건 걸기
- ORDER BY→ 정렬 방식 지정
기본 출력
EMPLOYEES 테이블 : 107명의 직원 정보가 담겨있는 테이블
EMPLOYEE_ID : 직원 번호(사번) PK
FIRST_NAME / LAST_NAME : 이름 / 성
EMAIL : 이메일 주소
PHONE_NUMBER : 핸드폰 번호
HIRE_DATE : 입사일
JOB_ID : 직책(직무)
SALARY : 급여
COMMISSION_PCT : 급여에 따른 보너스
MANAGER_ID : 상사 번호
DEPARTMENT_ID : 부서번호
SELECT * FROM employees;

as(alias 별명)
SELECT first_name AS 이름, last_name AS 성, SALARY AS 급여
FROM employees;

한글로 이름을 설정 가능하다
- 큰따옴표로 모아주어도 되며,
- as를 쓰지 않아도 가능하다.
연결 연산자
SELECT first_name || ' ' || last_name 풀네임, salary 급여
FROM employees;

- || 로 연결 가능하다.
중복 제거
SELECT JOB_ID
FROM employees;

SELECT DISTINCT JOB_ID
FROM employees;

위처럼 해당 DISTINCT뒤의 컬럼에 중복되는 내용은 제거한 후 출력된다.
SELECT DISTINCT FIRST_NAME, JOB_ID
FROM EMPLOYEES;

위처럼 컬럼 두개일 경우 두개 모두 같을 경우에만 중복이 제거된다.
ORDER BY 절
SELECT first_name, salary
FROM employees
ORDER BY salary ASC;

ORDER BY 컬럼명을 이용하여 오름차순 정렬이 가능하다
- 참고로 ASC는 기본값이므로 없어도 됨.
SELECT first_name, salary
FROM employees
ORDER BY salary DESC;

DESC는 위처럼 내림차순으로 정렬된다.
SELECT first_name, salary
FROM employees
ORDER BY employee_id;
order by 의 경우 select에 없더라도 정렬 가능하다. from 절에 포함된 attribute라면
WHERE절
SELECT first_name, salary
FROM employees
WHERE salary > 10000;

위처럼 일부 필터링 가능하다
위에선 salary가 10000보다 큰 값만 출력했다.
여기서 중요한것! where절이 먼저 실행되므로select에서 설정한 alias를 사용할 수 없음!
SELECT first_name, salary 급여
FROM employees
WHERE salary > 10000
ORDER BY 급여 asc;

반대로 order by절은 select절보다 늦게 실행되므로 사용 가능하다.
여러조건 적용
SELECT first_name 이름, department_id 부서번호, salary 급여
FROM EMPLOYEES
WHERE department_id = 90 OR salary > 3000;

위처럼 where 절에 or문을 사용하면 조건1 이거나 조건 2인 경우의 값을 모두 출력한다.
SELECT first_name 이름, department_id 부서번호, salary 급여
FROM EMPLOYEES
WHERE department_id = 90 AND salary > 3000;

반대로 위와 같이 and문을 사용하면 조건1 이면서 조건 2인 경우의 값을 출력한다(두가지 모두 적용되어야함.)
계정 만들기(DB 사용자 생성)
- dba관리자 계정에서 실행(cmd)
Microsoft Windows [Version 10.0.22631.6060]
(c) Microsoft Corporation. All rights reserved.
C:\\Users\\....>sqlplus
SQL*Plus: Release 11.2.0.2.0 Production on 목 10월 23 20:20:34 2025
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Enter user-name: sys as sysdba
Enter password:
Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
- create user 유저명 identified by 비밀번호;
SQL> CREATE USER web2 identified by 1234;
User created.
위처럼 생성할 수 있다. 그러나
SQL> conn web2/1234
ERROR:
ORA-01045: user WEB2 lacks CREATE SESSION privilege; logon denied
그냥 로그인 하면 권한이 없기에 실행할 수 없다.
- 로그인 실패시 다시 sys as sysdba 로 로그인해주어야함
- 권한 부여(grant문)
grant create session to 권한을 줄 유저명;
- create session: 접속 권한
SQL> grant create session to web2;
Grant succeeded.
SQL> conn web2/1234;
Connected.
테이블 생성(create문)
SQL> create table test1 (
2 test1_id number,
3 test1_name varchar2(10)
4 );
create table test1 (
*
ERROR at line 1:
ORA-01031: insufficient privileges
위처럼 테이블을 생성할 수 있지만, 왜인지 sql문이 실행되지 않았다.
그 이유는 테이블 생성 권한이 없기 때문
테이블 생성 권한
SQL> grant create table, create view, resource to web2;
Grant succeeded.
SQL> conn web2 /1234;
Connected.
SQL> show user;
USER is "WEB2"
SQL> CREATE TABLE test1(
2 test1_id number,
3 test1_name varchar2(10)
4 );
Table created.
sysdba권한으로 들어가서 grant 권한명 to 유저명; 을 이용하여 권한을 준다.
권한명 리스트
- create table: 테이블 생성 권한
- create view: 뷰 생성 권한
- resource
- 한번에 권한을 부여하는 것.(create table, create sequence, create trigger, create type, create indextype,…)
- 그러나 필요없는 권한까지 과도하게 부여될 수 있다.
- 따라서 필요한 권한만 적절히 부여하는 것을 추천
- create session: 접속 권한
- create sequence:
이후 다시 만든 유저명으로 로그인 후 테이블을 생성해보면 잘 생성됨을 알 수 있다.
권한 제거
grant가 아닌 revoke를 이용하여 권한을 빼앗아 올 수 있다.
revoke 권한명 from 사용자명
테이블 삭제
DROP TABLE test1;
테이블을 삭제할 수 있다.
INSERT문
INSERT INTO TBL_USER1(user1_id, user1_pw, user1_name)
values('aaa', '1234', '홍길동');
INSERT INTO TBL_USER1 (user1_id, user1_name, user1_joindate)
values('bbb', '이순신', sysdate);
SELECT * FROM TBL_USER1;
insert into 테이블명(넣을 컬럼) values(컬럼별 넣을 값);

만약 값을 넣지 않았을 경우 NULL으로 채워진다.
INSERT INTO TBL_USER1
values('gu', '1234', '짱구', '010-1234-5678', 'M', sysdate);
SELECT * FROM TBL_USER1;

만약 위처럼 (컬럼명을 쓰지 않을경우 전체 컬럼의 개수에 따라 알아서 모두 넣어주어야한다.
date
sysdate: 위에서 처럼 현재 날짜 시간을 입력시켜준다.
to_date(문자열, 포맷): 문자열을 날짜 포맷으로 변경해준다.
INSERT INTO tbl_user1
values('back', 'korea', '유리', '010-1111-1111', 'W', TO_DATE('2025-10-24','YYYY-MM-DD'));
select * from tbl_user1;

'RDBMS' 카테고리의 다른 글
| MySQL 설치 및 기본 문법 등 (1) | 2025.11.07 |
|---|---|
| 4. JDBC기능 구현 + SEQUENCE문 (0) | 2025.10.30 |
| 3. DDL, DML, DCL, TCL (0) | 2025.10.28 |
| 2. 제약조건(오라클) (0) | 2025.10.25 |
| 0. RDBMS 배우기 (0) | 2025.10.22 |