stanford-oval/wikipedia huggingface dataset:
기울기
교통표지

| --- | --- |
경사 주의 표지판:  왼쪽의 교통 표지판에 나타난 경사도 10 %는 주행거리에 대한 고도 상승의 비를 나타낸다. 즉, 100m를 주행할 때 고도가 10m 상승한다는 의미이다. 따라서 기울기는  {\frac {10m}{100m}}로 10%가 된다. 이 때의 경사각도는 다음의 식에 의해 구할 수 있다. 경사각  =\arctan {\frac {10}{100}}=0.1radian\approx 5.7^{\circ }
같이 보기

빗면
경사 (지리)
장난스런 키스

2019년에 개봉한 타이완의 영화에 대해서는 장난스런 키스 (영화) 문서를 참고하십시오.
《장난스런 키스》(일본어: イタズラなKiss 이타즈라나 키스[*])는 일본의 만화가 다다 가오루(多田 かおる)가 집필한 순정만화이다. 1990년부터 1999년까지 연재됐으나 작가의 갑작스러운 사망으로 인하여 완결되지 못하였다.
1996년에 일본의 TV 아사히에서 드라마로 방송됐으며, 2005년엔 타이완에서 《악작극지문》(惡作劇之吻)이란 제목으로 드라마화 됐다. 2007년엔 후편격인 《악작극2문》도 방송됐다.《악작극2문》에서는 두 남녀의 결혼 후 이야기를 볼 수 있다.
2008년에는 일본에서 애니메이션으로도 방송되었는데, 애니메이션에서는 원작에서 볼 수 없던 번외편도 볼 수 있다.
2008년, 2009년에는 일본에서 무대로도 공연됐다. 2012년에는 타이완에서 무대로도 공연됐다.
2010년에는 한국에서 새롭게 리메이크한 MBC 수목드라마 장난스런 KISS로 제작되었다.
2013년, 2014년에는 새롭게 일본에서 리메이크한 장난스런 키스 Love in Tokyo 1~2 가 제작되었다. 도쿄를 무대로 펼쳐지는 코토코와 이리에의 사랑 이야기이다.
2016년, 2017년에 일본에서 영화로 공개됐다. 2016년에는 타이완에서 《악작극지문: Miss In Kiss》(惡作劇之吻, 2016년)이라는 제목으로 드라마화 됐다.
2018년에는 타이완에서 영화 장난스런 키스(Fall in Love at First Kiss)로 또 다시 리메이크 되었다.
Join (SQL)

join(조인) 또는 결합 구문은 한 데이터베이스 내의 여러 테이블의 레코드를 조합하여 하나의 열로 표현한 것이다. 따라서 조인은 테이블로서 저장되거나, 그 자체로 이용할 수 있는 결과 셋을 만들어 낸다. JOIN은 2개의 테이블에서 각각의 공통값을 이용함으로써 필드를 조합하는 수단이 된다.  ANSI 표준 SQL은 네 가지 유형의 JOIN을 규정한다.
INNER JOIN
OUTER JOIN
LEFT JOIN
RIGHT JOIN
마케팅
특별한 경우 테이블(기본 테이블, 뷰, 또는 조인된 테이블)은 자기 자신에게 JOIN할 수 있다.
프로그래머는 JOIN 절을 조인을 위한 레코드를 구분하는데 쓴다. 만약 값을 가진 구문이 참이라면, 결합된 레코드는 예상한 형식(레코드셋 또는 임의의 테이블)으로 생성된다.
예제 테이블

관계 데이터베이스는 종종 객체가 1 : 다의 관계를 가질 때, 정보의 중복을 제거하기 위해 정규화시킨다. 예를 들어, 부서(Department)라는 것은 다수의 다른 직원(Employee)들과 연관되어 있다. 효과적으로 2개의 테이블을 결합시키는 것은 2개의 테이블 모두에서 결합된 정보를 가진 또 다른 테이블을 만든다. 이것은 결합을 계산하는데 소요되는 시간적 측면에서 어느 정도 자원을 소요한다. 속도가 중요하다면, 탈정규화된 테이블을 단순히 유지시키는 것이 가능하지만, 중복된 데이터가 이후에 변경된다면 중복된 정보는 추가 비용을 발생시켜, 비용을 증가시키고, 데이터 무결성을 유지하는데 있어서 복잡성을 야기한다.
이 글에서 결합 형식에 대한 모든 부가적인 설명은 다음의 두 테이블을 예제로 이용한다. 이러한 테이블에서의 열은 다른 유형의 결합과 결합 서술문의 결과를 설명하는 역할을 할 것이다. 다음의 테이블에서  Department  테이블의 Department ID 컬럼(Department.Department ID로 표현할 수 있다.)이 기본 키이며, Employee.Department ID가 외래 키이다.
| LastName | DepartmentID |
| --- | --- |
Rafferty: 31
Jones: 33
Steinberg: 33
Robinson: 34
Smith: 34
John: NULL 
| DepartmentID | DepartmentName |
| --- | --- |
31: 영업부
33: 기술부
34: 사무부
35: 마케팅
주의: 위의 Employee 테이블에서, "John"이라는 직원은 아직 어떤 부서에도 할당되지 않았다. 또한 어떠한 직원도 "마케팅" 부서에 할당되지 않았음을 유의해라.
위에서 언급된 테이블을 생성하는 SQL이다.
CREATE TABLE department
(
 DepartmentID INT,
 DepartmentName VARCHAR(20)
);

CREATE TABLE employee
(
 LastName VARCHAR(20),
 DepartmentID INT
);

INSERT INTO department(DepartmentID, DepartmentName) VALUES(31, '영업부');
INSERT INTO department(DepartmentID, DepartmentName) VALUES(33, '기술부');
INSERT INTO department(DepartmentID, DepartmentName) VALUES(34, '사무부');
INSERT INTO department(DepartmentID, DepartmentName) VALUES(35, '마케팅');

