MySQL을 사용한 3개의 테이블 결합
테이블이 3개 있는데
**Student Table**
-------------
id name
-------------
1 ali
2 ahmed
3 john
4 king
**Course Table**
-------------
id name
-------------
1 physic
2 maths
3 computer
4 chemistry
**Bridge**
-------------
sid cid
-------------
1 1
1 2
1 3
1 4
2 1
2 2
3 3
3 4
4 1
4 2
자, 이제 학생명과 함께 공부했던 과정명을 보여드리기 위해서,
**Result**
---------------------------
Student Course
---------------------------
ahmed physic
ahmed maths
ahmed computer
ahmed chemistry
ali physic
ali maths
john computer
john chemistry
king physic
king maths
다음 쿼리를 작성합니다.
select s.name as Student, c.name as Course from student s, course c join bridge b on c.id = b.cid order by s.name
하지만 필요한 결과를 반환하지 않습니다...
또한 정규화된 폼은 어떻게 해야 합니까?다른 매니저보다 매니저를 찾는 경우:
**employee**
-------------------
id name
-------------------
1 ali
2 king
3 mak
4 sam
5 jon
**manage**
--------------
mid eid
--------------
1 2
1 3
3 4
4 5
그리고 다음과 같은 결과를 얻기를 원합니다.
**result**
--------------------
Manager Staff
--------------------
ali king
ali mak
mak sam
sam jon
ANSI 구문을 사용하면 테이블 결합 방법이 훨씬 명확해집니다.
SELECT s.name as Student, c.name as Course
FROM student s
INNER JOIN bridge b ON s.id = b.sid
INNER JOIN course c ON b.cid = c.id
ORDER BY s.name
사용방법:
select s.name "Student", c.name "Course"
from student s, bridge b, course c
where b.sid = s.sid and b.cid = c.cid
정규화된 폼의 경우
select e1.name as 'Manager', e2.name as 'Staff'
from employee e1
left join manage m on m.mid = e1.id
left join employee e2 on m.eid = e2.id
SELECT *
FROM user u
JOIN user_clockits uc ON u.user_id=uc.user_id
JOIN clockits cl ON cl.clockits_id=uc.clockits_id
WHERE user_id = 158
그렇게 가입하지 마세요.정말 나쁜 습관이야!!!대용량의 데이터를 취득할 때의 퍼포먼스를 저하시게 됩니다.예를 들어, 각 테이블에 100개의 행이 있는 경우 데이터베이스 서버는 다음을 가져와야 합니다.100x100x100 = 1000000몇 번이고, 몇 번이고 팔아야 했다.1 million이 문제를 해결하려면 일치 가능한 최소값으로 결과를 가져올 수 있는 첫 번째 두 테이블을 결합하십시오(데이터베이스 스키마에 따라 다름).이 결과를 Subquery에서 사용한 후 세 번째 테이블과 결합하여 가져옵니다.첫 참가 -->100x100= 100005개의 일치 결과를 얻었다고 가정합니다.그리고 세 번째 표에 결과를 표시합니다. -- >5x100 = 500.총 가져오기 =10000+500 = 10500시간만.이렇게 해서 퍼포먼스가 올라갔어요!!!
join 쿼리에는 3개의 테이블이 포함되어 있으며 조인 내의 각 테이블에 대해 에일리어스 이름을 설정한 동일한 컬럼에서 2개의 값이 필요합니다.같은 테이블명도 다른 이름으로 선언합니다.
const sql = `select p.ID,p.purchaseamount,urs.name as
buyername,pd.productname,
pd.amount,urs1.name as sellername
from purchases p
left join products pd on p.productid=pd.ID
left join users urs on p.userid=urs.ID
left join users urs1 on pd.userid=urs1.ID`
SELECT
employees.id,
CONCAT(employees.f_name," ",employees.l_name) AS 'Full Name', genders.gender_name AS 'Sex',
depts.dept_name AS 'Team Name',
pay_grades.pay_grade_name AS 'Band',
designations.designation_name AS 'Role'
FROM employees
LEFT JOIN genders ON employees.gender_id = genders.id
LEFT JOIN depts ON employees.dept_id = depts.id
LEFT JOIN pay_grades ON employees.pay_grade_id = pay_grades.id
LEFT JOIN designations ON employees.designation_id = designations.id
ORDER BY employees.id;
위의 예시와 같이 여러 테이블을 조인할 수 있습니다.
MySQL에서 사용할 수 있는 이전 답변에 포인트를 추가합니다.
table_factor syntax
또는
joined_table syntax
Table_factor 예시
SELECT prd.name, b.name
FROM products prd, buyers b
조인드 테이블의 예시
SELECT prd.name, b.name
FROM products prd
left join buyers b on b.bid = prd.bid;
FYI: 조인된 테이블의 왼쪽 조인은 그다지 의미가 없습니다(실제로는 조인 테이블을 사용하여 구매자를 제품 테이블에 연결하는 대신 구매자를 연결합니다).제품 테이블의 ID).
Query for three table join and limit set
SELECT * FROM (SELECT t1.follower_userid, t2.*, t3.login_thumb, t3.login_name,
t3.bio, t3.account_status, t3.gender
FROM videos t2
LEFT JOIN follower t1
ON t1.follower_userid = t2.user_id
LEFT JOIN videos_user t3
ON t1.follower_userid = t3.login_userid
WHERE t1.following_userid='$userid'
LIMIT $startpoint , $limit) AS ID
ORDER BY ID DESC
세 개 이상의 테이블을 결합하기 위한 쿼리:
SELECT ops.field_id, ops.option_id, ops.label
FROM engine4_user_fields_maps AS map
JOIN engine4_user_fields_meta AS meta ON map.`child_id` = meta.field_id
JOIN engine4_user_fields_options AS ops ON map.child_id = ops.field_id
WHERE map.option_id =39 AND meta.type LIKE 'outcomeresult' LIMIT 0 , 30
사용방법:
SELECT s.name AS Student, c.name AS Course
FROM student s
LEFT JOIN (bridge b CROSS JOIN course c)
ON (s.id = b.sid AND b.cid = c.id);
언급URL : https://stackoverflow.com/questions/3709560/joining-three-tables-using-mysql
'programing' 카테고리의 다른 글
| 소켓 '/var/lib/mysql/mysql'을 통해 로컬 MySQL 서버에 연결할 수 없습니다.양말' (2) (0) | 2022.09.26 |
|---|---|
| PHP에서의 FOR vs FOREACH의 퍼포먼스 (0) | 2022.09.26 |
| MySQL 테이블을 두 열로 정렬합니다. (0) | 2022.09.26 |
| Foreach 루프에서 어레이 요소를 삭제하려면 어떻게 해야 합니까? (0) | 2022.09.26 |
| .htaccess 및 mod_rewrite를 사용하여 SSL/https 강제 적용 (0) | 2022.09.26 |