본문 바로가기
🖥Web/🔥DB & SQL

[SQL]MySql - 1 초급

by 후누스 토르발즈 2020. 1. 5.
반응형
반응형

 

MySql

 

DML = Data Manipulation Language

데이터 조작 언어, 데이터를 조작(선택, 삽입, 수정, 삭제)하는데 사용되는 언어

DML 구문이 사용되는 대상은 테이블의 행

DML 사용하기 위해서는 꼭 이전에 테이블이 정의되어 있어야함

SQL문 중 SELECT, INSERT, UPDATE, DELETE가 이 구문에 해당

 트랜잭션이 발생하는 SQL도 이 DML에 속함

-테이블의 데이터를 변경(입력/수정/삭제)할때 실제 테이블에 완전히 적용하지 않고, 임시로 적용시키는것

-취소가능

 

 

DDL = Data Definition Language

데이터 정의 언어

데이터 베이스, 테이블, 뷰, 인덱스 등의 데이터 베이스 개체를 생성/삭제/변경하는 역할

CREATE, DROP, ALTER구문

DDL은 트랜잭션 발생시키지 않음

ROLLBACK이나 COMMIT 사용 불가

DDL문은 실행 즉시 MySQL에 적용

 

 

DCL = Data Control Language

데이터 제어 언어

사용자에게 어떤 권한을 부여하거나 빼앗을때 주로 사용하는 구문

GRANT/REVOKE/DENY

 

 

 

QUERY

 

SHOW DATABASES = 현재 서버에 어떤 DB가 있는지 보기

USE database_name=사용할 데이터베이스 지정,지정해 놓은 후 특별히 다시 USE문 사용하거나 다른DB를 사용하겠다고

                            명시하지 않는 이상 모든 SQL문은 지정 DB에서 수행(Workbench에서 직접 선택해 사용 가능)

 

블럭만체크해서 실행하면 그것만실행가능

MySQL함수 및 연산자링크 http://dev.mysql.com/doc/refman/8.0/en/functions.html

 

query 명령문

SHOW TABLES = 테이블을 보여줘 (USE ... 후 SHOW TABLES 하면 사용하는 데이터베이스의 테이블을 보여준다)

SHOW TABLES STATUS = 테이블의 상태(정보)를 보여줘

DESCRIBE city = city 테이블에 무슨 열(속성정보)이 있는지 확인 == DESC city ( 속성정보)

SELECT * FROM city = city에 있는 전체 데이터들을 보여줘

SELECT Name FROM city = city에 있는 Name 데이터들을 보여줘

SELECT Name, population FROM city = city에 있는 Name과 population 컬럼을 보여줘

WHERE =조회하는 결과에 특정한 조건으로 원하는 데이터만 보고싶을때 사용

 

SELECT * FROM city WHERE Population < 8000; = city테이블의 Population의 모든데이터중에서 8000이하인 정보

(SELECT 필드이름 FROM 테이블이름 WHERE 조건식;)

SELECT * FROM city WHERE Population < 8000 AND Population > 7000;= city테이블의 Population의 모든데이터중에서 8000이하이면서 7000 이상인 정보를 조회해줘

(SELECT 필드이름 FROM 테이블이름 WHERE 조건식 AND 조건식)

SELECT * FROM city WHERE Population < 8000 AND Population > 7000

  ==  SELECT * FROM city WHERE Population BETWEEN 7000 AND 8000

같은뜻이다.

 

SELECT * FROM city WHERE Name IN('Seoul', 'NewYork', 'Tokyo') =city의 모든 정보중에 Name에 Seoul, NewYork, Tokyo이 들어가있는것들만 보여줘

SELECT * FROM city WHERE CountryCode IN('KOR', 'UAS', 'JPN') = city의 모든 정부중에 CountryCode에 KOR, UAS, JPN이 들어가잇는것들만 보여줘

이산적인 Discrete 값의 조건에서는 IN() 사용 가능

 

SELECT * FROM city WHERE countryCode LIKE 'KO_' = 언더바 갯수만큼은 잘 모르겠다고 명시할수 있다.

SELECT * FROM city WHERE countryCode LIKE 'KO%' = %무엇이든 허용, 뭐가올지 모르는데 KO들어가는거

 

Sub Query

SELECT * FROM city WHERE CountryCode = (SELECT CountryCode FROM city WHERE Name = 'seoul');

= 모든 정보를 찾아줘. city에서 어떤? CountryCode 인것으로. CountryCode = CountryCode를 찾아줘 city에서 어떤? Name이 seoul것으로 KOR

 

쿼리문 안에 또 쿼리문이 들어 있는 것

서브 쿼리의 결과가 둘 이상이 되면 에러발생

 

SELECT * FROM city WHERE Population > ANY =(SELECT Population FROM city WHERE District='New York');==

SELECT * FROM city WHERE Population > SOME =(SELECT Population FROM city WHERE District = 'New York');서브쿼리의 여러 개의 결과 중 한가지만 만족해도 가능

