Smart Student Coders

WHERE가 뭐지?

WHERE은 어디에, 어디로, 어디에서와 같은 뜻으로 알고 있을 거에요. 

맞아요! 앞장에서 DML(기억이 안난다면 클릭!)을 하면서 모든 데이터가 한번에 지워지고, 한번에 바뀌고 그래서 원하는대로 못했어요.

하지만 이번에는 바로 이 "WHERE"를 이용해서 내가 어디에 데이터를 원하는지 알려 줄거에요!

그리고 데이블들을 연결시켜주는 "JOIN"이라는 일도 해준답니다. JOIN은 나중에 자세하게 이야기 해봐요!

 

Part1에는 WHERE절의 기본과 간단한 예시, 그리고 비교연산자와 논리연산자를 포스팅하고 

Part2에는 SQL연산자, 부정비교 연산자, 부정 SQL연산자를 포스팅 할 예정입니다~

 

오른쪽 +버튼을 이용한 실습!
오른쪽에 빨간색 버튼을 누르면 ORACLE Live SQL이 나옵니다. 거기에 실습내용을 모두 모아놨습니다!

 

지금 부터 SQL이 재밌어지는 시간입니다!! 바로 한번 볼까요?


기본형식
SELECT 칼럼명 [ALIAS명] FROM 테이블명 WHERE 조건식;

SELECT문으로 원하는 컬럼명이나 모든 컬럼 등을 선택하고 별칭을 지정할 수 있습니다. 

FROM 테이블명으로 원하는 테이블을 선택할 수 있습니다.

 

WHERE문과 그 뒤에 조건식을 이용해서 원하는 컬럼에 조건을 만들어 원하는 데이터를 선택할 수 있습니다!

 

연산자의 종류 및 연산 우선순위


Part1에서 배울 연산자 목록

연산자 종류 연산자 연산자의 의미
비교 연산자 = 두 연산자가 같다.
> 두 연산자 중 왼쪽 연산자가 더 크다.
>= 두 연산자 중 왼쪽 연산자가 더 크거나 같다.
< 두 연산자 중 오른쪽 연산자가 더 크다.
<= 두 연산자 중 오른쪽 연산자가 더 크거나 같다.
논리 연산자 AND 조건식이 2개 이상일 때 모든 조건식이 참(True)인 조건을 선택한다.
OR 조건식이 2개 이상인 경우 하나이상의 조건에서만 참인 조건를 선택한다.  
NOT 뒤에 오는 조건과 반대되는 결과를 되돌려준다.

연산자의 우선순위

연산자 우선순위  
1 괄호 ( )
2 NOT 연산자
3 비교 연산자
4 AND
5 OR

 

연산자 우선순위로는 1. 괄호로 묶은 연산이 제일 먼저 연산 처리된다. 2. 연산자들 중에는 부정 연산자(NOT)가 먼저 처리된다. 3. 비교 연산자(=,>,>=,<,<=)가 처리된다. 4. 논리 연산자 중에서는 AND, OR의 순으로 처리된다.

TIP!
만약 이러한 연산에 있어서 연산자들의 우선순위를 염두에 두지 않고 WHERE 절을 작성한다면 테이블에서 자기가 원하는 자료를 찾지 못하거나, 혹은 틀린 자료인지도 모른 채 사용할 수도 있다. 실수하기 쉬운 비교 연산자와 논리 연산자의 경우 괄호를 사용해서 우선순위를 표시하는 것을 추천한다!!

 

우리가 실습할 기본 데이터


우리가 실습할 데이터를 간단하게 소개합니다.

FAMILY 테이블

가족 테이블입니다!

이 데이터를 이용해서 WHERE 절을 실습해봅시다!

비교연산자


비교연산자는 여러분들이 수학에서 알고 있는 연사자와 아주 비슷한 형태에요. 