INSERT INTO employee(LastName, DepartmentID) VALUES('Rafferty', 31);
INSERT INTO employee(LastName, DepartmentID) VALUES('Jones', 33);
INSERT INTO employee(LastName, DepartmentID) VALUES('Steinberg', 33);
INSERT INTO employee(LastName, DepartmentID) VALUES('Robinson', 34);
INSERT INTO employee(LastName, DepartmentID) VALUES('Smith', 34);
INSERT INTO employee(LastName, DepartmentID) VALUES('John', NULL);
교차 조인

CROSS JOIN 절은 조인되는 두 테이블에서 곱집합을 반환한다. 즉, 두 번째 테이블로부터 각 행과 첫 번째 테이블에서 각 행이 한번씩 결합된 열을 만들 것이다. 예를 들어 m행을 가진 테이블과 n행을 가진 테이블이 교차 조인되면 m*n 개의 행을 생성한다.
교차 조인의 명시적 예는 다음과 같다:
SELECT *
FROM employee CROSS JOIN department;
크로스 조인을 암묵적으로 사용한 예는 다음과 같다:
SELECT *
FROM employee, department;
이 두 쿼리는 동일한 결과를 반환한다.
| Employee> LastName | Employee> DepartmentID | Department> DepartmentName | Department> DepartmentID |
| --- | --- | --- | --- |
| Rafferty | 31 | 영업부 | 31 |
| Jones | 33 | 영업부 | 31 |
| Steinberg | 33 | 영업부 | 31 |
| Smith | 34 | 영업부 | 31 |
| Robinson | 34 | 영업부 | 31 |
| John | NULL  | 영업부 | 31 |
| Rafferty | 31 | 기술부 | 33 |
| Jones | 33 | 기술부 | 33 |
| Steinberg | 33 | 기술부 | 33 |
| Smith | 34 | 기술부 | 33 |
| Robinson | 34 | 기술부 | 33 |
| John | NULL  | 기술부 | 33 |
| Rafferty | 31 | 사무부 | 34 |
| Jones | 33 | 사무부 | 34 |
| Steinberg | 33 | 사무부 | 34 |
| Smith | 34 | 사무부 | 34 |
| Robinson | 34 | 사무부 | 34 |
| John | NULL  | 사무부 | 34 |
| Rafferty | 31 | 마케팅 | 35 |
| Jones | 33 | 마케팅 | 35 |
| Steinberg | 33 | 마케팅 | 35 |
| Smith | 34 | 마케팅 | 35 |
| Robinson | 34 | 마케팅 | 35 |
| John | NULL  | 마케팅 | 35 |
크로스 조인은 결합된 테이블에서 레코드를 걸러내기 위해 어떠한 서술어도 적용하지 않는다. 프로그래머는 크로스 조인된 결과를 WHERE 구문을 사용하여 더 걸러낼 수 있다.
SQL:2011 표준에서, 크로스 조인은 F401, 확장 조인 테이블(Extended joined table)의 선택사항이다.
내부 조인

내부 조인(inner join)은 여러 애플리케이션에서 사용되는 가장 흔한 결합 방식이며, 기본 조인 형식으로 간주된다. 내부 조인은 조인 구문에 기반한 2개의 테이블(A, B)의 컬럼 값을 결합함으로써 새로운 결과 테이블을 생성한다. 그 질의어는 조인 구문을 충족하는 모든 일치되는 결과 열을 찾기 위해  A 테이블의 각 열을 B 테이블의 각 열과 비교를 한다. 조인 구문이 충족되면, A, B 테이블에서 일치된 각 열의 컬럼 값은 결과 열로 결합된다. 조인으로 도출된 결과 값은 (테이블 A 내의 모든 레코드와 테이블 B에 있는 모든 레코드가 결합하여) 테이블에 존재하는 모든 레코드(또는 크로스 조인)의 최초의 곱집합의 결과값으로 정의될 수 있으며, 그런 이후 조인 구문을 충족시키는 모든 레코드 값을 반환한다. 실제 SQL 실행은 보통 곱집합의 연산이 매우 비효율적이기 때문에 실행 가능한 해쉬 조인 또는 소트-머지(sort-merge) 조인과 같은 다른 접근법을 사용한다.
SQL은 ‘명시적 조인 표현’(explicit)과 ‘암시적 조인 표현’(implicit) 2개의 다른 조인식 구문을 지정한다.
‘명시적 조인 표현’에서는 테이블에 조인을 하라는 것을 지정하기 위해 JOIN 키워드를 사용하며, 그리고 나서 다음의 예제와 같이 ON 키워드를 조인에 대한 구문을 지정하는데 사용한다.
SELECT *
FROM employee INNER JOIN department
  ON employee.DepartmentID = department.DepartmentID;
‘암시적 조인 표현’은 SELECT 구문의  FROM 절에서 그것들을 분리하는 컴마를 사용해서 단순히 조인을 위한 여러 테이블을 나열하기만 한다. 그리하여 그것은 교차 조인(cross join)을 지정하면, WHERE  절은 추가적인 필터 구문(명시적 구문에서 조인 구문을 비교하는 역할을 하는)을 적용할 것이다.
다음의 예제는 전자의 것과 동일한 예이지만, 이번에는 암시적 조인 구문을 사용했다.
SELECT *
FROM employee, department
WHERE employee.DepartmentID = department.DepartmentID;
위의 예에서 제시한 질의어는 두 테이블의 DepartmentID 컬럼을 이용해서 Employee 와 Department 테이블을 조인할 것이다. 이 두 테이블에서 DepartmentID가 일치하는 곳(즉, 조인 구문이 충족되는 곳)에서 쿼리는 LastName, DepartmentID 와 DepartmentName 컬럼을 결과 열로 결합할 것이다. DepartmentID 가 일치하지 않는다면, 어떠한 결과 값도 생성되지 않을 것이다.
그리하여 위 예제의 2개의 질의 중 하나의 수행 결과는 다음과 같을 것이다.
| Employee> LastName | Employee> DepartmentID | Department> DepartmentName | Department> DepartmentID |
| --- | --- | --- | --- |
| Robinson | 34 | 사무부 | 34 |
| Jones | 33 | 기술부 | 33 |
| Smith | 34 | 사무부 | 34 |
| Steinberg | 33 | 기술부 | 33 |
| Rafferty | 31 | 영업부 | 31 |

