MariaDB + SQL I

eunheelog·2024년 5월 16일
0

Beyond SW

목록 보기
3/15

MariaDB 설치


  • MariaDB 홈페이지 접속 후 다운로드 (https://mariadb.org/)
  • 설치 완료 후 MariaDB가 설치된 경로를 PATH 환경 변수에 등록 !
  • 환경 변수 등록 후 명령어로 제대로 설치됐는지 확인 가능
    mariadb -V
    mariadb --version

리눅스에서 env 입력 시 환경변수 확인 가능

실습 환경 구축

  • https://dev.mysql.com/doc/index-other.html 에서 Git 저장소에 있는 zip 파일 다운로드
  • 다운로드한 파일의 압축을 풀고 해당 폴더에서 명령 프롬프트를 열고 아래의 명령어 실행
    mriadb -u root -p

    → 설치 시 설정한 비밀번호(1234) 입력
    MariaDB [(none)]> source employees.sql;
    → 데이터베이스 생성
    show databases;

    → 데이터베이스 조회
    show tables;

    → 현재 선택된 데이터베이스의 테이블 조회

MariaDB 설치 시 기본적으로 설치되는 HeidiSQL 사용할 것 !

  • 세션 생성
    - 호스트 IP (127.0.0.1) 는 자신의 PC IP 임
    • 데이터베이스를 선택하면 그 데이터베이스만 볼 수 있음 !
  • USE employees; 하면 체크 표시가 뜸

* 눈 모양 : view

  • 테이블 생성
    CREATE DATABASE 이름

    테이블이 생기지 않는다면 새로고침 ! ⛧

사용자 관련 명령어

  • 사용자 생성
    CREATE USER `beyond`@`%` IDENTIFIED BY 'beyond';
    → @에 IP 적어서 제한을 줄 수도 있음, IDENTIFIED BY 뒤에 패스워드 입력 !
  • 사용자 확인
    SELECT Host, User, Password FROM mysql.user;

    → 7번째 줄에 앞에서 생성한 beyond 를 확인할 수 있음
  • 권한 부여
    GRANT ALL PRIVILEGES ON employees.* TO `beyond`@`%`; → beyond 사용자에게 employees 데이터베이스에 대한 모든 권한 부여
    ⛧ 일부 권한을 주고 싶다면 ALL 대신 SELECT 로 바꾸면 됨 ⛧ GRANT ALL PRIVILEGES ON testDB.* TO `beyond`@`%`;
    → beyond 사용자에게 testDB 데이터베이스에 대한 모든 권한 부여
  • 권한 확인
    SHOW GRANTS FOR `beyond`@`%`;
  • 권한 적용
    FLUSH PRIVILEGES;

SQL 기본


[ 데이터 조회 ]

1. SELECT

  • 원하는 정보를 추출하는 구문
    -- 모든 열 조회 시 열 이름 대신 '*' 기호 사용 가능
    SELECT emp_no, name, address
    FROM employees;

    → 앞에 데이터베이스를 입력하지 않고 테이블만 적을 경우 에러 발생
    +) 다른 테이블의 테이블을 조회하는 구문

⛧ 식별자는 대소문자 구분 X

  • AS 를 사용해 조회된 열 이름에 별칭 지정 가능(공백, 특수문자가 있을 때는 따옴표로 묶어주기 !)

    → ① 따옴표 안에 별칭 지정 가능
    → ② 따옴표 생략 가능
    → ③ AS 도 생략 가능

  • DISTINCT 를 사용해 중복된 값을 한 번만 표시

    ⛧ DISTINCT 는 SELECT 절에서 한 번만 기술 가능

    → 여러번 기술한 경우 에러 발생

  • LIMIT 를 사용해 출력의 개수를 제한

    → 5개만 조회됨

  • 급여로 직원의 연봉 구하기(새로운 열 생성)

  • 보너스가 포함된 연봉 구하기

    NULL 포함된 연산 결과는 NULL !

  • 보너스가 포함된 연봉 구하기(NULL 제외하고 계산)

    IFNULL 은 첫번째 값이 NULL 인 경우 두번째 값을 반환

2. WHERE

