我如何编写MySQL查询?

时间:2017-12-10 08:49:24

标签: mysql sql select

我必须创建两个表(学生和成绩),然后插入值。 这些是查询 -

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)并且必须使用LEFTCONCAT函数给我命名好学生,我该怎么做?如何使用LEFTCONCAT函数生成行?

2 个答案:

答案 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

此外,最好使用列名称引用来限定您的表格(或别名'以及此类情况下的#);以防止您自己或其他人回避的歧义将来的询问。