주의: 프로그래머는 조인 조건이 명시적으로 IS NULL 또는 IS NOT NULL과 같은 추가 구문을 사용하지 않는다면 NULL은 어떠한 값도 일치하지 않으므로(심지어 NULL 자체도) NULL 값이 포함될 수 있는 테이블을 조인하는데 있어서 특별한 주의를 기울여야 한다.
John이라는 직원과 마케팅이라는 부서가 쿼리 수행 결과에서 나타나지 않음을 유의하자. 이것들 중 어느 것도 다른 테이블에서 일치되는 레코드를 가지고 있지 않다 : John은 부서와 연관이 없으며, 어떤 직원도 department ID 35 ("마케팅")에 배속되어 있지 않다. 희망하는 결과값에 따라, 이러한 행위는 약간 버그가 있을 수도 있으며, 그리고 그것은 외부 조인에서는 회피될 수 있는 것이다.
내부 조인을 더 세부적으로 분류하여 동일 조인(Equi-Join), 자연 조인(natural join), 또는 교차 조인(cross-join)으로도 나눌 수 있다.
내부 조인 > 동일 조인

동일 조인(Equi-Join)은 특별한 유형의 비교자 기반의 조인이며, 이것은 조인 구문에서 동등비교만을 사용한다. 다른 비교 연산자(<와 같은)를 사용하는 것은 동일 조인으로서의 조인의 자격을 박탈하는 것이다. 위에서 보여준 쿼리는 이미 동일 조인의 예시가 제시되었다.
SELECT *
FROM employee JOIN department
  ON employee.DepartmentID = department.DepartmentID;
우리는 동일 조인을 아래와 같이 쓸 수 있다.
SELECT *
FROM employee, department
WHERE employee.DepartmentID = department.DepartmentID;
만약 동일 조인 내에 있는 컬럼들이 동일한 이름을 가지고 있다면, SQL-92는 USING을 추가함으로써 동일 조인을 표현하기 위한 속기적  개념을 선택적으로 제공한다 :
SELECT *
FROM employee INNER JOIN department USING (DepartmentID);
USING 구문은 단순한 설탕구문이지만, 결과 값이 명시적 구문에 의한 결과 값과는 다르다. 특히 USING 목록 속에 언급된 어떤 컬럼들은 조인에서 각 테이블에 한번 등장하기 보다는, 권한이 없는 이름으로 단 한번만 등장할 것이다. 위의 사례에서, 단인 DepartmentID 컬럼이 해당하고, employee.DepartmentID 또는 department.DepartmentID은 해당되지 않는다.
USING 구문은 MS SQL Server와 Sybase에서는 지원하지 않는다.
내부 조인 > 동일 조인 > 자연 조인

자연 조인(natural join)은 동일 조인의 한 유형으로 조인 구문이 조인된 테이블에서 동일한 컬럼명을 가진 2개의 테이블에서 모든 컬럼들을 비교함으로써, 암시적으로 일어나는 구문이다. 결과적으로 나온 조인된 테이블은 동일한 이름을 가진 컬럼의 각 쌍에 대한 단 하나의 컬럼만 포함하고 있다.
대부분의 전문가들은 NATURAL JOIN이 위험한 것이며, 그러므로 이것의 사용을 강력하게 비권장하고 있다. 그러한 위험은 다른 테이블에 다른 컬럼으로 동일한 이름을 가진 새로운 컬럼을 무심코 추가하는데서 오는 것이다.
현존하는 자연 조인은 자연스럽게 (다른 컬럼에서 온) 이전보다 다른 기준을 이용해서 비교를 위해 비교를 하거나 일치하는 것을 찾아서 새로운 컬럼을 이용할 것이다. 그리하여 테이블 내에 있는 데이터가 변경되지 않고, 증가만 해도 현존하는 질의어는 다른 결과물을 생성할 것이다.
위의 내부 조인을 위한 예제 질의는 다음과 같은 방법으로 자연 조인으로서 표현될 수 있을 것이다.
SELECT *
FROM employee NATURAL JOIN department;
명시적인 USING 구문을 사용해서, 단지 하나의 DepartmentID 컬럼이 조인된 테이블 내에 권한자 없이 생성된다 :
| DepartmentID | Employee> LastName | Department> DepartmentName |
| --- | --- | --- |
| 34 | Smith | 사무부 |
| 33 | Jones | 기술부 |
| 34 | Robinson | 사무부 |
| 33 | Steinberg | 기술부 |
| 31 | Rafferty | 영업부 |
PostgreSQL, MySQL 그리고 오라클 데이터베이스는 자연 조인을 지원하지만, Microsoft T-SQL 또는 IBM DB2는 지원되지 않는다. 조인에 사용된 컬럼들은 암시적이어서, 조인 코드가
기대 컬럼이 어떤 것인지를 보여주지 않으며, 컬럼의 변화는 결과를 바꿀 것이다. 동일한 필드명을 가진 2개의 테이블에서 실행된 내부 조인 은 동일한 결과물을 가진다. SQL:2011 표준에서, 자연 조인은 F401 (확장 조인된 테이블) 패키지의 선택적 부분이다.
외부 조인 > 왼쪽 외부 조인

