Mysql---数据查询(一)
来源:互联网 发布:网络机顶盒app应用软件 编辑:程序博客网 时间:2024/06/06 08:33
在进行数据查询操作前,我们需要建立三张表,如下:
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_SnoFOREIGN KEY(Sno)REFERENCES student(Sno),CONSTRAINT courcse_CnoFOREIGN KEY(Cno)REFERENCES courcse(Cno));
4.插入数据:
INSERT INTO studentVALUES('9512101','李勇','男',19,'计算机系'),('9512102','刘晨','男',20,'计算机系'),('9512103','王敏','女',20,'计算机系'),('9521101','张立','男',22,'信息系'),('9521102','吴宾','女',21,'信息系'),('9521103','张海','男',20,'信息系'),('9531101','钱小平','女',18,'数学系'),('9531102','王大力','男',19,'数学系');INSERT INTO courcseVALUES('c01','计算机文化学',3,1),('c02','VB',2,3),('c03','计算机网络',4,7),('c04','数据库基础',6,6),('c05','高等数学',8,2),('c06','数据结构',5,4);INSERT INTO scVALUES('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('计算机系');
0 0
- Mysql---数据查询(一)
- MySQL数据的查询(一)
- 10--MySQL数据查询应用(实战)(一)
- mysql之select 查询表数据(一)
- 数据查询(一)
- MYSQL查询优化(一)
- (一) MySQL 查询分析
- MYSQL查询优化(一)
- mysql查询优化(一)
- MYSQL查询优化(一)
- MYSQL查询优化(一)
- MySQL慢查询(一)
- MySQL慢查询(一)
- Mysql慢查询(一)
- MySQL慢查询(一)
- MySQL慢查询(一)
- MYSQL-----数据查询(续)
- Mysql查询数据(四)
- nyoj 6 喷水装置(一)
- [LeetCode Java] 3 Longest Substring Without Repeating Characters
- Sicily 1944. Exists? Or not
- 再论关于如何学习网络编程
- delete和delete[]的区别
- Mysql---数据查询(一)
- Tomcat的目录结构
- nyoj.116 士兵杀敌(二)【数据结构】 2015/03/14
- 中国地区的官方ubuntu源
- C中的动态开辟(malloc)
- varchar2设置长度与实际大小
- 一个求随机数的计算
- POJ1083
- vc++微游戏