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 안쓰도록 진짜 조심해보자
'-----------------'
<사전적정의>

  • (INNER)JOIN : 두 테이블 모두에서 일치하는 값이 있는 레코드 반환
    EX>3테이블 조인
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);
  • LEFT JOIN : 왼쪽 테이블의 모든 레코드+ 오른쪽테이블과 왼쪽의 교집합 반환
  • RIGHT JOIN : 오른쪽 테이블의 모든 레코드+ 왼쪽테이블과 오른쪽의 교집함 반환
  • FULL JOIN : 왼쪽과 오른쪽 하나에 일치하는 경우 모든 레코드 반환

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에서만 지원=>**)

Symbol Description

% :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

  • SELECT-FROM1 UNION SELECT-FROM2 UNION 동일한 열수
  • 데이터 유형 유사
  • 모든 문의 열의 SELECT가 동일순서

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

  • 한 테이블의 데이터를 복사해서 다른 테이블에 삽입
  • 소스(SOURCE) 테이블과 - 대상테이블 유형 일치 요함
< 테이블의 열을 다른테이블로 복사>
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라고 적으면 한꺼번에 제약조건 가능
'------------------------------'
=>사용이유 : 테이블의 데이터에 대한 규칙을 지정하는 데 사용/ 데이터의 정확성과 신뢰성 보장

  • NOT NULL : 열이 NULL값을 가질 수 없도록 보장
  • UNIQUE : 열의 모든 값이 서로 다른지 확인
#여러곳에 먹이는 법
CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    CONSTRAINT UC_Person UNIQUE (ID,LastName)
);
  • PRIMARY KEY NOT NULL :테이블의 각 행을 고유하게 식별(UNIQUE값을 포함해야하며 NULL값 금지)
  • FOREIGN KEY : 테이블 간의 링크 파괴행위방지
    -> 외래키가 있는 테이블(하위테이블)
    -> 기본키가 있는 테이블(참조테이블/상위테이블)
    ->EX> I.ANIMAL_INS JOIN U.ANIMAL_OUT에서
    I.NAME = U.NAME에서
    전자가 주키//후자가 외래키
  • CHECK : 열의 값이 특정조건을 만족하는지 확인/ 값의 범위 설정
CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int CHECK (Age>=18)
);
  • DEFAULT : 값이 지정되지 않은 경우 열의 기본값 설정/NULL값의 기본값
CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    City varchar(255) DEFAULT 'Sandnes'
);
  • CREATE INDEX :데이터베이스에서 데이터를 매우 빠르게 생성하고 검색하는데 사용.
#중복값 허용
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

profile
주니어 개발자 잼미뇽 공부용 기록장

0개의 댓글