鱼C论坛

 找回密码
 立即注册
查看: 598|回复: 1

[已解决]MySQL语句查询表中数据

[复制链接]
发表于 2023-4-12 10:50:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
库:
CREATE DATABASE IF NOT EXISTS 实验二
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_0900_ai_ci;

CREATE TABLE IF NOT EXISTS 学生表 (
        sno CHAR(10) NOT NULL COMMENT '学号',
    sn VARCHAR(12) NOT NULL COMMENT '姓名',
    sex ENUM('男','女') NOT NULL DEFAULT '男' COMMENT '性别',
    dat DATE NOT NULL COMMENT '出生日期',
    maj VARCHAR(10) NOT NULL COMMENT '专业',
    DEP VARCHAR(10) NOT NULL COMMENT '院系',
    pho VARCHAR(11) NOT NULL COMMENT '联系电话',
    PRIMARY KEY (sno)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;
INSERT INTO 学生表 (sno,sn,sex,dat,maj,DEP,pho)
VALUES ('0433','张艳','女','2000-9-13','计算机','信息学院',NULL),
('0496','李越','女','2001-1-23','信息','信息学院','1381290xxxx'),
('0529','赵欣','男','2002-2-27','信息','信息学院','1350222xxxx'),
('0531','张志国','女','2002-10-10','自动化','工学院','1331256xxxx'),
('0538','于兰兰','男','2002-2-1','数学','理学院','1331200xxxx'),
('0591','王丽丽','女','2003-3-21','计算机','信息学院','1332080xxxx'),
('0592','王海强','女','2003-9-1','数学','理学院',NULL);


CREATE TABLE IF NOT EXISTS 课程表 (
        course_sno CHAR(10) NOT NULL COMMENT '课程号',
    cn CHAR(30) NOT NULL COMMENT '课程名',
    cnu FLOAT(6) NOT NULL COMMENT '学分数',
    cti FLOAT(6) NOT NULL COMMENT '学时数',
    tec VARCHAR(12) NOT NULL COMMENT '任课教师',
    PRIMARY KEY (course_sno)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;
INSERT INTO 课程表 (course_sno,cn,cnu,cti,tec)
VALUES ('K001','计算机图形学','2.5','40','胡晶晶'),
('K002','计算机应用基础','3','48','任泉'),
('K006','数据结构','4','64','马跃先'),
('M001','政治经济学','4','64','孔繁新'),
('S001','高等数学','3','48','赵晓尘');


CREATE TABLE IF NOT EXISTS 学生成绩表 (
        course_sno CHAR(10) NOT NULL COMMENT '课程号',
    sno CHAR(10) NOT NULL COMMENT '学号',
    tim TIMESTAMP NOT NULL COMMENT '选课时间',
    nor INT NOT NULL COMMENT '平时成绩',
        pro FLOAT NOT NULL COMMENT '平时成绩比重',
    tex INT NOT NULL COMMENT '考试成绩',
    PRIMARY KEY (course_sno,sno)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;
INSERT INTO 学生成绩表(course_sno,sno,tim,nor,pro,tex)
VALUES ('K001','0433','2017-8-23 16:14:11','90.5','0.4','93.5'),
('K001','0529','2017-8-24 8:15:11','85','0.3','90'),
('K001','0531','2017-8-25 10:18:34','57','0.4','75'),
('K001','0591','2017-8-24 15:20:24','81.5','0.4','71.5'),
('K002','0496','2018-2-25 15:20:24',NULL,'0.3',NULL),
('K002','0529','2018-2-24 10:15:21','70','0.4','83'),
('K002','0531','2018-2-25 13:20:19','75','0.2','81.5'),
('K002','0538','2018-2-24 14:20:24','70.5','0.4','73'),
('K002','0592','2018-2-15 9:18:12','85','0.4',NULL),
('K006','0531','2018-8-25 19:17:25','93','0.3','86'),
('K006','0591','2018-8-24 13:19:45','85','0.4','82'),
('M001','0496','2019-2-23 10:8:11','83','0.3','91'),
('M001','0591','2019-2-25 12:14:12','92.5','0.4','89'),
('S001','0531','2019-8-26 13:15:12','82.5','0.4','77'),
('S001','0538','2019-8-27 15:10:12','75.2','0.3',NULL);





碰见的一些问题

1.查询学时数大于60的课程信息:
SELECT *
FROM 课程表
WHERE cti>60;
显示错误:Error Code: 1054. Unknown column 'cti>60' in 'where clause'

2.查询在2003年出生的学生的学号、姓名、出生日期和年龄。
SELECT sno,sn,dat,age
FROM 学生表
WHERE ’2004-1-1’>dat>=’2003-1-1’;
显示错误:Error Code: 1054. Unknown column 'age' in 'field list'

3.查询姓张的学生的学号、姓名和专业。
SELECT sno,sn,maj
FROM 学生表
WHERE sn LIKE ’张’;
显示错误:Error Code: 1054. Unknown column '’张’' in 'where clause'   (同1类型错误)

4.查询没有考试成绩的学号和课程号。
SELECT sno,course_sno
FROM 学生成绩表
WHERE tex IS NULL;
运行结果:

                               
登录/注册后可看大图
怎么都是NULL...

5.查询选修了K001课程的学生人数。
SELECT  COUNT(course_sn) AS 学生人数
FROM 学生成绩表
WHERE course_sno=K001;
显示错误:Error Code: 1054. Unknown column 'course_sn' in 'field list'   (同2类型错误)


6.查询选修三门以上(含三门)课程的学生的学号和考试平均分。
SELECT 学生表.sno,学生成绩表.AVG(tex) AS COUNR(sno,tex)
FROM 学生成绩表,学生表
WHERE 学生表.sno=学生成绩表.AVG(tex)
显示错误:Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(sno,tex) FROM 学生成绩表,学生表 WHERE 学生表.sno=学生成绩表.AVG' at line 1   (我看课本上写AVG是SQL聚合函数,按列计算平均值)


7.查询“于兰兰”的选课信息,列出学号、姓名、课程名。
SELECT 学生表.sno,学生成绩表.course_sno
FROM 学生表,学生成绩表
WHERE sn=’于兰兰’;
显示错误:Error Code: 1054. Unknown column '’于兰兰’' in 'where clause'



8.查询选修计算机应用基础的学生的学号、姓名。
SELECT sno,sn
FROM 学生成绩表,学生表
WHERE cn=计算机应用基础;
显示错误:Error Code: 1052. Column 'sno' in field list is ambiguous


然后下面两个是按照自连接查询法,给表取两个别名x、y
9.查询与“张艳”同一班级的学生的学号和姓名。
SELECT x.sno,x.sn
FROM 学生表 AS x, 学生表 AS y
WHERE x.maj AND y.sn=’张艳’;
显示错误:Error Code: 1054. Unknown column '’张艳’' in 'where clause'



10.查询比“计算机应用基础”学时多的课程的课程号、课程名和课时。
SELECT x.course_sno AS 课程号, x.cn AS 课程名, x.ct AS 学时
FROM 课程表 AS x, 课程表 AS y
WHERE x.ct>y.ct AND y.course_sno=’计算机应用基础’;
显示错误:Error Code: 1054. Unknown column 'x.ct' in 'field list'

谢谢大佬了!!!!!!!!!!!!



最佳答案
2023-4-12 13:39:14
根据您的问题,我为您提供了修改后的查询语句。以下是您的问题和相应的修改后的查询语句:

1、查询学时数大于60的课程信息:
  1. SELECT *
  2. FROM 课程表
  3. WHERE cti > 60;
复制代码


2、查询在2003年出生的学生的学号、姓名、出生日期和年龄。
  1. SELECT sno, sn, dat, TIMESTAMPDIFF(YEAR, dat, CURDATE()) AS age
  2. FROM 学生表
  3. WHERE dat >= '2003-01-01' AND dat < '2004-01-01';
复制代码


3、查询姓张的学生的学号、姓名和专业。
  1. SELECT sno, sn, maj
  2. FROM 学生表
  3. WHERE sn LIKE '张%';
复制代码


4、查询没有考试成绩的学号和课程号。
  1. SELECT sno, course_sno
  2. FROM 学生成绩表
  3. WHERE tex IS NULL;
复制代码


5、查询选修了K001课程的学生人数。
  1. SELECT COUNT(sno) AS 学生人数
  2. FROM 学生成绩表
  3. WHERE course_sno = 'K001';
复制代码


6、查询选修三门以上(含三门)课程的学生的学号和考试平均分。
  1. SELECT sno, AVG(tex) AS 平均分
  2. FROM 学生成绩表
  3. GROUP BY sno
  4. HAVING COUNT(course_sno) >= 3;
复制代码


7、查询“于兰兰”的选课信息,列出学号、姓名、课程名。
  1. SELECT 学生表.sno, 学生表.sn, 课程表.cn
  2. FROM 学生表
  3. JOIN 学生成绩表 ON 学生表.sno = 学生成绩表.sno
  4. JOIN 课程表 ON 学生成绩表.course_sno = 课程表.course_sno
  5. WHERE 学生表.sn = '于兰兰';
复制代码


8、查询选修“计算机应用基础”的学生的学号、姓名。
  1. SELECT 学生表.sno, 学生表.sn
  2. FROM 学生表
  3. JOIN 学生成绩表 ON 学生表.sno = 学生成绩表.sno
  4. JOIN 课程表 ON 学生成绩表.course_sno = 课程表.course_sno
  5. WHERE 课程表.cn = '计算机应用基础';
复制代码


9、查询与“张艳”同一班级的学生的学号和姓名。
  1. SELECT x.sno, x.sn
  2. FROM 学生表 AS x
  3. JOIN 学生表 AS y ON x.maj = y.maj
  4. WHERE y.sn = '张艳';
复制代码


10、查询比“计算机应用基础”学时多的课程的课程号、课程名和课时。
  1. SELECT x.course_sno AS 课程号, x.cn AS 课程名, x.cti AS 学时
  2. FROM 课程表 AS x
  3. JOIN 课程表 AS y ON x.cti > y.cti
  4. WHERE y.cn = '计算机应用基础';
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-12 13:39:14 | 显示全部楼层    本楼为最佳答案   
根据您的问题,我为您提供了修改后的查询语句。以下是您的问题和相应的修改后的查询语句:

1、查询学时数大于60的课程信息:
  1. SELECT *
  2. FROM 课程表
  3. WHERE cti > 60;
复制代码


2、查询在2003年出生的学生的学号、姓名、出生日期和年龄。
  1. SELECT sno, sn, dat, TIMESTAMPDIFF(YEAR, dat, CURDATE()) AS age
  2. FROM 学生表
  3. WHERE dat >= '2003-01-01' AND dat < '2004-01-01';
复制代码


3、查询姓张的学生的学号、姓名和专业。
  1. SELECT sno, sn, maj
  2. FROM 学生表
  3. WHERE sn LIKE '张%';
复制代码


4、查询没有考试成绩的学号和课程号。
  1. SELECT sno, course_sno
  2. FROM 学生成绩表
  3. WHERE tex IS NULL;
复制代码


5、查询选修了K001课程的学生人数。
  1. SELECT COUNT(sno) AS 学生人数
  2. FROM 学生成绩表
  3. WHERE course_sno = 'K001';
复制代码


6、查询选修三门以上(含三门)课程的学生的学号和考试平均分。
  1. SELECT sno, AVG(tex) AS 平均分
  2. FROM 学生成绩表
  3. GROUP BY sno
  4. HAVING COUNT(course_sno) >= 3;
复制代码


7、查询“于兰兰”的选课信息,列出学号、姓名、课程名。
  1. SELECT 学生表.sno, 学生表.sn, 课程表.cn
  2. FROM 学生表
  3. JOIN 学生成绩表 ON 学生表.sno = 学生成绩表.sno
  4. JOIN 课程表 ON 学生成绩表.course_sno = 课程表.course_sno
  5. WHERE 学生表.sn = '于兰兰';
复制代码


8、查询选修“计算机应用基础”的学生的学号、姓名。
  1. SELECT 学生表.sno, 学生表.sn
  2. FROM 学生表
  3. JOIN 学生成绩表 ON 学生表.sno = 学生成绩表.sno
  4. JOIN 课程表 ON 学生成绩表.course_sno = 课程表.course_sno
  5. WHERE 课程表.cn = '计算机应用基础';
复制代码


9、查询与“张艳”同一班级的学生的学号和姓名。
  1. SELECT x.sno, x.sn
  2. FROM 学生表 AS x
  3. JOIN 学生表 AS y ON x.maj = y.maj
  4. WHERE y.sn = '张艳';
复制代码


10、查询比“计算机应用基础”学时多的课程的课程号、课程名和课时。
  1. SELECT x.course_sno AS 课程号, x.cn AS 课程名, x.cti AS 学时
  2. FROM 课程表 AS x
  3. JOIN 课程表 AS y ON x.cti > y.cti
  4. WHERE y.cn = '计算机应用基础';
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-2 01:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表