[MariaDB] SQL문과 명령어

심재혁·2023년 11월 18일
0
post-thumbnail

SQL문

관계형 데이터베이스 관리 시스템(RDBMS)에서 데이터를 조회, 삽입, 갱신, 삭제하기 위해 사용되는 프로그래밍 언어

CRUD

  • Create, Read, Update, Delete의 약어
  • 데이터베이스에 생성, 조회, 수정, 삭제를 의미
  • SQl 구문도 위의 목적에 맞게 크게 세 가지로 구분

DDL

  • Data Definition Language
  • 데이터베이스나 테이블 등을 생성, 삭제하거나 그 구조를 변경
  • CREATE, ALTER, DROP

DML

  • Data Manipulation Language
  • 데이터베이스에 저장된 데이터를 처리하거나 조회
  • INSERT, UPDATE, DELETE, SELECT

DCL

  • Data Control Language
  • 사용자 권한 부여 등
  • GRANT, REVOKE 등

데이터베이스 (스키마) 생성

데이터 베이스 생성

CREATE DATABASE table;

데이터베이스 선택

USE board;

데이터 베이스 삭제

DROP DATABASE board;

데이터베이스 확인

SHOW DATABASES;


테이블 생성

CREATE DATABASE board;

CREATE TABLE posts(id INT PRIMARY KEY, title VARCHAR(255), content VARCHAR(255), author_id INT, FOREIGN KEY(author_id) REFERENCES author(id));

  • primary key를 걸게되는 컬럼에 대해서는 unique, not null 제약조건 부여
  • 외래키가 설정되면, post테이블 데이터의 생성, 삭제, 수정에 대해 제약이 발생
    • 만약 fk에 nut null 조건이 있다면 author_id가 없는 데이터는 post에 생성불가
    • author가 삭제될때 post에 데이터가 남아있으면 author 삭제불가
    • author의 id가 수정될때 post에 데이터가 남아있으면 author 수정불가
  • 삭제, 수정에 대해서는 기본적으로 제약(restruct 제약)을 갖고 있으나, 옵션을 줘서 변경가능

테이블, 컬럼 조회

테이블 생성 후 확인

SHOW TABLES

컬럼 정보 조회

DESCRIBE author;

컬럼 정보 상세 조회

SHOW FULL COLUMNS FROM author;

테이블 생성문 조회

SHOW CREATE TABLE posts;

참조 관계 및 제약조건 정보 조회

SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME = 'posts'

  • 주요제약조건(pk, fk) => 인덱스가 자동생성이 된다.
  • 인덱스는 조회성능을 위한 목차 페이지

인덱스 조회

SHOW INDEX FROM 테이블명

  • 제약조건 정보조회와 인덱스 조회는 상당 수 일치 (pk, fk 제약조건은 인덱스를 생성)
  • 인덱스란 조회의 성능을 높이기 위한 별도페이지라는 것

DDL - CREATE

테이블 생성

 CREATE TABLE 테이블 이름
 	(
	 필드이름1 필드타입1 [제약조건1],
     필드이름2 필드타입2 [제약조건2],
     ...
     )
  • 해당 필드에 적용할 제약조건을 선택적으로 조건 생성

DDL - ALTER

테이블 정보 변경 명령어

테이블 이름 변경

ALTER TABLE 테이블명 RENAME 새로운 테이블명;

컬럼추가(ADD)

ALTER TABLE 테이블명 ADD COLUMN 컬럼명 자료형;

필드 타입 변경 (Modify) 덮어쓰기

ALTER TABLE 테이블명 MODIFY COLUMN 컬럼명 타입 [제약조건];

컬럼 이름 변경

ALTER TABLE 테이블명 CHANGE COLUMN 기존컬럼명 새로운 컬럼명 타입 [제약조건];

컬럼 삭제

ALTER TABLE 테이블명 DROP COLUMN 컬럼명;