WHERE 조건에 쓰이는 게 SELECT 절에 없어도 가능 !
→ FROM > WHERE > SELECT 순으로 실행되기 때문

  • 두 값을 비교하는 비교 연산자(=, !=, >, <, >=, <=) 사용
    ex) 아이디가 KBS인 회원의 아이디, 이름, 키 조회

    → 대소문자 구분 X

    ex) 키가 174 이상인 회원의 모든 데이터 조회

    ex) employee 테이블에서 연봉이 5000만원 이상인 사원의 직원명, 급여, 연봉 조회

    → 연산 결과를 조건으로 사용 가능 !
    → 오름차순 정렬

  • 여러 개의 조건 결과를 하나의 논리 결과로 만들어주는 논리 연산자 (NOT, AND, OR) 사용
    ex) 휴대폰이 없는 회원의 모든 데이터 조회

    → NULL 값은 IS [NOT] NULL 연산자로 비교해야 함 !

    ex) 키가 170 이상 182 이하인 회원의 모든 데이터 조회

    → 둘 다 만족해야함 !

    ex) 가입일이 2008-01-01 이후에서 2010-12-31 이전인 회원의 모든 데이터 조회

    ex) employee 테이블에서 부서 코드가 D5 이거나 급여가 500만원 이상인 직원들의 직원명, 부서 코드, 급여 조회

  • 특정 값이 지정한 범위에 포함되는지 확인하는 BETWEEN AND 연산자 사용
    ex) 가입일이 2008-01-01 이후에서 2010-12-31 이전인 회원의 모든 데이터 조회

    ex) 키가 170 이상 182 이하인 회원의 모든 데이터 조회

    ex) 키가 170 이상 182 이하가 아닌 회원의 모든 데이터 조회

    → NOT 은 BETWEEN 앞에 써도 되지만 height 앞에 써도 됨 !

  • 특정 값과 일치하는 값이 목록에 있는지 확인하는 IN 연산자 사용
    ex) IN 연산자를 OR 연산자로 바꿔 쓰기
    WHERE hobby IN ('축구', '농구', '야구');
    = WHERE hobby = '축구' OR hobby = '농구' OR hobby = '야구';
    → OR 로 바꿔서 쓸 수 있지만 길어짐

    ex) 주소가 경남, 경북, 전남인 회원의 이름, 주소 조회

    → OR로 바꾸면 WHERE addr = '경남' OR addr = '경북', '전남';

    ex) 주소가 경남, 경북, 전남이 아닌 회원의 이름, 주소 조회

    → ① != 연산자 사용
    → ② NOT IN 연산자 사용

  • 문자열 검색할 때는 LIKE 연산자 사용
    ex) 성이 김씨인 회원의 모든 데이터 조회

    ex) 성이 김씨가 아닌 회원의 모든 데이터 조회

    NOT 연산자 사용

    ex) 이름이 수로 끝나는 회원의 모든 데이터 조회

    → % 나 _ 사용 !

⛧ WHERE 절에서 별칭 사용 불가 !!

[ 실습 문제 ]

1. EMPLOYEE 테이블에서 급여가 350만원 이상 600만원 이하를 받는 직원의 사번, 직원명, 부서 코드, 급여 조회 (BETWEEN AND)

2. EMPLOYEE 테이블에서 입사일이 '1990-01-01' ~ '2001-01-01'인 사원의 모든 컬럼 조회

3. EMPLOYEE 테이블에서 전화번호 처음 3자리가 010이 아닌 사원의 이름, 전화번호 조회

4. EMPLOYEE 테이블에서 이름 중에 '하'가 포함된 사원의 직원명, 주민번호, 부서 코드 조회

5. employee 테이블에서 이메일 중 _ 앞 글자가 3자리인 사원의 사번, 직원명, 이메일 조회

![](https://velog.velcdn.com/images/eunhee/post/d79b7450-89f6-4fac-be93-a1ef62d60ec9/image.png)

3. ORDER BY

  • DEFAULT 값은 ASC(오름차순) !
    ex) addr 로 오름차순 정렬(단, addr이 일치할 경우 mDate 기준 내림차순 정렬)

    ex) 가입일이 가장 늦은 회원 3명의 모든 데이터 조회

    ex) usertbl 테이블에서 name으로 내림차순 정렬(별칭 포함)

    ⛧ ORDER BY 에서 별칭 사용 가능
    → 이때 백틱이 아니라 따옴표 써서 왜 안되지?? 했는데 알고보니 백틱이었다,, 주의하기 !
profile
⛧1일 1알고리즘⛧

0개의 댓글