MySQL 詳解_MySQL
還是先 Create table 吧
create table emp(
id int not null primary key,
name varchar(10)
);
create table emp_dept(
dept_id varchar(4) not null,
emp_id int not null,
emp_name varchar(10),
primary key (dept_id,emp_id));
insert into emp() values
(1,"Dennis-1"),
(2,"Dennis-2"),
(3,"Dennis-3"),
(4,"Dennis-4"),
(5,"Dennis-5"),
(6,"Dennis-6"),
(7,"Dennis-7"),
(8,"Dennis-8"),
(9,"Dennis-9"),
(10,"Dennis-10");
insert into emp_dept() values
("R&D",1,"Dennis-1"),
("DEv",2,"Dennis-2"),
("R&D",3,"Dennis-3"),
("Test",4,"Dennis-4"),
("Test",5,"Dennis-5");
>> left join
-------------
select a.id,a.name,b.dept_id
from emp a left join emp_dept b on (a.id=b.emp_id);
# 挑出左邊的 table emp 中的所有資料,即使 emp_dept 中沒有的資料也挑出來,沒有的就用 NULL 來顯示,
# 也即顯示資料是以左邊的 table emp 中的資料為基礎
mysql> select a.id,a.name,b.dept_id
-> from emp a left join emp_dept b on (a.id=b.emp_id);
+----+-----------+---------+
| id | name | dept_id |
+----+-----------+---------+
| 1 | Dennis-1 | R&D |
| 2 | Dennis-2 | DEv |
| 3 | Dennis-3 | R&D |
| 4 | Dennis-4 | Test |
| 5 | Dennis-5 | Test |
| 6 | Dennis-6 | NULL |
| 7 | Dennis-7 | NULL |
| 8 | Dennis-8 | NULL |
| 9 | Dennis-9 | NULL |
| 10 | Dennis-10 | NULL |
+----+-----------+---------+
# 挑出 table emp 中有而 table emp_dept 中沒有的人員資料
select a.id,a.name,b.dept_id
from emp a left join emp_dept b on (a.id=b.emp_id)
where b.dept_id IS NULL;
mysql> select a.id,a.name,b.dept_id
-> from emp a left join emp_dept b on (a.id=b.emp_id)
-> where b.dept_id IS NULL;
+----+-----------+---------+
| id | name | dept_id |
+----+-----------+---------+
| 6 | Dennis-6 | NULL |
| 7 | Dennis-7 | NULL |
| 8 | Dennis-8 | NULL |
| 9 | Dennis-9 | NULL |
| 10 | Dennis-10 | NULL |
+----+-----------+---------+
# 把 table emp_dept 放在左邊的情形(當然以 emp_dept 中的數據為基礎來顯示資料,emp 中比emp_dept 中多的資料也就不會顯示出來了):
select a.id,a.name,b.dept_id
from emp_dept b left join emp a on (a.id=b.emp_id);
mysql> select a.id,a.name,b.dept_id
-> from emp_dept b left join emp a on (a.id=b.emp_id);
+------+----------+---------+
| id | name | dept_id |
+------+----------+---------+
| 2 | Dennis-2 | DEv |
| 1 | Dennis-1 | R&D |
| 3 | Dennis-3 | R&D |
| 4 | Dennis-4 | Test |
| 5 | Dennis-5 | Test |
+------+----------+---------+
>> right join
---------------
select a.id,a.name,b.dept_id
from emp a right join emp_dept b on (a.id=b.emp_id);
# 挑資料時以右邊 table emp_dept 中的資料為基礎來顯示資料
mysql> select a.id,a.name,b.dept_id
-> from emp a right join emp_dept b on (a.id=b.emp_id);
+------+----------+---------+
| id | name | dept_id |
+------+----------+---------+
| 2 | Dennis-2 | DEv |
| 1 | Dennis-1 | R&D |
| 3 | Dennis-3 | R&D |
| 4 | Dennis-4 | Test |
| 5 | Dennis-5 | Test |
+------+----------+---------+
5 rows in set (0.00 sec)
# 我們再把 table 的位置交換一下,再用 right join 試試
select a.id,a.name,b.dept_id
from emp_dept b right join emp a on (a.id=b.emp_id);
mysql> select a.id,a.name,b.dept_id
-> from emp_dept b right join emp a on (a.id=b.emp_id);
+----+-----------+---------+
| id | name | dept_id |
+----+-----------+---------+
| 1 | Dennis-1 | R&D |
| 2 | Dennis-2 | DEv |
| 3 | Dennis-3 | R&D |
| 4 | Dennis-4 | Test |
| 5 | Dennis-5 | Test |
| 6 | Dennis-6 | NULL |
| 7 | Dennis-7 | NULL |
| 8 | Dennis-8 | NULL |
| 9 | Dennis-9 | NULL |
| 10 | Dennis-10 | NULL |
+----+-----------+---------+
# 是不是和 left join 一樣了?
>> direct join
--------------
# 如果用right join 同不用 Join 直接挑資料是相同的,它等介於以下的指令
select a.id,a.name,b.dept_id
from emp a ,emp_dept b
where a.id=b.emp_id;
mysql> select a.id,a.name,b.dept_id
-> from emp a ,emp_dept b
-> where a.id=b.emp_id;
+----+----------+---------+
| id | name | dept_id |
+----+----------+---------+
| 2 | Dennis-2 | DEv |
| 1 | Dennis-1 | R&D |
| 3 | Dennis-3 | R&D |
| 4 | Dennis-4 | Test |
| 5 | Dennis-5 | Test |
+----+----------+---------+
怎樣,弄明白了嗎?
Enjoy it!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