비교 연산자 = 두 연산자가 같다.
> 두 연산자 중 왼쪽 연산자가 더 크다.
>= 두 연산자 중 왼쪽 연산자가 더 크거나 같다.
< 두 연산자 중 오른쪽 연산자가 더 크다.
<= 두 연산자 중 오른쪽 연산자가 더 크거나 같다.

 

비교연산자를 이용한 실습내용을 적어놨어요. 옆에 빨간색 +를 눌러서 실습해 봅시다!

연산자 내용
>

SELECT * FROM FAMILY WHERE AGE > 20;

나이가 20살 이상인 가족 구성원의 컬럼정보를 모두를 보여준다.

<

SELECT * FROM FAMILY WHERE HEIGHT < 180;

키가 180cm 이하인 가족 구성원의 컬럼정보를 모두를 보여준다.

=

=을 사용하는 예제는 직접 작성해 보세요! 

나이가 24살인 가족 구성원의 컬럼정보를 보여주는 예제를 직접 작성해봅시다!!

문자 비교연산자

 


문자 비교연산자는 문자들도 비교할 수 있는 연산자에요!

다른 특별한 것이 있을까요? 전혀요! 사용법은 비슷해요 하지만 몇가지 추가되는 부분이 있어요! 

 

문자열을 만드는 데이터 타입은 2개라고 배웠었죠? 혹시 기억이 안난다면 클릭해요!

바로 VARCHAR와 CHAR를 비교하거나 문자와 숫자를 비교하는 부분입니다.

연산자 비교 방법
비교하는 연산자가 둘 다 CHAR인 경우

길이가 서로 다른 CHAR형 타입이면 작은 쪽에 공백(SPACE)를 추가해서 길이를 같게 한 뒤 비교한다.

서로 다른 문자가 나올 때까지 비교한다.

 

달라진 첫 번째 문자에 따라 크기를 결정한다. 

✔ 두 문자의 크기비교는 순서로 정한다. 빠른순서의 문자열이 더 큰 값을 가진다.

 

만약 공백의 수만 다르다면 같은 문자라고 판단한다. 

비교하는 연산자의 한 쪽이 VARCHAR유형인 경우 

서로 다른 문자가 나올 때까지 비교한다.

길이가 다르면 끝날 때까지만 비교한 뒤 길이가 긴것이 크다고 판단

 

길이가 같고 다른것이 없다면 같다고 판단한다. 

상수값과  문자열을 비교할 경우

상수 쪽을 변수타입과 동일하게 바꾼뒤 비교한다.

변수쪽이 CHAR유형이면 CHAR 유형타입을 적용하고 VARCHAR유형이면 VARCHAR유형타입을 적용하여 비교한다.  

 

TIP!
문자열을 비교할 때는 문자열을 입력하고 다루는 것과 동일하게 ''(따음표)를 반드시 넣어준다.

 

 

문자를 비교연산자를 이용한 실습내용을 적어놨어요. 옆에 빨간색 +를 눌러서 실습해 봅시다!

내용

SELECT * FROM FAMILY WHERE F_NAME = 'HYEON';

이름이 HYEON인 사람의 모든 컬럼정보를 검색합니다.

 

더보기
깜짝문제!!

형제가 2명 이상일 수 있어요!!

BROTHER를 한명 더 추가하고 

 

모든 BROTHER의 정보를 조회해 봅시다!!

HINT

정보를 추가하는 INSERT를 사용하고 가족테이블의 WHO를 비교해보면 되겠죠?

 

논리연산자


논리연산자는 논리적으로 맞는지 아닌지를 말해주는 연산자에요! 이렇게 말하니 느낌이 잘 안오죠?

AND는 조건들이 모두 맞아야 맞는 깐깐한 연산자에요.

OR는 조건들중 하나만 맞으면 되는 널널한 연산자에요.

NOT는 조건에 반대되는 결과를 보여주는 연산자에요.


조건1 조건2 결과
거짓 거짓
거짓 거짓
거짓 거짓 거짓

