USE 데이터베이스명;
SELECT 필드명 FROM 테이블명;
SELECT 필드명 FROM 테이블명 WHERE 조건;
- use - db선택
- (*은 전체선택)
- (.연산자 : DB이름.테이블 이름)
- (필드명에는 큰따옴표("")를 반드시 넣어줘야 한다.) - 외부에서 치는 문자열은 반드시 큰따옴표!!
- 데이터베이스는 대소문자를 인식하지 않는다. (대문자와 소문자 상관없음)
CREATE TABLE 테이블명 (필드명 필드데이터형);
INSERT INTO 테이블명
SELECT 필드명
FROM 가지고올테이블
LIMIT 조건;
SELECT * FROM 테이블명;
- 생성한 테이블에 조건에 해당하는 데이터를 가져와 저장하는 방법.
- CREATE TABLE 테이블명 (필드,,,,) 로 새로운 테이블을 생성해준다.
필드 데이터형이 varchar이라면, (name VARCHAR(5)); 이런식으로 크기를 꼭 괄호 안에 넣어주어야 한다.
- INSERT INTO 새로만든테이블명 이미 존재하는 다른 테이블에서 일부분을 가지고 오기 위하여
- SELECT 필드명 쿼리문으로, 가지고올 필드명들을
- FROM 이미존재테이블명 가지고올 테이블을
- LIMIT 조건; 가지고올 해당 데이터들의 제한 조건을 설정해준다.
- 그리고 확인하기 위한 SELECT * FROM 테이블명;
- CREATE TABLE 새로운_테이블명 (SELECT 복사할열(필드) FROM 기존_테이블명) ;
이렇게 테이블 복사 가능.
SHOW DATABASES;
혹은
USE 데이터베이스명;
- 데이터베이스 조회
SHOW TABLE STATUS;
- 테이블 조회
DESCRIBE 데이터베이스명;
혹은
DESC 데이터베이스명;
- 열이름 조회
AS
- 열이름에 별칭을 주는 것
- 중간에 공백이 있으면 작은따옴표로 전체 감싸주기.
- 한글로 별칭만들면 보기 좋음
BETWEEN ... AND
- 숫자로 구성되고 연속적인 값 갖는 경우. (WHERE절에 들어가는 것)
IN()
- 이산적인 값을 가진 데이터 (WHERE절에 들어가는 것)
LIKE
- 문자열 내용검색 (WHERE절에 들어가는 것)
- '-'앞에는 한글자
- '%'뒤에는 여러글자
ANY
- 서브쿼리(쿼리문 안에 쿼리문이 또 있는것)
- 서브쿼리 여러개중 한가지만 만족해도 됨 (SOME과 동일)
ALL
- 서브쿼리(쿼리문 안에 쿼리문이 또 있는것)
- 서브쿼리의 모든 결과 만족시켜야함
ORDER BY
- 결과가 출력되는 순서 조절하는 구문
- 기본은 오름차순 (ASC)
- 내림차순은 열이름 뒤에 DESC
- SELECT, FROM, WHERE, GROUP BY,HAVING, ORDER BY 중에서 제일 뒤에 넣을 것
SELECT DISTINCT 필드명 FROM 테이블명;
- 중복성 최소화. (제거가 아님!) (WHERE절에 들어가는 것)
LIMIT
- 출력갯수 제한 (조건)
SELECT ... FROM ... ORDER BY `userName` ASC LIMIT 2; // 상위 2개 출력
GROUP BY
- 그룹으로 묶어줌
- GROUP BY는 테이블 뒤에 넣어야한다. (SELECT FROM 사이에 올 수 없음)
- 집계 함수 (GROUP BY와 함께 사용. SUM (필드명) 등이 있음.)
- SUM(...)같은 경우는 라이브러리 집계함수이다.
- 집계함수의 결과를 별칭으로 사용하여 따로 열로 출력할 수 있다.
SELECT userID AS '아이디' , SUM(price*amount) AS '총 구매액' FROM buytbl GROUP BY userID;
- 집계함수는 필드위치에 사용
집계함수 종류
- AVG()
- MIN()
- MAX()
- COUNT() : 행의 갯수
- COUNT(DISTINCT) : 행의 갯수(중복은 1개만)
- STDEV() : 표준편차
- VAR_SAMP() : 분산
조건연산자
- 데이터베이스에서는 = (하나)
- =, <, >, <=, >=, < >, != 등
- NOT, AND, OR 등
HAVING
- 집계함수는WHERE절에 x
- HAVING 절은 GROUP BY 절 다음에 위치
- 반드시 GROUP BY와 같이, GROUP BY 다음에 위치해서 사용
SELECT userID AS '사용자‘, SUM(price * amount) AS '총구매액' FROM buytbl GROUP BY userID
HAVING SUM(price*amount) >1000 ORDER BY SUM(price*amount);
ROLLUP
- 총합 또는 중간 합계
- GROUP BY절과 WITH ROLLUP문 사용
GROUP BY groupName WITH ROLLUP;
SQL문 - DML, DDL, DCL
DML (데이터 조작 언어)
- Data Manipulation Language
- 선택, 삽입, 수정, 삭제 (데이터 조작)
- 대상은 테이블의 행 (DML언어를 사용하려면 테이블은 이미 정의되어 있어야한다.)
- SELECT, INSERT, UPDATE, DELETE
- transaction(트랜젝션)이 발생. - > 테이블의 데이터가 변경될때 임시로 적용.(되돌림(ROLLBACK), 완전적용(COMMIT))
DDL (데이터 정의 언어)
- Data Definition Language
- 생성/삭제/변경 (데이터베이스 개체 : 데이터베이스, 테이블, 뷰, 인덱 스 등)
- CREATE, DROP, ALTER
- 실행 즉시 MariaDB에 적용
DCL (데이터 제어 언어)
- Data Control Language
- 권한 설정
- GRANT/REVOKE/ DENY
- GRANT와 REVOKE은 같이 사용 (짝꿍임)
INSERT
INSERT [INTO] 테이블명[(열1, 열2, ...)] VALUES (값1, 값2, ...)
- 데이터 삽입
- 테이블에 데이터를 삽입하는 명령어
INSERT INTO memberTBL VALUES ('...', '...' , '...', ...) -> 멤버테이블에 값 삽입.
- 자동으로 증가하는 AUTO_INCREMENT : INSERT명령어에서 해당 열은 입력하지 않음. 자동으로 1부터 증가
꼭 기본키 혹은 UNIQUE로 지정
/* 이미 연결되어있는 것들과의 오류를 없애기 위해 꼭 지웠다가 사용하기 */
DROP TABLE IF EXISTS `test_table1`;
/* DDL */
CREATE TABLE `test_table1` (
`id` INT(11) NOT NULL AUTO_INCREMENT, /* 자동 증가 */
`col` VARCHAR(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY(`id`) /* 기본키 설정 */
);
/* INSERT */
INSERT INTO test_table1(col)
VALUES('1r'), ('2r'), ('3r');
/* 지원 라이브러리 사용하면 마지막에 입력된 값 출력 */
SELECT * FROM test_table1;
SELECT last_insert_id();
- SELECT LAST_INSERT_ID()문 : 사용하면 마지막에 입력된 값 출력. 지원 라이브러리이다.
- ALTER TABLE 테이블명 : 증가 시작값 변경
AUTO_INCREMENT = 시작하고싶은값;
- SET @@auto_increment_increment = 10; : 10씩 증가
- INSERT INTO… SELECT : 기존의 대량의 데이터를 샘플 데이터로 사용할 때
INSERT INGNORE 과 ON DUPLICATE UPDATE
- 여러건을 입력하는데 오류가 생길 때, 진행 방법. (보통 오류생기면 그지점부터 입력이 안된다.)
- INSERT INGNORE : 오류가 생겨도 오류를 발생시키지 않아 오류 이후의 데이터는 입력됨 (특별한 경우에만 사용하기)
- ON DUPLICATE UPDATE : 중복되지 않으면 일반 INSERT, 중복되면 그 뒤의 UPDATE문 실행
USE sqldb;
-- DROP TABLE IF EXISTS `memberTBL`;
/*
CREATE TABLE memberTBL (SELECT userID, userName, addr FROM usertbl LIMIT 10);
ALTER TABLE memberTBL
ADD CONSTRAINT pk_memberTBL PRIMARY KEY (userID);
*/
-- SELECT * FROM memberTBL;
INSERT IGNORE INTO memberTBL VALUES('KAN', '김안녕', '미국');
INSERT IGNORE INTO memberTBL VALUES('KJV', '김자바', '서울');
INSERT IGNORE INTO memberTBL VALUES('KDB', '김데베', '경기');
SELECT * FROM memberTBL;
정상적으로 추가된다. (중복은 지워짐)
USE sqldb;
INSERT INTO memberTBL VALUES('KAN', '김하이', '미국')
ON DUPLICATE KEY UPDATE userName='김하이', addr='미국';
INSERT INTO memberTBL VALUES('BYE', '김잘가', '일본')
ON DUPLICATE KEY UPDATE userName='김잘가', addr='일본';
SELECT * FROM memberTBL;
중복된 것은 ON DUPLICATE KEY UPDATE 뒤의 문으로 실행되고, 중복되지 않은 것은 INSERT INTO ... VALUES 값으로.
UPDATE
UPDATE 테이블명
SET 열1=값1, 열2=값2, ...
[WHERE 조건] ;
- 데이터 수정
- WHERE절 생략가능.
DELETE
DELETE FROM 테이블명
WHERE 조건 ;
- 데이터 삭제
- 행 단위
- LIMIT와 함께 사용 가능
- DELETE FROM 테이블명; : 구조는 남고, 데이터 삭제 (트랜젝션 로그 기록)
- DROP TABLE 테이블명; : 다 삭제 -> 주로 사용
- TRUNCATE TABLE 테이블명; : 메타데이터는 남는다 (거의 사용 x)
'MariaDB' 카테고리의 다른 글
MariaDB#11 : 조인 join(내부, 외부), 스토어드 프로시저 (221229)7 (0) | 2022.12.29 |
---|---|
MariaDB#10 : 데이터형, 형변환, 내장함수, 변수, 테이블, SQL(221229)7 (0) | 2022.12.29 |
MariaDB#8 : HeidiSQL 살펴보기, 주석(221228)5 (0) | 2022.12.28 |
MariaDB#7 : 모델링 (221228)4 (0) | 2022.12.28 |
MariaDB#6 : ODBC연결 (221228)3 (0) | 2022.12.28 |
댓글