我必须创建两个表(学生和成绩),然后插入值。 这些是查询 -
CREATE TABLE students ( student_id INT(3) NOT NULL PRIMARY KEY AUTO_ INCREMENT,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(50) NOT NULL );
CREATE TABLE grades ( student_id INT (3) NOT NULL PRIMARY KEY AUTO_
INCREMENT,
gpa DOUBLE );'
INSERT INTO students (student_id, firstname, lastname) VALUES (‘123’,
‘Some’, ‘One’);
INSERT INTO students (student_id, firstname,lastname) VALUES (‘125’,
‘Another’, ‘One’);
INSERT INTO students (student_id, firstname,lastname) VALUES (‘167’, ‘Good’,
‘Student’);
INSERT INTO grades (student_id, gpa) VALUES (‘123’, ‘2.34);
INSERT INTO grades (student_id, gpa) VALUES (‘125’, ‘3.21’);
INSERT INTO grades (student_id, gpa) VALUES (‘167’, ‘3.86’);
所以,现在,如果我必须使用SQL select查询来查找特定行(GPA高于3.5)并且必须使用LEFT
和CONCAT
函数给我命名好学生,我该怎么做?如何使用LEFT
和CONCAT
函数生成行?
答案 0 :(得分:2)
我认为通过“左”你的意思是左连接,但这在这里并不合适 - 每个学生都必须有GPA,如果由于一些不明原因,某个学生没有,那么定义他不能有大约3.5的GPA。长话短说 - 内部联接会更合适:
SELECT CONCAT_WS(' ', firstname, lastname)
FROM students s
JOIN grades g ON s.student_id = g.student_id
WHERE gpa > 3.5
答案 1 :(得分:1)
尽管Mureinik的选项是合法的,并且正确的你不需要左联,你实际上可以反过来考虑它。不要从学生开始,而是从成绩开始......这更多是一种心理感知,但显示了如何通过稍微不同的查询获得相同的结果
select
concat_ws( ' ', s.firstname, s.lastname ) studentName,
g.gpa
from
grades g
join students s
on g.student_id = s.student_id
where
g.gpa > 3.5
此外,最好使用列名称引用来限定您的表格(或别名'以及此类情况下的#);以防止您自己或其他人回避的歧义将来的询问。