AND 연산자를 보면 조건 1과 2가 참인경우만이 결과에 참으로 나왔어요! 두 조건중 하나의 조건이라도 거짓이라면 깐깐한 AND는 거짓이라는 결과를 보여줍니다!

 

 

조건1 조건2 결과
거짓
거짓
거짓 거짓 거짓

OR연산자는 조건 1과 2중에 하나의 경우만 참인 경우에 결과가 참으로 나왔어요! 두 조건중 하나의 조건이라도 참이라면 널널한 OR연산자는 참이러는 결과를 보여줍니다!

 

 

조건1 결과
거짓
거짓

NOT연산자는 조건 1의 결과를 반대로 만들어줍니다! 조건 1이 참인 경우 거짓으로 거짓인 경우는 참으로 변했네요!  NOT연산자는 조건의 내용을 반대되는 결과를 보여줍니다!

 

논리연산자 예제


교연산자를 이용한 실습내용을 적어놨어요. 옆에 빨간색 +를 눌러서 실습해 봅시다!

연산자 내용
AND

SELECT * FROM FAMILY WHERE AGE > 20 AND HEIGHT > 170;

나이가 20살 이상이고 키가 170이상인 가족 구성원의 컬럼정보를 모두를 보여준다.

OR

SELECT * FROM FAMILY WHERE HEIGHT < 180 OR AGE > 20;

키가 180cm 이하 거나 나이가 20살이상인 가족 구성원의 컬럼정보를 모두를 보여준다.

NOT

SELECT * FROM FAMILY WHERE NOT  AGE > 20;

나이가 20살이상인 가족 구성원을 제외하고 나머지 가족의 모든 컬럼정보를 보여준다.

응용

SELECT * FROM FAMILY WHERE  (AGE > 20 OR HEIGHT >165) AND WHO = 'BROTHER';

나이가 20살이상 이거나 키가165 이상인 사람중에서 BROTHER인 가족의 모든 컬럼정보를 보여준다.

 

더보기
깜짝문제!!!
응용예시를 이용해서 나이가 10살에서 30살 사이에 사람들중에 키가 170 이상인 사람들의 이름을 보고 싶어요!

 

 

 

 

 

 

산술연산자? 합성연산자? 그게 뭐야??


산술연산자

 

 ✏산술연산자는 수학에서 배웠던 사칙연산과 매우 비슷한 구조에요! 더하기, 빼기, 곱하기, 나누기와 우선순위 설정을 위한 괄호까지 우리가 배웠던 수학이랑 매우 비슷합니다!

 

합성연산자

 

 ✏합성연산자는 문자와 문자합성해주는 연산입니다! 이게 전부 에요! 간단하죠?

TIP!!

일반적으로 산술연산을 하게되면 컬럼의 라벨(이름)이 길어지고 기존에 컬럼에 연산을 진행하여 새로운 의미를 부여한 것이므로 적절한 ALIAS(별명)을 새롭게 부여하는 것이 좋아요! 


이제 본격적으로 산술연산자합성연산자에 대해 알아볼까요?

 

산술연산자

위에서도 설명한것 처럼 산술연산자는 우리가 아는 수학이랑 매우 비슷해요 간단하게 아래의 표를 확인해볼까요?

산술 연산자 설명
( ) 연산자의 우선순위를 변경하기 위한 괄호
* 곱하기
/ 나누기
+ 더하기
- 빼기

이거 어디서 많이 보던 것들 아니던가요? 맞아요 여러분이 알고 있는 기호들이에요!

곱하기를 X대신 *로 나누기를 ÷대신 /로 사용하는 것 말고는 다른게 없어요!! 그렇다면 사용법은 다를까요? 아니요!

아래 예제를 통해서 확인해봅시다!

SELECT F_NAME AS 이름, WEIGHT/((HEIGHT/100)*(HEIGHT/100)) AS "BMI 비만지수" FROM FAMILY 