왼쪽 외부 조인의 예, 부가적인 결과 열 (내부 조인과 비교하여)은 이탤릭체:
SELECT *
FROM employee LEFT OUTER JOIN department
  ON employee.DepartmentID = department.DepartmentID;
| Employee> LastName | Employee> DepartmentID | Department> DepartmentName | Department> DepartmentID |
| --- | --- | --- | --- |
| Jones | 33 | 기술부 | 33 |
| Rafferty | 31 | 영업부 | 31 |
| Robinson | 34 | 사무부 | 34 |
| Smith | 34 | 사무부 | 34 |
John: NULL 
| Steinberg | 33 | 기술부 | 33 |
오라클은 대체 구문을 제공한다:
SELECT *
FROM employee, department
WHERE employee.DepartmentID = department.DepartmentID(+)
사이베이스가 제공하는 대체 구문은 다음과 같다:
SELECT *
FROM employee, department
WHERE employee.DepartmentID *= department.DepartmentID
외부 조인 > 오른쪽 외부 조인

아래는 오른쪽 외부 조인의 예이며, 부가적인 결과 열은 이탤릭체로 되어있다:
SELECT *
FROM employee RIGHT OUTER JOIN department
  ON employee.DepartmentID = department.DepartmentID;
| Employee> LastName | Employee> DepartmentID | Department> DepartmentName | Department> DepartmentID |
| --- | --- | --- | --- |
| Smith | 34 | 사무부 | 34 |
| Jones | 33 | 기술부 | 33 |
| Robinson | 34 | 사무부 | 34 |
| Steinberg | 33 | 기술부 | 33 |
| Rafferty | 31 | 영업부 | 31 |
| NULL  | NULL  | 마케팅 | 35 |
오라클이 제공하는 대체 구문은 다음과 같다:
SELECT *
FROM employee, department
WHERE employee.DepartmentID(+) = department.DepartmentID
오른쪽과 왼쪽 외부 조인은 기능적으로 동일하다. 양자 모두 다른 것들이 하지 않는 어떠한 기능도 제공하지 않는다. 그래서 오른쪽과 왼쪽 외부 조인은 테이블 순서가 변경되기만 하면, 서로 대체할 수 있다.
외부 조인 > 완전 외부 조인

완전 외부 조인의 예는 다음과 같다:
SELECT *
FROM employee FULL OUTER JOIN department
  ON employee.DepartmentID = department.DepartmentID;
| Employee> LastName | Employee> DepartmentID | Department> DepartmentName | Department> DepartmentID |
| --- | --- | --- | --- |
| Smith | 34 | 사무부 | 34 |
| Jones | 33 | 기술부 | 33 |
| Robinson | 34 | 사무부 | 34 |
John: NULL 
| Steinberg | 33 | 기술부 | 33 |
| Rafferty | 31 | 영업부 | 31 |
| NULL  | NULL  | 마케팅 | 35 |
일부 데이터베이스 시스템은 완전 외부 조인 기능을 직접적으로 지원하지 않지만, 좌우 테이블에서 각각 단일 테이블 열의 내부 조인과 UNION ALL select의 사용을 통해 비슷하게 구현할 수 있다. 동일한 예제를 다음과 같이 표현할 수 있다:
SELECT employee.LastName, employee.DepartmentID,
       department.DepartmentName, department.DepartmentID
FROM employee
INNER JOIN department ON employee.DepartmentID = department.DepartmentID

UNION ALL

SELECT employee.LastName, employee.DepartmentID,
       cast(NULL as varchar(20)), cast(NULL as integer)
FROM employee
WHERE NOT EXISTS (
    SELECT * FROM department
             WHERE employee.DepartmentID = department.DepartmentID)

UNION ALL

SELECT cast(NULL as varchar(20)), cast(NULL as integer),
       department.DepartmentName, department.DepartmentID
FROM department
WHERE NOT EXISTS (
    SELECT * FROM employee
             WHERE employee.DepartmentID = department.DepartmentID)
자가 조인

자가 조인(self-join)은 한 테이블에서 자기 자신에 조인을 시키는 것이다.
자가 조인 > 예제

같은 나라에서 2명의 직원의 모든 쌍을 찾기 위한 질의어가 필요하다. 만약 2개의 별개의 직원 테이블이 있고, 동일한 국적을 가진 두 번째 테이블에 있는 직원이, 첫 번째 테이블에서 직원을 찾는 쿼리가 있다면, 보통의 조인 동작이 테이블에 답하기 위해 사용될 수 있을 것이다. 그러나 모든 직원 정보는 하나의 거대한 테이블에 포함되어 있다.
다음과 같이 수정된 Employee 테이블이 있다고 하자:
| EmployeeID | LastName | Country | DepartmentID |
| --- | --- | --- | --- |
| 123 | Rafferty | 호주 | 31 |
| 124 | Jones | 호주 | 33 |
| 145 | Steinberg | 호주 | 33 |
| 201 | Robinson | 미국 | 34 |
| 305 | Smith | 독일 | 34 |
| 306 | John | 독일 | NULL  |
상기 예의 해답 질의어는 다음과 같을 것이다 :
SELECT F.EmployeeID, F.LastName, S.EmployeeID, S.LastName, F.Country
FROM Employee F INNER JOIN Employee S ON F.Country = S.Country
WHERE F.EmployeeID < S.EmployeeID
ORDER BY F.EmployeeID, S.EmployeeID;
이것은 아래와 같이 생성된 테이블로 이어질 것이다.
| EmployeeID | LastName | EmployeeID | LastName | Country |
| --- | --- | --- | --- | --- |
| 123 | Rafferty | 124 | Jones | 호주 |
| 123 | Rafferty | 145 | Steinberg | 호주 |
| 124 | Jones | 145 | Steinberg | 호주 |
| 305 | Smith | 306 | John | 독일 |
이러한 예제를 위해:
F 와 S는 employee 테이블의 첫 번째, 두 번째를 위한 앨리어스이다.
조건 F.Country = S.Country는 다른 국적의 직원들 사이의 쌍을 배제한다. 예제 질문은 단지 동일 국적의 직원 쌍만 원한다.
조건 F.EmployeeID < S.EmployeeID excludes pairings where the EmployeeID of the first employee is greater than or equal to the EmployeeID of the second employee. In other words, the effect of this condition is to exclude duplicate pairings and self-pairings. 그것이 없다면, 다음과 같이 유용성이 떨어지는 테이블이 생성될 것이다 (아래의 예제 테이블은 단지 결과 중 "독일" 부분만 보여준다):
| EmployeeID | LastName | EmployeeID | LastName | Country |
| --- | --- | --- | --- | --- |
| 305 | Smith | 305 | Smith | 독일 |
| 305 | Smith | 306 | John | 독일 |
| 306 | John | 305 | Smith | 독일 |
| 306 | John | 306 | John | 독일 |
원래의 질문을 충족시키기 위해 중간 쌍의 단지 하나만 필요로 하며, 최상위 그리고 최하위는 이 예제에서 전혀 관심의 대상이 아니다.
병합 열

