SQL 첫걸음 - Day 1

서은서·2023년 9월 20일
0

MySQL

목록 보기
1/2
post-thumbnail

드디어 미루고 미루던 SQL 공부를 시작했다!(이제 예전에 샀던 책이 아닌 다른 책으로....ㅎ) 데이터베이스의 기본적인 개념은 예전에 정리를 했으니 바로 문법공부로 넘어갈까 한다!

+) Mac에서 터미널로 MySQL 실행하기
(MySQL이 설치되어 있다는 가정하에 진행)
1. mysql.server start
2. mysql -uroot -p -> 비밀번호 입력
🤔 만약 1번에서 오류가 난다면? (참고 : https://signature95.tistory.com/27)

+) Mac에서 터미널로 MySQL 종료하기
1. exit
2. mysql.server stop


테이블에서 데이터 검색

테이블

표 형식의 데이터는 '행(레코드)'와 '열(컬럼/필드)'로 구성된다.

  • 열 이름 : 도서번호, 도서이름, 출판사, 가격
  • NULL : 아무 것도 저장되어 있지 않은 상태

(🔗 : https://velog.io/@odh0112/Database-%EA%B4%80%EA%B3%84%ED%98%95-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4)

SELECT 구문

select는 데이터베이스의 데이터를 읽어올 수 있다.

SELECT * FROM 테이블명;
  • * : 모든 열
  • FROM 테이블명 : 테이블에서

⚠️ 주의할 점은 명령이 끝나고 꼭 세미콜론(;)을 넣고 Enter 키를 눌러야 한다.
-> 만약 세미콜론을 넣지 않는다면 명령이 끝나지 않았다 인식하여 계속 명령어를 입력할 수 있다.

예시

+)
만약 데이터베이스를 선택하지 않고 바로 SELECT 구문을 실행한다면 다음과 같은 오류가 발생할 수 있다. 따라서 use 데이터베이스를 입력해 데이터베이스를 선택해 주어야 한다.

DESC

DESC 명령으로 테이블에 어떤 열이 정의되어 있는지 알 수 있다.

  • int : Integer(정수)
  • NULL : NULL 값을 허용할 것인지 아닌지를 나타내는 제약사항
  • Key : 해당 열이 '키'로 지정되어 있는지
  • Default : 열에 주어진 '기본값'

WHERE

SELECT1,2 FROM 테이블명 WHERE 조건식

열 지정 순서는 임의로 정할 수 있다.

WHERE 구는 FROM 구의 뒤에 표기하며, WHERE 뒤에 검색 조건을 표기한다.
조건식은 '열과 연산자, 상수로 구성되는 식'이다.

<비교 연산자>

  • 값이 서로 같은 경우 : =
  • 값이 서로 다른 경우 : <>
  • NULL 값인지 확인하고 싶은 경우 : IS NULL

⚠️ 문자열형, 날짜시간형을 비교할 경우 싱글쿼트('')로 둘러싸 표기해야한다.

예시
sample21에서 no가 2인 행 추출

⬇️

논리 연산자

  • AND : 모든 조건을 만족하는 경우 조건식이 참이 된다.
  • OR : 어느 쪽이든 하나만 참이 되면 조건식은 참이 된다.
  • NOT

⚠️ OR보다 AND 쪽이 우선 순위가 높다. -> 괄호로 우선 순위를 변경할 수 있다.

LIKE

LIKE 패턴

특정 문자나 문자열이 포함되어 있는지를 검색하고 싶은 경우 패턴 매칭 또는 부분 검색을 사용한다.

패턴을 정의할 떄는 %_와 같은 메타문자를 사용할 수 있다.
👉🏻 메타문자 : 패턴 매칭 시 '임의의 문자 또는 문자열'에 매치하는 부분을 지정하지 위해 쓰이는 특수문자

  • 퍼센트(%) : 임의의 문자열

    ⚠️ 만약 문자열 도중에 존재하는 문자열을 검색하고자 한다면 %문자열%로 적어야한다.
  • 언더스코어(_) : 임의의 문자 하나