SELECT로 선택합니다! F_NAME인 가족의 이름몸무게/((나누기100)곱하기(/100)) 이런식으로 계산된 "BMI 비만지수" 라는 이름 총2개의 컬럼을 선택합니다! FAMILY 라는 테이블에서!

직접 실습해보기

☞ SELECT문의 구조가 기억이 안난다면 클릭 ☜

 


합성연산자

위에서는 합성연산자를 문자와 문자를 합성해주는 연산으로만 소개했었죠. 맞아요 그게 전부에요 간단해요!! 하지만 아주 다양하게 쓰입니다!! 바로 확인해볼까요?

사용방법!
'문자' || '문자'
컬럼명 || '문자'

어때요? 너무쉽죠?

|(수직바)는 enter위에 \이 써있는 키를 shift를 누르고 쓰면 써져요!

내맘대로 넣고 싶은 문자에는 ''(작은 따음표)를 사이에 넣어서 문자라는 것을 알려주면되요!

컬럼으로만 나오니까 너무 딱딱해요! 아래 처럼 근사하게 나오면 좋겠어요!
아빠의 키는 175cm이고 몸무게는 68kg이고 나이는 48살 입니다!
SELECT F_NAME || '의 키는 ' || HEIGHT || 'cm이고 몸무게는' || WEIGHT || 'kg입니다!' FROM FAMILY
☞ 테이블을 만들거나 컬럼을 추가/변경하는 DDL이 기억이 안난다면 클릭 ☜

 

'데이터베이스 > SQL의 기본과 활용' 카테고리의 다른 글

[SQL] 함수(Part 1)  (0) 2019.11.18
[SQL] WHERE (Part 2)  (0) 2019.11.11
[SQL] DML(Data Manipulation Language)  (0) 2019.10.13
[SQL] 실습환경  (0) 2019.09.29
[SQL]SQL을 시작하기 앞서  (0) 2019.09.29

Data Manipulation Language(데이터조작어)

저번 시간에는 데이터 유형(Data type)들을 알아보고 테이블을 생성(CREATE)하고 테이블의 구조를 변경(ALTER)하고 테이블을 삭제(DROP)하거나 테이블의 내용을 삭제(TRUCATE)해봤다. 저번 시간에 실습한 내용들을 ORACLE Live SQL 에 저장했다면 실습했던 기록들이 남아있을 것이다! 혹시 기억이 안난다면 지난 게시물을 다시 보고 오자

이번에는 만든 테이블에 관리를 위한 내용으로 자료들의 , 수정, 삭제, 조회하는 DML사용법을 알아보자!

 

 

DML - INSERT

"데이터의 내용을 테이블에 넣어주는 INSERT"

값을 INSERT 해줄때는 해당 칼럼의 데이터 유형이 CHAR나 VARCHAR2 등 문자 유형일 경우 『 ' 』로 입력할 값을 입력한다. 숫자일 경우 『 ' 』을 붙이지 않아야 한다.

CHAR , VARCHAR 'SSC', 'Daniel', 'Park'
NUMBER 3, 5.4, 4450

기본형식 1(컬럼의 리스트를 지정해주는 경우)

INSERT INTO 테이블이름 (컬럼이름1, 컬럼이름2, 컬럼이름3.....) VALUES (컬럼1의 데이터, , 컬럼2의 데이터, 컬럼3의 데이터.....);

즉 

 

INSERT INTO 테이블이름 (컬럼들의 리스트) VALUES (값들);

이다.

실습 예제(가족 테이블과 자신의 가족 데이터 넣어보기)

 

기본형식 2(테이블의 모든 컬럼을 대상으로 할 때)

INSERT INTO 테이블이름 VALUES (전체 컬럼들의 값들);

 

주의사항 

모든 컬럼의 순서대로 빠짐없이 데이터가 입력되어야 한다.

이번 실습은 위에 실습예제를 응용해봐요!!
TIP!
기본형식 1번을 사용하면 넣지 않는 데이터는 어떻게 되나요?

