GULGUL CODING

[SQL] SELECT 본문

SQL/ORACLE

[SQL] SELECT

OKKK굴 2023. 7. 7. 10:09

SELECT

1. 정의

 - 테이블의 데이터를 조회 하는 용도로 사용된다.

2. 구조

기본형

SELECT *
FROM 테이블명

차후 여러가지 내용을 배우면 이렇게도 쓴다.

SELECT 칼럼, 칼럼,.. 
FROM 테이블명
WHERE 조건
GROUP BY 구문
HAVING 조건
ORDER BY 구문

 

🎈 ' * ' 은 모든 테이블내 모든 칼럼을 다 출력한다.

🎈 칼럼,칼럼 순으로 작성하면 테이블에서 필요한 열만 조회할 수 있다. (여러개의 열을 가져오고싶을때는 콤마(,)로 구분)

🎈 열 이름의 순서는 출력하고 싶은 순서대로 배열한다.

 

🎈

WHERE 절은 조건을 적을때 사용한다.

GROUP BY 는 특정 칼럼을 그룹화 할때 사용한다. (이글 하단에서 자세히 다룰예정)

HAVING 절은 GROUP BY에 조건을 부여할때 사용한다.

ORDER BY 는 정렬을 할 때 사용한다.

 

 

 만약에 이런 테이블이 있고,

USERS
user_id varchar2(50)
user_name varchar2(50)
gender varchar2(10)

데이터가 이렇게 들어있다면

user_id user_name gender
user01 이영지 W
user02 나영석 M
user03 안유진 W
-- 이렇게 작성시, 전체 테이블 정보가 출력
SELECT * 
FROM USERS  

-- 이렇게 작성시, 필요한 정보만 출력 
SELECT user_name,gender
FROM USERS

 

3. 별칭 사용하기 (AS)

SELECT 칼럼 AS 별칭
FROM 테이블명

 

AS는 별칭을 사용하는 표기법으로 사용되며

AS는 생략이 가능하다. 즉,  칼럼 별칭  이라고 작성해도 된다.

만약 띄어쓰기를 하고 싶은 경우는  따옴표로 묶어서 칼럼 "띄어쓰기 별칭"  으로 작성한다.

 

4. 중복제외 (DISTINCT)

SELECT DISTINCT 칼럼
FROM 테이블명;

 중복된 것은 제외해서 출력한다.

 

5. 연결 연산자 ( || )

SELECT 1 + '3' FROM DUAL
-- 이경우 결과값이 4가 출력된다.
-- 즉, 숫자+문자의 경우 문자가 숫자형식인경우 자동으로 형변환이 되어 계산되어진다.
-- 하지만 문자열 덧셈 ('가'+'나'='가나') 는 되지않는다.
-- * 여기서 DUAL이란 형식을 맞추기 위해 만드는 빈 테이블명이다. 예시로 작성할때 많이 사용.

문자열 끼리 연결 할때는 연결 연산자인  || 을사용한다.

SELECT '가' || '나'
FROM dual;

SELECT '가' || '나' AS 합침
FROM dual; 
--일반적으로 칼럼명을 깔끔하게 하기위해 별칭을 사용함.
--출력값 :가나

 

6.산술연산자

일반적인 산술연산자는 동일하다.

  + 덧셈 , - 뺄셈 , * 곱셈  , / 나눗셈

 

7. 비교 연산자

<>,>,>=,<,<=

- <> 이 표시는 != 와 같다. 혼용해서 써도 된다.

 

8. 논리 연산자

1) AND

그리고 의 의미로  조건1 AND 조건2  의 경우

조건1 과 조건2가 모두 성립해야한다. 

2) OR

또는 의 의미로 조건1 OR 조건2 의 경우

조건1이나 조건2 둘 중 하나라도 조건에 만족하면 된다.

3) NOT

조건을 만족하지 않는 것만 조회한다.

#1)AND 예시
SELECT *
FROM employees
WHERE salary >= 10000 AND salary <= 12000;

#2)OR 예시
SELECT *
FROM employees
WHERE last_name = 'King' OR last_name = 'Smith';

#3)NOT 예시
SELECT *
FROM employees
WHERE NOT department_id = 50;

 

9. ORDER BY

결과 테이블의 내용을 사용자가 원하는 순서로 출력한다.

ORDER BY와 함께 기준이 되는 속성과 정렬방식을 지정

정렬방식 : ASC (오름차순, 기본값으로 작성하지않을경우 자동으로 지정된다.)

                 DESC(내림차순)

#이경우 first_name을 기준으로 오름차 순으로 정렬
SELECT first_name, last_name
FROM employees
ORDER BY first_name;


#이경우 location_id순으로 내림차로 정렬후, 그안에서 department_name 순으로 오름차순으로 재정렬 한다.
SELECT location_id, department_name
FROM departments
ORDER BY location_id DESC, department_name;

 

10.ROWNUM

rownum은 결과집합을 만들때 생성되는것이기 때문에 항상 1부터 시작한다.
select * from notice where rownum between 1 and 3;
select * from notice where rownum between 2 and 6; --실행안됨
--해결방법
 select * from (select rownum num , notice.* from notice) where num between 1 and 3; 
--()안의 값은 새로운 가상의 테이블이라고 생각해야한다.
select * from (select rownum num , notice.* from notice) where num between 4 and 5;

--rownum은 where절 시작할때 작성되기 때문에 orderby시 순서가 엉망이 될 수있다.
--이경우, rownum() over (order by 정렬칼럼) 으로 넣어주면 잘 순서가 정렬됨.

 

출처:https://www.youtube.com/@user-ss5no9xw6e

Comments