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 |