我有三张桌子{动物,食物,动物_食物}
DROP TABLE IF EXISTS `tbl_animal`;
CREATE TABLE `tbl_animal` (
id_animal INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(25) NOT NULL DEFAULT "no name",
sex CHAR(1) NOT NULL DEFAULT "M",
size VARCHAR(10) NOT NULL DEFAULT "Mini",
age VARCHAR(10) NOT NULL DEFAULT "born",
hair VARCHAR(5 ) NOT NULL DEFAULT "short",
color VARCHAR(25) NOT NULL DEFAULT "not defined",
FOREIGN KEY (sex) REFERENCES `tbl_sexes` (sex),
FOREIGN KEY (tamanio) REFERENCES `tbl_sizes` (size),
FOREIGN KEY (age) REFERENCES `tbl_ages` (age),
FOREIGN KEY (hair) REFERENCES `tbl_hair_length` (hair_length),
CONSTRAINT `uc_Info_Animal` UNIQUE (`id_animal`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `tbl_food`;
CREATE TABLE `tbl_food` (
id_food INTEGER NOT NULL PRIMARY KEY,
type_food VARCHAR(20) NOT NULL DEFAULT "Other",
label VARCHAR(50) NOT NULL,
CONSTRAINT `uc_Info_Food` UNIQUE (`id_food`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `animal_food`;
CREATE TABLE `animal_food` (
id_animal INTEGER NOT NULL,
food VARCHAR(50) NOT NULL DEFAULT "",
quantity VARCHAR(50) NOT NULL DEFAULT "",
times VARCHAR(50) NOT NULL DEFAULT "",
description VARCHAR(50) NOT NULL DEFAULT "",
date_last DATE DEFAULT '0000-00-00 00:00:00',
date_water DATE DEFAULT '0000-00-00 00:00:00',
CONSTRAINT fk_ID_Animal_Food FOREIGN KEY (id_animal) REFERENCES `tbl_animal`(id_animal)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我有一个视图,我根据ID
选择animal和animal_food中的值列CREATE VIEW `CAT_animal_food` AS
SELECT a.name, a.sex,a.size,a.age,a.hair,a.color,
a_f.*
FROM `tbl_animal` a, `animal_food` a_f
WHERE a.id_animal = a_f.id_animal;
创建像上面这样的视图或者加入这些动物和动物食物表会更好吗?
SELECT ...
FROM A.table t1
JOIN B.table2 t2 ON t2.column = t1.col
例如,这种视图与左连接之间的区别是什么?
答案 0 :(得分:1)
两个SELECT
语句之间的唯一区别是语法风格。两者都执行 INNER JOINS 。换句话说,这种风格使用所谓的“隐式”语法:
SELECT ...
FROM A.table t1, B.table2 t2
WHERE t2.column = t1.col
它是“隐式的”,因为WHERE
子句隐含了连接条件。此版本使用“显式”语法:
SELECT ...
FROM A.table t1
JOIN B.table2 t2 ON t2.column = t1.col
大多数人更喜欢看“显式”语法,因为它可以让您的代码更容易理解;明确地理解了连接条件,任何WHERE
子句都很明显。
当然,这与LEFT JOINS
无关。 Here is a famous link具有很好的连接类型的可视化描述。
答案 1 :(得分:-1)
有很大的不同。
使用表格列表的旧学校风格只允许内部连接。
此外,将非键条件放在正确连接的ON子句中可以提高where子句无法提供的性能和能力。这样做的主要原因是ON子句在进行连接时被计算,但WHERE子句在所有连接完成后被计算。
这个主题过于复杂,无法在这里伸张正义。