📒 다시 dbeaver을 다시킬때!
dbeaver.exe를 누르게되면 다시 실행되고 켜지게 됩니다.
이후에 파일-> 작업공간 전환을 꼭 해서 내가 만든 워크플레이스인지 확인해야합니다.
📒 중복값 제거 (DISTINCT)
테이블에보면 중복되는값이 있을 수 있겠죠?(당연한)
예를들어서 한 회사의 직급을 조회할때 과장이 3명 부장이 2명이럴경우 과장, 부장 이런 총으로 직급을 보고싶을때
중복값지거를 쓰면 되겠죠!
그럴때 쓰는 함수는 DSTINCT입니다.
SELECT DISTINCT JOB_ID
FROM EMPLOYEES;
--실습1. 연봉에서 중복되는 값을 삭제하고 조회
SELECT DISTINCT SALARY
FROM HR.EMPLOYEES;
--실습2. 직급과 성이 동일한 중복 값을 제거 [SAREP / David]가 삭제 처리됨
SELECT DISTINCT JOB_ID,FIRST_NAME
FROM HR.EMPLOYEES;
여기서는 JOB_ID와 FIRST_NAME이 AND조건으로 성립되게됩니다.
📒 다운로드
생성자-> 우클릭->데이터추출
확장자를 선택할 수 있는데 csv(엑셀)로 진행해보았습니다.
버전에따라 다를 수 있지만 보통은 UTF-8이지만 한글일경우 깨질수도 있어서 EUC-KR로 변경해보면 된다.
경로는 TARGET Container로 보면됩니다.
📒 자료형의 구조
1. 문자형
- CHAR()
- VARCHAR2()
(옛날버전은 VARCHAR())
: 괄호안에는 입력받는 값의 바이트 단위를 써줍니다 예를들어서 CHAR(2)는 IM 이런식으로만 가능합니다.
▶ 둘의 차이점
CHAR(100) -> ABC --> 3바이트 활용 / 97바이트 자원낭비 ->NULL값으로 채워짐
VARCHAR2(100) -> ABC --> 3바이트 활용 / 97바이트 자원회수(절약!)
즉 고정졍 가변형의 차이이다.
그럼 다 VARCHAR2를 쓰면되지않나라고 생각할텐데예를들어서 직관적일때 (W/M) 로 성별을 나눌때 CHAR(1)이렇게 사용할 수 있다.
2. 숫자형
- NUMBER()
NUMBER(10,2)로 하면 10자리 소수점 2자리로 표기한다
예를들어 12345678.90 이런식으로 표기된다.
3. 날짜형
- SYSDATE
SELECT SYSDATE
FROM DUAL;
현재시간을 알 수 있는 기본문법입니다.
📒 연산자
1. 소괄호() : 소괄호 안에있는 쿼리문이 가장 먼저 실행된다.
▶ select 안에 select안에 select가 있따면 어떤 쿼리문을 먼저 실행해줄지 결정하게 됩니다.
2. 산술연산자 : 곱셈(*), 나눗셈(/), 덧셈(+), 뺄셈(-)
3. 비교연산자 : =. <, <=, >, >=, 같지않음(!=, 또는 <>)
4. 논리 연산자 : AND, OR, NOT
- A AND B : A조건 그리고 B 조건을 모두 만족하는 상황
▶ 예를들어서 100 =100 AND 200= 200;
▶ 결과출력 완료
- A OR B : A조건 또는 B조건중 하나만이라도 만족하는 상황
▶ 예를들어서 100 =100 OR 300= 200;
- A NOT B : A조건이 TRUE이면 FALSE로 출력, FALSE이면 TRUE로 출력 (무조건 반대)
▶조건이 무조건 뒤에 들어옵니다.
▶ 예를들어서 NOT 300 = 200; 의 결과값은 TRUE로 나옴
5. IS NULL, IS NOT NULL ▶ NULL(빈값)의 여부를 확인하는 연산자.
말 그대로 값이 없는 값을 NULL이라고 한다 아무의미 없음 6. BETWEEN, IN, ANY, ALL 연산자 : 특정 범위 내에서 데이터를 조회
7. LIKE : 패턴 매칭을 수행하는 문법제일 많이쓰이고 제일 간단한거!예를들어서 이름중간에 '길'이 들어가는것! ,끝글자가 '3'으로 끝나는거! 이런거 찾을때 씁니다.
SELECT FIRST_NAME
FROM EMPLOYEES
WHERE FIRST_NAME LIKE '%e';
%e로 끝나는것!한글자,두글자든 상관없다. 맨 마지막이 e가 되면 모두 출력해준다.
만약 자리수를 정하고싶다면
SELECT *
FROM EMPLOYEES
WHERE FIRST_NAME LIKE '_____e';
조건 해석 : e로 끝나는데 앞에글자가 5개 있기때문이 _를 5개 쳐줌
SELECT *
FROM EMPLOYEES
WHERE FIRST_NAME LIKE '%a%';
앞뒤로 몇글자인지는 모르지만 중간에 a가 들어가는, 끝나는 모든것을 찾아달라는 조건문
즉 %는 앞에 몇개인지 모르는거고 _는 자리수를 좀 더 구체화해주는것.
여기서는 대소문자를 가린다 그대로 작성해줘야된다.
단 컬럼명은 대소문자 구별하지않고 안에있는 내용들은 대소문자를 구별해줍니다.
LIKE절 실습문제
실습#1). location테이블에서 도시가 o로 끝나는 데이터를 조회하여라.
SELECT *
FROM LOCATIONS
WHERE CITY LIKE '%o';
실습#2). 이메일 아이디가 P로 끝나고, 연봉이 3000이상인 직원의 모든 정보를 조회해라.
SELECT *
FROM EMPLOYEES
WHERE EMAIL LIKE '%P'AND SALARY >= 3000;
# WHERE절 (조건절)
-데이터에 조건을 설정해서 원하는 값을 조회하는 문법-문법 : SELECT 컬럼명 FROM 테이블명 WHERE조건;
- 문법:
SELECT 컬럼명
FROM 테이블명
WHERE 조건;
📒 WHERE절 예시
SELECT LAST_NAME, FIRST_NAME, SALARY
FROM EMPLOYEES
WHERE SALARY >= 10000;
위와같은경우에는 명령어 순서가 달라진다. (겁나중요!!!!)
FORM -> WHERE ->SELECT -> ORDER BY
또한 NOT을 작성하면 부등호도 바뀐다는점을 꼭 염두에두어야한다.
WHERE NOT SALARY >= 10000
SALARY < 10000
금액도 반대이지만 부등호도 완전히 반대로 된다느점을 꼭!!알아두어야한다.
조건절 실습문제
전체 직원 중 David(FIRST_NAME)성을 가진 직원에 대해서 이름, 성, 봉급을 조회(ALIAS == 별칭 지정)하고, 봉급이 가장높은 직원을 순서로 조회하여라.
SELECT * FROM EMPLOYEES;
SELECT LAST_NAME AS "이름",
FIRST_NAME AS "성",
SALARY AS "봉급"
FROM EMPLOYEES
WHERE FIRST_NAME = 'David'
ORDER BY "봉급" DESC;
WHERE NOT을 하면
SELECT * FROM EMPLOYEES;
SELECT LAST_NAME AS "이름",
FIRST_NAME AS "성",
SALARY AS "봉급"
FROM EMPLOYEES
WHERE NOT FIRST_NAME = 'David'
ORDER BY "봉급" DESC;
로 하게되면 DAVID를 뺴고 출력하게 됩니다.
예시로 확인해보기
SELECT 10 || 20
FROM DUAL;
데이터 조회를 할때 성과이름을 붙여서 조회하고싶을때 사용합니다.
그럼 앞뒤로 연결(연결연산자 ||)되어 표시된다.
일시적이고 어디 저장되지않는다 단순조회만 가능
SELECT '내가 좋아하는 영화는' || '파묘이다.'
FROM DUAL;
큰 따옴표, 작은 따옴표는 문법적으로 정해져있다.
알리아스는 큰따옴표, 단순 문자는 작은따옴표로 감싸줍니다.
성과 이름을 연결해서 출력하고싶다면?
SELECT FIRST_NAME || LAST_NAME
FROM EMPLOYEES;
SELECT FIRST_NAME || LAST_NAME AS "FULL_NAME"
FROM EMPLOYEES;
알리아스로 변경도 가능합니다.
실습문제
#1) LOCATIONS 테이블에서 나라와 도시 이름을 연결해서 조회하시오.
SELECT * FROM LOCATIONS;
SELECT COUNTRY_ID || '_' || CITY
FROM HR.LOCATIONS;
#2) 성과 이름을 연결해서 조회한다. (연결해서 조회할 때는 구분자(_)로 표기한다)
EX). 김_고은*
SELECT FIRST_NAME || '_' || LAST_NAME
FROM HR.EMPLOYEES;
- 이메일 ID를 조회하고, 연결연산자를 이용해서 @koireait.com을 추가 한다.
ex). [abc@koreait.com](mailto:abc@koreait.com)*
SELECT EMAIL || '@koreait.com'
FROM HR.EMPLOYEES;
- 성과 이름을 연결할 때는 별칭을 “전체이름”으로, 이메일정보를 조회할 때는
“이메일”로 지정하여 조회한다.*
📒 산술연산자
SELECT * FROM EMPLOYEES;
SELECT EMPLOYEE_ID,
EMPLOYEE_ID +10,
EMPLOYEE_ID -10,
EMPLOYEE_ID * 10,
EMPLOYEE_ID /10
FROM EMPLOYEES;
각 ID가 산술 123이니까 각각 산술연산가에 10을 값처리를 하면된다.
실습문제
- 직원의 이름(LAST_NAME), 봉급(SALARY), 인상 봉급, 감축 봉급을 조회.
- 직원의 이름 : 이름과 성을 띄어쓰기로 구분해서 연결하고 컬럼명은 “직원이름”으로 조회
- 봉급 : 기존 봉급을 조회하고, 컬럼명은 “봉급”으로 변경
- 인상 봉급 : 기존 봉급에서 10% 증가(1.1%)한 상태로 조회하고 컬럼명은 “인상봉급”으로 변경
- 감축 봉급 : 기존 봉급에서 10% 감소(0.9%)한 상태로 조회하고 컬럼명은 “감축봉급”으로 변경
- 기본 봉급에서 가장 높은 순서대로 조회
SELECT * FROM EMPLOYEES;
SELECT LAST_NAME || ' ' || FIRST_NAME AS "직원이름",
SALARY AS "봉급",
SALARY * 1.1 AS "인상봉급",
SALARY * 0.9 AS "감축봉급"
FROM EMPLOYEES
ORDER BY "봉급" DESC;
아래의 조건에 해당하는 정보를 조회 (모두 ALIAS == 별칭을 지정)
- 성, 이름, 연봉, 부서ID(DEPARTMENT_ID)를 조회
- 부서ID가 80이상이고 연봉이 10,000이상인 직원만을 조회
- 봉급이 가장 많은 순서대로 조회
SELECT FIRST_NAME AS "성",
LAST_NAME AS "이름",
SALARY AS "연봉",
DEPARTMENT_ID AS "부서ID"
FROM EMPLOYEES
WHERE DEPARTMENT_ID >= 80 AND SALARY >= 10000
ORDER BY SALARY DESC;
📒 BETWEEN A AND B
AND랑 비슷함
: A이상 B이하인 조건
: 범위를 지정하는것
: EX). BETWEEN 1 AND 100 <- 1이상 100 이하
WHERE 컬럼명 >= 1 AND 컬럼명 <= 100
SELECT *
FROM HR.EMPLOYEES
WHERE SALARY BETWEEN 1000 AND 12000
ORDER BY SALARY DESC;
1억이상이고 1억2천 이하인 연봉자가 DESC내림차순으로 조회되게 됩니다.
📒 IN(A,B,C...)
: 딱 일치하는 값만 도출함.
: A혹은 B 혹은 C 혹은 단 1개라도 맞으면 TRUE로 조회합니다.
:비교연산자를 넣지 못함
SELECT *
FROM HR.EMPLOYEES
WHERE SALARY IN(24000,17000);
-------------------------------정상
SELECT *
FROM HR.EMPLOYEES
WHERE SALARY >= IN(24000,17000);
-------------------------------------에러
비교값이 들어가서에러남
📒 ANY문법
:A,B,C 중의 어떤 단 1개라도 맞으면 TRUE로 조회함
:IN과 다르게 비교연산자를 넣을 수 있음
SELECT *
FROM HR.EMPLOYEES
WHERE SALARY >= ANY(24000,17000);
📒 ALL(A,B,C)
: A,B,C의 값을 모두 만족해야 TRUE로 조회됨.
: 내가 값을지정한 모든것을 만족해야함.
📒 NULL
IS NULL : 빈값을 찾을 때 <-> IS NOT NULL :값이 있는걸 다 찾을때
앞에다 NOT을 붙이면 반대가 출력된다.
SELECT FIRST_NAME, LAST_NAME, COMMISSION_PCT
FROM HR.EMPLOYEES
WHERE NOT COMMISSION_PCT IS NULL;
'DBMS' 카테고리의 다른 글
조합(복합)키, NULL값 제어, 모델링 (0) | 2025.02.02 |
---|---|
제약조건, REFERENCES, 기타 제약조건 (0) | 2025.01.21 |
TABLE만들기 & DDL언어 (0) | 2025.01.20 |
DMBS의 기본(SELECT, ALIAS,ORDER BY)_(2) (0) | 2025.01.15 |
DMBS_오라클 설치(1) (1) | 2025.01.14 |