Open GitEngHar opened 3 months ago
他テーブルの値を比較したい場合は テーブルとテーブルを合わせて そのうえで条件分を指定する必要がある
-- 追加対象の条件一致した箇所のテーブルのすべて追加される
# select * from simple JOIN personal ON simple.id = personal.id;
-- 左に差し込んだテーブルを全て表示している
# select * from simple LEFT JOIN personal ON simple.id = personal.id;
-- JOINしないと値の比較ができない
# select * from simple JOIN personal where simple.id = personal.id;
発展
-- NOT NULL で値に差し込んだNULLを弾く
# select * from simple LEFT JOIN personal
# ON simple.id = personal.id
# WHERE personal.id IS NOT NULL;
-- 正しく指定する
select * from simple s
LEFT JOIN personal p
ON s.id = p.id
WHERE p.id IS NOT NULL;
WHERE句の例 sql コードをコピーする -- ageが30以上の従業員を取得 SELECT FROM employees WHERE age >= 30; LIKE句の例 sql コードをコピーする -- 名前が'Ma'で始まる従業員を取得 SELECT FROM employees WHERE name LIKE 'Ma%';
検証に使った schema と data
CREATE TABLE simple (
`id` INT PRIMARY KEY AUTO_INCREMENT,
`create_date` DATE NOT NULL,
`update_date` DATE NOT NULL
);
INSERT INTO simple
(`id`, `create_date`, `update_date`)
VALUES
(1, '2024/06/05 10:00:00', '2024/06/05 10:00:00');
MyEnglish検証用SQL
CREATE TABLE user_root (
userid INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
name VARCHAR(255) UNIQUE NOT NULL,
created_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
update_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
CREATE TABLE question_title_core (
questid INT AUTO_INCREMENT PRIMARY KEY NOT NULL,
owner_user_id INT NOT NULL,
quest_title VARCHAR(255) NOT NULL,
CONSTRAINT owner_user_id_foreign_key FOREIGN KEY (owner_user_id) REFERENCES user_root(userid) ON DELETE CASCADE
);
CREATE TABLE question_details_core (
questid INT AUTO_INCREMENT PRIMARY KEY NOT NULL,
parent_quest_id INT NOT NULL,
english_word VARCHAR(255) NOT NULL,
japanese_word VARCHAR(255) NOT NULL,
CONSTRAINT parent_quest_id_foreign_key FOREIGN KEY (parent_quest_id) REFERENCES question_title_core(questid) ON DELETE CASCADE
);
INSERT INTO user_root (name, created_date, update_date)
VALUES
('testuser', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
INSERT INTO question_title_core (owner_user_id, quest_title)
VALUES
(1, 'testTitle');
INSERT INTO question_details_core (parent_quest_id, english_word, japanese_word)
VALUES
(1, 'English', 'Japanese');
INSERT INTO question_details_core (parent_quest_id, english_word, japanese_word)
VALUES
(1, 'English2', 'Japanese2');
INSERT INTO question_details_core (parent_quest_id, english_word, japanese_word)
VALUES
(1, 'English3', 'Japanese3');
DELETE from question_details_core WHERE questid=1;
UPDATE question_details_core SET japanese_word='updateJapanse' , english_word='updateEnglish' WHERE questid=2;
MYSQL は 開発でもそうだが、調査でもよくつかう MYSQLをより理解し、迅速にクエリを作れるということはより早く問題を解決できるとういうことにもなる