여러 줄을 하나의 열로 병합하기 위해서는 그룹 컨캣 표기법(group_concat notation)을 사용한다.
MySQL과 CUBRID는 그러한 목표를 얻기 위해 group_concat 키워드를 사용하며, PostgreSQL 9.0은 string_agg 함수를 사용한다. 9.0 이전의 판은 다음과 같이 해야 한다.
array_to_string(array_agg(value),', ')
또는 집합 함수를 생성해야 한다.
| LastName | DepartmentID |
| --- | --- |
Rafferty: 31
Jones: 33
Steinberg: 33
Robinson: 34
Smith: 34
John: NULL 
| DepartmentID | LastNames |
| --- | --- |
NULL : John
31: Rafferty
33: Jones, Steinberg
34: Robinson, Smith
병합 열 > MySQL

SELECT DepartmentID, group_concat(LastName) as LastNames
FROM employee
GROUP BY DepartmentID;
병합 열 > Oracle 11g R2

SELECT DepartmentID,
  listagg(LastName, ', ') WITHIN GROUP (ORDER BY LastName) as LastNames
FROM employee
GROUP BY DepartmentID;
병합 열 > CUBRID

SELECT DepartmentID,
  GROUP_CONCAT(LastName ORDER BY LastName SEPARATOR ',') as LastNames
FROM employee
GROUP BY DepartmentID;
병합 열 > PostgreSQL

우선 질의를 하기 전 함수 _group_concat 과 집합 group_concat이 생성되어야 한다.
CREATE OR REPLACE FUNCTION _group_concat(text, text)
RETURNS text AS $$
SELECT CASE
WHEN $2 IS NULL THEN $1
WHEN $1 IS NULL THEN $2
ELSE $1 operator(pg_catalog.||) ', ' operator(pg_catalog.||) $2
END
$$ IMMUTABLE LANGUAGE SQL;

error// Join SQL
CREATE AGGREGATE group_concat (
BASETYPE = text,
SFUNC = _group_concat,
STYPE = text
);

SELECT DepartmentID, group_concat(LastName) as LastNames
FROM employee
GROUP BY DepartmentID;
9.0 버전에서는:
SELECT DepartmentID, string_agg(LastName, ', ') as LastNames
FROM employee
GROUP BY DepartmentID;
병합 열 > Microsoft T-SQL

Microsoft SQL Server 2005 이전 버전에서, group_concat 함수는 그러한 쿼리를 날리기 전에 사용자 정의 집합 함수로 만들어져야 한다. 아래에 C#으로 만든 예제가 있다.
using System;
using System.Collections.Generic;
using System.Data.SqlTypes;
using System.IO;
using Microsoft.SqlServer.Server;

[Serializable]
[SqlUserDefinedAggregate(Format.UserDefined, MaxByteSize=8000)]
public struct group_concat : IBinarySerialize{
 private List values;

 public void Init() {
  this.values = new List();
 }

 public void Accumulate(SqlString value) {
  this.values.Add(value.Value);
 }

 public void Merge(strconcat value) {
  this.values.AddRange(value.values.ToArray());
 }

 public SqlString Terminate() {
  return new SqlString(string.Join(", ", this.values.ToArray()));
 }

 public void Read(BinaryReader r) {
  int itemCount = r.ReadInt32();
  this.values = new List(itemCount);
  for (int i = 0; i < itemCount; i++) {
   this.values.Add(r.ReadString());
  }
 }

 public void Write(BinaryWriter w) {
  w.Write(this.values.Count);
  foreach (string s in this.values) {
   w.Write(s);
  }
 }
}
그러면 다음과 같은 쿼리를 이용할 수 있다:
SELECT DepartmentID, dbo.group_concat(LastName) as LastNames
FROM employee
GROUP BY DepartmentID;
2005 버전에서는, 이 작업을 FOR XML PATH를 사용하면 된다:
SELECT DepartmentID,
 STUFF(
 (SELECT
 ',' + LastName
 FROM (
 SELECT LastName
 FROM employee e2
 WHERE e1.DepartmentID=e2.DepartmentID OR
 (e1.DepartmentID IS NULL AND e2.DepartmentID IS NULL)
 ) t1
 ORDER BY LastName
 FOR XML PATH('')
 )
 ,1,1, ''
 ) AS LastNames
FROM employee e1
GROUP BY DepartmentID
2017 이후 버전에서는 STRING_AGG() 함수를 사용하면 된다.
SELECT  DepartmentID
    ,   STRING_AGG(LastName, ',') WITHIN GROUP (ORDER BY LastName ASC) AS LastNames
