mysql은 가장 널리 사용되고 있는 관계형 데이터 베이스 관리 시스템
sql의 분류
DML (data manipulation language)
-데이터조작언어
-데이터를 조작(선택,삽입,수정,삭제)하는 데 사용되는 언어
-DML구문이 사용되는 대상은 테이블의 행
-DML사용하기 위해서는 꼭 그 이전에 테이블이 정의되어 있어야함
-SQL문 중 SELECT, INSERT, UPDATE, DELETE가 이 구문에 해당
-트랜잭션이 발생하는 SQL도 이 DML에 속함
(테이블의 데이터를 변경(입력;/수정/삭제)할떄 실제 테이블에 완전히 적용하지 않고, 임시로 적용 시키는 것.
DDL (data definition language)
-데이터 정의 언어
-데이터베이스, 테이블 , 뷰 , 인덱스 등의 데이터 베이스 개체를 생성/삭제/변경하는 역할
-create, drop, alter 구문
show databases
show tables
show table status ( 테이블의 정보)
desc
select * from users;
select name, phone from users;
where 절은 특정 조건
select *
from city
where population >= 800000;
and population > 700000
or and 조건 연산자 관계연산자 이런거로 조합해서 where절을 효율적이게 잘 쓸수 있따.
select *
from city
where countryside = “kor”
and population > 500000;
where population between 700000 and 800000
where name in ( ‘seoul’, ’newyork’) 이런식l
이 도시들만 보여줌
like 는 문자열의 내용을 검색하기 위해 사용 문자뒤에 % 무엇이든 % 허용
한글자와 매치하기 위해서는 - 사용
Ko 아니면 kor 기억이 안나는거야 ko 인지 kor 인지 그럼 하나만 걍 매칭해줄테니까 언더바쓰셈
ko_
where countryside like ‘ko_’
tel로 시작하는 뭐..있는데 그럴때는 tel %. 이렇게 쓰면됌
select *
from city
where countryside = ( select countryside
from. city
where name = ‘seoul’)
ANY 서브쿼리의 여러개 결과 중 한가지만 만족해도 가능
=any 구문은
select *
from city
where countryside > any ( select countryside
from. city
where name = ‘seoul’)
any 자리에 all있으면 모든 서브쿼리의 여러개 결과를 모두 만족시키는 것이 나오게 됌.
select *
from city
order by population desc
기본적으로 오름차순 정렬임 그리고 desc를 뒤에 적어주면 내림차순 가능
distinct 중복된것은 1개씩만 보여주면서 출력
limit 10 이렇게해주면 10개만 보여줌 상위로
select *
from city
order by population desc
limit 10
——————————————————————————————————————————
그룹으로 묶어주는 역할
집계함수(aggregate function)를 함께 사용
AVG():평균
MIN():최소값
MAX():최대값
COUNT():행의개수
STDEV():중복 제외된 행의 개수
VARIANCE:분산
효율 적인 데이터 그룹화
읽기 좋게 하기 위해 별칭 사용
SELECT CountryCOde, MAX(population) AS 'population'
from city
croup by Countrycode
where과 비슷한 개념으로 조건을 제한함
반드시 그룹바이절 다음에 나와야함
select countrycode , max(population)
from city
group by countryside
having max(population) > 800000
——————————————————————————————————————————
join은 데이터베이스 내의 여러 테이블에서 가져온 레코드를 조합하여 하나의 테이블이나 결과 집합으로 표현
select *
from city
join country ON city.countrycode = country.code
join country language ON city,countrycode = country language.countrycode
이러면 3개의 테이블이 조인된 형태임
시티와 컨트리를 조합하고 싶어.
조건이 뭐냐면 시티의 컨트리코드와 컨트릐코드가 같은것을 기준으로 조인해줘
컨트리 랭기지 원하는데 시티의 컨트리코드에 컨트리 랭기지의 컨트리 코드와 같은걸 조인해줘
select trim(‘ mysql. ‘), 이런식이면 공백을 없앰
trim(leading ‘#’ from ‘###mysql##’). 트림 리딩은 앞에문자제거
mysql##
trim(trailing ‘#’ from ‘###mysql##’). 트림 트레일링은 뒤에 문자 제거
###mysql
select now() 현재시간
select now(),
date(now()),
month(now()),
day
hour
minute
second(now());
CREATE TABLE AS SELECT
특정 테이블과 같은 특정테이블2 생성
create table city2 as select * from city;
create table test2 (
id int not null primary key,
col1 int null,
col2 float null,
col3 varchar(45) null
);
select * from test2;
ALTER TABLE
테이블 만들었는데 실수했을때, 컬럼이 3개까지만 되이쓴ㄴ데 원래 필요한게 4개였다면
alter table test2
add col4 int null;
add, modify
alter table test2
modify col4 varchar(20) null; 이렇게 int를 바차로 바꿔주었고
alter table test2
drop col4; 하면 사라짐
인덱스
-테이블에서 원하는 데이터를 빠르게 찾기위해 사용
-일반적으로 데이터를 검색할 떄 순서대로 테이블 전체를 검색하므로 데이터가 많으면 많을수록 탐색하는 시간 늘어남
-검색과 질의를 할떄 테이블 전체를 읽지 않기 떄문에 빠름
-설정된 컬럼 값을 포함한 데이터의 삽입 ,삭제, 수정 작업이 원본 테이블에서 이루어질 경우, 인덱스도 함꼐 수정되어야함
-인덱스가 있는 테이블은 처리 속도가 느려질수 있으므로 수정보다는 검색이 자주 사용되는 테이블에서 사용하는것이 좋음.
근데 단점이 뭐냐면 크기자체가 계속 커질수있고 삽입 삭제가 계속 진행되면 테이블 수정과함꼐 인덱스 수정도 해줘야 되서 처리속도가 나중에 느려질수가 있음.
검색주로하는 테이블에서 사용해주는 게좋음
create index col1Idx
ON test (col1)
show index from test;
중복값 허용하지않는 인덱스 만드려면 create unique index 해주면됌
create unique index col2Idx
ON test (col2);
테이블컬럼수랑 인서트하는수랑 당연히 같아야지..
insert into test
value(1, 123, 1.1 , “test”); 컬럼4개짜리
select * from test;
UPDATE test
set col1 = 1 , col2 = 5 , col3 = ‘test’
where id = 1; ( 이게 포인트임 아이디설정해서 웨어구문 안써주면 테이블 전체 다 수정되버림)
행 단위로 데이터 삭제하는 구문
DELETE FROM 테이블이름 WHERE조건;
데이터는 지워지지만 테이블 용량은 줄어들지 않음
원하는 데이터만 지울 수 있음
삭제후 잘못 삭제한 것을 되롤릴수 있음.
이것도 근데 where로 id 설정해주든가해서 지우는거 설정 잘안해주면 테이블 다날라감
delete from test
where id =1;
행단위로 사라진다는 점 잊지말기
복구가능
복구불가능
테이블은 삭제하지는 않고 , 데이터만 삭제
한꺼번에 다 지워야함
테이블은 삭제하지 않고 데이터만 다지워짐
drop table
테이블 걍 전체를 삭제 공간 객체 전부다 삭제 되돌릴수없음;ㄷ;ㄷ;ㄷ;ㄷ;ㄷ;ㄷ
drop database 데이터베이스 이름