1)중복값 제외:
SELECT DISTINCT COUNTRY
FROM CUSTOMERS;
2)서브쿼리(쿼리안에 넣어서 더 좋은 결과값 만들어냄)
-> 문자나 숫자가 들어갈 곳에 서브쿼리가 들어간다! 즉 조건이라는 것
EX>
SELECT 사용금액 FROM CARD
WHERE 고객명 IN(SELECT 이름 FROM BLACKLIST);
★무조건 이중으로 들어갈 때는 서브쿼리를 꼭 생성해서 넣어주자 특히 WHERE 구문에서는 조건에 무언가를 더 넣을때는 서브쿼리를 작성해 줄것을 꼭 기억해주기! ★
SELECT COUNT(*) AS DISTINCTCOUNTRIES
FROM(SELECT DISINCT COUNTRY FROM CUSTOMERS);
OR <평균보다 가격이 높은 모든 레코드 나열>
SELECT * FROM PRODUCTS
WHERE PRICE >(SELECT AVG(PRICE) FROM PRODUCTS);
3) 문자끼리의 덧셈 : concat
ex>
SELECT CONCAT(고객명, 고객등급)
FROM CARD;
4) 문자 내 공백제거
SELECT TRIM(고객명) FROM CARD
5) IF함수(오라클X MYSQL O => 오라클에서는 DECODE 함수)
EX>
IF(조건식, 참, 거짓);
#DECODE함수 IN ORACLE
SELECT DECODE(컬럼명, 조건, 참, /ELSE IF/조건, 참,/ELSE 일때의 값 )
#CASE
WHEN THEN
END
★★★★★
6) LEFTJOIN/RIGHTJOIN/INNERJOIN(RIGHT/LEFT/FULL은 모두OUTER JOIN)
☆조인들은 일치하는 열이 무조건 있어야 한다.☆
INNERJOIN : 교집합
LEFTJOIN과 RIGHTJOIN : 왼쪽표모두+교집합 / 오른쪽표모두+교집합
=> 특히 ★★ LEFT와 RIGHT는 "NULL"이 존재할때 정말 많이 쓰이는 구문이니까 NULL일땐 INNERJOIN 안쓰도록 진짜 조심해보자
'-----------------'
<사전적정의>
SELECT Orders.OrderID, Customers.CustomerName, Shippers.ShipperName
FROM ((Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID)
INNER JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID);
7) SELECT TOP : 반환할 레코드 수 지정
EX> CUSTMOMER TABLE의 첫 3개 레코드 지정
SELECT TOP3 *FROM CUSTOMERS;
<오라클>
SELECT COLUMN_NAME
FROM TABLE_NAME
ORDER BY
FETCH FRIST 숫자 ROWS ONLY;
8) LIMIT
-> 오라클에서는 SELECT TOP과 다를 바가 없다
-> MYSQL
SELECT * FROM CUSTOMERS
LIMIT 3;
9) SQL TOP PERCENT
: 테이블에서 레코드의 처음 50%를 사용한다
: 역시나 오라클은 FETCH FIRST 숫자 ROWS ONLY; 를 사용
<그 외>
SELECT TOP 50 PERCENT * FROM CUSTOMERS;
10) 와일드카드 문자(IN ORACLE에서만 지원=>**)
% :0~多의 다수/ 0문자도 표시함
_ :한가지 문자열 표시
[] :괄호 안에 있는 한가지라도 일치하면 반환
EX> [BSP]% => BA,BD,SA,SB,SC,PD....
^ :괄호 안에 없는 특정 문자
'-' :범위로 내부 문자 범위 저장 가능 (부득이하게 -하면 띄어쓰기 돼서 그냥''붙인거)EX> [A-F]%
{} :Represents any escaped character
11) BETWEEN A AND B
이상~이하(숫자/문자/날짜 가능)
EX> 문자
SELECT * FROM PRODUCTS
WHERE PRODUCTNAME BETWEEN 'CARNAVON TIGERS'AND 'MOZZARLLA'
ORDER BY PRODUCT NAME
-> 문자 사이에 알파벳 순으로 제품 선택
12) ALLIAS
<공백문자와 함께 :[]// 큰 따옴표와 함께 :"">
EX>
SELECT PRODUCTNAME AS[MY GREAT PRODUCTS]
FROM PRODUCTS;
OR
SELECT PRODUCTNAME AS"MY GREAT PRODUCTS"
FROM PRODUCTS;
13) 열연결
SELECT CUSTOMERNAME, ADDRESS+','+PSTALCODE+','+CITY+','+COUNTRY AS ADDRESS
FROM CUSTOMERS;
EX> 부산시/ 동래구/ 사직동
=>결과값
부산시 동래구 사직동
<IN ORACLE EX>
SELECT CustomerName, (Address || ', ' || PostalCode || ' ' || City || ', ' || Country) AS Address
FROM Customers;
14)UNOIN
15) EXISTS 연산자
: 하위 쿼리에 레코드가 있는지 테스트
: 하위 쿼리가 하나 이상의 레코드 반환 시 TRUE반환
```
SELECT column_name(s)
FROM table_name
WHERE EXISTS
(SELECT column_name FROM table_name WHERE condition);
```
16) ANY연산자/ALL연산자
17) SELECT INTO 문
: 한 데이터를 새 테이블에 복사
<둘 이상의 테이블에서 새 테이블로 데이터 복사>
SELECT Customers.CustomerName, Orders.OrderID
INTO CustomersOrderBackup2017
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
<형식>
SELECT 열이름 INTO 새테이블이름
FROM 테이블이름
WHERE 조건
18) INSERT INTO SELECT
<한 테이블의 열을 다른테이블로 복사>
INSERT INTO table2
SELECT * FROM table1
WHERE condition;
<한 테이블의 일부 열만 다른 테이블로 복사 >
INSERT INTO table2 (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM table1
WHERE condition;
19) COALSECE()함수// coalsece:합체(영단어)/MYSQL에서 사용
: 목록에서 null이 아닌 첫번째 값을 반환
20) 테이블생성
#테이블 생성
CREATE TABLE table_name (
column1 datatype,
column2 datatype,
column3 datatype,
);
#테이블삭제
DROP TABLE Shippers;
#테이블내부데이터삭제/테이블삭제x
TRUNCATE TABLE table_name;
#테이블에 열 추가
ALTER TABLE table_name
ADD column_name datatype;
ALTER TABLE Customers
ADD Email varchar(255);
# 열 삭제
ALTER TABLE Customers
DROP COLUMN Email;
21) 제약조건생성(CREATE TABLE/ALTER TABLE에서 지정가능)
★★★★★
CONSTRAINT라고 적으면 한꺼번에 제약조건 가능
'------------------------------'
=>사용이유 : 테이블의 데이터에 대한 규칙을 지정하는 데 사용/ 데이터의 정확성과 신뢰성 보장
#여러곳에 먹이는 법
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
CONSTRAINT UC_Person UNIQUE (ID,LastName)
);
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int CHECK (Age>=18)
);
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
City varchar(255) DEFAULT 'Sandnes'
);
#중복값 허용
CREATE INDEX index_name
ON table_name (column1, column2, ...);
#중복값 비허용
CREATE UNIQUE INDEX index_name
ON table_name (column1, column2, ...);
<테이블 작성 내용↕>
CREATE TABLE Orders (
OrderID int NOT NULL PRIMARY KEY,
OrderNumber int NOT NULL,
PersonID int FOREIGN KEY REFERENCES Persons(PersonID)
);
# 제약조건 생성
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
Age int
);
# 이미 생성된 테이블에서 AGE에 제약조건 넣고 싶을 때 =>MODIFY
ALTER TABLE Persons
MODIFY Age int NOT NULL;
# 제약조건삭제(DROP 사용)
ALTER TABLE Persons
DROP CONSTRAINT UC_Person;
#생성된 테이블에서 PRIMARY KEY 제약조건 설정
ALTER TABLE Persons
ADD PRIMARY KEY (ID);
22) 뷰 생성
: 결과 집합을 기반으로 하는 가상 테이블// 뷰는 항상 최신 데이터가 표시된다. 데이터베이스 엔진은 사용자가 쿼리할 때마다 뷰를 다시 만든다.
CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
EX>뷰생성
CREATE VIEW [Brazil Customers] AS
SELECT CustomerName, ContactName
FROM Customers
WHERE Country = 'Brazil';
EX>쿼리
SELECT * FROM [Brazil Customers];
#CUSTOMERNAME/CONCATNAME 열로 브라질관련 애들이 나온다.
#뷰업데이트
CREATE OR REPLACE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
'---------'
W3SCHOOL에서 저장프로시저까지 읽음
↓ SQL연산자
https://www.w3schools.com/sql/sql_operators.asp
+SQL자동증가
+SQL INJECTION