FROM    employee
GROUP BY
        DepartmentID
;
대체

외부 조인의 결과는 또한 INNER JOIN과 조인 조건을 수행하지 않은 주요 테이블 내의 열들의 SELECT 사이에 UNION ALL을 사용함으로써 동일한 결과를 얻을 수 있다. 예제는 다음과 같다.
SELECT employee.LastName, employee.DepartmentID, department.DepartmentName
FROM employee
LEFT OUTER JOIN department ON employee.DepartmentID = department.DepartmentID;
이것은 다음과 같이 쓸 수도 있다.
SELECT employee.LastName, employee.DepartmentID, department.DepartmentName
FROM employee
INNER JOIN department ON employee.DepartmentID = department.DepartmentID

UNION ALL

SELECT employee.LastName, employee.DepartmentID, cast(NULL as varchar(20))
FROM employee
WHERE NOT EXISTS (
    SELECT * FROM department
             WHERE employee.DepartmentID = department.DepartmentID)
브리스틀 공항

| 브리스틀 공항 Bristol Airport | 브리스틀 공항 Bristol Airport | 브리스틀 공항 Bristol Airport | 브리스틀 공항 Bristol Airport | 브리스틀 공항 Bristol Airport | 브리스틀 공항 Bristol Airport |  |
| --- | --- | --- | --- | --- | --- | --- |
|  브리스틀 공항 활주로 |  브리스틀 공항 활주로 |  브리스틀 공항 활주로 |  브리스틀 공항 활주로 |  브리스틀 공항 활주로 |  브리스틀 공항 활주로 |  |
| IATA: BRS - ICAO: EGGD   | IATA: BRS - ICAO: EGGD   | IATA: BRS - ICAO: EGGD   | IATA: BRS - ICAO: EGGD   | IATA: BRS - ICAO: EGGD   | IATA: BRS - ICAO: EGGD   |  |
| 개요 | 개요 | 개요 | 개요 | 개요 | 개요 |  |
| 공항종별 | 공항종별 | 민간 | 민간 | 민간 | 민간 |  |
| 시간기준 | 시간기준 | UTC±00:00 | UTC±00:00 | UTC±00:00 | UTC±00:00 |  |
| 운영시간 | 운영시간 | 24시간 | 24시간 | 24시간 | 24시간 |  |

| 운영기관 | 운영기관 | South West Airports Limited | South West Airports Limited | South West Airports Limited | South West Airports Limited |  |
| 지역 | 지역 |  잉글랜드 브리스틀  |  잉글랜드 브리스틀  |  잉글랜드 브리스틀  |  잉글랜드 브리스틀  |  |
| 위치 | 위치 |  잉글랜드 루이스 게이트 보툼, 노스서머싯 |  잉글랜드 루이스 게이트 보툼, 노스서머싯 |  잉글랜드 루이스 게이트 보툼, 노스서머싯 |  잉글랜드 루이스 게이트 보툼, 노스서머싯 |  |





| 해발고도 | 해발고도 | 190 m / 622 ft | 190 m / 622 ft | 190 m / 622 ft | 190 m / 622 ft |  |
| 좌표 | 좌표 | 북위 51° 22′ 58″ 서경 002° 43′ 09″﻿ / ﻿북위 51.38278°  서경 2.71917° ﻿ / 51.38278; -2.71917 | 북위 51° 22′ 58″ 서경 002° 43′ 09″﻿ / ﻿북위 51.38278°  서경 2.71917° ﻿ / 51.38278; -2.71917 | 북위 51° 22′ 58″ 서경 002° 43′ 09″﻿ / ﻿북위 51.38278°  서경 2.71917° ﻿ / 51.38278; -2.71917 | 북위 51° 22′ 58″ 서경 002° 43′ 09″﻿ / ﻿북위 51.38278°  서경 2.71917° ﻿ / 51.38278; -2.71917 |  |
| 웹사이트 | 웹사이트 | www.bristolairport.co.uk | www.bristolairport.co.uk | www.bristolairport.co.uk | www.bristolairport.co.uk |  |
| 지도 | 지도 | 지도 | 지도 | 지도 | 지도 |  |
| BRSclass=notpageimage| 브리스틀 공항 위치 | BRSclass=notpageimage| 브리스틀 공항 위치 | BRSclass=notpageimage| 브리스틀 공항 위치 | BRSclass=notpageimage| 브리스틀 공항 위치 | BRSclass=notpageimage| 브리스틀 공항 위치 | BRSclass=notpageimage| 브리스틀 공항 위치 |  |
활주로
| 방향 | 면적(m*m) | 면적(m*m) | 면적(m*m) | ILS | 표면 |  |
| 방향 | 길이 | 길이 | 폭 | ILS | 표면 |  |
| 09/27 | 2,011 | 2,011 |  | YES | 아스팔트 | 아스팔트 |



















| 통계(2011) | 통계(2011) | 통계(2011) | 통계(2011) | 통계(2011) | 통계(2011) |  |
| 승객 | 승객 | 5,780,746 | 5,780,746 | 5,780,746 | 5,780,746 |  |
| 운항 | 운항 | 66,179 | 66,179 | 66,179 | 66,179 |  |


| Sources: UK AIP at NATS Statistics from the UK Civil Aviation Authority | Sources: UK AIP at NATS Statistics from the UK Civil Aviation Authority | Sources: UK AIP at NATS Statistics from the UK Civil Aviation Authority | Sources: UK AIP at NATS Statistics from the UK Civil Aviation Authority | Sources: UK AIP at NATS Statistics from the UK Civil Aviation Authority | Sources: UK AIP at NATS Statistics from the UK Civil Aviation Authority |  |
브리스틀 공항(영어: Bristol Airport)은 잉글랜드의 노스서머싯에 위치한 공항으로 1927년에 개항해 제2차 세계대전 당시 유일하게 여객 노선을 취항했으며 1997년부터 국제공항으로 승격되면서 국제선도 취항하기 시작했다. 2011년 기준으로 5,800,000명의 승객이 이용했으며 전년도 보다 0.6% 증가했다.
운항 노선

