MySql8.0(04)
MySql基礎編
マルチテーブル設計:
異なる種類の情報を格納する際のデータ冗長性の低減
テーブルとテーブルの関連付け方法
サブクエリ
マルチテーブル設計:
異なる種類の情報を格納する際のデータ冗長性の低減
テーブルとテーブルの関連付け方法
:
1. ( )
2. ( ),
3. , ,
:
, , , , , ID,
:
ID,
--
, , , ID
--
CREATE TABLE grade(id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(10))
--
CREATE TABLE student(
num INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(10) NOT NULL,
sex CHAR(1),
birthday DATE,
phone CHAR(11),
grade_id INT, --
reg_time DATETIME
)
-- , ,
-- ,
-- ,
-- :
ALTER TABLE student ADD CONSTRAINT grade_fk FOREIGN KEY(grade_id) REFERENCES grade(id)
/*
: ,
:
:
: ,
*/
CREATE TABLE course(id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(10)
)
--
CREATE TABLE student_course(
stu_num INT,
course_id INT,
CONSTRAINT stu_fk FOREIGN KEY(stu_num) REFERENCES student(num),
CONSTRAINT course_fk FOREIGN KEY(course_id) REFERENCES course(id)
)
サブクエリ
-- : (insert update delete select) select ,
-- ,
-- insert
INSERT INTO stu SELECT * FROM student
-- update
UPDATE student SET sex=' ' WHERE num IN (SELECT num FROM stu WHERE score>80)
-- delete
DELETE FROM student WHERE num IN(SELECT num FROM stu WHERE score>=90)
--
-- select : ( )
SELECT (
SELECT ts.num
FROM student ts
WHERE ts.num = t.num
),t.name FROM student t
-- where
SELECT * FROM student WHERE score IN (SELECT score FROM student WHERE score>60)
-- where
SELECT *
FROM student
WHERE (num,score)=(
SELECT MIN(num),MAX(score)
FROM student
)
-- from ( )
-- ,
SELECT *
FROM(
SELECT COUNT(*)c ,sex
FROM student
GROUP BY sex) t
WHERE t.c >= 2