CREATE DATABASE IF NOT EXISTS `school`;
-- 创建一个school数据库
USE `school`;-- 创建学生表
DROP TABLE IF EXISTS `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=MYISAM DEFAULT CHARSET=utf8;-- 创建年级表
DROP TABLE IF EXISTS `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;-- 创建科目表
DROP TABLE IF EXISTS `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;-- 创建成绩表
DROP TABLE IF EXISTS `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;- 插入学生数据 其余自行添加 这里只添加了2行
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');
(1002,'123456','张亮',0,4,'13800003324','江苏南京','1980-02-02','text555@qq.com','12345678978541')-- 插入成绩数据  这里仅插入了一组,其余自行添加
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);-- 插入年级数据
INSERT INTO `grade` (`gradeid`,`gradename`) VALUES(1,'大一'),(2,'大二'),(3,'大三'),(4,'大四'),(5,'预科班');
-- 插入科目数据
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);

4.1、数据查询语言


4.2 指定查询字段

-- 查询全部学生  select 字段 from 表
SELECT *FROM `result`

-- 查询指定字段
SELECT `StudentNo`,`StudentName` FROM student

-- 别名,给查到的结果起一个名字  AS
SELECT `StudentNo` AS 学号, `StudentName` AS 姓名 FROM student

-- 函数  Contcat(a,b)
SELECT CONCAT('姓名:',StudentName) AS 新名字 FROM student

去重

作用:去除select查询出来的结果中重复的数据,重复的数据只显示一条

SELECT *FROM result  -- 查询全部的考试成绩
SELECT `StudentNo` FROM result -- 查询有哪些同学参加了考试
SELECT DISTINCT `StudentNo` FROM result -- 发现重复数据,去重

数据库的列(表达式)

SELECT VERSION() -- 查询版本系统(函数)
SELECT 100*3-1 AS 计算结果  -- 用来计算(表达式)
SELECT @@auto_increment_increment -- 查询自增的步长(变量)-- 学员考试成绩+1分
SELECT `StudentNo`,`StudentResult`+ 1 AS '总分' FROM result

4.3、where条件子句

-- ================where==================
SELECT `studentno`,`studentResult` FROM result
WHERE studentResult >= 50 AND studentResult <= 70;SELECT `studentno`,`studentResult` FROM result
WHERE studentResult >=68 && studentResult <=90;SELECT `studentNo`,`studentResult` FROM result
WHERE studentResult BETWEEN 60 AND 90;-- 除1000号同学之外的学生
SELECT `studentNo` FROM student
WHERE NOT studentNo = 1000;SELECT `studentNo` FROM student
WHERE studentNo != 1000;

模糊查询操作符详解:比较运算符

-- ===========模糊查询===========
-- %(代表0到任意个字符) _(代表一个字符)
-- 查询姓张的同学
SELECT `studentno`,`studentname` FROM student
WHERE studentname LIKE '张%' -- 查询姓张的同学,并且后面只有一个字
SELECT `studentno`,`studentname` FROM student
WHERE studntname LIKE '张_'-- 查询名字里面带有嘉的
SELECT `studentno`,`stdeuntname` FROM student
WHERE studentname LIKE '%嘉%'-- =========in==========-- 查询1000,1001号同学
SELECT `studentno`,`studentname` FROM student
WHERE studentno IN (1001,1002)SELECT `address` FROM student
WHERE address IN ('北京朝阳','广东深圳')-- =======null   not null========
-- 查询地址为空的学生
SELECT `address` FROM `student`
WHERE address='' OR address IS NULL-- 查询有出生日期的同学  不为空
SELECT `borndate` FROM `student`
WHERE borndate IS NOT NULL-- 查询没有出生日期的同学  为空
SELECT `bornate` FROM `student`
WHERE borndate IS NULL

4.4、联表查询JoinON详解

-- =========联表查询==========
-- 查询参加了考试的同学(学号,姓名,科目编号,分数)
SELECT * FROM student
SELECT * FROM result/*思路
1.分析需求,分析查询的字段来自哪些表(连接查询)
2.确定使用哪种连接查询
确定交叉点(这两个表中哪个数据是相同的)
判断的条件:学生表中的  studentNo = 成绩表中的 stuentNo
*/-- join(连接的表) on(判断的条件) 连接查询
-- where 等值查询SELECT s.studentNo,studentName,subjectno,studentresult
FROM `student` AS s
INNER JOIN `result` AS r
WHERE s.studentNo = r.studentNoSELECT s.studentNo,studentName,subjectno,studentresult
FROM `student` AS s
RIGHT JOIN `result` AS r
ON s.studentNo = r.studentNo  //注意是ON 上面的是whereSELECT s.studentNo,studentName,subjectno,studentresult
FROM `student` AS s
LEFT JOIN `result` AS r
ON s.studentNo = r.studentNo-- 查询缺考的同学
SELECT s.studentNo,studentName,subjectno,studentresult
FROM `student` AS s
LEFT JOIN `result` AS r
ON s.studentNo = r.studentNo
WHERE studentresult IS NULL

