어떻게 Ruby(Rails)로 SQL을 만듭니까?
7044 단어 Rails
"Ruby와 SQL의 번역기"와 유사한 것
Rails 정의 모델을 사용하면 SQL을 쉽게 배포할 수 있습니다.
※ 모델: 데이터베이스에 접근하기 위한 클래스
각양각색
창설
User.create(name:'소전', 이메일:'[email protected])
INSERT INTO
`users` (`name`, `email`, `created_at`, `updated_at`)
VALUES
(
'小田',
'[email protected]',
'2021-07-30 09:18:57',
'2021-07-30 09:18:57'
)
찾다User.all
SELECT `users`.* FROM `users`
User.firstSELECT `users`.* FROM `users` ORDER BY `users`.`id` ASC LIMIT 1
User.find(1)SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
User.whereSELECT `users`.* FROM `users` WHERE `users`.`title` = '小田' LIMIT 1
매우 편리하다내부 결합
■joins
User.joins(:user_work_experiences).where(user_work_experience: { id: 1 })
SELECT
`users`.*
FROM
`users`
INNER JOIN `user_work_experiences` ON `user_work_experiences`.`user_id` = `users`.`id`
WHERE
`user_work_experience`.`id` = 1
외부 연결■eager_load
User.eager_load(:user_work_experiences)
SELECT
`users`.*,
`user_work_experiences`.*,
FROM
`users`
LEFT OUTER JOIN `user_work_experiences` ON `user_work_experiences`.`user_id` = `users`.`id`
eager_load도 목적지의 표 정보를 얻을 수 있지만 Joins를 진행할 수 없습니다joins 및 사용자work_experiences.job_id를 가져올 수 없습니다.
NG
User.joins(:user_work_experiences).where(user_work_experience: { id: 1 }).job_id
OK
User.eager_load(:user_work_experiences).where(user_work_experience: { id: 1 }).job_id
기타preload
User.preload(:user_work_experiences)
SELECT `users`.* FROM `users`;
SELECT
`user_work_experiences`.*
FROM
`user_work_experiences`
WHERE
`user_work_experiences`.`user_id` IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);
eager_load와preload의 차이 사용데이터량이 방대한 상황에서proeload, eager어쨌든load는 많은 메모리를 필요로 한다.
따라서 관련 종류에 따라 구분해서 사용해야 한다.
1 대 1 또는 1 대 N 연결 시 eagerload
데이터 양이 증가하더라도 SQL을 한 번 합쳐서 얻는 것이 더 효율적이기 때문에 eager잘 갔어.
N 대 N의 연관성은 proeload입니다.
eager_로드보다 프리로드 분할이 SQL을 얻기 때문에 응답 시간이 빨라지기 때문에 프리로드가 좋다.
결점
ActiveRecord에 지나치게 의존하면 SQL 자체의 이해가 무시됩니다.
Reference
이 문제에 관하여(어떻게 Ruby(Rails)로 SQL을 만듭니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tomoya_sakusaku/items/ccd381ec3957e7556ab0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)