만약 %을 검색하고 싶다면?

WHERE text LIKE '%\%%'

만약 문자열 상수 '의 이스케이프

' -> ' '' '

정렬과 연산

ORDER BY

SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열명 ASC/DESC
  • 오름차순이 default 값
  • ORDER BY는 테이블에 영향을 주지 않는다.
  • MySQL의 경우 NULL 값을 가장 작은 값으로 취급한다.

예시 1
나이를 내림차순으로 정렬

예시 2
복수의 열을 정렬 / sample32를 a열과 b열로 내림차순으로 정렬

데이터 형식에 따른 정렬

  • 수치형 데이터 : 숫자의 크기로 판별
  • 문자형 데이터 : 알파벳이나 한글 자모음 배열순서를 사용하면 준자를 차례대로 나열할 수 있다.

LIMIT

SELECT 열명 FROM 테이블명 LIMIT 행수 [OFFSET 시작행]

LIMIT 구는 SELECT 명령의 마지막에 지정하는 것으로 WHERE 구나 ORDER BY 구의 뒤에 지정한다.

  • OFFSET을 지정하면 지정한만큼 뛰어넘고 반환 해준다.

예시 1

⬇️

예시 2

수치 연산

+ - * / % MOD
  • + : 더하기
  • - : 빼기
  • * : 곱하기
  • / : 나누기
  • % : 나머지
  • MOD : 나머지

예시

열의 별명

AS 열명

⚠️ 별명을 한글로 지정하는 경우 여러 가지로 오작동하는 경우가 많으므로 더블쿼드(MySQL에서는 백쿼트)로 둘러싸서 지정한다.

예시 1
price*quantity 식에 amount라는 별명 붙이기

예시 2
만약 WHERE 구의 조건식을 지정하고 싶다면?

❌❌❌

SELECT *,price*quantity AS amount FROM sample34 WHERE amount >=2000;

이렇게 지정하면 오류가 난다!
🤔 WHERE 구 -> SELECT 구 순서로 처리되기 때문!

🙆🏻‍♀️🙆🏻‍♀️🙆🏻‍♀️

SELECT *,price*quantity AS amount FROM sample34 WHERE price*quantity >=2000;

예시 3
ORDER BY 구는 SELECT 구 다음으로 처리되기 때문에 별명을 사용할 수 있다.

SELECT *,price*quantity AS amount FROM sample34 ORDER BY amount DESC;

문자열 연산

문자열 결합

문자열 결합이란 문자열 데이터를 결합하는 연산이다.

⚠️ 문자열 결합이지만 수치 데이터도 문제없이 연산할 수 있다. 단, 문자열로 결합한 결과는 문자열형이 된다.

SUBSTRING 함수

SUBSTRING 함수는 문자열의 일부분을 계산해서 반환해준다.

SUBSTRING('20140125001',1,4) -> '2014'

TRIM 함수

TRIM 함수는 문자열의 앞뒤로 여분의 스페이스가 있을 경우 이를 제거해주는 함수이다.
TRIM('ABC ') -> 'ABC'

CHARACTER_LENGTH 함수

CHARACTER_LENGTH 함수는 문자열의 길이를 계산해 수치로 반환해준다.

CASE

CASE WHEN 조건식1 THEN1
	[WHEN 조건식2 THEN2 ...]
	[ELSE3]
END
  • WHEN 절: 참과 거짓을 반환하는 조건식을 기술
  • THEN 절 : 조건이 참이 되는 경우 THEN 절에 기술한 식이 처리
  • ELSE 절: 그 어떤 조건식도 만족하지 못한 경우 채택

예시

⚠️ NULL 값을 반환하는 경우라면 COALESCE 함수를 사용하면 더 쉽게 변환할 수 있다.

SELECT a,COALESCE(a,0) FROM sample37;
profile
내일의 나는 오늘보다 더 나아지기를 :D

0개의 댓글