SQL
권한과 DCL , GRANT, REVOKE
대장 사용자 = ROOT 사용자 --MySQL의 기본데이터베이스인 mysql 선택하기 USE mysql; --사용자 목록 조회하기 SELECT user, host FROM user; --사용자 생성하기 CREATE USER 사용자이름 @ip주소 ; --사용자 비밀번호도 함께 생성하기 CREATE USER 사용자이름 @ip주소 IDENTIFIED BY '사용자비밀번호'; -- 사용자 삭제하기 DROP USER 사용자이름 --권한부여하기 GRANT 권한 ON 데이터베이스이름.테이블이름 TO 사용자이름 @ip주소; --권한 확인하기 SHOW GRANTS FOR 사용자이름@ip주소 --권한 삭제하기 REVOKE 권한 ON 데이터베이스이름.테이블이름 FROM 사용자이름@ip주소; --권한 적용하기 FLUSH PR..
CREATE TABLE , 제약조건(NOT NULL, UNIQUE, DEFAULT, PK, FK)
CREATE TABLE 및 ALTER TABLE 구문에서 설정 가능 제약조건 종류 NOT NULL - 널값 저장 불가 UNIQUE - 서로 다른 값 가져야함 DEFAULT - 입력값 없을 시 기본값 설정 PRIMARY KEY - 기본 키, NOT NULL과 UNIQUE 특징 모두 가짐 FOREIGN KEY - 외래 키, 다른 테이블의 특정 컬럼을 참조 CREATE TABLE friendpokemon( number INT PRIMARY KEY, name VARCHAR(20) NOT NULL, attack INT DEFAULT 0, FOREIGN KEY(number) REFERENCES mypokemon(number) );
DELETE, UPDATE Error CODE 1175
DELETE FROM pokemon.mypokemon WHERE attack >50 ; UPDATE pokemon.mypokemon SET type='normal' WHERE name ='chikorita'; 1175 ERROR 1175 ERROR 메뉴>preferences접속>SQL Editor 접속> 하단Safe Updates 해제 > OK클릭해 적용> 이후 반드시 Local Instance 재접속
RANK, DENSE_RANK, ROW_NUMBER
RANK 12245 SELECT절에 사용 SELECT RANK() OVER(ORDER BY 컬럼 DESC) AS 별명 DENSE_RANK 12234 ROW_NUMBER 12345
서브쿼리(select, from, where)
전부 서브쿼리 가능 SELECT FROM WHERE GROUP BY -> 서브쿼리 불가 HAVING ORDER BY 서브쿼리 특징 - 반드시 괄호안에 있어야 함 - GROUP BY 절을 제외한 모든 절에 사용가능 - INSERT, UPDATE, DELETE문에도 사용가능 서브쿼리에는 세미콜론을 붙이지 않아도 됩니다 세미콜론 ; 은 전체 메인쿼리가 끝난 마지막에만 붙일수있음 SELECT, 서브쿼리 ( 스칼라 서브쿼리) SELECT절의 서브쿼리는 반드시 결과값이 하나의 값!! SELECT number, name, (SELECT height FROM ability WHERE number=25) AS height FROM mypokemon WHERE name='pikachu'; FROM 서브쿼리(인라인뷰 서브쿼..
UNION, UNION ALL, 교집합 , 차집합
UNION =중복 제거 UNION ALL = 중복 포함 SELECT절에서 가져오는 컬럼의 수가 같아야 함 ORDER BY는 쿼리 가장 마지막에 작성가능\ SELECT FROM UNION SELECT FROM UNION ALL : 중복된 값도 같이 붙임 SELECT FROM UNION ALL SELECT FROM 교집합 교집합 INTERSECT INNER JOIN 차집합 SELECT FROM LEFT JOIN ON t1.z WHERE t2.컬럼 IS NULL; mission 1) SELECT DISTINCT type FROM mypokemon UNION SELECT DISTINCT type FROM friendpokemon; mission 2) SELECT number, name, 'my' AS whose..
JOIN 실습
mission 1) SELECT t1.name, t2.attack, t2.defense FROM mypokemon AS t1 LEFT JOIN ability AS t2 ON t1.number= t2.number ; mission 2) SELECT t1.number, t2.name FROM ability AS t1 LEFT JOIN mypokemon AS t2 ON t1.number = t2.number ; mission 1) SELECT t1.type, t2.AVG(height) FROM mypokemon AS t1 INNER JOIN ability AS t2 ON t1.number=t2.number GROUP BY t1.type; mission 2) SELECT t1.type, t2.AVG(weight..
LEFT JOIN, INNER JOIN , 차집합
left join / right join SELECT t1.number, t1.name, t2.height, t2.weight FROM mypokemon AS t1 LEFT JOIN ability AS t2 ON t1.number = t2.number; SELECT * FROM mypokemon RIGHT JOIN ability ON mypokemon.number = ability.number; inner join - 두 테이블 모두에 있는 값만 합치기 OUTER JOIN , CROSS JOIN, SELF JOIN UNION = 두 쿼리의 결과를 중복을 제외하고 합쳐서 보여주는 집합 연산자 MySQL에는 키워드가 없어서 LEFT JOIN UNION RIGHT JOIN SELECT FROM LEFT JOI..
UDF(User Define Function), Delimiter
DELIMITER // CREATE FUNCTION isStrong(attack INT, defense INT) RETURNS VARCHAR(20) BEGIN DECLARE a INT; DECLARE b INT; DECLARE isstrong VARCHAR(20); SET a = attack; SET b = defense; SELECT CASE WHEN a+b>120 THEN 'very strong' WHEN a+b>90 THEN 'strong' ELSE 'not strong' END INTO isstrong ; RETURN isstrong; END // DELIMITER ; SELECT name, isStrong(attack, defense) AS isStrong FROM mypokemon;