DB. MySQL 2 SLECT 예제와 각종 연산자

JINSOO PARK·2021년 11월 9일
0

DB 강의

목록 보기
3/7

명령어를 사용한 예제들

링크텍스트

SELECT


1) 테이블의 컬럼이 아닌 값 선택

SELECT
  CustomerName, 1, 'Hello', NULL
FROM Customers;


2) 원하는 조건의 row(행)만 걸러서 보기

ex1)

SELECT * FROM Orders
WHERE EmployeeID = 3;


ex2)

SELECT * FROM OrderDetails 
WHERE Quantity < 5;


3)원하는 순서대로 정렬하기


구문기준기본
ASC오름차순(ascending order)O
DESC내림차순(descending order)X

ex1) 기본 오름차순

SELECT * FROM OrderDetails

기본 SELECT를 사용하면 ID 값에 오름차순으로 결정 된다.


ex2) ORDER BY 칼럼명 DESC를 사용할 경우

SELECT * FROM OrderDetails
ORDER BY OrderDetailID DESC;


ex3) 원하는 칼럼명을 기준으로 정렬 가능

SELECT * FROM OrderDetails
ORDER BY ProductID ASC;

ProductID를 기준으로 오름차순으로 정렬


ex3) 두가지 기준 적용 가능

SELECT * FROM OrderDetails
ORDER BY ProductID ASC, Quantity DESC;

ProductID를 기준으로 오름차순으로 정렬하고 그 안에서 Qtuantity를 내림차순으로 정렬



4)원하는 만큼만 데이터 가져오기

ex1) LIMIT 가져올 갯수

SELECT * FROM OrderDetails
LIMIT 5;


ex2) LIMIT 거너뛸 갯수, 가져올 갯수

SELECT * FROM OrderDetails
LIMIT 30, 5;

앞에 30번까지 건너뛰고 5개의 데이터를 가져왔다.

  • Pagination: LIMIT을 사용하면 게시판이나 검색엔진에서 검색 결과를 원하는 부분 부터 원하는 갯수 만큼 설정해서 페이지를 나누어 결과를 보여줄 수 있다.



5)별명(alias)으로 데이터 가져오기

ex1) 기본 컬럼

SELECT CustomerID,CustomerName,Address FROM Customers;


ex2) AS를 사용해 컬럼명을 변경하기

SELECT 
CustomerID AS ID,
CustomerName AS NAME,
Address AS ADDR 
FROM Customers;

컬럼명이 변경된 것을 알 수 있다.



각종 연산자들

1) 사칙연산

연산자의미
+,-,*,/더하기, 빼기, 곱하기, 나누기
%, MOD나머지

ex1) 1+2

SELECT 1 + 2;


ex2) AS 사용시

SELECT 3-2 AS Result;


ex3) 문자열 추가

SELECT 3 * (2 + 4) / 2, 'Hello';


ex3) AS 사용시

SELECT 3 * (2 + 4) / 2 AS Number, 'Hello' AS Text;


ex4) 나머지 연산

SELECT 7 % 3



문자열과 숫자

ex1) 'ABC' + 3

SELECT 'ABC' + 3;

MySQL에서는 문자열을 0으로 인식한다.


ex2) 'ABC' * 3

SELECT 'ABC' * 3;

문자열을 0으로 인식하기 때문에 3을 곱했을때 0이 나온것을 알 수 있다.


ex2) '1' + '002' * 3

SELECT '1' + '002' * 3;

'1' 과 '002'는 문자열로 표현되었지만 숫자로 구성된 문자열을 자동으로 숫자로 인식해서 계산이 된 것을 알 수 있다.



테이블에 적용해보기

SELECT OrderID, ProductID FROM OrderDetails;


ex1) OrderID + ProductID

SELECT OrderID + ProductID FROM OrderDetails;

ex1-1) 응용

SELECT 
OrderID, ProductID,
OrderID + ProductID AS Sum
FROM OrderDetails;



2) 참/거짓 연산자

ex1) ture, false

SELECT TRUE, FALSE;

참이면 1 거짓이면 0이 나온다.


ex1-1) !ture, !false

SELECT !TRUE, NOT TRUE, NOT 1, !FALSE, NOT FALSE, NOT 0 ;

!와 NOT은 같은 의미이며 !TURE는 TURE가 아니라는 의미 이므로 0이 나온다.


ex1-2) !ture, !false

SELECT 0 = TRUE, 1 = TRUE, 0 = FALSE, 1 = FALSE;

TURE = 1
FALSE = 0
일 때 참과 거짓을 구분한 결과이다.



ex2) IS, IS NOT

SELECT TRUE IS TRUE,
TRUE IS NOT FALSE;

연산자의미
IS양쪽이 모두 TRUE 또는 FALSE 비교
IS NOT한쪽은 TRUE, 한쪽은 FALSE

ex2-1)

SELECT (TRUE IS FALSE) IS NOT TRUE;

(TRUE IS FALSE) = false 이므로 0
0 IS NOT TRUE 는 true 이므로 1이 나온걸 알 수 있다.



ex3) AND, OR

SELECT TRUE AND FALSE, TRUE OR FALSE;

연산자의미
AND,&&양쪽이 모두 TRUE일 때만 TRUE
OR, ||한쪽만 TRUE면 TRUE

ex3-1)

SELECT 2 + 3 = 6 AND 2 * 3 = 6,
2 + 3 = 6 OR 2 * 3 = 6;


*테이블에 적용하기

ex3-2) AND

