본문 바로가기

DataBase

Maria DB SQL 쿼리문

 

w3schools_study_dbdate.sql
0.36MB

위 sql create schema 기준으로 작성


기본 문법

SELECT 칼럼명 FROM 테이블명 WHERE 조건식;

SELECT 칼럼명 FROM 테이블명 - 조회

-- * 전체
SELECT * FROM customers;

-- 필요한 컬럼만 조회
SELECT CustomerName, Country, CustomerID FROM customers;

DISTINCT - 중복제거

SELECT DISTINCT 칼럼명 FROM 테이블명;
-- DISTINCT 중복 제거
SELECT DISTINCT Country FROM customers;

COUNT  - 행의 수

SELECT COUNT(칼럼명) FROM 테이블명;
-- COUNT 행(row, record)의 수
SELECT COUNT(Country) FROM customers;
SELECT COUNT(DISTINCT Country) FROM customers;

-- 전체 행의 수
SELECT COUNT(*) FROM customers;

WHERE - 조건식

SELECT 칼럼명 FROM 테이블명 WHERE 조건식;
-- WHERE : 레코드 선택(솎아내기)
SELECT * FROM customers WHERE CustomerID = '1';
SELECT * FROM customers WHERE Country = 'USA';

NOT - 아닌

SELECT 칼럼명 FROM 테이블명 WHERE NOT 조건식;
-- Country가 Germany가 아닌걸 조회
SELECT * FROM customers WHERE NOT Country = 'Germany';

비교연산자 - 조건식에 작성

SELECT 칼럼명 FROM 테이블명 WHERE 비교연산자 조건식;
-- Price가 10보다 작은
SELECT * FROM products WHERE Price < 10.00;

-- Price가 10보다 큰
SELECT * FROM products WHERE Price > 10.00;

-- Price가 10보다 크거나 같은
SELECT * FROM products WHERE Price >= 10.00;

-- Price가 10보다 작거나 같은
SELECT * FROM products WHERE Price <= 10.00;

-- Price가 10이 아닌
SELECT * FROM products WHERE Price != 10.00;

-- Price가 10이 아닌 
SELECT * FROM products WHERE Price <> 10.00;

-- CustomerID가 3보다 작은
SELECT * FROM customers WHERE CustomerID < 3;

-- 문자열도 가능
SELECT * FROM customers WHERE CustomerName < 'B';

AND, OR - 그리고, 또는 / 조건식에 작성

SELECT 칼럼명 FROM 테이블명 WHERE 조건식 AND 조건식 AND 조건식;
SELECT 칼럼명 FROM 테이블명 WHERE 조건식 OR 조건식 OR 조건식;
-- City 이름이 Madrid 이면서 Country가 Spain인
SELECT CustomerName, City, Country 
FROM customers
WHERE City = 'Madrid'
  AND Country = 'Spain';
  
-- City 이름이 Madrid가 아니거나 Country가 UK가 아닌
SELECT CustomerName, City, Country
FROM customers
WHERE City != 'Madrid'
   OR Country != 'UK';
   
   
-- 여러 연산자 조합시 () 사용해서 우선순위 결정해줄 것
-- 10달러 미만, 100달러 이상
SELECT *
FROM products
WHERE (Price < 10 OR Price >= 100 ) AND (CategoryID = '1');

BETWEEN - ~ 사이에

SELECT 칼럼명 FROM 테이블명 WHERE 조건칼럼 BETWEEN 값 AND 값;

 

-- Price가 10~13사이에 
SELECT *
FROM products
WHERE Price BETWEEN 10 AND 13; -- 10, 13 값 포함됨

IN - 하나라도 같으면 / OR를 단축해서 사용 가능

SELECT 칼럼명 FROM 테이블명 WHERE 조건칼럼 IN ('조건칼럼의 값', '조건칼럼의 값');
-- london, madrid, sevilla에 있는 고객들
SELECT * FROM customers WHERE City IN ('london','madird', 'sevilla');

-- Country가 UK 거나 USA인
SELECT SupplierID, SupplierName, Country
FROM suppliers
WHERE Country IN ('UK', 'USA');

값 연산 - (+ - * /) 

SELECT 칼럼명 +,-,/,*(값 연산) FROM 테이블명 WHERE 조건식;
SELECT Price + 1 FROM products WHERE ProductID = '1';
SELECT Price - 10.5 FROM products WHERE ProductID = '1';
SELECT Price * 3 FROM products WHERE ProductID = '1';
SELECT Price / 5 FROM products WHERE ProductID = '1';

-- 문자열 연결연산은 안됨
SELECT ProductName + 'AB', Price FROM products;

CONCAT - 문자열 합치기

SELECT CONCAT(칼럼명, 칼럼명, '추가할 문자', '칼럼명') FROM 테이블명 WHERE 조건식;
-- LastName과 FirstName을 합쳐서 조회 하기
SELECT CONCAT(LastName, FirstName) FROM employees;

