[DB] sql

포키·2023년 5월 23일
0

국비과정

목록 보기
64/73

조인은 어떻게 이루어지는걸까?
가상테이블을 만드는 건가?


SQL

  • DB 표준 언어
  • DB는 명령프롬프트창으로 제어할 수 있지만

SQL - MySQL

특징

  • AUTO_INCREMENT : 자동으로 번호 발급해주는 기능 (MySQL에만 존재, 주키에만 사용 가능)

    Oracle에서는 sequence를 통해 번호 발급 가능

기본 정보

	-- (ctrl + f9) : 주석
    /* */	: 복수줄 주석
  • 필드이름, 타입(길이정보), 널값허용여부, 키설정, 기본값, extra

변수타입

  • int : 정수
  • char(길이) : 문자열 (고정형) - 데이터 변경시 유리
  • varchar(길이) : 문자열 (가변형) - 공간활용도 우수
  • decimal(전체자릿수, 소수자릿수) : 실수

char vs varchar
char는 선언한 크기를 그대로 사용하고, varchar는 실제 크기만큼만 사용한다.
저장공간 절약에는 varchar가 더 유리하지만, 데이터 변경이 잦을 경우 char가 더 유리하다
(크기 변화에 따라 빈 공간을 만들거나 줄이며 다른 데이터에 영향을 주기 때문)

decimal 사용법
decimal은 값을 (전체자릿수-소수자릿수) 길이의 정수부와 (소수자릿수) 길이의 소수부로 저장한다.
이때 소수부가 자릿수를 초과하면 반올림하여 길이를 맞춘다 (정수부는 x)

종류

  • DML - 데이터 조작 -> INSERT, SELECT, DELETE, UPDATE
  • DCL - 데이터 제어 -> COMMIT, ROLLBACK, GRANT, REVOKE
  • DDL - 데이터 정의 -> CREATE, DROP, ALTER

DDL

CREATE

  CREATE TABLE a_first(
      num 			INT	 			PRIMARY KEY,
      my_value1 	CHAR(10)		NOT NULL,
      my_value2		VARCHAR(10),
      my_value3		DECIMAL(5,2)
  );
  • DESC a_first; : 테이블 구조(schema) 확인

DROP

	DROP TABLE a_first;

DML

INSERT

	INSERT INTO a_first (num, my_value1, my_value2, my_value3) 
    VALUES 
    (1, 'first', 'choonsik', 1.11), 
    (2, 'second', 'con', 3.14), 
    (3, 'third', 'choonsik', 5.29), 
    (4, 'fourth', 'choonsik', 7.77);
  • SELECT * FROM a_first : 전체 레코드 확인

DELETE

  -- SELECT * FROM a_first WHERE num = 2;
  DELETE FROM a_first WHERE num = 2;
  • 사용하기 전에 꼭 select로 확인하기!!

UPDATE

  -- 수정
  -- SELECT * FROM a_first WHERE num = 4;
  UPDATE a_first SET my_value3 = 15.0 WHERE num = 4;
  UPDATE a_first SET my_value3 = 10.04, my_value1 = 'a' WHERE num = 1;
  UPDATE a_first SET my_value1 = 'b', my_value3 = 9.87 WHERE num = 3;
  UPDATE a_first SET my_value1 = 'c', my_value3 = 6.66 WHERE num = 4;
  • 사용하기 전에 꼭 select로 확인하기!!

조건

WHERE

	SELECT * FROM a_first WHERE my_value1 <> 'f';
	SELECT * FROM a_first WHERE NOT my_value1 = 'f';

키워드

DISTINCT

  • 중복 제거

LIMIT

	SELECT * FROM students LIMIT 3;
    SELECT * FROM students LIMIT 0, 3;
  • MySQL에만 존재 - 비슷한 건 있음
  • LIMIT startNum, returnNum : startNum부터 (0이면 1번째부터) returnNum만큼 데이터 반환

startNum, returnNum 구하기

	int startNum = (pageNum - 1) * perPage
    int returnNum = perPage;
  • 이전 페이지의 마지막 번호부터 시작한다고 생각하면 될듯

연산자

	<
    <=
    >
    >=
	=
    <>
    IS NULL
    IS NOT NULL
    OR
    AND
    BETWEEN
    LIKE

와일드카드

	% : 0~무한대
    _ : 1글자

MySQL in 이클립스

예제

-- Quiz1
-- 제조업체(vend_id)가 "DLL01"이거나 "BRS01"인 제품의 이름과 가격(prod_name, prod_price)을 이름 순으로 정렬하여 가져오시오.
SELECT prod_name, prod_price FROM products WHERE vend_id = 'DLL01' OR cend_id = 'BRS01' ORDER BY prod_name;
SELECT prod_name, prod_price FROM products WHERE vend_id IN ('DLL01', 'BRS01') ORDER BY prod_name;

-- Quiz2
-- 가격(prod_price)이 5 ~ 10인 제품의 가격과 이름(prod_name)을 가져오시오.
SELECT prod_price, prod_name FROM products WHERE prod_price >= 5 AND prod_price <= 10;
SELECT prod_price, prod_name FROM products WHERE prod_price BETWEEN 5 AND 10;

-- Quiz3
-- 가격이 없는 제품의 이름을 가져오시오.
SELECT prod_name FROM products WHERE prod_price IS NULL;

-- Quiz4
-- 제조업체(vend_id)가 'DLL01'이 아닌 제품의 이름(prod_name)을 가져오시오. 단 이름으로 오름차순 정렬한다.
SELECT prod_name FROM products WHERE vend_id <> 'DLL01' ORDER BY prod_name;
SELECT prod_name FROM products WHERE NOT vend_id = 'DLL01' ORDER BY prod_name;

-- Quiz5
-- 제품의 이름(prod_name)이 'Fish'로 시작하는 모든 제품의 아이디(prod_id)와 이름(prod_name)을 검색하시오.
SELECT prod_id, prod_name FROM products WHERE prod_name LIKE "FISH%";

-- Quiz6
제품의 이름(prod_name)'F'로 시작하고 'y'로 끝나는 제품의 이름(prod_name)을 검색하시오.
SELECT prod_name FROM products WHERE prod_name LIKE "F%y";
profile
welcome

0개의 댓글