SQL -> Structure Query Language (구조화된 Query 언어)
DB 쿼리문 예시:
SELECT * // *은 모든 칼럼을 선택하라.
FROM student // student열에서
WHERE grade = '3학년' // grade = '3학년'인 데이터 들을 선택
SQL 명령어중 중요한 것
SELECT - 데이터베이스로부터 데이터를 추출
UPDATE - 데이터베이스의 데이터를 갱신
DELETE - 데이터 베이스로부터 데이터를 삭제
INSERT INTO - 데이터베이스로 새로운 데이터를 삽입
CREATE DATABASE - 새로운 데이터베이스를 생성
ALTER DATABASE - 데이터베이스를 수정
CREATE TABLE - 새로운 테이블을 생성
ALTER TABLE - 테이블을 수정
DROP TABLE - 테이블을 삭제
CREATE INDEX - 검색 키(search key) 같은 인덱스를 생성
DROP INDEX - 인덱스를 삭제
* SELECT 구문
- SELECT 구문은 데이터베이스로부터 데이터를 선택하기 위해 사용된다.
- 반환된 데이터는 result-set이라고 불리는 result table에 저장된다.
- 모든 필드를 선택하고 싶다면 '*'을 이용한다.
모든 열을 선택할 때에는 '*'
SELECT JOB, AGE
FROM COUNTRY;
-- COUNTRY 테이블로 부터 가져온 결과 예시
TEACHER 32
BUTCHER 27
POST OFFICER 30
SINGER 21
POLICE OFFICER 29
* 원하는 열에서 중복된 데이터를 제외하고 필터링하고 싶을 때는 'DISTINCT'를 사용한다.
-- 중복되는 country를 제외하고 필터링
SELECT DISTINCT Country
FROM Customers;
The SQL WHERE 구문
- WHERE은 기록을 필터하는데 사용된다.
- WHERE은 특정한 상태를 만족하는 기록들만 추출하는 데 사용된다.
-- COUNTRY 열에서는 MEXICO 만 해당하는 데이터를 필터링하는 경우
SELECT *
FROM CUSTOMERS
WHERE COUNTRY = 'MEXICO';
SQL은 텍스트 값을 감싸는 홑따옴표가 요구된다. (대부분은 큰따옴표도 가능)
숫자는 따옴표로 감싸면 안된다.
SELECT * FROM Customers
WHERE CustomerID=1;
WHERE에 쓰는 문구
* '=' : 같은 값만
* '>' : 더 큰 값만
* '<' : 더 작은 값만
* '>=': 크거나 같은 값만
* "<=": 작거나 같은 값만
*' <>': 같지 않은 값만 ( 버전에 따라!=)
*"BETWEEN" : 특정 범위
-- Products 테이블에서 Price 열의 값이 50에서 60 사이인 값만 필터링
SELECT *
FROM Products
WHERE Price BETWEEN 50 AND 60;
* 'LIKE' : 같은 패턴만
-- City 열에서 's'로 시작하는 값만
SELECT *
FROM Customers
WHERE City Like 's%';
SQL AND, OR 그리고 NOT 연산자
- WHERE 절은 AND, OR, NOT 연산자와 조합될 수 있다.
- AND, OR은 하나의 조건 이상에 기반한 레코드를 필터 하기 위해 사용된다.
1. AND 연산자는 모든 조건들이 TRUE인 레코드들을 표시한다.
2. OR 연산자는 어떤 조건이 TRUE인 레코드를 표시한다.
- NOT 연산자는 TRUE가 아닌 조건의 레코드를 표시한다.
예시
-- 'AND' : Country가 'Korea'이고 City가 'Seoul'인 값을 필터링할 경우
SELECT *
FROM Tourists
WHERE Country = 'Korea' AND City = 'Seoul';
-- 'OR' : City가 'Seoul' 이거나 'Incheon'인 값을 필터링
SELECT *
FROM Tourists
WHERE City = 'Seoul' OR City = 'Incheon';
-- 'NOT' : Country가 'Korea'가 아닌 값을 필터링
SELECT *
FROM Tourists
WHERE NOT Country = 'Korea';
-- 'AND'와 'OR'의 결합
SELECT *
FROM Tourists
WHERE Country = 'Korea' AND ( City = 'Seoul' OR City = 'Incheon');
-- 'NOT'과 'AND'의 결합
SELECT *
FROM Tourists
WHERE NOT COUNTRY = 'Korea' AND NOT COUNTRY = 'USA"
SQL ORDER BY 키워드
- ORDER BY 키워드는 오름차순 또는 내림차순으로 result-set을 정렬하기 위해 사용된다.
- 디폴트로 오름차순으로 정렬되며, 내림차순으로 설정할 때는 DESC 키워드를 사용한다.
-- Country 열의 값을 A-Z 순으로 정렬하여 필터링
SELECT *
FROM Tourists
ORDER BY Country;
-- Country 열의 값을 Z-A 순으로 정렬하여 필터링
SELECT *
FROM Tourists
ORDER BY Country DESC;
-- Country 열의 값을 A-Z 순으로 정렬하고 같은 Country 값이 있다면 TouristName을 A-Z 순으로 정렬
SELECT *
FROM Tourists
ORDER BY Country, TouristName;
-- Country 열의 값을 A-Z 순으로 정렬하고 같은 Country 값이 있다면 TouristName을 Z-A 순으로 정렬
SELECT *
FROM Tourists
ORDER BY Country ASC, TouristName DESC;
SQL INSERT INTO 구문
* INSERT INTO 구문은 테이블에 새로운 레코드를 삽입하기 위해 사용된다.
-- Tourists 테이블의 괄호 안에 속하는 열에 VALUES의 값들을 순서대로 삽입
INSERT INTO Tourists ( TouristName, ContactName, Address, City, PostalCode, Country)
VALUES ( 'Jeff', 'Johanson', 'Uljiro-3', 'Seoul', '12021', 'Korea');
Insert Data Only in Specified Columns
* 특정 열에 데이터를 삽입하는 것도 가능하다.
-- 특정 열에 값들이 삽입되고, 열거되지 않은 열에는 'null' 자동 삽입
INSERT INTO Tourists ( TouristName, City, Country)
VALUES ('Johanson', 'Seoul', 'Korea');
SQL NULL VALUES
Null 값이란?
* Null이 있는 필드는 값이 없는 필드이다.
* 만약 테이블의 필드가 optional이라면 이는 새로운 레코드를 삽입하거나 해당 필드에 값을 추가하는 것이 없이
갱신하는 것이 가능하다. 그리고 그 필드는 NULL 값으로 저장된다.
How to Test for NULL Values?
* =, <, or <>와 같은 비교 연산자로 NULL 값을 테스트하는 것은 불가능하다.
* 대신에 IS NULL, IS NOT NULL 연산자를 사용해야 한다.
-- 'IS NULL' : Address 열에 NULL 인 값을 필터링
SELECT TouristName, Contact Name, Address
FROM Tourists
WHERE Address IS NULL;
-- 'IS NOT NULL' : Address 열에 NULL이 아닌 값을 필터링
SELECT TouristName, ContactName, Address
FROM Tourists
WHERE Address IS NOT NULL;
SQL Wildcards
SQL Wildcard Characters
* Wildcard Character는 문자열의 하나 이상의 문자를 대체하는 데 사용된다.
* Wildcard Character는 SQL LIKE 연산자와 함께 사용된다.
* LIKE 연산자는 열에서 특정한 패턴을 찾기 위해 WHERE 절에서 사용된다.
Wildcard Characters in SQL Server
1. '%' : 0 또는 그 이상의 문자를 표시한다.
ex) bl% : bl, black, blue, blob...
2. '-' : 하나의 문자를 표시한다.
ex) h_t : hot, hat, hit
3. '[]' : 브래킷 안의 문자 중 하나를 표시한다.
ex) h [oa] t : hot, hat hit(x)
4. '!' : 브래킷 안에 없는 문자를 표시한다.
ex) h [! oa] t : hit hot(x) hat(x)
5. '-' : 문자의 범위를 표시한다.
ex) c [a-c] t : cat cbt cct
실예시
'%'
-- City 열의 'ber'로 시작하는 값을 필터링
SELECT *
FROM Tourists
WHERE City LIKE 'ber%';
-- City 열의 'es'가 앞, 뒤, 앞뒤에 포함된 값을 필터링
SELECT *
FROM Tourists
WHERE City LIKE '% es%' ;
'_'
-- City 열에서 'L( ) n( ) on'에 해당하는 값을 필터링. ( ) 안에는 어떠한 문자 하나가 들어갈 수 있다.
SELECT *
FROM Tourists
WHERE City LIKE 'L_n_on';
'[ ]'
-- City 열에서 b, s, p로 시작하는 값을 필터링
SELECT *
FROM Tourists
WHERE City LIKE '[bsp]%';
-- City 열에서 a-c 사이의 문자로 시작하는 값을 필터링
SELECT * FROM Tourists
WHERE City LIKE '[a-c]%';
'[! ]'
-- City 열에서 b, s, p로 시작되지 않는 값을 필터링
SELECT *
FROM Tourists
WHERE City LIKE '[! bsp]%';
-- 또는 NOT LIKE 연산자 사용
SELECT *
FROM Tourists
WHERE City NOT LIKE '[bsp]%';
SQL Aliases
* SQL alias는 테이블, 테이블의 열에 임시로 이름을 주는 데 사용된다.
* allias는 더 읽기 쉬운 이름을 만드는 데 사용된다.
* 하나의 allias는 쿼리가 지속되는 동안만 존재한다.
-- TouristID => ID, TouristName => Tourist로 보이도록 필터링
SELECT TouristID AS ID, TouristName AS Tourist
FROM Tourists;
-- 공백이 있는 allias는 " " 또는 [ ]로 묶기
SELECT TouristName AS Tourist, ContactName AS [Contact Person]
FROM Tourits;
-- Address, PostalCode, City, Country를 묶어서 Address로 보이게 필터링
SELECT CustomerName, CONCAT(Addresss, '. ', PostalCode, ', ', City, ' , ', Country) AS Address
FROM Customers;
-- Customers 테이블을 c, Orders 테이블을 o로 해서 각 테이블에서 필요한 열의 WHERE 절의 해당하는 값을 필터링
SELECT o.OrderID, o.OrderDate, c.CustomerName
FROM Customers AS c, Orders AS o
WHERE c.CustomerName = "Around the Horn" AND c.CustomerID = o.CustomerID;
'Be Smart > SQL' 카테고리의 다른 글
데이터베이스 프로그래밍 (0) | 2021.09.14 |
---|---|
SQL 고급 (0) | 2021.09.13 |
SQL 기초 1 (0) | 2021.09.10 |
SQL 문법 정리 (0) | 2021.08.04 |
SQL 기본 쿼리문 정리-2 (0) | 2021.08.03 |
댓글