Mysql---数据查询(一)

在进行数据查询操作前,我们需要建立三张表,如下:


1.建立学生表:

CREATE TABLE student
(
Sno VARCHAR(7) PRIMARY KEY,
Sname VARCHAR(10) NOT NULL,
Ssex VARCHAR(2),
Sage TINYINT,
Sdept VARCHAR(20)
);

2.建立课程表:

CREATE TABLE courcse
(
Cno VARCHAR(10) NOT NULL,
Cname VARCHAR(20) NOT NULL,
Ccredit TINYINT,
Semester TINYINT,
PRIMARY KEY(Cno)
);

3.建立选修表:

CREATE TABLE sc
(
Sno VARCHAR(7) NOT NULL,
Cno VARCHAR(10) NOT NULL,
Grade SMALLINT,
XKLB VARCHAR(4),
PRIMARY KEY(Sno,Cno),
CONSTRAINT student_Sno
FOREIGN KEY(Sno)
REFERENCES student(Sno),
CONSTRAINT courcse_Cno
FOREIGN KEY(Cno)
REFERENCES courcse(Cno)
);

4.插入数据:

INSERT INTO student
VALUES
('9512101','李勇','男',19,'计算机系'),
('9512102','刘晨','男',20,'计算机系'),
('9512103','王敏','女',20,'计算机系'),
('9521101','张立','男',22,'信息系'),
('9521102','吴宾','女',21,'信息系'),
('9521103','张海','男',20,'信息系'),
('9531101','钱小平','女',18,'数学系'),
('9531102','王大力','男',19,'数学系');

INSERT INTO courcse
VALUES
('c01','计算机文化学',3,1),
('c02','VB',2,3),
('c03','计算机网络',4,7),
('c04','数据库基础',6,6),
('c05','高等数学',8,2),
('c06','数据结构',5,4);

INSERT INTO sc
VALUES
('9512101','c01',90,'必修'),
('9512101','c02',86,'选修'),
('9512101','c06',NULL,'必修'),
('9512102','c02',78,'选修'),
('9512102','c04',66,'必修'),
('9521102','c01',82,'选修'),
('9521102','c02',75,'选修'),
('9521102','c04',92,'必修'),
('9521102','c05',50,'必修'),
('9521103','c02',68,'选修'),
('9521103','c06',NULL,'必修'),
('9531101','c01',80,'选修'),
('9531101','c05',95,'必修'),
('9531102','c05',85,'必修');

5.查询过程

5.1查询出生年份

PS:可以在输出的时候对列重新命名,并且输出并不存在的列,列值通过计算而来。

SELECT Sname 姓名,2015-Sage 出生年份 FROM student;


5.2查找选修了课程的同学的学号,并且升序排序。

PS:因为在选修课表中,存在一名同学选了多门课程的情况(故主键为学号加课程号),所以直接查询学号会出现很多相同的学号。

SELECT DISTINCT Sno FROM sc ORDER BY Sno;
关键字DISTINCT 用来去除重复的行,OREDR BY 用来排序,默认排序为升序(ASC),降序为(DESC)。


5.3查询成绩不及格的学生的学号

PS:当一个学生有多们成绩不及格时,只需列出一个学号

SELECT DISTINCT Sno FROM sc WHERE Grade<60;


5.4查询成绩为空的学生的学号

PS:当查询成绩为空的时候,一定要注意 WHERE 的判断语句必须是 “Grade IS NULL”,而不能为“Grade=NULL”,涉及到非NULL则为“IS NOT NULL”。

SELECT DISTINCT Sno,Grade FROM sc WHERE Grade IS NULL;



5.5查询年龄在20~23之间的学生的姓名、所在系、年龄

PS:在一个区间的查询,可以使用 BETWEEN ... AND 或者对年龄进行两次判断取 AND,不在这个区间,则在BETWEEN前面加入 NOT。

SELECT Sname,Sdept,Sage FROM student WHERE Sage BETWEEN 20 AND 23;
SELECT Sname,Sdept,Sage FROM student WHERE Sage>=20 AND Sage<=23;



5.6查询信息系、数学系的学生的姓名和性别

PS:可以用关键字IN来解决,不在范围,则用NOT IN。以下两句结果一样。

SELECT Sname,Ssex FROM student WHERE Sdept IN ('信息系','数学系');
SELECT Sname,Ssex FROM student WHERE Sdept NOT IN('计算机系');



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值