DB

MySQL 쿼리문

dong99 2024. 3. 5. 00:25

SQL (Structured Query Language) 

  SQL은 관계형 데이터 모델을 따르는 DBMS의  표준 데이터베이스 언어 

  관계 대수를 기초로 만드러진 DB관련 명령어 형식

SQL 명령어 분류 

1 ) 

데이터 정의어 DDL, Data Definition Language

    -  데이터베이스나 테이블 등을 생성, 삭제하거나 그 구조를 변경하기 위한 명령어

    -  데이터베이스를 정의하거나 수정

    -  명령어 수행시 이전 상태로 복귀 불가 

 

구분  DDL 명령어 내용
생성 CREATE 데이터베이스 오브젝트 생성
변경 ALTER 데이터베이스 오브젝트 변경
삭제 DROP 데이터베이스 오브젝트 삭제
TRUNCATE 데이터베이스 오브젝트의 내용 삭제

 

2 )  데이터 조작어 DML, Data Manipulation Language

     -  데이터베이스에 저장된 데이터를 처리하거나 조회, 검색하기 위한 명령어

     -  데이터를 검색, 삽입, 삭제, 갱신

    -  사용자와 데이터베이스 관리 시스템간의 인터페이스 제공

    -  트랜잭션 제어어를 활용하여 실행 전 상태로 복귀 가능

 

구분  DML 명령어 내용
데이터 삽입 INSERT 삽입 형태로 신규 데이터를 테이블에 저장
데이터 수정 UPDATE 테이블의 내용을 수정
데이터 삭제  DELETE 테이블의 내용을 삭제
데이터 조회 SELECT 테이블의 내용을 조회

 

3 )  데이터 제어어 DCL, Data Control Language

    -   무결성을 유지시키면서 내부적으로 여러가지 규정이나 제약조건 등을 기술하기 위해 사용되는 명령어

    -   사용자 별로 데이터베이스에 접근할 수 있는 권한을 부여하거나 회수 

 

DCL 명령어 내용
GRANT 데이터베이스 사용자에게 권한을 부여
REVOKE 데이터베이스 사용자에게 권한을 회수

 

 

  테이블  : 서로 연관된 레코드의 집합

  레코드, 튜플 : 하나의 단위로 취급되는 자료의 집합. DB에서는 행(Row)에 해당, 관계된 데이터의 묶음

  필드, 속성 : 가장 작은 단위의 데이터를 의미. DB에서는 열(Column)에 해당, 자신만의 타입을 가진다.

데이터베이스 

  데이터베이스 조회 

SHOW DATABASES;

 

  데이터베이스 사용

USE 데이터베이스명;

 

  데이터베이스 생성 

CREATE 데이터베이스명;

 

  데이터베이스 삭제 

DROP DATABASES 데이터베이스명;

테이블

  테이블 정의 

CREATE TABLE 테이블 이름(
	    
        필드명 데이터타입(자리 수) 조건;
        필드명 데이터타입 조건;
        필드명 데이터타입 조건;
        PRIMARY KEY(기본키로 지정한 필드명)
 );
CREATE TABLE posts ( 
  id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  subject varchar(255) NOT NULL,
  content mediumtext,
  created datetime,
  user_id int(10) unsigned NOT NULL,
  user_name varchar(32) NOT NULL,
  hit int(10) unsigned NOT NULL default '0',  
  PRIMARY KEY (id)
);

 

  제약 조건(constraint)

    -  제약 조건(constraint)이란 데이터의 무결성을 지키기 위해 데이터를 입력받을 때 실행되는 검사 규칙을 의미

    -   ALTER 문으로 필드를 추가할 때도 설정할 수도 있다.

 

CREATE TABLE 문에서 사용할 수 있는 제약 조건

 

1 )  NOT NULL : 해당 필드는 NULL 값을 저장할 수 없게 됩니다.

2 )  UNIQUE : 해당 필드는 서로 다른 값을 가져야만 합니다.

3 )  PRIMARY KEY : 해당 필드가 NOT NULL과 UNIQUE 제약 조건의 특징을 모두 가지게 됩니다.

4 )  FOREIGN KEY : 하나의 테이블을 다른 테이블에 의존하게 만듭니다.

5 )   DEFAULT : 해당 필드의 기본값을 설정합니다.

 

또한, AUTO_INCREMENT 키워드를 사용하면 해당 필드의 값을 1부터 시작하여 새로운 레코드가 추가될 때마다 1씩 증가된 값을 저장합니다. 이때 AUTO_INCREMENT 키워드 다음에 대입 연산자(=)를 사용하여 시작값을 변경할 수 있습니다.

 

  테이블 정보 조회