SOME은 ANY와 동일한 의미로 사용

= ANY 구문은 IN과 동일한 의미 (...인것으로?)

 

SELECT * FROM city WHERE Population > ALL = (SELECT Population FROM city WHERE District = 'New York'); ALL은 모두 만족시켜야함

 

SELECT * FROM city ORDER BY Population DESC = 모든정보를 보여줘 CITY로부터 순서대로. population을. 내림차순으로

 

결과가 출력되는 순서를 조절하는 구문

기본설정은 오름차순 정렬

내림차순으로 정렬 가능 = 열 이름 뒤에 desc 적어줄것

ASC(오름차순)는 default 이므로 생략 가능

 

SELECT * FROM city ORDER BY CountryCode ASC, Population DESC = 모든정보를 보여줘 city로부터 순서대로 CountryCode는 오름차순으로, Population 은 내림차순으로

 

SELECT DISTINCT CountryCode FROM city = 중복안되게 조회해줘

SELECT * FROM city ORDER BY Population DESC LIMIT 10 = 10개만 출력해줘

SELECT CountryCode, MAX(population) FROM city GROUP BY CountyCode  = 컨트리코드를 조회해줘 인구수 제일 많은걸로 city로부터 그룹화해서 CountryCode를

그룹으로 묶어주는 역할, 효율적인 데이터 그룹화, 읽기 좋게 하기 위해 별칭 사용

SELECT CountryCode, MAX(population) AS 'Average' FROM city GROUP BY CountyCode =

MAX(population) 처럼 집계함수 컬럼이 별로이면 AS를 붙여서 별칭을 붙여줄 수 있다.

집계함수를 함께 사용 AVG():평균, MIN():최소값, MAX():최대값, COUNT()행의 개수, COUNT(DISTINCT):중복제외된 행의 개수, STDEV():표준 편차, VARIANCE():분산

 

SELECT CountryCode, MAX(Population) FROM city GROUP BY CountryCode HAVING MAX(Population) > 8000

= 컨트리코드를 조회해줘 인구수 제일 많은걸로 city로부터 그룹화해서 CountryCode를 MAX(population)이 8000보다 높은걸로

WHERE과 비슷한 개념으로 조건 제한, 집계함수에 대해서 조건 제한하는 편리한 개념, HAVING절은 반드시 GROUP BY절 다음에 나와야함

 

SELECT CountryCode, Name, SUM(Population) FROM city GROUP BY CountryCode, Name WITH ROLLUP =

컨트리코드와 네임, 인구합계를 조회해줘 city로부터 컨트리코드와 네임을 그룹화해서 묶어서 중간합계를 보여줘

총합 또는 중간합계가 필요할 경우 사용, GROUP BY절과 함께 WITH ROLLUP문 사용

 

SELECT * FROM city JOIN country ON city.CountryCode = country.Code =

모든걸 조회해줘, city로부터 country를 시티.컨트리코드와 컨트리.코드가 같은걸 기준으로 조회해줘

 

JOIN은 여러개의 테이블을 조합할때 사용, ON은 조건식

JOIN은 데이터베이스 내의 여러 테이블에서 가져온 레코드를 조합하여 하나의 테이블이나 결과 집합으로 표현

 

SELECT * FROM city

JOIN conutry ON city.CountryCode = country.Code JOIN countrylanguage ON citry.CountryCode = countrylanguage.CountryCode

= 테이블 3개를 JOIN 하기

 

SELECT LENGTH('asdfasdf') = 전달받은 문자열의 길이를 반환

SELECT CONCAT('My', 'sql Op', 'en Source') = 전달받은 문자열을 모두 결합하여 하나의 문자열로 반환

전달받은 문자열 중 하나라도 NULL이 존재하면 NULL을 반환

 

SELECT LOCATE('abc', 'abababababcabacbac') =문자열을 내에서 찾는 문자열이 처음으로 나타나는 위치를 찾아서 해당 위치를 반환,찾는문자열이 문자열 내에 존재하지 않으면 0을 반환 MySQL에서는 문자열의 시작 인덱스를 1부터 계산

 

SELECT LEFT ('MySQL is good system', 5) RIGHT ('MySqL is good system', 6) = MySQL , system;

LEFT(): 문자열의 왼쪽부터 지정한 개수만큼의 문자를 반환,RIGHT():문자열의 오른쪽부터 ㅣ정한 개수만큼의 문자를 반환

 

SELECT LOWER ('MySQL is good system') UPPER ('MySqL is good system') = mysql is good system, MYSQL IS GOOD SYSTEM

LOWER() : 문자열의 문자를 모두 소문자로 변경, upper(): 문자열의 문자를 모두 대문자로 변경

 

SELECT REPLACE('MSSQL', 'MS', 'My') =  MySQL

문자열에서 특정 문자열을 대체 문자열로 교체

 

