SQL-创建数据库并对其进行查询

时间:2019-03-20 03:58:54

标签: sql database

我需要回答以下说明,并且想知道我是否在正确的答案路径上。

说明

为以下情况设计数据库:您需要在敏捷性比赛中跟踪所有的狗。 他们在每次比赛中都有不同的比赛项目,每只狗都有每项比赛的得分。 另外,编写SQL查询以返回比赛中的所有狗,每只狗参加的比赛以及他们在该赛事中获得的分数。

CREATE DATABASE Competition (
  Dogs CHAR(30) NOT NULL,
  Score INT NOT NULL,
  Event CHAR(30) NOT NULL,
)

SELECT * 
FROM Competition

这似乎有点简单,但这是否可以满足所有给出的说明?

编辑

此解决方案行得通吗?

CREATE TABLE Dogs (
   Name STRING,
   EventId INT
)
CREATE TABLE Events (
   Name STRING,
   Id INT
)
CREATE TABLE Scores (
   Score INT,
   EventId INT
)
SELECT name
FROM Dogs 
INNER JOIN Events On Events.Id = Dogs.EventId
INNER JOIN Scores On Events.Id = Scores.Event.Id

2 个答案:

答案 0 :(得分:2)

您在语法中混淆了实体。数据库是逻辑容器,您可以在其中创建表。 例如,如果您使用的是T-SQL:

CREATE DATABASE DogCompetition;
USE DogCompetition;
CREATE TABLE Dogs 
(Dog VARCHAR(30) PRIMARY KEY);
CREATE TABLE Events 
(Event VARCHAR(30) PRIMARY KEY);
CREATE TABLE DogEventScores 
(Dog VARCHAR(30) REFERENCES Dogs(Dog), 
Event VARCHAR(30) REFERENCES Events (Event),
Score INT NOT NULL,
PRIMARY KEY (Dog, Event)
);
INSERT INTO Dogs (Dog) VALUES ('Charlie');
INSERT INTO Events (Event) VALUES ('Running');
INSERT INTO DogEventScores (Dog, Event, Score) VALUES ('Charlie', 'Running', 8);
SELECT * FROM DogEventScores;

HTH

答案 1 :(得分:1)

您应该像下面那样设计表格。

狗与竞争之间有许多关系,事件是中介者表。

Dog (DogId, DogName)

Event(DogId, CompetitionId, EventName, Score)

Competition(CompetitionId, Name)

查询返回比赛中的所有狗//返回所有比赛ID等于1的狗

select * from Dog inner join Event on Dog.DogId = Event.DogId where Event.CompetitionId = 1 

每只狗参加的活动以及他们在该活动中获得的分数。

   select Event.EventName, sum(Score) from Dog inner join Event on Dog.DogId = Event.DogId 
where Dog.DogName = 'Misa' group by Event.EventName