정의하지 않은 칼럼은 기본값으로 NULL 값이 입력됩니다!

 

 

DML - UPDATE

"입력된 데이터의 내용을 수정해주는 UPDATE"

기본형식

UPDATE 테이블명 SET 수정하고 싶은 칼럼명 = 새로운 값;

 

간단하죠?? 조금만 더 배우면 원하는 부분만 변경할 수도 있어요!! 

실습 예제

 

 

DML - DELETE

"입력된 데이터의 내용을 삭제해주는 DELETE"

기본형식

DELETE FROM 삭제를 원하는 정보가 들어있는 테이블명;

 

아직은 원하는 정보가 아닌 전체를 지우지만 조금만 더 배우면 원하는 정보를 지울 수 있어요!

실습 예제

 

DML = SELECT

"입력된 데이터의 내용을 조회해주는 SELECT"

SELECT는 SQL에서 가장 많이 사용할 예정이에요!! 그만큼 중요하겠죠?

기본예제

SELECT 원하는 컬럼1, 원하는 컬럼2, ...... FROM 테이블이름;

 

원하는 컬럼들을 나열하고 어떤 테이블에 있는지만 입력하면 모든 정보들이 다 나옵니다!

몰론 조금만 더 공부하면 원하는 내용들만 조회할 수 있게됩니다. 힘내요!

실습 예제

TIP!
모든 컬럼이 너무 많을 때 사용하는 『 *』

SELECT * FROM FAMILY;

*을 사용함으로 모든 정보를 쉽게 조회할 수 있다!

별칭을 만들 때 사용하는 ALIAS

AS라고 사용한다.

SELECT AGE AS 나이, F_NAME AS 이름 FROM FAMILY;

컬럼명이 아닌 AS 뒤에 있는 별칭으로 결과가 조회된다.

 

 

 

'데이터베이스 > SQL의 기본과 활용' 카테고리의 다른 글

[SQL] 함수(Part 1)  (0) 2019.11.18
[SQL] WHERE (Part 2)  (0) 2019.11.11
[SQL]산술연산자와 합성연산자  (0) 2019.10.21
[SQL] 실습환경  (0) 2019.09.29
[SQL]SQL을 시작하기 앞서  (0) 2019.09.29

데이터 유형

 데이터 정의어를 본격적으로 알아보기 전에 데이터 유형을 먼저 알아보자! 데이터 유형은 데이터베이스의 테이블에 특정 자료를 입력할 때, 그 자료를 받아들일 공간을 자료의 유형별로 나누는 기준이라고 생각하면 된다. 더더더 쉽게 이야기하면 각각의 데이터들이 들어가게 될 다양한 상자들의 유형이다. 

 숫자는 숫자상자에 문자는 문자상자에 글자는 글자상자에 넣는다. 이것은 다른 프로그램언어에서 다루는 변수와도 같은 개념이다! 다른 프로그래밍언어를 조금이라도 배웠다면 이 변수를 모를 수 없을것이다!

 이 부분은 매우 중요하다 예를들어 학생들의 몸무게를 기록해놓은 상자에 '이름'이라는 문자열이 입력된다면 잘못된 데이터라고 판단할 수 있다. 

 

 

 

 

그럼 이제 데이터 유형들에는 어떤 것들이 있는지 알아보자 

 

CHARACTER형 데이터 타입

"고정길이문자열정보"

 보통 사용할때는 CHAR(숫자)라고 사용하고 괄호안에 숫자만큼 정해진 숫자 만큼의 최대 크기를 가진다. 숫자를 적지 않으면 기본값인 1바이트가 된다.  

 

 ※ 넣고자 하는 문자열이 괄호안에 숫자보다 작을 경우 그 차이 길이 만큼 공백으로 채워진다. 


VARCHAR형 데이터 타입

"가변길이 문자열정보"