| 항공사 | 목적지 |
| --- | --- |
  에어아란 :  더블린, 코크 
  HOP! :  파리(샤를 드 골) 
  에어 몰타 :  계절편 : 몰타 
  아스트레스 항공 :  저지 
  오스트리아 항공( 티롤리안 항공 운영) :  계절편 : 빈, 인스부르크 
  BH 에어 :  계절편: 부르가스, 소피아 
  블루 아이슬란드 :  저지 
  BMI 리저널 :  에버딘 
  플라이비 :  브뤼셀, 저지  계절편 : 레이캬이크(케플라비크) 
  이스턴 에어웨이즈 :  애버딘, 리즈(브래드포드) 
  이지젯 :  알리칸테, 암스테르담, 바르셀로나, 벨파스트(인터내셔널), 베를린, 코펜하겐, 에딘버러, 파로, 푼샬, 푸에르테벤투라, 제네바, 글래스고(인터내셔널), 인버네스, 크라쿠프, 마드리드, 무르시아(코비라), 말라가, 뉴캐슬(어폰타인), 니스, 팔마데마요르카, 파포스, 파리(샤를 드 골), 피사, 프라하, 로마(레오나르도 다 빈치), 테네리페, 툴루즈   계절편 : 보르룸, 보르도, 코르푸, 달라만, 그르노블, 헤라클리온, 이비사, 인스부르크, 라소셸, 리스본, 리옹, 마르세유, 나폴리, 메노르카, 올비아, 잘츠부르크, 스피니크 
  헬비티 항공 :  취리히 
  KLM 시티호퍼 :  암스테르담 
  모나크 항공 :  전세 계절편 : 팔마데마요르카 
  라이언에어 :  알리칸테, 베지에, 브라티슬라바, 부다페스트, 더블린, 파로, 그다인스크, 그란카나리아, 카토비체, 카우나스, 란사로테, 우치, 말라가, 몰타, 포즈난, 레우스, 스플리트, 테네리페, 브로츠와프, 바르샤바   계절편 : 블라냑, 히로나, 이비사, 팔마데마요르카, 발렌시아 
  토마스쿡 항공 :  엔피다, 그란카나리아, 란사로테, 테네리페  계절편 : 안탈리아, 보드룸, 부르가스, 코르푸, 달라만, 파로, 푸에르테벤투라, 그르노블, 헤라클리온, 이비사, 코스, 라르나카, 마로카, 나폴리, 팔마데마요르카, 파포스, 레우스, 로드, 잘츠부르크, 샤름엘셰이크, 자킨토스 
  톰슨 항공 :  그랑카나리아, 란사로테, 말라가, 샤름엘셰이크, 테네리페   계절편 : 알리칸테, 안탈리아, 보드룸, 칸쿤, 샹베리, 코르푸, 달라만, 푸에르테벤투라, 제네바, 헤라클리온, 이비사, 케팔로니아, 마로카, 라르나카, 나폴리, 올랜도(샌포드), 팔마데마요르카, 파포스, 레우스, 로즈, 잘츠부르크, 소피아, 툴루즈, 토리노, 자킨토스
연계 교통 > 도로 교통

자동차
버스
렌터카
연계 교통 > 철도 교통

브리스틀 탬플 미들역
통계