-- LastName과 FirstName 사이에 , 구분자 넣어 합친걸 조회하기
SELECT CONCAT(LastName, ', ', FirstName) FROM employees;

ADDDATE - 날짜 계산

SELECT 칼럼명, ADDDATE(계산할 칼럼명, INTERVAL 값 (YEAR, MONTH, DAY..) FROM 테이블명 WHERE 조건식;
-- 1년 더하기
SELECT ADDDATE(BirthDate, INTERVAL 1 YEAR ) FROM employees;

-- 1년 빼기
SELECT ADDDATE(BirthDate, INTERVAL -1 YEAR ) FROM employees;

-- 1달 더하기
SELECT ADDDATE(BirthDate, INTERVAL 1 MONTH ) FROM employees;

-- 1달 빼기
SELECT ADDDATE(BirthDate, INTERVAL -1 MONTH ) FROM employees;

 

AS - Alias (칼럼명, 테이블명 별칭 정해주기(혹은 변경하기))

SELECT 칼럼명 AS 변경할 컬럼명 FROM 테이블명 WHERE 조건식;

SELECT 칼럼명 FROM 테이블명 AS 변경할 테이블명 WHERE 조건식;
-- EmployeeID 칼럼명을 id로 , LastName 칼럼명을 name으로 변경해서 조회
SELECT EmployeeID AS id, LastName AS name FROM employees;

-- CONCAT()을 활용해 FirstName과 LastName을 합친 칼럼을 FullName으로 조회
SELECT EmployeeID, CONCAT(FirstName, ' ', LastName) AS FullName FROM employees;

-- AS 생략가능
SELECT EmployeeID, CONCAT(FirstName, ' ', LastName) FullName FROM employees;

-- backtick `` <--- 1 왼쪽에 있는 특수문자으로 키워드나 특수문자, 띄어쓰기 사용 가능
SELECT EmployeeID, CONCAT(FirstName, ' ', LastName) `Full Name` FROM employees;

JOIN 걸어서 테이블명.칼럼명 할때 편리하다

SELECT p.ProductName, c.CategoryName
FROM products AS p
         JOIN categories AS c ON p.CategoryID = c.CategoryID;

ORDER BY - 오름차순(ASC), 내림차순(DESC) 정렬

SELECT 칼럼명 FROM 테이블명 WHERE 조건식 ORDER BY 정렬할 칼럼명 오름차순 또는 내림차순;

-- WHERE 없이 사용 가능
SELECT 칼럼명 FROM 테이블명 ORDER BY 정렬할 칼럼명 오름차순 또는 내림차순;
-- 고객을 국가명 오름차순으로 조회
SELECT * FROM customers ORDER BY Country;

-- 가격이 비싼 상품이 먼저 조회되도록 코드 작성
SELECT * FROM products ORDER BY Price DESC;

-- 가장 어린 직원이 먼저 조회되도록 코드 작성
SELECT * FROM employees ORDER BY BirthDate DESC;

-- products 테이블의 CategoryID 칼럼의 값이 1인 것중 Price 칼럼의 값을 내림차순으로 정렬 조회
SELECT * FROM products WHERE CategoryID = '1' ORDER BY Price DESC;

-- 칼럼이 위치한 순번으로도 작성 가능
SELECT * FROM employees ORDER BY 4;

LIMIT - 조회 레코드(row, 행) 제한

-- n = 시작할 칼럼 행의 숫자(어디서 부터 시작할지)
-- m = 몇 개씩 잘라서 보여줄건지
SELECT 칼럼명 FROM 테이블명 WHERE 조건식 LIMIT n, m;
SELECT 칼럼명 FROM 테이블명 WHERE 조건식 LIMIT m;

-- WHERE 없이도 사용 가능
SELECT 칼럼명 FROM 테이블명 LIMIT n, m;
SELECT 칼럼명 FROM 테이블명 LIMIT m;
-- 3개만 조회하고 싶다
SELECT * FROM customers LIMIT 3;

-- Price가 가장 비싼 10개만 조회
SELECT * FROM products ORDER BY Price DESC LIMIT 10;

-- 가장 어린 3명의 직원 조회
SELECT * FROM employees ORDER BY BirthDate DESC LIMIT 3;

LIMIT으로 게시판의 페이징 처리 가능

-- LIMIT n, m : n 부터 m개 (n은 0부터 시작)
-- 페이지 나누기
SELECT CustomerID, CustomerName FROM customers ORDER BY CustomerID; -- 91개 row

-- 10개씩 끊어서 보여주고 싶다
-- 1페이지
SELECT CustomerID, CustomerName FROM customers ORDER BY CustomerID LIMIT 0, 10;

-- 2페이지
SELECT CustomerID, CustomerName FROM customers ORDER BY CustomerID LIMIT 10, 10;

-- 3페이지
SELECT CustomerID, CustomerName FROM customers ORDER BY CustomerID LIMIT 20, 10;

-- 91개의 row 중 마지막 페이지
SELECT CustomerID, CustomerName FROM customers ORDER BY CustomerID LIMIT 90, 10;

-- 몇 페이지인지 구하는 식
-- LIMIT n, m
-- (n-1) * m , m

-- 예) 나는 페이지당 20개의 게시물을 보여주고 싶다(20 => m의 값이 적용)
-- 3페이지를 보고 싶다 하면 (3-1) * 20 => 40
-- LIMIT 40, 20 => 3 페이지가 되는거임

