MySQL 고급 문(2)

첫째, 연결 테이블의 쿼리

내부 조인(Inner Join): 두 테이블에서 조인 필드가 동일한 행만 반환

여기에 이미지 설명 삽입

왼쪽 조인(left join): 왼쪽 테이블의 모든 레코드와 오른쪽 테이블의 동일한 조인 필드가 있는 레코드를 포함하여 모든 레코드를 반환합니다.

여기에 이미지 설명 삽입

오른쪽 조인(right join): 오른쪽 테이블의 모든 레코드와 왼쪽 테이블의 동일한 조인 필드가 있는 레코드를 포함하여 모든 레코드를 반환합니다.

여기에 이미지 설명 삽입

#内连接:
SELECT * FROM location A RIGHT JOIN Store_Info B on A.Store_Name = B.Store_Name ;
#左连接
SELECT * FROM location A LEFT JOIN Store_Info B on A.Store_Name = B.Store_Name ;
#右连接
SELECT * FROM location A RIGHT JOIN Store_Info B on A.Store_Name = B.Store_Name ;

여기에 이미지 설명 삽입

여기에 이미지 설명 삽입

여기에 이미지 설명 삽입

기타 내부 조인 방법:

SELECT * FROM location A INNER JOIN Store_Info B on A.Store_Name = B.Store_Name ;

SELECT * FROM location A, Store_Info B WHERE A.Store_Name = B.Store_Name;

여기에 이미지 설명 삽입

여기에 이미지 설명 삽입

둘, CREATE VIEW ---- 보기

뷰와 테이블의 차이점은 테이블은 실제로 데이터 레코드를 저장하는 반면 뷰는 테이블 위에 구축된 구조이며 실제로 데이터 레코드를 저장하지 않는다는 것입니다.
임시 테이블은 사용자가 로그아웃하거나 데이터베이스 연결이 끊어지면 자동으로 사라지지만 뷰는 사라지지 않습니다.
보기에는 데이터가 포함되지 않고 해당 정의만 저장되며 일반적으로 사용은 복잡한 쿼리를 단순화합니다. 예를 들어 여러 테이블에 대해 조인 쿼리를 수행하고 통계적 정렬 작업을 수행하려는 경우 SQL 문을 작성하는 것이 매우 번거로울 수 있습니다. 쿼리는 동일하며 매우 편리합니다.

语法:CREATE VIEW "视图表名" AS "SELECT 语句";
CREATE VIEW V_REGION_SALES AS SELECT A.Region REGION,SUM(B.Sales) SALES FROM location A 
INNER JOIN Store_Info B ON A.Store_Name = B.Store_Name GROUP BY REGION;

SELECT * FROM V_REGION_SALES;
DROP VIEW V_REGION_SALES;

여기에 이미지 설명 삽입

세, UNION ---- 관절 세트

두 개의 SQL 문의 결과 병합 두 개의 SQL 문에 의해 생성된 필드는 동일한 데이터 레코드 유형 UNION이어야 함
: 생성된 결과의 데이터 레코드 값은 반복되지 않으며 순서에 따라 정렬됨 들판의

语法:[SELECT 语句 1] UNION [SELECT 语句 2];

UNION ALL :将生成结果的数据记录值都列出来,无论有无重复
语法:[SELECT 语句 1] UNION ALL [SELECT 语句 2];

SELECT Store_Name FROM location UNION SELECT Store_Name FROM Store_Info;

SELECT Store_Name FROM location UNION ALL SELECT Store_Name FROM Store_Info;

여기에 이미지 설명 삽입

여기에 이미지 설명 삽입

4. 교집합 값 - 두 SQL 문 결과의 교집합을 취합니다.

SELECT A.Store_Name FROM location A INNER JOIN Store_Info B ON A.Store_Name = B.Store_Name;

SELECT A.Store_Name FROM location A INNER JOIN Store_Info B USING(Store_Name);

여기에 이미지 설명 삽입

#取两个SQL语句结果的交集,且没有重复
SELECT DISTINCT A.Store_Name FROM location A INNER JOIN store_info B USING(Store_Name);

SELECT DISTINCT Store_Name FROM location WHERE (Store_Name) IN (SELECT Store_Name FROM store_info);

SELECT DISTINCT A.Store_Name FROM location A LEFT JOIN store_info B USING(Store_Name) WHERE B.Store_Name IS NOT NULL;

SELECT A.Store_Name FROM (SELECT B.Store_Name FROM location B INNER JOIN Store_Info C ON B.Store_Name = C.Store_Name) A 
GROUP BY A.Store_Name;

SELECT A.Store_Name FROM 
(SELECT DISTINCT Store_Name FROM location UNION ALL SELECT DISTINCT Store_Name FROM store_info) A 
GROUP BY A.Store_Name HAVING COUNT(*) > 1;