| 순위 | 도시 | 승객 수 |  % 변동 수  2010 / 11 |  |
| --- | --- | --- | --- | --- |
| 1 |  아일랜드 - 더블린 | 323,070 | 20 |  |
| 2 |  네덜란드 - 암스테르담 | 289,118 | 29 |  |
| 3 |  영국 - 애든버러 | 286,634 | 26 |  |
| 4 |  스페인 - 알리칸테 | 279,302 | 8 |  |
| 5 |  스페인 - 말라가 | 262,126 | 3 |  |
| 6 |  스페인 - 팔마데마요르카 | 254,666 | 8 |  |
| 7 |  영국 - 글래스고 | 222,161 | 10 |  |
| 8 |  포르투갈 - 파루 | 213,010 | 25 |  |
| 9 |  프랑스 - 파리(샤를 드 골) | 183,851 | 5 |  |
| 10 |  영국 - 벨파스트 | 179,616 | 20 |  |
출처 : UK Civil Aviation Authority [https://web.archive.org/web/20070322063721/http://www.caa.co.uk/default.aspx?categoryid=80&pagetype=88&pageid=3&sglid=3%5D
스뫼르고스보르드

일반 가정집의 스뫼르고스보르드
스뫼르고스보르드(스웨덴어: smörgåsbord)는 스웨덴 요리에서 부페 형식의 식사를 뜻한다. 이는 흔히 휴일의 잔치에서 가족과 손님이 각자 음식을 원하는 만큼 덜어서 먹는다. 식당에서 이 용어는 많은 종류의 작은 접시들을 늘여놓은 부페식 요리로 고정된 금액 안에서 각자가 원하는 만큼 선택해서 먹을 수 있다.
전통적인 스웨덴의 스뫼르고스보르드는 차갑고 뜨거운 음식 둘 다가 포함된다. 관습적으로 차가운 생선 요리(일반적으로 청어, 연어, 장어 등의 다양한 형식의 음식)로 시작해서, 다른 차가운 음식을 먹다가, 스웨덴식 미트볼인 셰트불라르와 또 다른 스웨덴의 별식인 얀손의 유혹(Janssons frestelse 얀손스 프레스텔세[*])과 같은 뜨거운 음식들을 먹는다. 후식은 스뫼르고스보르드에 포함될 수도 있고, 아닐 수도 있다.
어원

스웨덴어인 스뫼르고스보르드(smörgåsbord)는 샌드위치를 뜻하는 '스뫼르고스(smörgås)'와 식탁을 뜻하는 '보르드(bord)'로 구성된 단어이다. 그런데 '스뫼르고스(smörgås)'는 실상 버터를 뜻하는 '소뫼르(smör)'와 '고스(gås)'로 구성되는데, 고스는 예전에 거위를 의미했지만, 지금은 탈지우유에 떠 있던 분리된 버터를 뜻한다.
스웨덴의 언어학자, 카타리나 그륀바움(Catharina Grünbaum)에 따르면, '고스(gås)'는 원심분리기로 분리했을 때, 크림 표면에 형성되며 떠다니던 버터 조각을 뜻한다고 말한다. 이 조각들이 물 위에서 수영하는 통통한 거위떼와 닮았고, 그만한 크기가 빵위에 놓아서 펴바르기에 알맞았다. 그래서 스뫼르고스는 버터와 빵을 함께 부르기 시작했다. 스웨덴에서 '버터 바른 샌드위치(bredda smörgåsar 브레다 스모가사[*])'라는 용어가 최소한 16세기부터 사용되었으며, ‘오늘날 버터 바른 빵’을 의미할 뿐만 아니라, ‘버터 바른 샌드위치 사이에 껴있는 음식물’을 뜻한다.
율보르드

율보르드(julbord)는 성탄절을 위한 스뫼르고스보르드로, 스웨덴의 성탄절 정찬이다. 이 용어는 스웨덴어에서 성탄절을 뜻하는 율레(Yule)의 '율(yul)'와 식탁을 뜻하는 '보르드(bord)'가 합쳐진 말이다. 스웨덴식 율보르드는 전통적으로 12월 초부터 성탄절까지 집이나 식당에서 먹는 부페를 뜻한다.
전통적인 율보르드는 일반적으로 3가지 주요리로 먹는다. 첫 번째 주요리는 가공한 연어와 절인 청어와 장어를 다양한 양념으로 요리한 음식으로 구성된다. 스웨덴 사람들은 관습적으로 특정 음식은 맛과 식감이 잘 어울리는 음식들과 함께 먹는다. 예를 들면, 청어는 일반적으로 삶은 감자와 완숙한 달걀과 함께 먹으며, 종종 향료를 곁들이거나, 곁들이지 않는 보드카 한잔을 같이 마신다. 두 번째 주요리는 칠면조고기, 구운 쇠고기인 로스트 비프, 성탄절 용 햄인 '율스킨카(julskinka)' 등 얇게 썬 차가운 고기들로 구성된다. 얇게 썬 치즈와 오이, 간 파테는 종종 딱딱한 빵 위에 얹어서 먹는다. 세 번째 주요리는 스웨덴의 미트볼인 '셰트불라르(köttbullar)'와 작은 소시지인 '프린스코르브(prinskorv)', 양배추말이인 '콜돌마르', 젤리처럼 굳힌 돼지고기 족발 요리, 뻑뻑한 화이트 소스에 말린 대구를 재구성한 음식인 '루트피스크', 오븐에 구운 돼지 갈비인 '레브벤스폘(revbenspjäll)', '얀손의 유혹' 등 따뜻한 요리로 구성된다.
율보르드에서 후식은 라이스 푸딩에 계피가루를 뿌린 '리스그륀스그뢰트(risgrynsgröt)'를 포함한다. 전통적으로 아몬드가 리스그륀스그뢰트 안에 숨어져 있는데, 발견하는 사람은 작은 상을 받거나, 행운을 가지게 될 것이라고 생각한다. [출처 필요]
같이 보기

요울루푀위태
포틀럭
스웨덴 요리
스뫼르고스보르드
율보르드, 스웨덴의 성탄절 정찬
백청강

| 백청강 > 기본 정보 |
| --- | --- |
출생: 1989년 2월 19일(1989-02-19)(36세) 중화인민공화국 둥베이 지방 지린 성 연변 조선족 자치주 훈춘
성별: 남성
직업: 가수
장르: 록, 발라드, 댄스
활동 시기: 2011년 ~ 현재
악기: 피아노, 기타
가족: 백명덕(부), 이란숙(모)의 외아들
소속사: 페이스 엔터테인먼트
백청강(중국어 간체자: 白青刚, 정체자: 白青剛, 병음: Bái Qīnggāng 바이칭강[*], 1989년 2월 19일 ~ )은 문화방송의 《스타 오디션 위대한 탄생》에서 우승한 중국 조선족 가수이다.
생애 > 중국에서의 어린 시절

백청강은 중국에서 아버지 백명덕과 어머니 이란숙의 외동아들로 태어났다.
훈춘시 제4소학교를 졸업했으며, 재학 중이던 2001년 훈춘시 어린이예술단의 일원으로 한국을 방문하여 독창을 하였다.
도문시 제5중학교를 졸업한 후에는 연길에 있는 POP음악학원(민영현대음악학원)에 재학하여 가수의 꿈을 키웠다.
POP음악학원을 졸업한 뒤 연길의 밤업소(한국의 라이브 카페와 같은 업소)에서 일하며 중국 현지에서 열리는 각종 음악 경연 대회에 출전하였다. 이중에서 연변TV '전국 청소년 콩쿠르 오디션' 1등, 제1회 '청소년 신인가요제' 대상 등을 수상하였다.
어머니의 권유로 예술학교 오디션을 보게 된 날, 한국 MBC TV방송 《위대한 탄생》청도 오디션 소식을 듣고 예술학교 진학을 포기하고 오디션에 참가하였다.