DDL - DROP

테이블 삭제

DROP TABLE 테이블이름

테이블의 데이터만을 지우고 싶을 때

DELETE FROM 테이블이름
TRUNCATE TABLE 테이블이름

IF EXISTS

  • 쓰는 이유: 보통 스크립트를 짜서 쓰기때문에 예외처리하는 것
  • 특정 개체(예: 데이터베이스나 테이블)가 존재하는 경우에만 명령어 실행

    DROP DATABASE 또는 TABLE IF EXISTS abc;


DML - INSERT

  • 테이블에 새로운 레코드를 추가

    INSERT INTO 테이블이름(필드이름1, 필드이름2...) VALUES (데이터값1, 데이터값2...)

    ex) INSERT INTO author(id, name, email) VALUES(1, 'kim', 'abc@naver.com');


DML - UPDATE

  • 테이블 레코드의 내용의 수정

    UPDATE 테이블 이름 SET 필드이름1=데이터값1, 필드이름2=데이터값2,... WHERE 필드이름=데이터값

  • 만약 WHERE조건을 생략하면, 해당 테이블의 모든 레코드값이 위 설정대로 수정되므로 유의

    ex) UPDATE author SET email='abc2@teat.com'WHERE id=1;

  • 여기서 =의 쓰임새는 2가지
    • where문 뒤에 나오는 비교문은 java기준으로 ==fh
    • 어떤 값을 set할때도 =을 사용하여 대입 (java ==와 동일)

DML - DELETE

DELETE FROM 테이블이름 WHERE 필드이름=데이터값

  • WEHRE절을 생략하면, 해당 테이블에 저장된 모든 데이터가 삭제

    ex) DELETE FROM author WHERE author_id=5;

DELETE, TRUCATE, DROP 차이

  • drop은 테이블 구조까지 전체 삭제
  • DELETE와 TRUCATE의 차이
    • delete는 storage까지 삭제하지는 않아 복구가 가능
    • delete는 log를 남김
    • delete의 삭제속도는 truncate보다 느림
    • trucate는 log를 안남김

DML - SELECT

SELECT

SELECT 필드이름 FROM 테이블이름 [WHERE조건]

모든 필드 선택

SELECT * FROM member;

예제
SELECT FROM author WHERE id =1;
SELECT name, email FROM author WHERE id =1;
SELECT
from author WHERE id > 1;
SELECT * from author WHERE id > 1 AND name = 'kim'

이름 중복 제거하고 조회

SELECT DISTINCT 컬럼명 FROM 테이블명

ex) SELECT DISTINCT name FROM author;

선택한 결과의 정렬

  • SELECT 문으로 선택한 결과를 ORDER BY절을 사용

  • 기본 설정은 오름차순 (ASC)이며, 내림차순시 DESC

  • 여러 필드의 데이터를 쉼표(,)를 사용하여 여러기준으로 정렬할 수도

  • ORDER BY 생략시 pk를 기준으로 오름차순 정렬하여 결과값 반환

    SELECT 컬럼명 FROM 테이블명 ORDER BY 컬럼명
    ex) SELECT * FROM author ORDER BY name desc;

  • ORDER BY 멀티

    • 먼저쓴 컬럼 우선정렬. asc/desc 생략 시 asc적용

    SELECT * FROM author ORDER BY name, email desc;

  • 반환할 행의 최대 수를 지정

    SELECT 컬럼명 FROM 테이블명 LIMIT 제한할크기숫자;
    ex) SELECT * FROM author LIMIT 3;

별칭(alias)을 이용한 처리

  • 테이블과 필드에 임시로 별칭(alias)을 부여하고, 해당 별칭을 SELECT문에서 사용
  • as는 생략이 가능하다

    SELECT 필드이름 AS 별칭 FROM 테이블이름
    SELECT 필드이름 FROM 테이블이름 AS 별칭

0개의 댓글