-- 思考题(查询参加了考试的同学信息:学号,学生姓名,科目名,分数)
/*思路
1.分析需求,分析查询的字段来自哪些表(连接查询)
2.确定使用哪种连接查询
确定交叉点(这两个表中哪个数据是相同的)
判断的条件:学生表中的  studentNo = 成绩表中的 stuentNo
*/SELECT s.studentNo,studentName,subjectname,studentresult
FROM `student` AS s
RIGHT JOIN `result` AS r
ON s.studentNo = r.studentNo
INNER JOIN `subject` AS sub
ON r.subjectNo = sub.subjectNo

自连接

-- =======自连接=======
CREATE TABLE `school`.`category`(
`categoryid` INT(3) NOT NULL COMMENT '主题id',
`pid` INT(3) NOT NULL COMMENT '父id 没有父则为1',
`categoryname` VARCHAR(10) NOT NULL COMMENT '种类名字',
PRIMARY KEY (`categoryid`)
) ENGINE=INNODB CHARSET=utf8 COLLATE=utf8_general_ci; INSERT INTO `school`.`category` (`categoryid`, `pid`, `categoryname`) VALUES (2, 1, '信息技术');
INSERT INTO `school`.`CATEGOrY` (`categoryid`, `pid`, `categoryname`) VALUES (3, 1, '软件开发');
INSERT INTO `school`.`category` (`categoryid`, `PId`, `categoryname`) VALUES (5, 1, '美术设计');
INSERT INTO `School`.`category` (`categoryid`, `pid`, `categorynamE`) VALUES (4, 3, '数据库');
INSERT INTO `school`.`category` (`CATEgoryid`, `pid`, `categoryname`) VALUES (8, 2, '办公信息');
INSERT INTO `school`.`category` (`categoryid`, `pid`, `CAtegoryname`) VALUES (6, 3, 'web开发');
INSERT INTO `SCHool`.`category` (`categoryid`, `pid`, `categoryname`) VALUES (7, 5, 'ps技术');



练习

-- 查询学员所属的年级(学号,学生的姓名,年级名称)
SELECT studentNo,studentName,gradename
FROM `student` AS s
INNER JOIN `grade` AS g
ON s.gradeid = g.gradeid

-- 查询科目所属的年级(科目名称,年级名称)
SELECT subjectname,gradename
FROM `subject` AS s
INNER JOIN `grade` AS r
ON s.gradeid = r.gradeid

-- 查询参加了 数据库结构-1 考试的同学信息:学号,学生姓名,科目名,分数
SELECT s.studentNo,studentName,subjectname,studentresult
FROM `student` AS s
RIGHT JOIN `result` AS r
ON s.studentNo = r.studentNo
INNER JOIN `subject` AS sub
ON r.subjectno = sub.subjectno
WHERE subjectname = '数据库结构-1'

4.5、分页和排序

排序

-- 排序:升序ASC,  降序DESC
-- 语法:ORDER BY 通过哪个字段排序 怎么排
-- 将查询的结果根据成绩排序  降序SELECT s.studentNo,studentName,subjectname,studentresult
FROM `student` AS s
RIGHT 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 DESC

分页



例题:

-- 思考
-- 查询 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
WHERE subjectname = 'JAVA第一学年' AND studentresult > 80
ORDER BY studentresult DESC
LIMIT 0,10  -- 前十名分页

4.6、子查询



例二


4.7、分组和过滤

-- 查询不同课程的平均分,最高分,最低分,平均分大于80
-- 核心:根据不同的课程分组(分组后,此时二级条件就不能用where了,而是用having)
SELECT subjectname,AVG(studentresult) AS 平均分,MAX(studentresult) AS 最高分,MIN(studentresult) AS 最低分
FROM result AS r
INNER JOIN `subject` AS sub
ON r.`subjectno` = sub.`subjectno`
GROUP BY r.subjectno
HAVING 平均分 > 80

select查询语句小结

