SQL (Structured Query Languge) 종류
- SELECT : 조회
- DML (데이터조작어) : 추가(INSERT), 수정(UPDATE), 삭제(DELETE)
- DDL (데이터정의어) : 객체생성(CREATE)/ 객체구조변경(ALTER)/ 객체제거(DROP)
- DTL (데이터트랜잭션) : 트랜잭션 완료(COMMIT)/ 복구(ROLLBACK)
- DCL (데이터제어) : 계정생성(CREATE USER), 변경(ALTER USER), 제거(DROP USER)/ 권한부여 (GRANT),취소(REVOKE)
쿼리(Query)란 무엇인가?
쿼리(Query)란 쉽게 이야기해서 데이터베이스에 정보를 요청하는 것
쿼리(Query)를 바로 번역을 하면 '질의'라고 해석이 됨.즉, 질의를 보내고 결과를 얻는 것입니다.
특정DB에서 원하는 조건의 데이터를 조작하는 언어의 집합(문장) 이며, 이러한 쿼리(Query)는 DB를 조작하는 여러 가지 형태로 표현될 수 있으며 데이터를 다루는 프로그램에서는 필수적인 요소이다.
DB서버가 구동이 되고 있는 환경에서(Oracle, Cubrid, MsServer, MySQL, Tibero, Altibase 등) DB에 대해 명령문을 작업하게 되는데 이 때의 명령문을 쿼리(Query)라고 생각하면 됩니다.
하지만, 세세히 따지고 들어가면 개념 자체가 명령문과는 사뭇 다르며 그렇기 때문에 질의문(쿼리, Query)라고 부르고 있습니다
F5 : 한 개만 실행 해보고 싶을 때
Ctrl enterl : 여러 개 실행하고 싶을때
SELECT
SELECT 컬럼명1, 컬럼명2... | *
FROM 테이블
[WHERE
GROUP BY
HAVING
ORDER BY (컬럼, 별칭, 인덱스 사용가능)
]
ex) SELECT * FROM employees;
SELECT employee_id, first_name FROM employees;
SELECT구문 처리 순서
<------SELECTION: 조건에 맞는 행 검색-------><---PROJECTION : 컬럼선택 출력-->
FROM -> WHERE-> GROUP BY-> HAVING -> SELECT -> ORDER BY
자료형 : 숫자 NUMBER, 문자 CHAR/ VARCHAR2, 날짜 DATE
문자형리터럴은 ' ' 로 사용
별칭 급여 사용 가능한지?
SELECT employee_id, salary 급여
FROM employees
WHERE 급여>=15000; (x)
-처리 순서가 FROM -> WHERE-> SELECT라서 WHERE절에서 별칭 급여 사용 불가. SELECT이후 부터 사용 가능
SELECT employee_id, salary 급여
FROM employees
ORDER BY 급여; (o)
SELECT employee_id, salary *commission_pct+salary 실급여
FROM employees
ORDER BY 실급여; (o)
SELECT employee_id, salary *commission_pct+salary
FROM employees
ORDER BY 2; (o)
db 인덱스는 1부터 시작함.
SELECT employee_id, salary
FROM employees
ORDER BY hire_date; (o)
select하지 않은 컬럼으로도 정렬 가능함
SELECT절에 사용가능한 연산자
산술 연산자 +, -, *, ./
결합연산자 ||
SELECT employee_id,
salary, salary+100, salary+salary*commission_pct,
first_name, last_name, first_name||last_name
FROM employees;
HEADING 변경: 별칭주기 : " "
SELECT employee_id 사번,
salary "Salary" Heading대소문자 구분, 공백허용가능
salary+100 "salary 더하기 100", salary+salary*commision_pct 실급여,
first_name, last_name,
first_name || '~' ||last_name AS 성명
FROM employees;
WHERE절; 조건식
WHERE절에서 사용가능한 연산자
- 산술연산자 ex) WHERE salary+salary*commission_pct >= 15000;
- 비교연산자 >, >=, <, <=, =, < >(같지 않다) 주의점: NULL값 비교 불가!!
- 논리연산자 AND, OR, NOT ex) WHERE salary>=15000 AND hire_date< '20/01/01'
- AND , OR중 AND가 먼저 처리 됨 - NULL연산자 IS NULL, IS NOT NULL
ex) SELECT * FROM employee WHERE salary >= 15000; - BETWEEN연산자 : 같은컬럼명>=AND 같은컬럼명<=대신
ex) WHERE salary>=10000 AND salary <=20000;
WHERE salary BETWEEN 10000 AND 20000; - IN연산자 : 같은 컬럼명 = OR 같은컬럼명 = 대신한다
ex) WHERE department_id=50 OR department_id=90;
WHERE department_id IN(50, 90)
WHERE NOT(department_id=50 OR department_id=90);
WHERE department_id NOT IN ( 50, 90)
LIKE 연산자 : %패턴 - 0개이상
: _패턴 - 1개
- 이름에 'E' 또는 'e'를 포함한 사원의 사번, 이름을 출력하시오
SELECT employee_id, first_name
FROM employees
WHERE LOWER(first_name) LIKE '%e%' ; //first_name값이 ABC -> FALSE
//ABe ->TRUE
//e ->TRUE
//eAB ->TRUE - 직무명이 SALES로 시작하는 모든 직무번호와 직무명을 출력하시오
SELECT job_id, job_title
FROM jobs
WHERE job_title LIKE 'SALES%'; - 직무명이 Manager로 끝나는 모든 직무번호와 직무명을 출력하시오
SELECT job_id, job_title
FROM jobs
WHERE job_title LIKE '%Manager'; - 사원이름에 an을 포함한 사원의 사번과 이름을 출력하시오
SELECT employee_id, first_name
FROM employees
WHERE first_name LIKE '%an%'; - 이름이 'J'로 시작하고 n문자를 포함한 사원의 사번과 이름을 출력하시오
SELECT employee_id, first_name
FROM employees
WHERE first_name LIKE 'J%n%' ; - 입사월이 11월인 사원 사번, 입사일자를 출력하시오
SELECT employee_id, hire_date
FROM employees
WHERE hire_date LIKE '__/11/__';
- 사원의 사번, 급여를 출력 하시오 (107건)
SELECT employee_id, salary
FROM employees;
- 부서번호(department_id컬럼)가 90번인 사원들의 사번, 급여를 출력하시오 ( 3건 )
SELECT employee_id, salary, department_id
FROM employees
WHERE department_id = 90;
- 90번 부서를 제외한 사원들 사번, 급여, 부서번호를 출력하시오 (103건)
SELECT employee_id, salary, department_id
FROM employees
WHERE department_id < > 90;
비교연산으로 null or null이 아닌 값은 추출하지 못 함. ( 그래서 1건 누락됨)
- 부서배치받은 사원들 사번, 급여, 부서 번호를 출력하시오 (106건)
SELECT employee_id, salary, department_id
FROM employees
WHERE department_id IS NOT NULL;
- 부서배치 못 받은 사원들 사번, 급여, 부서 번호를 출력하시오 (1건)
SELECT employee_id, salary, department_id
FROM employees
WHERE department_id IS NULL;
- 90번 부서를 제외한 사원들과 부서 배치 못 받은 사원들의 사번, 급여, 부서번호를 출력하시오 (103+1건)
SELECT employee_id, salary, department_id
FROM employees
WHERE department_id < > 90 OR department_id IS NULL;
- 90번 부서이고 급여가 20000이상인 사원들의 사번, 급여, 부서번호를 출력하시오.
SELECT employee_id, salary, department_id
FROM employees
WHERE department_id = 90 AND salary >= 20000;
- 급여가 10000이상 20000이하인 사원들의 사번, 급여, 부서번호를 출력하시오
SELECT employee_id, salary, department_id
FROM employees
WHERE salary >= 10000 AND salary <= 20000;
SELECT employee_id, salary, department_id
FROM employees
WHERE salary BETWEEN 10000 AND 20000;
- 부서번호가 10, 50, 90인 사원들의 사번, 급여, 부서번호를 출력하시오 (49건)
SELECT employee_id, salary, department_id
FROM employees
WHERE department_id = 10 OR department_id = 50 OR department_id = 90;
SELECT employee_id, salary, department_id
FROM employees
WHERE department_id IN (10, 50, 90);
- 부서번호가 10, 50, 90인 사원들은 제외하고 사번, 급여, 부서번호를 출력하시오 (57건)
SELECT employee_id, salary, department_id
FROM employees
WHERE department_id <> 10 AND department_id <> 50 AND department_id <> 90;
WHERE NOT(department_id = 10 AND department_id = 50 AND department_id = 90);
SELECT employee_id, salary, department_id
FROM employees
WHERE department_id NOT IN (10, 50, 90);
- 급여가 10000이상 20000이하이면서 부서번호가 10, 50, 90인 사원의, 급여, 부서번호를 출력하시오 (2건)
SELECT employee_id, salary, department_id
FROM employees
WHERE (salary >=10000 AND salary <= 20000) AND (department_id = 10 OR department_id = 50 OR department_id = 90) ;
SELECT employee_id, salary, department_id
FROM employees
WHERE salary BETWEEN 10000 AND 20000
AND department_id IN(10, 50, 90);
ORDER BY절 : 정렬
SELECT employee_id, salary, department_id
FROM employees;
- 모든 사원의 사번, 급여, 부서번호를 적은급여를 받는 사원부터 출력한다 (오름차순)
SELECT employee_id, salary, department_id
FROM employees
ORDER BY salary ASC; (ASC는 생략가능)
- 모든 사원의 사번, 급여, 부서번호를 많은 급여를 받는 사원부터 출력한다 (내림차순)
SELECT employee_id, salary, department_id
FROM employees
ORDER BY salary DESC; - 모든 사원의 사번, 급여, 부서번호를 많은 급여를 받는 사원부터 출력한다, 급여가 같은 경우 작은 사번부터 출력하시오
SELECT employee_id, salary, department_id
FROM employees
ORDER BY salary DESC, employee_id;
'개발 공부 > SQL' 카테고리의 다른 글
제약 조건 / ERD 사용 (1) | 2023.06.20 |
---|---|
SUBQUERY / DDL/ DML (5) | 2023.06.16 |
GROUP BY / HAVING/ JOIN/ UNION (0) | 2023.06.15 |
SQL 함수 (1) | 2023.06.14 |
데이터 베이스 기본 개념 (1) | 2023.06.12 |