오늘은 MariaDB에 관한 공부이다.
어제 부처님 오신 날이라고 쉬고 왔더니 사실 살짝 힘들다 ㅎ-ㅎ ..
학교 다닐 땐 어떻게 다녔지..라고 생각하면서 아침에 일어나면서 !!!
오늘도 수업 화이팅 8ㅁ8
MariaDB
DBMS (Database MAnagement System)
* 데이터베이스를 관리해 주는 시스템 또는 소프트웨어
( * 데이터베이스는 대용량의 데이터 집합을 체계적으로 구성해 놓은 것)
DBMS 마다 차이점은 있겠지만
어느 정도는 SQL 문을 통해서 서로 사용이 가능하다.
DBMS의 특징
데이터 무결성
: DB 안의 데이터는 어떤 경로를 통해 들어왔던 데이터에 오류가 있어서는 안 된다.
데이터 독립성
: DB의 크기를 변경하거나 파일의 저장소를 변경하더라도, 기존에 작성된 응용 프로그램은 영향을 받지 않아야 한다.
보안
: DB의 데이터는 접근이 허가된 사용자만 접근할 수 있어야 한다.
데이터 중복의 최소화
: 동일한 데이터가 여러 개 중복되어 저장되는 것을 방지한다.
응용 프로그램의 유지 보수가 쉬워짐
데이터의 안전성 향상
-
RDBMS (Relational DataBase Management System, 관계형 DBMS)
DBMS 유형은 크게 계층형, 망형, 관계형, 객체지향형, 객체 관계형 DBMS 등으로 분류된다.
현재 사용되는 DBMS 중 RDBMS가 가장 많은 부분을 차지하며 MariaDB도 관계형 RDBMS이다.
RDBMS에서 모든 데이터를 표 형태의 테이블(Table)에 저장하고 테이블을 릴레이션(Relation), 엔티티(Entitiy)라고 부르기도 한다.
-
SQL (Structed Query Language, 구조적 질의 언어)
사람과 DBMS가 소통하기 위한 언어, DBMS에 데이터를 구축하고 관리하고 활용하기 위해서 사용된다.
모든 DBMS에서 SQL 문을 사용하지만, 완벽하게 동일하지는 않다는 것에 주의해야 한다. (표준 SQL을 지키면서도 자신의 제품에 특화된 SQL 사용)
SQL은 크게 DML(Data Manipulation Language), DDL(Data Definition Language), DCL(Data Control Language)로 분류한다.
DML: 데이터를 조작하는 데 사용되는 언어
DDL: DB와 테이블 등의 데이터베이스 개체를 정의하는 데 사용되는 언어
DCL: 사용자에게 권한을 부여하거나 회수하는 데 사용되는 언어
-
MariaDB
MariaDB 사에서 제작한 RDBMS 소프트웨어로 오픈 소스로 제공된다.
MariaDB는 어떤 환경에서도 제한 없이 사용할 수 있으며 MariaDB는 MySQL과 호환성을 대부분 유지하므로 MySQL을 사용하던 환경에서도 MariaDB로 문제없이 변경된다.
MariaDB 설치
MariaDB 공식 홈페이지 ( https://mariadb.org/) 접속
운영체제에 맞게 선택해서 다운로드를 해준다.
* 다운로드하는 동안 설명해 주신 간단한 서버와 클라이언트 설명
클라이언트는 무언가 요청하는 쪽, 서버는 요청을 받아서 응답하는 소프트웨어나 하드웨어를 말한다.
MariaDB는 클라이언트에게 요청을 받아서 작업을 수행하니 서버라고 표현을 쓰기도 한다.
다시 설치 과정으로 돌아와서!
설치 도중에 확인해야 할 것은 root 계정의 패스워드를 정해주어야 한다.
root 계정의 패스워드는 복잡하게 해주는 게 좋다고 한다
패스워드 바로 밑에 체크 박스는 원격으로 루트 계정을 접속할 수 있게 할 것이냐에 대한 질문인데, 실무에서는 하지 않는 게 좋다고 한다.
우리는 단순 실습용이기 때문에 체크!
그리고 바로 밑에 UTF8 표준으로 캐릭터셋을 만들어주지 않으면 가끔 한글이 깨지는 경우가 있어서 이것도 체크해 주었다.
나머지는 그냥 기본 설정으로 설치해 주었다.
설치 완료 후 MariaDB가 설치된 경로를 PATH 환경 변수에 등록해야 한다.
윈도우에서 cmd 창을 연다.
실행할 수 있는 프로그램, 또는 배치 파일이 아니라고 이야기한다.
지정해 준 홈 디렉토리 안에 지정해줘야 하는데, 저 사용자 디렉토리에는 존재하지 않기 때문이다.
그렇다면 PATH 환경 변수를 등록해보자.
시스템 환경 변수 편집 설정에 들어간다.
고급에 들어가면 아래 부분에 환경 변수라는 부분이 뜬다.
아래 시스템 변수를 살펴보면 Path라는 이름으로 된 변수를 발견할 수 있다.
편집을 위해 더블 클릭!
이후, MariaDB가 설치된 파일 내로 들어가서 bin 파일까지의 경로를 복사해서
아까 환경 변수 편집 부분에 추가해 준다.
이후 확인을 눌러주고 cmd 창을 새로 열어준다.
아까와는 달리 MariaDB의 버전을 확인할 수 있었다.
*PATH에 환경 변수를 등록했기 때문이다.
* PATH 환경 변수
명령어를 가지고 프로그램을 실행시키려면 기본적으로 사용하고 있는 디렉토리 안에 프로그램이 있어야 한다.
MariaDB라는 프로그램이 홈 디렉토리 안에 존재하지 않았고, PATH 라는 환경 변수를 등록했다.
홈 디렉토리 안에서 MariaDB가 존재하는지 본다. 만약 프로그램이 없다면 앞에서 지정한 PATH 환경 변수의 경로를 확인한다.
지정한 환경 변수 중에 실행하려고 하는 명령이 존재하는지를 확인하는 것이다.
아까 우리가 경로를 지정해주었기 때문에 홈 디렉토리에 MariaDB의 명령어가 없어도 실행할 수 있었다.
즉, 홈 디렉토리에 해당 명령어가 존재하는지 확인하고, 없다면 환경 변수에 등록한 경로를 통해서
다시 한번 확인하여 실행하기 위해서 환경 변수를 등록한다.
이렇게 버전 정보까지 확인이 되면 설치가 잘 되었다고 할 수 있다.
-
실습 환경 구축
공식 샘플 데이터베이스 사이트 (https://dev.mysql.com/doc/index-other.html)에 접속 후 샘플 파일 하나를 다운로드하였다.
MySQL :: Other MySQL Documentation
Other MySQL Documentation This page provides additional documentation. There's even more available on these extra pages: MySQL Server Doxygen Documentation Title HTML Online MySQL Server (latest version) View Expert Guides Language Title Version HTML Onlin
dev.mysql.com
GitHub를 통해 다운로드하기 위해 이 샘플 파일을 선택하였다.
설치된 파일 빈 부분에 우클릭 후 명령 프롬프트 창으로 열기를 진행하면
알아서 cmd 창이 열리는데, 나는 폴더에 그게 없어서 직접 폴더를 이동해서 실행해 주었다.
mariadb -u root -p
위 코드를 이용해서 MariaDB의 루트 계정으로 접속해 주었다.
맨 마지막 줄에 MariaDB [<none>]이라고 뜨는 이유는 데이터베이스가 선택되어 있지 않기 때문이다.
그리고 다운로드한 폴더에서 .sql 확장자를 가진 파일들이 있는데,
이것들을 열어보겠다.
source employees.sql;
위 코드로 실행하였고 반드시 마지막에 콜론을 붙여주어야 한다.
실행하면
위와 같이 테이블을 생성한다.
employees.sql이라는 샘플 데이터 베이스를 선택하여서
아까 none 부분도 employees로 바뀐 것을 알 수 있다.
이 샘플 파일에 어떠한 내용들이 저장되어있는지 궁금해서
show databases;
위와 같은 명령어를 실행했고,
어떠한 테이블이 존재하는지 궁금해서
show tables;
위와 같은 결과로 어떠한 테이블들이 생성되어 있는지 확인할 수 있었다.
그렇다면 우리는 매번 이렇게 cmd 창에서 작업을 실행해야 할까?
그것은 아니다.
다른 툴을 이용해서 작업을 진행할 것이다.
MariaDB를 설치하면 함께 설치되는 툴인 HeidiSQL을 사용하겠다.
HeidiSQL을 열여서 새 세션을 만들어 보자.
왼쪽 아래에 있는 신규 버튼을 클릭해서 새 세션을 만든다.
오른쪽의 호스트명 / IP는 내 PC의 IP를 의미한다.
암호와 포트 번호를 올바르게 입력해 주고,
아래 데이터베이스 부분에서 .sql 파일 중 선택하면 그 파일만 볼 수 있다.
하지만 우리는 root 계정이고 여러 실습을 진행할 것이기 때문에 따로 설치는 해주지 않았다.
저장 후 열기를 진행하니 새로운 창을 볼 수 있었다!
왼쪽 부분은 데이터베이스의 목록들이다.
이 데이터베이스를 선택하려면 쿼리를 입력해 주어야 한다.
쿼리 부분을 선택해서
USE employees; -- 데이터 베이스 선택
라고 쿼리를 입력해보자!
아이콘 중에서 사람 눈처럼 생긴 것이 '뷰'라고 하는 개체이고,
표로 생긴 게 테이블이다.
각각의 뷰와 테이블을 선택하면 새로운 창으로 자세히 볼 수 있다.
또한, 데이터 탭에 들어가면 해당 테이블에 저장된 데이터들을 확인할 수 있다.
테이블을 볼 때 컬럼 중 하나에 노란색 키가 있는 컬럼을 볼 수 있는데,
이것을 기본 키 컬럼이라고 부른다.
행을 식별하기 위한 컬럼이다라고 보면 된다.
해당 컬럼의 값들은 절대 중복되면 안 되고, 값이 없어서도 안된다.
또한, 해당 컬럼마다 글자의 색이 다른데,
이것은 저장되는 데이터 타입의 유형이 다르기 때문이다.
위와 같이 데이터 유형마다 색이 다른 것을 확인할 수 있었다.
(나중에 좀 더 자세히 다루겠다.)
이번엔 root 계정이 아닌 일반 사용자를 생성하고 사용자에게 적합한 권한을 부여하는 방법을 알아보자!
계정 생성은 관리자 계정에서 진행해주어야 한다.
-- 데이터베이스 생성
CREATE DATABASE testdb;
위와 같은 쿼리문으로 데이터베이스를 생성하면
왼쪽 아래에 testdb라는 이름의 데이터베이스가 새로 생긴 것을 확인할 수 있다.
testdb를 열면 아무런 개체를 만들지 않아서 아무것도 뜨지 않는다.
실습을 위해서 강사님이 공유해 주신 쿼리로 임의로 테이블을 만들었다.
(자세한 건 뒤에서 배우겠다.)
-- 사용자 생성
CREATE USER `beyond`@`%` IDENTIFIED BY 'beyond';
다음으로 사용자를 생성해보자.
코드 속
@ 는
% 는 모든 곳에서 접속이 가능하다는 의미이다.
-- 사용자 확인
SELECT Host, User, Password FROM mysql.user;
사용자가 제대로 생성되었는지 확인을 위한 쿼리문이다.
사용자 확인 쿼리문을 실행하면 아래와 같이 표가 뜨고
beyond라는 이름의 새 사용자가 생성된 것을 확인할 수 있다.
-
권한 부여
-- beyond 사용자에 employees 데이터베이스에 대해 모든 권한을 부여
GRANT ALL PRIVILEGES ON employees.* TO `beyond`@`%`;
-- beyond 사용자에 testDB 데이터베이스에 대해 모든 권한을 부여
GRANT ALL PRIVILEGES ON testDB.* TO `beyond`@`%`;
위 쿼리문을 이용해서 사용자 계정에 권한을 부여해주었다.
데이터베이스 이름 . * 는 데이터베이스 밑의 모든 개체들에게 모든 권한을 부여하겠다는 의미이다.
실제로는 모든 권한을 부여하는 것은 좋지 않지만,
실습을 위해서 진행하였다.
그렇다면 권한이 잘 부여됐는지 확인해보자.
-- 권한 확인
SHOW GRANTS FOR `beyond`@`%`;
위 쿼리문을 사용해서 확인할 수 있다.
권한을 확인만 한다고 되는 것이 아니라
권한 적용 쿼리문을 함께 작성해주어야 한다.
-- 권한 적용
FLUSH PRIVILEGES;
이러면 권한 부여는 끝이다.
이후 생성한 계정으로 접속해보자.
왼쪽 위에서 세션 관리자를 열어 아까와 동일하게 신규 세션을 만들어야 한다.
설정 후 열기를 클릭하면
위와 같이 다른 사용자의 세션으로 접속이 시작되었다고 뜨며,
왼쪽 부분에도 beyond 계정에게는 앞서 설정해 준 데이터베이스 두 개만 확인할 수 있다.
SQL 기본
데이터 조회
SELECT 문
SELECT
테이블에서 원하는 정보를 추출한다.
-- 모든 열 조회 시 열 이름 대신 '*' 기호 사용 가능
SELECT 열 이름
FROM 테이블 이름;
AS
열 이름에 별칭 지정
생략도 가능, 열 이름 작성 시 '' 생략 가능. 단, 공백 포함 시 필요
SELECT 열 이름 AS '열 이름', 별칭
FROM 테이블 이름;
DISTINCT
중복된 값을 한 번만 표시
SELECT DISTINCT 열 이름
FROM 테이블 이름;
LIMIT
출력의 개수 제한
SELECT 열 이름
FROM 테이블이름
LIMIT 개수;
위 쿼리문들을 통한 실습을 진행해보자!
DESC 문을 사용해서 오른쪽 테이블 단순 클릭을 이용해 다른 창을 띄운 구조 확인이 아니라,
바로 아래에서 확인도 가능하다!
기본 쿼리문 말고도 테이블을 선택할 때
위처럼 데이터베이스 이름.테이블 이름으로 선택도 가능하다.
데이터베이스 이름 이후 . 을 붙였을 때 Ctrl + 스페이스 입력 시
데이터베이스 내에 있는 테이블 선택을 위한 자동 완성이 뜨기도 한다.
여러 가지 열을 지정할 때에는 콤마를 통해서 나열하면 된다.
위 코드에서 NAME이 대문자가 된 이유는 키워드와 중복되기 때문인데,
별로 상관 안 써도 된다고 한다.
만약 열의 이름을 모르는 경우에는
모든 내용을 출력해서 확인하고 열 이름을 작성하면 된다.
DBMS 마다 다르긴 한데 MariaDB에서는 별칭을 입력할 때
큰 따옴표도 가능하고, 작은따옴표도 가능하며 1 옆에 있는 ` (무슨 기호지?) 로도 가능하다고 한다!
또한, 생략도 가능하지만 생략 시에는 단어 사이에 공백이 있거나 특수문자가 있어서는 안 된다.
20번째 줄처럼 AS 쿼리문도 생략이 가능하다.
이전 결과와 다르게 내가 정한 별칭으로 테이블이 보이는 것을 확인할 수 있다.
DISTINCT 문을 사용해 중복된 값들이 제거되고 하나씩만 나오는 것을 확인할 수 있다.
DISTINCT 절은 SELECT 절에서 한 번만 쓸 수 있다.
SELECT DISTINCT addr, DISTINCT mobile1
FROM usertbl;
위와 같은 방식으로 DISTINCT를 2번씩 사용할 수 없다는 의미이다.
그럼,
SELECT DISTINCT addr, mobile1
FROM usertbl; 로 작성해 보자.
하지만, 앞에서 한 실습과 다르게 같은 것들이 중복으로 나오는 것을 알 수 있다.
그 이유는 중복을 제거할 때에는 행 단위로 보기 때문이다.
행에 있는 값들이 모두 같아야 제거가 된다.
모든 데이터에서 LIMIT로 제한을 두게 되면
설정한 개수의 데이터들만 보여준다.
여기서 조금 더 활용해보자면
ORDER BY는 정렬을 해주는 쿼리문이고,
여기서 정렬의 기준은 행이 된다.
ORDER BY 뒤에 기준이 될 행 이름을 적어주고,
별도의 설정을 안 해주면 오름차순으로 정렬한다.
이번엔 직원들의 직원명, 급여, 직원의 연봉(급여*12) 구하는 실습을 진행해보자.
여기서 사칙연산은 덧셈은 +, 뺄셈은 -, 곱셈은 *, 나눗셈은 / 기호를 사용한다.
그리고 아래에 뜨는 결과는 result set이라고 부른다.
(테이블이 아니었음;;)
연봉 컬럼은 원래 테이블에는 존재하지 않지만 생겼다.
그렇다면 보너스가 포함된 연봉을 구해보자!
그런데 NULL이라고 출력되어 나오는 사원들이 있다.
왜냐하면 bonus 부분에서 NULL 값이 존재하는 직원들이기 때문이다.
산술연산 중에 NULL 값이 존재하면 결과값은 무조건 NULL이다.
없다고 0으로 계산되는 것이 아님!!!!!!
그럼 아예 값을 못 구하나?
그건 아니다. 뒤에서 NULL 값을 처리해 주는 함수를 사용하면 계산할 수 있다.
(salary + (salary * IFNULL(bonus, 0))) * 12
보너스 부분에 IFNULL 함수를 사용하면 된다.
bonus에 있는 값이 NULL 값이라면, 0으로 반환한다 라는 의미이다.
그럼 아래와 같이 NULL 값이 0으로 변경 돼서 잘 출력이 되는 것을 확인할 수 있다.
-
WHERE 절
테이블에서 다양한 조건을 설정하여 데이터를 검색할 때 사용
비교 연산자 ( =, !=, >, <, >=, <= )
두 개의 값을 비교한다.
= 의 경우 대입이 아니라 '같을 때'라는 의미이다.
논리 연산자 (NOT, AND, OR)
여러 개의 조건 결과를 하나의 논리 결과(참, 거짓)로 만들어준다.
간단한 실습을 진행해보자!
나 혼자 해보려고 하다가 WHERE 절을 SELECT 절 다음에 넣었더니 에러가 떴다.
첨엔 뭐가 문제지.. 하다가 강사님이 WHERE 절은 FROM 절 다음에 넣어줘야 한다는 얘기를 듣고 급히 수정했다. (머쓱;)
KBS를 소문자로 진행했을 때도 똑같은 결과를 내는 것을 알아냈다.
반대로 아닌 사람을 찾고 싶다? 그럼 연산자를 != 로 수정해 주면 된다.
아래와 같이 WHERE 절에 만족하는 조건의 SELECT 절에 없어도
WHERE 절에 만족하면 출력된다.
(실행 순서 때문에 가능하다. FROM 절이 먼저 실행되기 때문)
만약 WHERE 절에 해당하는 값이 존재하지 않는다면(= NULL 값이라면) 어떡할까?
SELECT *
FROM usertbl
WHERE mobile1 = NULL;
위와 같이 작성했더니 아무것도 뜨지 않았다.
SELECT *
FROM usertbl
WHERE mobile1 IS NULL;
IS NULL 또는 IS NOT NULL 연산자를 사용해주어야 한다.
NULL 값은 비어있는 값이기 때문에 비교 연산자를 통해서 비교할 수가 없다.
다음은 키가 174 이상인 회원을 조회해보자!
위와 같은 비교 연산자를 사용하면 출력이 가능하다.
만약 여기에
ORDER BY height; 를 해주면
height를 기준으로 올림 차순으로 정렬해 준다.
또한, 숫자값뿐만 아니라 연산 결과를 가지고도 지정해 줄 수 있다.
employee 테이블에서 연봉이 5천만 원 이상인 사원의 직원명, 급여, 연봉을 조회해보자.
위와 같이 결과를 낼 수 있다.
근데 이거 할 때 내가 숫자 5천만을 적을 때 보기 불편해서
습관적으로 50,000,000를 쳤더니 에러가 떴다
콤마를 기준으로 인자로 인식한 것 같다 하하 ^^;
날짜 데이터도 비교 연산이 가능하다.
예시로 가입일이 2010-10-10 이전인 회원의 모든 데이터를 조회해보자.
SELECT *
FROM usertbl
WHERE mDate = 2010-10-10;
이라고 했을 때 아무것도 뜨지 않았다.
이유는 숫자로 인식해서 2010 - 10 - 10 = 1990 값으로 인식했기 때문이다.
날짜 데이터를 인식할 때에는 날짜 끝에 작은따옴표를 이용해서 한다.
AND 연산자를 이용한 실습을 진행해보자!
SELECT *
FROM usertbl
WHERE 170 <= height <= 182;
위 코드를 진행하였을 때 제대로 된 연산 없이 모든 값이 다 출력되었다.
이유가 뭘까?
왜냐면 왼쪽에서 오른쪽으로 연산을 진행하는데,
첫 번째로 170 <= height 인 경우는 True,
True <= 182;
? 말이 안 된다. 그래서 결과가 나오지 않았다.
SELECT *
FROM usertbl
WHERE height >= 170 AND height <= 182;
로 코드를 변경해서 실행한다면 올바르게 결과가 나온다.
OR을 사용한 실습을 진행해보자!
employee 테이블에서 부서 코드가 D5이거나 또는 급여가 5백만 원 이상인 직원들의 직원명, 부서 코드, 급여를 조회한다.
두 조건을 모두 만족하는 것이 아니라
하나라도 만족하는 직원들의 정보를 볼 수 있었다.
-
BETWEEN AND 연산자
특정 값이 지정한 범위에 포함되는지 확인한다.
A와 B에는 조건을 넣어준다.
WHERE 행 이름 BETWEEN A AND B
IN 연산자
특정 값과 일치하는 값이 목록에 있는지 확인한다.
WHERE 행 이름 IN ('값1', '값2', ...);
LIKE 연산자
문자열 검색
WHERE 행 이름 LIKE '문자열';
문자열 끝에 '문자열%'를 붙이면 0글자 이상을 의미한다.
문자열 사이에 '문_열'로 _ 가 오면 1글자를 의미한다. (즉, 문, 열만 일치하는 단어들 다 나옴)
이 연산자들에 관해 실습을 진행해보자!
아까 비교 연산자를 사용했던 예시를 가져와서 BETWEEN AND로 표현해보자!
(귀찮아서 ORDER BY는 진행하지 않았다. 그리고 수정하다 발견했는데 주석에 오타가 있네.. 조합 > 조회)
코드는 다르지만 아까의 실행 결과와 같은 것을 알 수 있었다.
그렇다면 반대 값들은 어떻게 구할 수 있을까?
간단하다.
BETWEEN 앞에 NOT만 붙여주면 된다.
또는 height 앞에 NOT을 붙여줘도 된다.
편한 대로 NOT BETWEEN으로 사용하거나
행 이름 앞에 NOT을 붙여 사용한다.
다음은 IN 연산자 사용에 대한 예시이다.
간단하다!
만약 OR 연산자를 쓰고 싶다면
WHERE addr = '경남' OR addr = '경북' OR addr = '전남';
위와 같이 사용할 수 있다.
다만, OR 연산자의 단점은 조건이 늘어날수록 코드가 길어진다는 단점이 있다
만약, 반대로 경남, 전북, 전남이 아닌 회원의 이름과 주소를 조회하고 싶다면?
SELECT NAME, addr
FROM usertbl
WHERE addr NOT IN ('경남', '전북', '경북');
위와 같이 단순히 IN 연산자 앞에 NOT만 붙여주면 된다.
또는, 열 이름 앞에 NOT을 써도 무관하다.
다음으로는 LIKE 연산자를 사용해보자!
성이 김 씨인 회원의 모든 데이터를 조회해보자.
김 씨만 찾는 것이니 이름은 몇 글자인지 상관이 없으므로
0글자 이상을 의미하는 % 를 붙여준다.
반대로 김 씨가 아닌 회원의 데이터를 조회하려면
마찬가지로 NOT 연산자를 추가해주면 된다.
SELECT *
FROM usertbl
WHERE NAME NOT LIKE '김%';
LIKE 연산자 앞에 NOT을 붙여도 되고,
열 이름 앞에 NOT 을 붙여도 역시 상관없다.
이번엔 언더바를 사용해보자!
언더바 대신 '%수' 로도 가능하다.
상황에 맞게 둘 중 하나를 골라 쓰면 될 것 같다.
강사님이 주신 실습 문제 4가지!
1. employee 테이블에서 급여가 350만 원 이상 600만 원 이하를 받는 직원의 사번, 직원명, 부서 코드, 급여를 조회 (BETWEEN AND 사용)
2번 문제
2. EMPLOYEE 테이블에서 입사일이 '1990-01-01' ~ '2001-01-01'인 사원의 모든 컬럼 조회
3번 문제
3. EMPLOYEE 테이블에서 전화번호 처음 3자리가 010이 아닌 사원의 이름, 전화번호 조회
4번 문제
4. EMPLOYEE 테이블에서 이름 중에 '하'가 포함된 사원의 직원명, 주민번호, 부서 코드 조회
이번엔 다른 실습 문제이다.
술술 잘 쓰다가 WHERE 절에서 조건을 줄 때 잠깐 멈칫했다.
조건 그대로 하기 위해서 언더바를 쓰려고 하니
문자로 보고 싶은데 문자로 인식이 안되었다.
그걸 해결하기 위해서는 아래와 같다.
역슬래시 \ 를 넣어주면 되는 부분이었다..
잠깐 고민해 봤으면 충분히 가능했을 거 같다.
이 역슬래시를 이스케이프 문자라고 한다.
아니면
WHERE email LIKE '___$_%' ESCAPE '$';
위 코드로 달러를 사용해도 된다.
-
ORDER BY
테이블에서 조회된 데이터를 정렬할 때 사용한다.
기본적으로 오름차순으로 정렬되고 내림차순으로 정렬하기 위해서는 DESC를 추가해야 한다.
여러 개의 열로 정렬할 경우 콤마로 구분해서 나열하면 된다.
ORDER BY 실습을 진행해보자!
내림차순으로 정렬할 때에 DESC는 내림 차순으로 보고 싶은 컬럼의 바로 뒤에 붙여주면 된다.
콤마를 기준으로 구분하기 때문에 addr은 DESC의 영향을 받지 않는다.
근데 사실 오름차순은 컬럼명 뒤에 ASC가 생략된 것이다.
이건 몰랐음 허허허
또, 강사님이 주신 실습 문제 2가지!
1번 문제
1. 가입일이 가장 늦은 회원 3명의 모든 데이터 조회
복잡하게 생각하지 않고 내림차순으로 정렬해서 상위 3명의 정보들만 출력하면 되는 문제였다!
2번 문제
2. usertbl 테이블에서 아이디, 이름, 가입일을 조회(별칭 포함) 단, name으로 내림차순 정렬
별칭까지 정해서 내림차순으로 정려 해주었다.
ORDER BY를 진행할 때 열 이름으로 해도 되지만
별칭 지정을 했을 경우 아래와 같이 해도 된다. (1 옆에 있는 특수문자임)
또는, 두 번째 코드와 같이 순번으로 작성해 줘도 된다. (다만, 이견 변경 될 수 있으니 비추천함)
ORDER BY `이름` DESC;
ORDER BY 2 DESC;
3일 차 수업 끝!
SQL문은 학교 다닐 때 수업에서 대충 알려주고 알아서 해! 이런 느낌이어서
혼자 야매로 배운 기억이 있었는데
정말 기본적인 것부터 차근차근 알려주셔서 너무 좋았다.
이상하게 오늘은 시간이 잘 갔는데
리눅스 공부할 때보다 훨씬 더 재밌어서 그런 거 같다 ㅎㅎㅎ..
'일일 정리' 카테고리의 다른 글
240521 MariaDB(4) - 조인/UNION 연산자/인라인 뷰 (0) | 2024.05.21 |
---|---|
240520 MariaDB(3) - 함수/조인/UNION 연산자 (0) | 2024.05.20 |
240517 MariaDB(2) - SQL/데이터 변경/데이터 형식/함수 (0) | 2024.05.17 |
240514 리눅스(2) - Vim/Vim 명령어/파일 접근 권한 (0) | 2024.05.15 |
240513 리눅스 (1) (수정중) (0) | 2024.05.15 |