DQL查询数据(最重要)相关推荐

  1. 使用DQL查询数据(重点)

    DQL查询数据(*重点) DQL Data Query LANGUAGE:数据查询语言 所有的查询操作都用它 Select 简单的查询,复杂的查询它都能做 数据库中最核心的语言,最重要的语句 使用频率 ...

  2. 数据库应用——DQL查询数据(连表查询 子查询 详细案例)

    DQL查询数据 DQL Select完整的语法 练习用的sql脚本 指定查询字段 where 条件子句 连表查询(重要) 三种join的比较 连表查询练习 自连接 分页和排序 子查询 分组和过滤 DQ ...

  3. 4.DQL查询数据(※重点※)

    4.DQL查询数据(※重点※) DQL(Data Quary Language:数据查询语言)[重点] 4.1,指定查询字段 – 查询某表中所有数据 select * from 表名; – 查询某表中 ...

  4. MySQL学习总结(2) --- 数据表管理(增删改查)、使用DQL查询数据(SELECT)

    MySQL学习总结(2) - 数据表管理(增删改查).使用DQL查询数据(SELECT) 1. 数据管理(增删改查) 数据库数据管理方法: a.通过SQLyog等管理工具管理数据库数据 b. 通过DM ...

  5. JAVA-MySQL四{MySQL重点DQL查询数据}JAVA从基础开始 --7

    JAVA-MySQL四{MySQL重点DQL查询数据}JAVA从基础开始 --7 DQL查询语句 DQL - Data Query Language:数据查询语言 指定查询字段 1.全查 2.指定字段 ...

  6. MySQL中DQL查询数据——(四)

    MySQL中DQL查询数据--(四) 本篇博客,是个人根据 西部开源-秦疆老师的教学视频整理出的笔记,想看最详细的教学笔记和提供的SQL语句素材,请点击如下链接: https://www.cnblog ...

  7. MySQL笔记——DQL查询数据

    DQL查询包括以下这些内容: • 基础查询 • 条件查询(WHERE) • 分组查询(GROUP BY) • 排序查询(ORDER BY) • 分页查询(LIMIT) (一).基础查询 1.查询多个字 ...

  8. 4.DQL查询数据(超重点)

    4.1DQL DQL(data query language:数据查询语言) 所有的查询操作都用它,关键字 select 简单的查询,复杂的查询它都能做 数据库中最核心的语言,最重要的语句 使用频率最 ...

  9. 4.MySQL的DQL查询数据

    4.1DQL (Data Query LANGUAGE):数据查询语言 所以的查询操作都用它, Select 简单和复杂的查询它都能做!5](5.png) 数据库中最核心的语言,最重要的语言 使用频率 ...

最新文章

  1. 另存为里面没有jpg_选用打印捕捉功能将 SolidWorks 画面另存为JPG格式高清大图
  2. 链表问题7——判断一个链表是否为回文结构(进阶)
  3. R构建SVM回归模型
  4. 第十六届智能车竞赛国赛队伍中节能信标组无线电能接收方案
  5. 虚拟机ping不通开发板如何解决
  6. 因封杀Adobe 美司法部对苹果展开反垄断调查
  7. android BSP
  8. Java解析HTML之HTMLParser使用与详解
  9. ksu7对讲机调频软件_科普 | 数字对讲机的群呼功能原理是什么?你了解多少?...
  10. 深入java核心_Java核心(五)深入理解BIO、NIO、AIO
  11. mysql中清空数据库,并重置主键为1
  12. 最简单快捷搭建私链步骤笔记
  13. JAVA08 多态
  14. I00035 完美数(Perfect number)
  15. clickhouse SummingMergeTree表引擎
  16. 一个成功企业家立下的22条规矩
  17. 西门子g120变频器接线图_西门子G120变频器通过IOP-2面板快速启动
  18. POJ3744 Scout YYF I 概率DP+矩阵快速幂
  19. 5G无线关键技术 — 双工技术
  20. grafana快速搭建数据平台

热门文章

  1. Android 显示和控制gif动态图片的播放
  2. NYOJ 42 一笔画问题
  3. 西天目浙西二日游--游记
  4. AIops落地5大原则
  5. BAT三巨头开挖大数据
  6. Kendo UI常见问题
  7. 2月22日更新《DirectX11的Shader Reflect的几个问题》
  8. 阿里云Docker Registry 操作指南
  9. 【农田杂草识别】基于sift特征提取的农田杂草识别
  10. 汉化Windows Azure上的虚拟机