VARCHAR는 CHARACTER VARYING(상황에 따라 변하는 CHARACTER)의 약자로 ORACLE에서 사용할때는 VARCHAR2(숫자)라고 사용하고 SQL Server에서는 VARCHAR(숫자)라고 사용한다. VARCHAR도 CHAR와 같게 숫자를 적지 않으면 최소 길이인 1바이트로 설정해준다. 

 

 ※ 입력한 숫자 만큼의 최대 길이를 가지지만 원하는 문자열의 크기만큼만 채워진다. 

TIP!
CHAR 유형 'SSC    ' ≠ 'SSC'
VARCHAR 유형 'SSC    ' = 'SSC'

 


NUMBERIC형 데이터 타입

"정수, 실수 등의 다양한 숫자들의 정보"

숫자들을 다루는 데이터 타입으로 ORACLE에서는 NUMBER(숫자)로 통합해서 사용하고 SQL Server에서는 10가지가 넘는 숫자타입이 있다. (우리는 ORACLE을 사용할 예정이니 겁먹지 마시길!) 괄호안에 숫자는 역시나 최대 자릿수을 나타내주는 숫자다.

만약에 소수점이 있는 실수를 다루고싶다면 괄호안에 숫자를 조금만 바꿔주면 된다 예를들어 정수부분이 4자리고 소수점 부분이 2자리면 NUMBER(4,2)로 명시해주면 간단하다.


DATATIME형 데이터 타입

"날짜와 시각 등의 다양한 시간들의 정보"

날짜와 시각 등의 정보를 나타내는 데이터 타입이다. ORCLE은 DATE로 사용하고 SQL Server는 DATETIME으로 표현한다. 

날짜나 시간에 +나 -를 이용해서 계산해서 날짜들의 차이를 알거나 미래의 날짜를 알 수 있다.


Data Definition Language(데이터 정의어)

본격적으로 DDL에 대해 알아보자 

DDL - CREATE

"테이블을 생성해주는 CREATE"                       

기본 형식

CREATE TABLE 테이블이름 (          (이름을 적어준다)

        컬럼이름1 데이터 타입,        (콤마로 연결해준다.)

        컬럼이름2 데이터 타입,

        컬럼이름3 데이터 타입,

                     .

                     .

                     .

);      (세미콜론으로 마무리!)

실습 예제

아직은 테이블만 생성하고 데이터가 없어서 뭔가 나오지는 않을것이다. 궁금하면 "SELECT * FROM 테이블 이름"을 입력해보자 

 


DDL- ALTER

"테이블의 구조 변경해주는 ALTER"  

기본형식

추가

ALTER TABLE 테이블명 ADD 추가할 칼럼이름 데이터유형;  

삭제

ALTER TABLE 테이블명 DROP COLUMN 삭제할 칼럼명;

변경

ALTER TABLE테이블명MODIFY (수정할 칼럼명1 데이터 유형, 수정할 칼럼명2 데이터 유형 ....);

 

옆에 실습 예제로 실습해봅시다! 각각의 문장을 읽어보면 어떤 기능을 수행하는 지 알 수 있을거에요! 

실습 예제

 

 


DDL -DROP

"테이블을 삭제해주는 DROP" 

기본형식

DROP TABLE 테이블명;

아주 간단하죠? 실습예제 혹은 지금 까지 만들었던 테이블을 삭제 해봐요!

실습 예제

 


DDL - TRUNCATE

"테이블의 내용 삭제해주는 TRUNCATE" 

기본형식

TRUNCATE TABLE 테이블명;

역시 간단하죠? 하지만 DROP과 TRUNCATE는 다르다는 것을 꼭 기억해주새요!

실습 예제

테이블이 생성되고 값들이 생기고 그 값들을 확인하고 TRUNCATE를 이용해서 값들만을 지웠습니다! 테이블을 모두 지우기 위해서는 DROP! 
TIP!
DROP 테이블 자체를 모두 지워서 아무것도 남지않게 된다 
TRUNCATE 테이블에 있는 데이터들만 지워서 테이블 정보만 남게된다