-- 최종 페이징 처리 수식
-- LIMIT n(원하는 페이지), m(보여줄 게시물수)

LIKE - 검색 할 때 사용 %, _ 기호(wildcard)와 함께 사용

SELECT 칼럼명 FROM 테이블명 WHERE 검색할칼럼명 LIKE 'LIKE조건식';

'~%' :  ~ 시작하는

-- '~%' : ~ 시작하는
SELECT * FROM customers WHERE CustomerName LIKE 'ch%'; -- ch로 시작하는

'%~' :  ~ 끝나는

-- '%~' : ~ 끝나는
SELECT * FROM customers WHERE CustomerName LIKE '%ch'; -- ch로 끝나는

'%~%' :  ~가 포함된

-- '%~%' : ~ 가 포함된
SELECT * FROM customers WHERE CustomerName LIKE '%ch%'; -- ch 가 포함된

'_' :  _ 개수만큼의 글자로 이루어진 아무거나

-- '_' : 1개의 문자 아무거나
SELECT * FROM employees WHERE FirstName LIKE '_____'; -- 5글자들을 조회
SELECT * FROM employees WHERE LastName LIKE '____'; -- 4글자들을 조회
-- 응용
SELECT * FROM employees WHERE LastName LIKE '_e%'; -- 첫번째 글자는 아무거나 두번째 글자는 e 로 시작하는

INSERT INTO - 데이터 집어넣기

INSERT INTO 테이블명 (칼럼명, 칼럼명 ...) VALUES (값, 값 ...);
INSERT INTO employees (EmployeeID, LastName, FirstName, BirthDate, Photo, Notes) VALUE (10, '손', '흥민', '2000-01-01', '사진10', 'EPL 득점왕');

-- 모든 컬럼에 값 넣을 때 컬럼명 나열 생략 가능
INSERT INTO employees VALUE (12, '김', '민재', '2000-03-03', '사진11', '벽');

-- 특정 컬럼에만 값을 넣을 때 컬럼명 나열 생략 불가능
-- 나열된 컬럼명과 값의 순서, 갯수가 같아야함

DELETE - 데이터 삭제(! 주의해서 사용)

DELETE FROM 테이블명
DELETE FROM 테이블명 WHERE 조건식;

-- WHERE 절이랑 꼭 같이 사용하는걸 추천!!!
-- 안그러면 테이블 전체의 데이터가 삭제될 수 있음!!!!

DELETE문은 WHERE 랑 같이 사용하는걸 추천 

안그러면 테이블 전체 데이터가 삭제될 수 있음!!!


UPDATE - 데이터 수정(! 주의해서 사용)

UPDATE 테이블명 SET 변경할 컬럼명 = '값', 변경할 컬럼명 = '값' ... WHERE 조건식
-- 예제

UPDATE products
SET ProductName = 'Cang',
    Price = '20.00'
WHERE ProductID = '2'

UPDATE문은 WHERE 랑 같이 사용하는걸 추천 

안그러면 테이블 전체 데이터가 삭제될 수 있음!!!


NULL

-- 피연산자가 NULL 이면 결과는 항상 false
SELECT * FROM products WHERE Price = null; -- null을 같은애들로 찾아도 null은 안나옴
SELECT * FROM products WHERE Price != 0.00; -- 0이 아닌애들로 찾아도 null은 안나옴

-- IS NULL : 컬럼의 값이 null 인지 확인
SELECT * FROM products WHERE Price IS null;

IFNULL - null 값을 임의로 바꿀 수 있다.

SELECT 컬럼명, IFNULL(컬럼명, 임의값) FROM 테이블명
SELECT ProductName, IFNULL(Price, 0.00) FROM products ORDER BY ProductID DESC ;
반응형

'DataBase' 카테고리의 다른 글

JOIN - 테이블 끼리 결합 (Maria DB)  (1) 2023.10.12
데이터베이스 정규화(Normalization)  (0) 2023.10.12
DATABASE, SCHMA / Table 생성하기 (Maria DB)  (0) 2023.10.12
MYSQL merge into (update, insert)  (0) 2023.05.17
SQL 문법  (0) 2023.01.12