SELECT TRIM('              MySQL          ') = MySQL

SELECT TRIM(LEADING '#' FROM '##MySQL##'), TRIM(TRAILING '#' FROM '##MySQL##');= MySQL##  ##MtSQL

 

문자열의 앞이나 뒤, 또는 양쪽 모두에 있는 특정 문자를 제거

TRIM()함수에서 사용할 수 있는 지정자

BOTH:전달받은 문자열의 양 끝에 존재하는 특정 문자를 제거(기본설정)

LEADING:전달받은 문자열 앞에 존재하는 특정 문자를 제거

TRAILING: 전달받은 문자열 뒤에 존재하는 특정 문자를 제거

만약 지정자를 명시하지 않으면, 자동으로 BOTH로 설정

제거할 문자를 명시하지 않으면, 자동으로 공백을 제거

 

SELECT FORMAT(123123123123.123123123, 6); = 123, 123, 123, 123, 123123

숫자 타입의 데이터를 세 자리마다 쉼표(,)를 반환하는 '#,###,###.##' 형식으로 변환

반환하는 데이터의 형식은 문자열타입, 두 번째 인수는 반올림할 소수 부분의 자릿수

 

SELECT FLOOR(10.95), CEIL(10.95), ROUND(10.95) = 10, 11, 11

FLOOR():내림, CEIL():올림, ROUND(): 반올림

 

SELECT SQRT(4), POW(2,3), EXP(3), LOG(3) = 2,   8,   20.085536923187668,      1.0986122886681098

SQRT(): 양의 제곱근, pow():첫번째 인수로는 밑수를 전달하고, 두번째 인수로는 지수를 전다랗여 거듭제곱계산

EXP(): 인수로 지수를 전달받아, e의 거듭제곱을 계산, LOG():자연로그 값을 계산

 

SELECT SIN(PI()/2), COS(PI()), TAN(PI()/4); = 1, -1, 0.99999999999999999999

PI() = 파이값 반환, SIN(): 사인값 반환, COS(): 코사인값 반환 TAN(): 탄젠트값 반환

 

SELECT ABS(-3), RAND(), ROUND(RAND()*100, 0); = 3,      0.42092382295143216,      58

ABS(X): 절대값을 반환

RAND():0.0보다 크거나 같고 1.0보다 작은 하나의 실수를 무작위로 생성

 

SELECT NOW(), CURDATE(), CURTIME();

NOW(): 현재 날짜와 시간을 반환, 반환되는 값은 'YYYY-MM-DD HH:MM:SS' 또는 YYYYMMDDHHMMSS 형태로 반환

CURDATE(): 현재 날짜를 반환, 이때 반환되는 값은 'YYYY-MM-DD' 또는 YYYYMMDD 형태로 반환

CURTIME(): 현재 시각을 반환, 이때 반환되는 값은 'HH:MM:SS' 또는 HHMMSS형태로 반환

 

NOEW()

DATE(NOW()) = 전달받은 값에 해당하는 날짜 정보를 반환

MONTH(NOW()) = 월에 해당하는 값을 반환하며, 0부터 12사이의 값을 가짐

DAY(NOW()) = 일에 해당하는 값을 반환하며, 0부터 31 사이의 값을 가짐

HOUR(NOW()) = 시간에 해당하는 값을 반환하며, 0부터 23 사이의 값을 가짐

MINUTE(NOW()) = 분에 해당하는 값을 반환하며, 0부터 59 사이의 값을 가짐

SECOND(NOW()) = 초에 해당하는 값을 반환하며, 0부터 59 사이의 값을 가짐

 

SELECT NOW(),

MONTHNAME(NOW()): 월에 해당하는 이름을 반환

DAYNAME(NOW()): 요일에 해당하는 이름을 반환

 

SELECT NOW(),

DAYOFMONTH(NOW()) = 일자가 해당 주에서 몇번쨰 날인지를 반환 (달의 몇일째야)

DAYOFWEEK(NOW()) = 일자가 해당 월에서 몇 번째 날인지를 반환, 0부터 31 사이의 값을 반환(주의 몇일째)

DAYOFYEAR(NOW()) = 일자가 해당 연도에서 몇번째 날인지를 반환, 1부터 366사이의 값을 반환(연의 몇일째)

 

SELECT

DATE_FORMAT(NOW(), '%D %y %a %d %m %n %j)

전달받은 형식에 맞춰 날짜와 시간 정보를 문자열로 반환

 

MySQL Date and Time Function

http://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html

 

 

반응형

'🖥Web > 🔥DB & SQL' 카테고리의 다른 글

[Sql] SQL Cursor  (0) 2020.03.20
[SQL] SQL의 예외처리  (0) 2020.03.20
[SQL] 프로시저(procedure)와 declare 차이  (0) 2020.03.20
[SQL] 프로토콜에서 procedure 생성  (0) 2020.03.17
[SQL]MySql - 2 고급  (0) 2020.01.05