首先来看一下数据库的设计首先是建表
grade:
CREATE TABLE `grade` ( `gradeid` int(11) NOT NULL AUTO_INCREMENT COMMENT '年级编号', `gradename` varchar(50) NOT NULL COMMENT '年级名称', PRIMARY KEY (`gradeid`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8
resul:
CREATE TABLE `result` ( `studentno` int(4) NOT NULL COMMENT '学号', `subjectno` int(4) NOT NULL COMMENT '课程编号', `examdate` datetime NOT NULL COMMENT '考试日期', `studentresult` int(4) NOT NULL COMMENT '考试成绩', KEY `subjectno` (`subjectno`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
student:
CREATE TABLE `student` ( `studentno` int(4) NOT NULL COMMENT '学号', `loginpwd` varchar(20) DEFAULT NULL, `studentname` varchar(20) DEFAULT NULL COMMENT '学生姓名', `sex` tinyint(1) DEFAULT NULL COMMENT '性别,0或1', `gradeid` int(11) DEFAULT NULL COMMENT '年级编号', `phone` varchar(50) NOT NULL COMMENT '联系电话,允许为空', `address` varchar(255) NOT NULL COMMENT '地址,允许为空', `borndate` datetime DEFAULT NULL COMMENT '出生时间', `email` varchar(50) NOT NULL COMMENT '邮箱账号允许为空', `identitycard` varchar(18) DEFAULT NULL COMMENT '身份证号', PRIMARY KEY (`studentno`), UNIQUE KEY `identitycard` (`identitycard`), KEY `email` (`email`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
subject:
CREATE TABLE `subject` ( `subjectno` int(11) NOT NULL AUTO_INCREMENT COMMENT '课程编号', `subjectname` varchar(50) DEFAULT NULL COMMENT '课程名称', `classhour` int(4) DEFAULT NULL COMMENT '学时', `gradeid` int(4) DEFAULT NULL COMMENT '年级编号', PRIMARY KEY (`subjectno`) ) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8
接着是插入数据(也可以自己一边写,一边根据自己的操作,自己插入数据):
subject表插入数据:
insert into `subject`(`subjectno`,`subjectname`,`classhour`,`gradeid`)values (1,'高等数学-1',110,1), (2,'高等数学-2',110,2), (3,'高等数学-3',100,3), (4,'高等数学-4',130,4), (5,'C语言-1',110,1), (6,'C语言-2',110,2), (7,'C语言-3',100,3), (8,'C语言-4',130,4), (9,'Java程序设计-1',110,1), (10,'Java程序设计-2',110,2), (11,'Java程序设计-3',100,3), (12,'Java程序设计-4',130,4), (13,'数据库结构-1',110,1), (14,'数据库结构-2',110,2), (15,'数据库结构-3',100,3), (16,'数据库结构-4',130,4), (17,'C#基础',130,1);
student插入数据
insert into `student` (`studentno`,`loginpwd`,`studentname`,`sex`,`gradeid`,`phone`,`address`,`borndate`,`email`,`identitycard`) values (1000,'123456','张伟',0,2,'13800001234','北京朝阳','1980-1-1','text123@qq.com','123456198001011234'), (1001,'123456','赵强',1,3,'13800002222','广东深圳','1990-1-1','text111@qq.com','123456199001011233');insert into `student` (`studentno`,`loginpwd`,`studentname`,`sex`,`gradeid`,`phone`,`address`,`borndate`,`email`,`identitycard`) values (1000,'123456','张伟',0,2,'13800001234','北京朝阳','1980-1-1','text123@qq.com','123456198001011234'), (1001,'123456','赵强',1,3,'13800002222','广东深圳','1990-1-1','text111@qq.com','123456199001011233');
result插入数据
insert into `result`(`studentno`,`subjectno`,`examdate`,`studentresult`) values (1000,1,'2013-11-11 16:00:00',85), (1000,2,'2013-11-12 16:00:00',70), (1000,3,'2013-11-11 09:00:00',68), (1000,4,'2013-11-13 16:00:00',98), (1000,5,'2013-11-14 16:00:00',58);
grade插入数据:
insert into `grade` (`gradeid`,`gradename`) values(1,'大一'),(2,'大二'),(3,'大三'),(4,'大四'),(5,'预科班');
查看当前mysql版本号
select version()
可以用来计算:
select 19*10-98 as 结果
对选出的int型数据进行操作
select studentresult+10 from result
未操作之前:
对操作数加10:
模糊查询:比较运算符
_ 下划线通配符,代替匹配一个字符,(第二个字是东即可)
select studentname from student where studentname LIKE '_东%'
% 百分号代表匹配任意个字符 (无论哪个,只要有东就好)
select studentname from student where studentname LIKE '%东%'
in 取范围 里面需要的是一个具体的值(查询gradeid为1或者2的)
select subjectname,gradeid from subject where gradeid in ("1","2")
null (注意的是null和“"是不一样的,这是查询loginpwd是Nul的)
select studentname ,loginpwd from student where loginpwd is NULL
联表查询 join(连接的表) on(条件的判断)
思路:所查询的字段来自于那些表
采用的连接方式(考虑是以那个表作为基准)
inner join
left join 从左表进行查询,即使右表没有
right join
三表联查:学生的姓名,学号,成绩,课程号(注意要查询学生的成绩,以result,成绩表为基准)
SELECT studentname,a.studentno,studentresult,subjectname FROM student a RIGHT JOIN
result b ON a.studentno=b.studentno INNER JOIN `subject` c ON b.subjectno=c.subjectno