DESCRIBE 테이블명; // "DESC 테이블명;"

  테이블 삭제

DROP TABLE 테이블명;

 

  테이블 수정

ALTER TABLE 테이블명 ADD COLUMN 필드명 데이터 타입;
ALTER TABLE table_name ADD COLUMN ex_column varchar(32) NOT NULL;

ALTER TABLE 테이블명 MODIFY COLUMN 필드명 데이터 타입;
ALTER TABLE table_name MODIFY COLUMN ex_column varchar(16) NULL;

ALTER TABLE 테이블명 DROP COLUMN 필드명;
ALTER TABLE table_name DROP COLUMN ex_column;

ALTER TABLE 테이블명1 RENAME 테이블명2;
ALTER TABLE table_name1 RENAME table_name2;

레코드

  레코드 조회 

SELECT * FROM 테이블명; //  * 를 사용하면 테이블의 모든 데이터 조회
SELECT 필드명1, 필드명2 FROM 테이블이름; // 필드명1,2만 조회
SELECT * FROM 테이블이름 WHERE 필드명 = '내용'; // 해당 필드에서 값이 '내용'인 레코드 조회
SELECT * FROM 테이블이름 WHERE 필드명 BETWEEN 00:00:00 AND 12:00:00 // 00시~12시 사이
SELECT * FROM 테이블이름 WHERE 필드명 IN (A, B); // 괄호 내의 일치하는 값이 있다면 조회
SELECT * FROM 테이블이름 WHERE 필드명 LIKE '%문자열%'; // 문자열 포함된 레코드 조회
SELECT * FROM 테이블이름 WHERE 필드명 IS NULL; // 또는 "IS NOT NULL"
SELECT COUNT(*) FROM 테이블명 WHERE 필드명='내용'; // 해당 필드에서 값이 '내용'인 레코드 개수
SELECT * FROM Customers WHERE country='KR';
SELECT * FROM Customers WHERE id='asd111';
SELECT * FROM Costomers ORDER BY age; // 오름차순 정렬
SELECT * FROM Costomers ORDER BY age DESC; // 내림차순 정렬
SELECT DISTINCT 필드명 FROM 테이블이름; // 해당 필드 기준으로 중복된 레코드제거
// Info 데이터베이스의 Users 테이블에서 userName이 'A'로 시작하는 레코드들의 userId, userName 필드 조회
SELECT userId, userName FROM Info.Users WHERE userName LIKE 'A%'
SELECT COUNT(*) FROM Customers WHERE age='25';

 

  레코드 추가

INSERT INTO 테이블명 (필드명1, 필드명2) VALUES (필드값1, 필드값2); // 테이블에 새 레코드 추가
INSERT INTO 목적지테이블명 SELECT * FROM 출발지테이블명; // 모든 필드 복사
INSERT INTO 목적지테이블명 (필드1,필드2,필드3) SELECT 필드1,필드2,필드3 FROM 출발지테이블명; // 지정 필드 복사
INSERT INTO Customers (userName, age) VALUES ('John', '25'), ('coco', '27');

 

  레코드 수정

UPDATE 테이블명 SET 필드명1=필드값1, 필드명2=필드값2 WHERE 조건;
UPDATE Reservation SET RoomNum = 2002 WHERE Name = '홍길동';

  레코드 삭제

DELETE FROM 테이블명 WHERE 조건;
DELETE FROM Reservation WHERE Name = '홍길동';

조인

  왼쪽 외부 조인 (left outer join)

SELECT * FROM A
LEFT JOIN B ON A.key = B.key

 

  오른쪽 외부 조인 (right outer join)

SELECT * FROM A
RIGHT JOIN B ON A.key = B.key

 

  내부 조인 (inner join)

SELECT * FROM A
INNER JOIN B ON A.key = B.key

 

  왼쪽 안티 조인 (left anti join)

SELECT * FROM A
LEFT JOIN B ON A.key = B.key
WHERE B.key IS NULL

 

  오른쪽 안티 조인 (right anti join)

SELECT * FROM A
RIGHT JOIN B ON A.key = B.key
WHERE A.key IS NULL

 

  전체 조인 (full outer join)

SELECT * FROM A
FULL OUTER JOIN B ON A.key = B.key

 

  전체 조인 변형 (full outer join 변형)

SELECT * FROM A
FULL OUTER JOIN B ON A.key = B.key
WHERE A.key IS NULL OR B.key IS NULL

 

 

 

학습에 많은 도움이 된 링크를  참조했습니다. 🙂

 

참조 및 출처

https://cocoon1787.tistory.com/762