여기에 이미지 설명 삽입

다섯, 교차 값 없음

첫 번째 SQL문의 결과와 두 번째 SQL문의 결과가 중복되지 않고 중복되지 않도록 표시

SELECT DISTINCT Store_Name FROM location WHERE (Store_Name) NOT IN (SELECT Store_Name FROM store_info);

SELECT DISTINCT A.Store_Name FROM location A LEFT JOIN store_info B USING(Store_Name) WHERE B.Store_Name IS NULL;

SELECT A.Store_Name FROM 
(SELECT DISTINCT Store_Name FROM location UNION ALL SELECT DISTINCT Store_Name FROM store_info) A 
GROUP BY A.Store_Name HAVING COUNT(*) = 1;

여기에 이미지 설명 삽입

6. 케이스

IF-THEN-ELSE와 같은 논리로 SQL에서 사용하는 키워드입니다.

语法:
SELECT CASE ("字段名")
  WHEN "条件1" THEN "结果1"
  WHEN "条件2" THEN "结果2"
  ...
  [ELSE "结果N"]
  END
FROM "表名";

#"条件" 可以是一个数值或是公式。 ELSE 子句则并不是必须的。

SELECT Store_Name, CASE Store_Name 
  WHEN 'Los Angeles' THEN Sales * 2 
  WHEN 'Boston' THEN 2000
  ELSE Sales 
  END 
"New Sales",Date 
FROM Store_Info;

#"New Sales" 是用于 CASE 那个字段的字段名。

일곱째, 비어있는 값(NULL)과 값이 없는('')의 차이

1. 값이 없는 길이는 0이므로 공간을 차지하지 않으며, NULL 값의 길이는 NULL이므로 공간을 차지합니다.
2. IS NULL 또는 IS NOT NULL은 필드가 NULL인지 아닌지 판단하는 데 사용되며 값이 없는지 여부를 알 수 없습니다.
삼. ='' 또는 <>''를 사용하여 값이 없는 판단을 처리합니다. <>는 같지 않음을 나타냅니다.
4. 필드 통계의 행 수를 지정하기 위해 count()를 사용할 때 NULL 값이 발생하면 자동으로 무시되고 값이 없으면 계산을 위해 레코드에 추가됩니다.

)

여기에 이미지 설명 삽입

SELECT length(NULL), length(''), length('1');
SELECT * FROM City WHERE name IS NULL;

여기에 이미지 설명 삽입

SELECT * FROM city WHERE name IS NOT NULL;
SELECT * FROM city WHERE name = '';
SELECT * FROM city WHERE name <> '';

여기에 이미지 설명 삽입

SELECT COUNT(*) FROM city;
SELECT COUNT(name) FROM city;

여기에 이미지 설명 삽입

여덟, 정규 표현식 ----

매치 패턴 설명하다
^^ 일치하는 텍스트의 시작 문자 '^bd'는 bd로 시작하는 문자열과 일치합니다.
$ 텍스트의 끝 문자와 일치 'qn$'는 qn으로 끝나는 문자열과 일치합니다.
. 단일 문자와 일치 's.t'는 s와 t 사이의 문자가 있는 모든 문자열과 일치합니다.
* 0개 이상의 선행 문자와 일치 'fo*t'는 o 앞에 오는 t와 일치합니다.
+ 선행 문자를 1회 이상 일치 'hom+'는 ho로 시작하고 뒤에 최소 하나의 m이 오는 문자열과 일치합니다.
지정된 문자열과 일치 'clo'는 clo를 포함하는 문자열과 일치합니다.
p1 p2 p1 또는 p2와 일치
[...] 문자 집합의 모든 문자와 일치 '[abc]'는 a 또는 b 또는 c와 일치합니다.
[^…] 괄호 안에 있지 않은 모든 문자와 일치 '[^ab]'는 a 또는 b를 포함하지 않는 문자열과 일치합니다.
{N} 앞의 문자열을 n번 일치 'g{2}'는 2g를 포함하는 문자열과 일치합니다.
{n,m} 선행 문자열을 최소 n회 최대 m회 일치 'f{1,3}' f는 최소 1회, 최대 3회 일치합니다.

문법:

SELECT "字段" FROM "表名" WHERE "字段" REGEXP {模式};
SELECT * FROM store_info WHERE Store_Name REGEXP 'os';
SELECT * FROM store_info WHERE Store_Name REGEXP '\^[A-G]';
SELECT * FROM store_info WHERE Store_Name REGEXP 'Ho|Bo';

여기에 이미지 설명 삽입

추천

출처blog.csdn.net/weixin_51728919/article/details/131383476