SELECT * FROM Orders
WHERE
  CustomerId = 15 AND EmployeeId = 4;

두조건에 모두 충족하는 데이터를 불러옴


ex3-2) OR

SELECT * FROM Products 
WHERE
  ProductName = 'Tofu' OR CategoryId = 8;

둘중 하나의 조건만 충족해도 데이터를 불러옴


ex3-2) 두가지 조건을 같이 쓴 경우

SELECT * FROM OrderDetails
WHERE
 ProductId = 20
 AND (OrderId = 10514 OR Quantity = 50);

ProductId = 20 은 무조건 참이 되어야 하고,
OrderId가 10514 인 것과
Quantity가 50인 것이 출력 되는것을 알 수 있다.



3) 비교 연산자

연산자의미
=양쪽 값이 같음
!=, <>양쪽 값이 다름
>, <(왼쪽, 오른쪽) 값이 더 큼
>=, <=(왼쪽, 오른쪽) 값이 같거나 더 큼

ex1)

SELECT 1 = 1, !(1 <> 1), NOT (1 < 2), 1 > 0 IS NOT FALSE;


ex2) 문자열

SELECT 'A' = 'A', 'A' != 'B', 'A' < 'B', 'A' > 'B';

알파벳 순에서 나중에오는 알파벳이 더 큰수로 인식한다.

  • MySQL에서는 대소 문자를 구분하지 않는다.

ex2-1)

SELECT 'Apple' < 'Banana';


*테이블에 적용하기

ex3)

SELECT
  ProductName, Price,
  Price > 20 AS EXPENSIVE 
FROM Products;

Price 가 20 보다 크면 1(TRUE), 작으면 (FALSE)



4)그외 연산자

BETWEEN

연산자의미
BETWEEN {MIN} AND {MAX}두 값 사이에 있음
NOT BETWEEN {MIN} AND {MAX}두 값 사이가 아닌 곳에 있음

ex1) 숫자

SELECT 5 BETWEEN 1 AND 10;


ex2) 문자열

SELECT 'banana' BETWEEN 'Apple' AND 'camera';

b 는 a와 c 사이에 있으므로 true


*테이블에 적용하기

ex3) 숫자

SELECT * FROM OrderDetails
WHERE ProductID BETWEEN 1 AND 4;

ProductID의 값이 1 ~ 4 사이에 있는 데이터들을 불러옴


ex4) 문자열

SELECT * FROM Customers
WHERE CustomerName BETWEEN 'b' AND 'c';

CustomerName이 b에서 c까지에 해당하는 데이터를 불러옴



IN, NOT IN

연산자의미
IN (...)괄호 안의 값들 가운데 있음
NOT IN (...)괄호 안의 값들 가운데 없음

ex1) 숫자

SELECT 1 + 2 IN (2, 3, 4) 

1+2의 값 즉 3 이 IN(2, 3, 4) 에 포함 되기 때문에 1(TRUE)이 출력


ex2) 문자열

SELECT 'HELLO' IN (1, TRUE, 'hello') 

HELLO가 IN(1, TURE, 'hello') 안에 포함되어 있기 때문에 1(TRUE)이 출력
*대소문자는 구분하지 않음


테이블에 적용하기

SELECT * FROM Customers
WHERE City IN ('Torino', 'Korea', 'Japan') 

City 컬럼 안에서 IN('Torino', 'Korea', 'Japan') 괄호 안에 해당하는 Torino의 데이터만 불러옴



LIKE

연산자의미
LIKE '... % ...'0~N개 문자를 가진 패턴
LIKE '... _ ...'_ 갯수만큼의 문자를 가진 패턴

ex1) LIKE ...%...

SELECT
  'HELLO' LIKE 'hel%',
  'HELLO' LIKE 'H%',
  'HELLO' LIKE 'H%O',
  'HELLO' LIKE '%O',
  'HELLO' LIKE '%HELLO%',
  'HELLO' LIKE '%H',
  'HELLO' LIKE 'L%'

%는 0~N개의 문자가 올 수 있으므로

  • 'hel%'
  • 'H%'
  • 'H%O'
  • '%O'
  • '%HELLO%'

모두 TRUE

  • '%H' : H로 끝나는 문자열이 없음
  • 'L%' : L로 시작하는 문자열이 없음

모두 FALSE


ex2) LIKE ..._...

SELECT
  'HELLO' LIKE 'HEL__',
  'HELLO' LIKE 'h___O',
  'HELLO' LIKE 'HE_LO',
  'HELLO' LIKE '_____',
  'HELLO' LIKE '_HELLO',
  'HELLO' LIKE 'HEL_',
  'HELLO' LIKE 'H_O'

_의 갯수만큼의 문자열이 올 수 있으므로

  • 'HEL__'
  • 'h___O'
  • 'HE_LO'
  • '_____'

모두 TRUE

  • '_HELLO' : HELLO앞에 문자열이 없음
  • 'HEL_' : HEL뒤에 2개의 문자열이 있음
  • 'H_O' : H 와 O 사이에 3개의 문자열이 있음

모두 FALSE


테이블에 적용하기

ex3) LIKE ...%...

SELECT * FROM Employees
WHERE Notes LIKE '%economics%'

Notes의 내용중 economics라는 내용을 포함하는 데이터를 불러옴


ex4) LIKE ..._...

SELECT * FROM OrderDetails
WHERE OrderID LIKE '1025_'

OrderID 중 1025와 그뒤로 _ 하나의 문자열 까지 해당하는 데이터를 불러옴

링크텍스트

profile
개린이

0개의 댓글