ASUS b450은 많은 사용자가 사용하는 매우 뛰어난 마더보드입니다. 이 마더보드에 win11 시스템을 설치하려면 tpm2.0과 보안 부팅 옵션을 활성화해야 합니다. 아래 편집기에서는 이를 활성화하는 방법을 모를 수도 있습니다. 어떻게 작동하는지 살펴보겠습니다. ASUS b450에 win11을 설치하는 방법: 1. 먼저 시스템을 다시 시작하고 "F2"를 사용하여 BIOS 설정으로 들어간 다음 오른쪽 하단에 있는 "고급 모드"를 클릭하여 들어갑니다. 2. 그런 다음 "시작" 옵션에서 "보안 부팅"을 입력합니다. 3. 그런 다음 "운영 체제 유형" 오른쪽에 있는 "Windows UEFI 모드"를 선택합니다. 4. 설정이 완료되면 오른쪽 상단의 "검색"을 클릭하여 검색을 입력하세요. 5. 그런 다음 “PTT”를 검색하고 클릭하세요.

JOIN의 의미는 두 개의 테이블을 연결하는 영어 단어 'join'과 같으며 크게 Inner Join, Outer Join, Right Join, Left Join, Natural Join으로 나눌 수 있습니다. 먼저 두 개의 테이블을 생성합니다. 다음은 예제로 사용됩니다. CREATETABLEt_blog(idINTPRIMARYKEYAUTO_INCREMENT,titleVARCHAR(50),typeIdINT);SELECT*FROMt_blog;+----+------+---------+ | id|제목|유형 ID|+---+-------+---------+|1|aaa|1||2|bbb|2||3|ccc|3 |

조인 유형 leftjoin은 왼쪽 테이블을 구동 테이블로 사용하고 왼쪽 테이블을 결과 집합의 기반으로 사용합니다. rightjoin은 오른쪽 테이블을 구동 테이블로 사용합니다. 결과 집합의 기초는 왼쪽 테이블을 연결합니다. 데이터는 결과 집합 innerjoin에 추가됩니다. 결과 집합은 두 테이블의 합집합을 취합니다. Union은 Union을 대체합니다. Union과 Unionall의 차이점은 where 조건이 사용되지 않으면 결과 집합이 두 개의 연결된 테이블 행의 곱이 된다는 것입니다. crossjoin은 결과 세트를 생성하며 on 조건에 따라 전달됩니다.

