수업/수업정리
2024-03-07-오전:DDL실습3_비교연산자/논리연산자
Dev.chandel
2024. 3. 7. 12:32
1. AS 별칭
컬럼의 이름을 별칭으로 만들 수 있다.
조회하려는 열 이름이 길어지는 경우, 별칭을 작성해서 조회
작은 따옴표(') 안에 별칭을 사용하기를 권장
테이블 이름에 별칭을 작성할 때, 작은 따옴표 사용 안함
실제 컬럼의 이름이 바뀌는 것은 아님. 조회 시에만 보이는 것.
-- 테이블_이름 AS 별칭 / 칼럼_이름 AS '별칭'
SELECT
m.u_id AS '회원의 아이디',
m.u_name AS '회원의 이름'
FROM
tb_member AS m;
-- 참과 거짓
SELECT TRUE;
SELECT FALSE;
SELECT 1=1;
/*
1. city table의 모든 데이터 조회
2. 모든 도시 이름 조회
3. 도시의 이름, 국가코드, 인구수 조회
4. 국가 코드가 USA인 도시의 이름과 인구수 조회
5. 도시 seoul을 찾고, '한국의 수도'하는 이름으로 조회
*/
-- 1. city table의 모든 데이터 조회
SELECT
*
FROM city;
-- 2. 모든 도시 이름 조회
SELECT
Name
FROM
city;
-- 3. 도시의 이름, 국가코드, 인구수 조회
SELECT
Name,
CountryCode,
Population
FROM city;
-- 4. 국가 코드가 USA인 도시의 이름과 인구수 조회
SELECT
Name,
Population
FROM
city
WHERE
CountryCode='USA';
-- 5. 도시 seoul을 찾고, '한국의 수도'하는 이름으로 조회
SELECT
NAME AS '한국의 도시'
FROM city
WHERE Name='seoul';
/*
연산자
1. 비교 연산자
A=B : A와 B가 같다 / A>B : A가 B보다 크다 / A<B : A가 B보다 작다 /
A!=B : A와 B가 다르다 / A>=B : A가 B보다 크거나 같다 / A<=B : A가 B보다 작거나 같다 /
2. 논리 연산자 =복합 조건
A AND B : A와 B일 때 / A OR B : A나 B일 때 / A XOR B : A랑 B가 다를 때 / NOT A : A가 아닐 때 /
A && B : A와 B일 때 / A || B : A나 B일 때 / ! A : A가 아닐 때 /
1. city에서 인구수 500만 이상인 도시의 이름, 지역구, 인구수 조회
2. 인구수가 200만 이상이고, 한국에 속한 도시의 이름, 국가코드, 지역구, 인구수 조회
*/
-- 1. city에서 인구수 500만 이상인 도시의 이름, 지역구, 인구수 조회
SELECT
c.Name,
c.District,
c.Population
FROM
city AS c
WHERE
c.Population >= 5000000;
-- 2. 인구수가 200만 이상이고, 한국에 속한 도시의 이름, 국가코드, 지역구, 인구수 조회
SELECT
c.Name,
c.CountryCode,
c.District,
c.Population
FROM
city AS c
WHERE
c.Population >= 2000000 AND c.CountryCode = 'KOR';
/*
1. 인구수가 3백만 이상 5백만 이하인 데이터를
도시이름, 국가코드, 인구수
*/
SELECT
c.Name,
c.CountryCode,
c.Population
FROM
city AS c
WHERE
c.Population >= 3000000 AND c.Population <= 5000000;
/*
1. 국가 코드가 KOR이거나, AFG이거나, NLD인 국가의
도시 이름, 국가 코드를 조회
*/
SELECT
c.Name,
c.CountryCode
FROM
city AS c
WHERE
c.CountryCode = 'KOR'
OR
c.CountryCode = 'AFG'
OR
c.CountryCode = 'NLD';
-- IN() : WHERE절에서 2개 이상의 값을 비료할때 사용
SELECT
c.Name,
c.CountryCode
FROM
city AS c
WHERE
c.CountryCode IN('KOR','AFG','NLD');
/*
LIKE : 검색할 문자열에 와일드 카드를 사용해서 검색 조건을 구체적으로 표현
칼럼_이름 LIKE 검색할_문자열;
칼럼_이름 LIKE '%검색할_문자열%'; - % : 0개 이상의 문자를 대체
칼럼_이름 LIKE '_검색할_문자열%'; - _ : 1개 문자를 대체
LIKE '__a%' : 세번째가 a인 문자열 검색
NOT LIKE : 특정 문자를 제외하고 검색
NOT LIKE 'a%' : a로 시작하지 않는 문자열 검색
1. 도시 이름이 seo로 시작하는 모든 도시 이름 조회
2. 도시 이름에 eo가 들어가는 도시 이름을 조회
*/
-- 1. 도시 이름이 seo로 시작하는 모든 도시 이름 조회
SELECT
c.Name
FROM
city AS c
WHERE
c.Name LIKE 'seo%';
-- 2. 도시 이름에 eo가 들어가는 도시 이름을 조회
SELECT
c.Name
FROM
city AS c
WHERE
c.Name LIKE '%eo%';
-- 3. EO가 들어가는 도시 이름 중, EO 앞에 1글자, EO뒤에 어떤 문자
-- 전부 가능하도록 조회
SELECT
c.Name
FROM
city AS c
WHERE
c.Name LIKE '_eo%';
/*
1. 국가 코드가 K, U, A로 시작하는
국가의 도시 이름, 국가 코드를 조회
2. 국가 코드가 A, E, I로 시작하지 않고 A, O, U로 끝나지 않는
국가의 도시 이름, 국가 코드 조회
*/
SELECT
c.Name,
c.CountryCode
FROM
city AS c
WHERE
c.Name LIKE 'K%'
OR
c.Name LIKE 'U%'
OR
c.Name LIKE 'A%';
SELECT
c.Name,
c.CountryCode
FROM
city AS c
WHERE
(c.Name NOT LIKE 'A%'
OR
c.Name NOT LIKE 'E%'
OR
c.Name NOT LIKE 'I%')
AND
(c.Name NOT LIKE '%A'
OR
c.Name NOT LIKE '%O'
OR
c.Name NOT LIKE '%U');
/*
DISTINCT : 중복된 행 데이터 제외
하나의 ROW(행)를 기준으로 전체 칼럼의 조회 결과를 비교
*/
SELECT
c.CountryCode
FROM
city AS c;
SELECT DISTINCT
c.CountryCode
FROM
city AS c;
-- LIMIT : 제한된 수 조회
SELECT
c.CountryCode
FROM
city AS c
LIMIT 100;
/*
ORDER BY : 기본정렬(오름차순)
(DESC) : 내림차순 정렬
ORDER BY 컬럼1, 컬럼2
-> 컬럼 1로 먼저 정렬하고 컬럼2
-> 만약 값이 같다면 컬럼2부터 정렬
숫자> 영문자 > 한글 순으로 정렬
*/
SELECT
c1,
c2
FROM
R
WHERE
조건
ORDER BY 정렬하고 싶은_컬럼이름(DESC);
/*
1. 도시 이름을 오름차순으로 조회
2. 도시 이름을 내림차순으로 조회
3. 인구수를 기준으로 오름차순으로 정렬하고
도시 이름과 인구수 조회
4. 인구수가 100만명 이상인 도시의 이름과 인구수를 조회
인구수 기준 오름차순 정렬
*/
-- 1. 도시 이름을 오름차순으로 조회
SELECT
c.Name
FROM
city AS c
ORDER BY c.Name;
-- 2. 도시 이름을 내림차순으로 조회
SELECT
c.Name
FROM
city AS c
ORDER BY c.Name DESC;
-- 3. 인구수를 기준으로 오름차순으로 정렬하고
-- 도시 이름과 인구수 조회
SELECT
c.Name,
c.Population
FROM
city AS c
ORDER BY c.Population;
-- 4. 인구수가 100만명 이상인 도시의 이름과 인구수를 조회
-- 인구수 기준 오름차순 정렬
SELECT
c.Name,
c.Population
FROM
city AS c
WHERE
c.Population>=1000000
ORDER BY c.Population;
/*
1. 국가 코드가 USA면서 인구수가 200만명보다 많은 도시의
이름과 인구수를 조회, 도시 이름 기준 내림차순정렬
*/
SELECT
c.Name,
c.Population
FROM
city AS c
WHERE
c.CountryCode = 'USA' AND c.Population >= 2000000
ORDER BY c.Name DESC;
-- 2. 인구수를 조회하고 가장 인구수가 많은
-- 도시 이름과 인구수만 보이도록
SELECT
c.Name,
c.Population
FROM
city AS c
ORDER BY c.Population DESC
LIMIT 1;
-- 3. 인구수를 조회하고 가장 인구수가 적은
-- 도시 이름과 인구수만 보이도록
SELECT
c.Name,
c.Population
FROM
city AS c
ORDER BY c.Population
LIMIT 1;
/*
GROUP BY : 속성에 같은 값을 갖는것을 묶음(~별)
집계함수와 같이 사용
GROUP BY를 사용했으면, SELECT절에는 GROUP BY 대상과
집계함수를 사용한 열만 사용할 수 있다.
COUNT() : 집계함수
*/
SELECT
c.CountryCode,
COUNT(c.Name)
FROM
city AS c
GROUP BY c.CountryCode;
-- GROUP BY를 사용할 때 SELECT에 다른 대상을 넣을 수 있는 코드
SET GLOBAL sql_mode=(SELECT REPLACE (@@sql_mode,'ONLY_FULL_GROUP_BY',''));
-- GROUP BY를 사용할 때 SELECT에 다른 대상을 넣을 수 있는 코드
SET GLOBAL sql_mode=(SELECT REPLACE (@@sql_mode,'ONLY_FULL_GROUP_BY',''));
/*
SUM() : 합
MAX() : 가장 많은
MIN() : 가장 적은
AVG() : 평균
*/
SELECT
SUM(c.Population) AS 'AFG 도시 인구의 합'
FROM
city AS c
WHERE
c.CountryCode = 'AFG';
SELECT
MAX(c.Population),
MIN(c.Population)
FROM
city AS c;
SELECT
AVG(c.Population) AS 'AFG 도시 인구의 평균'
FROM
city AS c
WHERE
c.CountryCode = 'AFG';