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);
result建表语句
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;
一、查询指定字段
1、-- 查询全部学生 select 字段 from 表名
SELECT*FROM student;
2、-- 查询指定字段
SELECT `studentno`,`studentname` FROM student;
3、-- 别名,给结果起一个名字
SELECT `studentno` AS 学号,`studentname` AS 姓名 FROM student;
4、-- 别名,给结果起一个名字,也可以给表起别名
SELECT `studentno` AS 学号,`studentname` AS 姓名 FROM student AS s;
5、-- 函数 concat(a,b)SELECT CONCAT('姓名:',studentName) AS 新名字 FROM student;
二、去重
1、-- 查询一下那些同学参加了考试,成绩
SELECT DISTINCT `studentno` FROM result;
2、 -- 自增步长
SELECT @@auto_increment_increment
3、-- 查询mysql版本
SELECT VERSION()
4、-- 学生考试成绩+1查看
SELECT `studentno`,`studentresult`+1 AS '加分后'FROM result;
三、where字句
1、-- 查询考试成绩在95-100分之间
SELECT `studentno`,`studentresult`FROM result WHERE `studentresult`>=95 AND `studentresult`<=100;
2、-- 模糊查询(区间)
SELECT `studentno`,`studentresult` FROM result WHERE `studentresult` BETWEEN 95 AND 100;
3、-- 除了1000号学生之外的同学的成绩
SELECT `studentno`,`studentresult` FROM result WHERE `studentno`!=1000;
4、--!= not
SELECT `studentno`,`studentresult` FROM result WHERE NOT `studentresult`=1000;
四、模糊查询
1、-- 查询姓李的同学
SELECT `studentno`,`studentname` FROM student WHERE `studentname` LIKE '李%';
2、-- 查询1001,1002,1003号学生
SELECT `studentno`,`studentname` FROM student
WHERE `studentno` IN (1001,1002,1003);
3、-- 查询在北京朝阳的学生
SELECT `studentno`,`studentname` FROM student
WHERE `address` IN ('北京朝阳');
五、连表查询 join
-- join(连接的表) on(判断条件) 连接查询
--where on 等值查询
1、-- 查询参加了考试的同学(学号,姓名,科目编号,分数)
SELECT s.`studentno`,`studentname`,`subjectno`,`studentresult`
FROM student AS s
INNER JOIN result AS r;
WHERE s.`studentno`=r.`studentno`;
2、-- right join
SELECT s.`studentno`,`studentname`,`subjectno`,`studentresult`
FROM student AS s
RIGHT JOIN result AS r
ON s.`studentno`=r.`studentno`;
3、--left join
SELECT s.`studentno`,`studentname`,`subjectno`,`studentresult`
FROM student AS s
LEFT JOIN result AS r
ON s.`studentno`=r.`studentno`;
操作 描述
Inner join 如果表中至少有一个匹配,就返回没有匹配
Left join 会从左表中返回所有的值,即使右边没有匹配
Right join 会从右表中返回所有的值,即使左表中没有匹配
4、-- 查询参加了考试的同学的信息,学号,学生姓名,科目名,分数
SELECT s.`studentno`,`studentname`,`subjectname`,`studentresult`
FROM student AS s
RIGHT JOIN result AS r
ON r.`studentno`=s.`studentno`
INNER JOIN `subject` AS sub
ON r.`subjectno`=sub.`subjectno`;
category表创建语句
CREATE TABLE `category` (
`categoryid` INT(10) NOT NULL COMMENT '主题ID',
`pid` INT(10) NOT NULL COMMENT '父ID',
`categoryName` VARCHAR(50) NOT NULL COMMENT '主题名字',
PRIMARY KEY(categoryid)) ENGINE=INNODB AUTO_INCREMENT=9 DEFAULT CHARSET = utf8;
数据插入语句
INSERT INTO `category` (`categoryid`, `pid`, `categoryName`) VALUES (2, 1,'信息技术');
INSERT INTO `CATEGOrY` (`categoryid`, `pid`, `categoryname`) VALUES (3, 1,'软件开发');
INSERT INTO `category` (`categoryid`, `PId`, `categoryname`) VALUES (5, 1,'美术设计');
INSERT INTO `category` (`categoryid`, `pid`, `categorynamE`) VALUES (4, 3,'数据库');
INSERT INTO `category` (`CATEgoryid`, `pid`, `categoryname`) VALUES (8, 2,'办公信息');
INSERT INTO `category` (`categoryid`, `pid`, `CAtegoryname`) VALUES (6, 3,'web开发');
INSERT INTO `category` (`categoryid`, `pid`, `categoryname`) VALUES (7, 5,'ps技术');
六、自连接
自己的表和自己的表连接,即一张表拆为两张一样的表即可
1、-- 查询父子信息(把两张表看成一模一样的表)
SELECT a.`categoryName` AS '父栏目',b.`categoryName` AS '子栏目'FROM `category` AS a,`category` AS b
WHERE a.`categoryid`=b.`pid`;
2、-- 查询学员所属的年级(学号,学生的姓名,年级名称)
SELECT `studentno`,`studentname`,`gradename`
FROM student AS s
INNER JOIN `grade` AS g
WHERE s.`gradeid`=g.`gradeid`;
3、-- 查询科目所属的年级
SELECT `subjectname`,`gradename`
FROM `subject` AS sub
INNER JOIN `grade` AS g
WHERE sub.`gradeid`=g.`gradeid`;
4、-- 查询参加了高等数学考试的学生信息:学号,学生姓名,科目名,分数
SELECT s.`studentno`,`studentname`,`subjectname`,`studentresult`
FROM student AS s
INNER JOIN `result` AS r
ON s.`studentno`=r.`studentno`
INNER JOIN `subject` AS sub
ON r.`subjectno`=sub.`subjectno`
WHERE `subjectname`='高等数学-1';-- ========分页limit 和排序 order by
1、-- 查询参加了高等数学考试的学生信息:学号,学生姓名,科目名,分数 并进行降序排序
SELECT s.`studentno`,`studentname`,`subjectname`,`studentresult`
FROM student AS s
INNER JOIN `result` AS r
ON s.`studentno`=r.`studentno`
INNER JOIN `subject` AS sub
ON r.`subjectno`=sub.`subjectno`
WHERE `subjectname`='高等数学-1'
ORDER BY `studentresult` ASC;
2、-- 查询java第一学年 课程成绩排名前十的学生, 并且分数要大于80的学生信息(学号,姓名,课程名称,分数)
SELECT s.`studentno`,`studentname`,`subjectname`,`studentresult`
FROM student AS s
INNER JOIN result AS r
ON s.`studentno`=r.`studentno`
INNER JOIN `subject` AS sub
ON r.`subjectno`=sub.`subjectno`
ORDER BY `studentresult` DESC
LIMIT 0,10;
七、子查询
-- 1、查询高等数学-1的所有考试结果(学号,科目编号,成绩),降序排列
SELECT `studentno`,r.`subjectno`,`studentresult`
FROM `result` AS r
INNER JOIN `subject` AS sub
ON r.`subjectno`=sub.`subjectno`
WHERE `subjectname` = '高等数学-1'
ORDER BY `studentresult` DESC;
2、查询高等数学-1的所有考试结果(学号,科目编号,成绩),降序排列(方式二)
SELECT `studentno`,`subjectno`,`studentresult`
FROM result
WHERE `subjectno` =ANY(SELECT `subjectno` FROM `subject`
WHERE `subjectname`='高等数学-1')
3、-- 分数不小于80分的学生的学号和姓名
SELECT s.`studentno`,s.`studentname`
FROM `student` AS s
INNER JOIN `result` AS r
ON s.`studentno`=r.`studentno`
WHERE r.`studentresult`>=80;
4、-- 高等数学-2,分数不小于80分的学生的学号和姓名
SELECT s.`studentno`,s.`studentname`
FROM `student` AS s
INNER JOIN `result` AS r
ON s.`studentno`=r.`studentno`
INNER JOIN`subject` AS sub
ON r.`subjectno`=sub.`subjectno`
WHERE r.`studentresult`>=80
AND `subjectname`='高等数学-3';
5、-- 查询课程为 高等数学-2
-- 且分数不小于80的同学的学号和姓名
SELECT `studentno`,`studentname` FROM student
WHERE `studentno` IN(SELECT `studentno` FROM `result` WHERE `studentresult` >80 AND `subjectno`=ANY(SELECT `subjectno` FROM `subject` WHERE `subjectname`='高等数学-2'))
八、常用函数
-- 数学运算
SELECT ABS(-8);-- 绝对值
SELECT CEILING(6.5);-- 向上取整
SELECT FLOOR(6.5);-- 向下取整
SELECT RAND();-- 返回0-1的随机数
SELECT SIGN(-5);-- 判断一个数的符号,正数返回1,负数返回-1
-- 字符串
SELECT CHAR_LENGTH('众里寻他千百度,那人却在灯火阑珊处');-- 返回字符串长度
SELECT CONCAT('我','爱','你');-- 字符串拼接
SELECT INSERT('我喜欢你',2,2,'讨厌');-- 字符串替换,从那个位置开始,替换几个字符
SELECT LOWER('TANKE');-- 大写转小写
SELECT UPPER('tanke');-- 小写转大写
SELECT REPLACE('失败是成功之母','之母','他妈');-- 字符串替换
-- 时间日期函数
SELECT CURRENT_DATE();-- 获取当前日期
SELECT CURDATE();-- 获取当前日期
SELECT NOW();-- 获取当前时间
SELECT LOCALTIME();-- 本地时间
SELECT SYSDATE();-- 系统时间
1、-- 查询不同课程课程的平均分,最高分,最低分
SELECT `subjectname`, AVG(`studentresult`),MAX(`studentresult`),MIN(`studentresult`)FROM `subject` AS s
INNER JOIN `result` AS r
ON s.`subjectno`=r.`subjectno`
GROUP BY s.`subjectname`;
2、-- 查询不同课程课程的平均分,最高分,最低分,平均分大于80
SELECT `subjectname`, AVG(`studentresult`) AS 平均分,MAX(`studentresult`) AS 最高分,MIN(`studentresult`) AS 最低分
FROM `subject` AS s
INNER JOIN `result` AS r
ON s.`subjectno`=r.`subjectno`
GROUP BY s.`subjectname`
HAVING 平均分>80;