C 언어에서 null과 NULL의 차이점은 다음과 같습니다. null은 C 언어의 매크로 정의로, 일반적으로 포인터 변수를 초기화하거나 조건문에서 포인터가 null인지 확인하는 데 사용할 수 있는 null 포인터를 나타내는 데 사용됩니다. NULL은 C 언어의 매크로 정의입니다. 일반적으로 널 포인터, 널 포인터 배열 또는 널 구조 포인터를 나타내는 데 사용되는 널 값을 나타내는 데 사용되는 미리 정의된 상수입니다.

JavaScript에서 undefound와 null은 모두 "아무것도 없음"이라는 개념을 나타냅니다. 1. undefine은 초기화되지 않은 변수 또는 존재하지 않는 속성을 나타냅니다. 변수가 선언되었지만 값이 할당되지 않은 경우 변수의 값은 undefine입니다. 개체에 존재하지 않는 속성에 액세스하는 경우 반환된 값도 정의되지 않습니다. 2. null은 빈 개체 참조를 나타내는 경우가 있으며, 개체 참조가 차지하는 메모리를 해제하기 위해 null로 설정할 수 있습니다.

null과 정의되지 않음의 차이점은 다음과 같습니다. 1. 의미론적 의미, 3. 다른 값과의 비교, 5. 함수 매개변수와의 관계, 7. 성능 고려 사항, . JSON 직렬화의 성능 9. 유형과의 관계. 자세한 소개: 1. 의미론적 의미인 null은 일반적으로 이 변수에 유효한 개체 값이 없음을 의미하는 반면, 정의되지 않음은 일반적으로 변수에 값이 할당되지 않았거나 개체에 이 속성이 없음을 의미합니다. , 등.

Null과 정의되지 않음은 모두 값이 부족하거나 정의되지 않은 상태를 나타냅니다. 사용 시나리오에 따라 Null 또는 정의되지 않음을 사용하도록 선택하는 몇 가지 기본 원칙이 있습니다. 1. 변수가 비어 있거나 유효하지 않음을 명확하게 표시해야 하는 경우 null을 사용할 수 있습니다. 2. 변수가 선언되었지만 아직 값이 할당되지 않은 경우 기본적으로 정의되지 않은 상태로 설정됩니다. 3. 변수가 비어 있는지 또는 정의되지 않았는지 확인해야 하는 경우 완전 항등 연산자 "=를 사용합니다. ==" 변수가 null인지 정의되지 않았는지 확인합니다. .

조인 쿼리 및 다중 쿼리와 비교할 때 MySQL 다중 테이블 관련 쿼리 또는 다중 단일 테이블 쿼리 중 어느 것이 더 효율적입니까? 데이터의 양이 충분히 크지 않으면 조인을 사용하는 데 문제가 없지만 일반적으로 서비스 계층에서 수행됩니다. 첫째: 단일 시스템 데이터베이스의 컴퓨팅 리소스는 매우 비싸고 데이터베이스는 두 가지 쓰기를 모두 제공해야 합니다. 동시에 읽기에는 CPU 소비가 필요합니다. 데이터베이스를 만들기 위해 처리량이 높아지고 비즈니스는 수백 마이크로초에서 밀리초의 지연 간격에 신경 쓰지 않게 됩니다. 결국 컴퓨팅 리소스는 수평적으로 쉽게 확장할 수 있고 데이터베이스는 어렵기 때문에 대부분의 비즈니스는 순수한 컴퓨팅 작업을 서비스 계층에 두고 데이터베이스를 트랜잭션 기능을 갖춘 kv 시스템으로 사용하게 됩니다.
