1.查询一部分笔记
时间:2019-10-18
本文章向大家介绍1.查询一部分笔记,主要包括1.查询一部分笔记使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
#绿皮书 SQLserver书P62-63 基本包含约束 #时间 2019/10/17 #作者:XXX CREATE DATABASE practice; USE practice; CREATE TABLE 学生表 ( 学号 CHAR(7) NOT NULL, 身份证号 CHAR(18) NOT NULL, 姓名 CHAR(8) NOT NULL, 性别 CHAR(2) DEFAULT '男', 移动电话 CHAR(11), 籍贯 VARCHAR(10), 专业 VARCHAR(20) NOT NULL, 所在院系 VARCHAR(20) NOT NULL, 累计学分 INT, CONSTRAINT PK_学生表_学号 PRIMARY KEY(学号) )ENGINE=INNODB; INSERT INTO 学生表(学号,身份证号,姓名,性别,移动电话,籍贯,专业,所在院系,累计学分) VALUES ('S060101','******19880526***','王东民','男','135***11','杭州','计算机','信电学院',2), ('S060102','******19891001***','张小芬','女','131***11','宁波','计算机','信电学院',2), ('S060103','******19871021***','李鹏飞','男','139***12','温州','计算机','信电学院',2), ('S060109','******19880511***','陈晓莉','女','','西安','市场营销','管理学院',NULL), ('S060110','******19880226***','赵青山','男','130***22','太原','市场营销','管理学院',2), ('S060201','******19880606***','胡汉民','男','135***22','杭州','信息管理','信电学院',NULL), ('S060202','******19871226***','王俊青','男','','金华','信息管理','信电学院',NULL), ('S060306','******19880115***','吴双红','女','139***01','杭州','电子商务','信电学院',NULL), ('S060308','******19880526***','张丹宁','男','130***12','宁波','电子商务','信电学院',NULL); SELECT * FROM 学生表; CREATE TABLE 课程表 ( 课号 CHAR(6) NOT NULL, 课名 VARCHAR(30) NOT NULL, 学分 ENUM('1','2','3','4','5'), 教材名称 CHAR(30), 编著者 CHAR(8), 出版社 VARCHAR(20), 版号 VARCHAR(20), 定价 DECIMAL(10,2), CONSTRAINT PK_课程表_课号 PRIMARY KEY(课号) )ENGINE=INNODB; INSERT INTO 课程表(课号,课名,学分,教材名称,编著者,出版社,版号,定价) VALUES ('C01001','C++程序设计',2,'C++程序设计基础','张基温','高等教育出版社','7-04-005655-0',17), ('C01002','数据结构',3,'数据结构','','','',NULL), ('C01003','数据库原理',3,'数据库系统概论','萨师煊','高等教育出版社','7-04-007494-X',NULL), ('C02001','管理信息系统',2,'管理信息系统教程','姚建蓉','浙江科学技术出版社','7-5341-2422-0',38), ('C02002','ERP原理',2,'ERP原理设计实施','罗鸿','电子工业出版社','7-5053-8078-8',38), ('C02003','会计信息系统',2,'会计信息系统','王衍','','',NULL), ('C03001','电子商务',2,'电子商务','','','',NULL); SELECT * FROM 课程表; CREATE TABLE 教师表 ( 工号 CHAR(6) NOT NULL, 身份证号 CHAR(18) NOT NULL, 姓名 CHAR(8) NOT NULL, 性别 ENUM ('男', '女'), 移动电话 CHAR(11), 籍贯 VARCHAR (10), 所在院系 VARCHAR (20) NOT NULL, 职称 CHAR(6), 负责人工号 CHAR(6), CONSTRAINT PK_教师表_工号 PRIMARY KEY(工号) )ENGINE=INNODB; INSERT INTO 教师表(工号,身份证号,姓名,性别,移动电话,籍贯,所在院系,职称,负责人工号) VALUES ('T01001','******19600526***','黄中天','男','139***88','杭州','管理学院','教授','T01001'), ('T01002','******19721203***','张丽','女','131***77','沈阳','管理学院','讲师','T01001'), ('T02001','******19580517***','曲宏伟','男','135***66','西安','信电学院','教授','T02001'), ('T02002','******19640520***','陈明收','男','137***55','太原','信电学院','副教授','T02001'), ('T02003','******19740810***','王重阳','男','136***44','绍兴','信电学院','讲师','T02001'); SELECT * FROM 教师表; CREATE TABLE 开课表( 开课号 CHAR(6) NOT NULL, 课号 CHAR(6) NOT NULL, 工号 CHAR(6) NOT NULL, 开课地点 CHAR(6), 开课学年 CHAR(9), 开课学期 INT, 开课周数 INT DEFAULT 17, 开课时间 VARCHAR(20), 限选人数 INT, 已选人数 INT, CONSTRAINT PK_开课表_开课号 PRIMARY KEY(开课号), CONSTRAINT pk_开课表_工号 FOREIGN KEY(工号) REFERENCES 教师表(工号) ON UPDATE CASCADE ON DELETE CASCADE, CONSTRAINT FK_开课表_课号 FOREIGN KEY(课号) REFERENCES 课程表(课号) ON UPDATE CASCADE ON DELETE CASCADE )ENGINE=INNODB; INSERT INTO 开课表(开课号,课号,工号,开课地点,开课学年,开课学期,开课周数,开课时间,限选人数,已选人数) VALUES ('010101','C01001','T02003','1-202','2006-2007','1','18','周一(1,2)','30','4'), ('010201','C01002','T02001','2-403','2006-2007','2','18','周三(3,4)','30','1'), ('010202','C01002','T02001','2-203','2006-2007','2','18','周五(3,4)','45',''), ('010301','C01003','T02002','3-101','2007-2008','1','16','周二(1,2,3)','20','2'), ('020101','C02001','T01001','3-201','2007-2008','2','18','周三(3,4)','90','2'), ('020102','C02001','T01001','3-201','2007-2008','2','18','周五(3,4)','50','1'), ('020201','C02002','T02001','4-303','2008-2009','1','17','周四(1,2,3)','30','1'), ('020301','C02003','T01002','4-102','2008-2009','1','9','周三(3)','70','1'), ('020302','C02003','T01002','4-204','2008-2009','1','18','周五(3,4)','30',''), ('030101','C03001','T01001','3-303','2008-2009','2','18','周三(3,4)','45','1'); SELECT * FROM 开课表; CREATE TABLE 选课表 ( 学号 CHAR(7) NOT NULL, 开课号 CHAR(6) NOT NULL, 成绩 INT, CONSTRAINT PK_选课表_学号_开课号 PRIMARY KEY(学号,开课号), CONSTRAINT PK_选课表_学号 FOREIGN KEY(学号) REFERENCES 学生表(学号) ON UPDATE CASCADE ON DELETE CASCADE, CONSTRAINT FK_选课表_开课号 FOREIGN KEY(开课号) REFERENCES 开课表(开课号) ON UPDATE CASCADE ON DELETE CASCADE )ENGINE=INNODB; INSERT INTO 选课表(学号,开课号,成绩) VALUES ('S060101','010101','90'), ('S060101','010201','65'), ('S060101','010301','78'), ('S060101','020101','62'), ('S060101','020201','75'), ('S060101','020301','74'), ('S060101','030101','86'), ('S060102','010101','93'), ('S060102','010301','54'), ('S060102','020102','63'), ('S060103','010101','85'), ('S060110','010101','88'), ('S060110','010301','56'), ('S060201','020101','77'), ('S060202','010101','75'), ('S060202','010202','91'), ('S060202','020201','59'), ('S060306','020302','66'); SELECT * FROM 选课表; /* 针对教材p10“教学管理”数据库,写出以下操作: 1、查询所有学生人数。 2、查询所有男生人数。 3、查询所有姓“王”的学生学号、姓名及年龄(由身份证号计算),并按年龄降序排序。 4、查询至少选修了一门课程的学生人数。 5、计算选修开课号为“010101”号课程的学生平均成绩及最高成绩。 6、计算开课号为“010101”号课程的限选人数和已选人数。 7、计算开课号为“010101”号课程的实际选课人数。 [1] 查询各门课程的开课号及相应的选课人数 [2] 查询选课人数超过25人的开课号及相应的选课人数 [3] 查询有3门以上课程是90分以上的学生的学号及(90分以上的)课程数 [4] 查询平均成绩大于等于90分的学生学号和平均成绩 [5] 查询学生的基本信息及其选课信息。外连接 */ -- 1、查询所有学生人数。 SELECT COUNT(*) FROM 学生表 SELECT COUNT(*) AS 学生总人数 FROM 学生表 SELECT COUNT(*) 学生总人数 FROM 学生表 -- 2、查询所有男生人数。 SELECT COUNT(*) 男生总人数 FROM 学生表 WHERE 性别 = '男' SELECT COUNT(*) 男生总人数 FROM 学生表 R1 , 学生表 R2 WHERE R1.学号 = R2.学号 AND R1.性别 = '男' -- 3、查询所有姓“王”的学生学号、姓名及年龄(由身份证号计算),并按年龄降序排序。 SELECT 学号,姓名, 2019-SUBSTRING(身份证号,7,4) AS 年龄 FROM 学生表 WHERE 姓名 LIKE '王%' ORDER BY 年龄 DESC SELECT R1.学号,R2.姓名,(2019-SUBSTRING(R3.身份证号,7,4)) AS 年龄 FROM 学生表 R1,学生表 R2,学生表 R3 WHERE R1.姓名 LIKE '王%' AND R1.学号 = R2.学号 AND R2.学号 = R3.学号 AND R1.学号 = R3.学号 ORDER BY 年龄 DESC #测试 SELECT 2019-SUBSTRING(身份证号,7,4) AS 年龄 FROM 学生表 SELECT (2019-SUBSTRING(R1.身份证号,7,4)) AS 年龄 FROM 学生表 R1 -- 4、查询至少选修了一门课程的学生人数。 SELECT COUNT(DISTINCT 学号) FROM 选课表 SELECT COUNT(DISTINCT 学号) 学生人数 FROM 选课表 -- 5、计算选修开课号为“010101”号课程的学生平均成绩及最高成绩。 SELECT AVG(成绩) 平均成绩, MAX(成绩) 最高成绩 FROM 选课表 WHERE 开课号 = '010101' SELECT AVG(R2.成绩) 平均成绩, MAX(R2.成绩) 最高成绩 FROM 开课表 R1,选课表 R2 WHERE R1.开课号 = '010101' AND R1.开课号 = R2.开课号 -- 6、计算开课号为“010101”号课程的限选人数和已选人数。 SELECT 限选人数,已选人数 FROM 开课表 WHERE 开课号 = '010101' -- 7、计算开课号为“010101”号课程的实际选课人数。 SELECT 已选人数 AS 实际选课人数 FROM 开课表 WHERE 开课号 = '010101' -- [1] 查询各门课程的开课号及相应的选课人数 SELECT FROM WHERE -- [2] 查询选课人数超过25人的开课号及相应的选课人数 -- 没有选课人数超过的,修改开课表里面的已选人数将一部分改为大于25的 SELECT 开课号,已选人数 AS 选课人数 FROM 开课表 WHERE 已选人数 > 25 -- [3] 查询有3门以上课程是90分以上的学生的学号及(90分以上的)课程数 -- 因为没有一个学生符合条件所以,修改成绩 SELECT 学号, COUNT(成绩) FROM 选课表 WHERE 成绩 > 90 GROUP BY 学号 HAVING COUNT(*)> 3 -- [4] 查询平均成绩大于等于90分的学生学号和平均成绩 SELECT 学号 ,AVG(成绩) AS 平均成绩 FROM 选课表 GROUP BY 学号 HAVING AVG(成绩) >= 90 -- [5] 查询学生的基本信息及其选课信息。外连接 /* 在mysql中有: 1.左外连接 2.右外连接 3.全外连接 */ -- 左外连接 SELECT * FROM 学生表 R1 LEFT JOIN 选课表 R2 ON R1.学号 = R2.学号 SELECT R1.*,R2.开课号 FROM 学生表 R1 LEFT JOIN 选课表 R2 ON R1.学号 = R2.学号 SELECT R1.*,R2.开课号 FROM 学生表 R1 LEFT OUTER JOIN 选课表 R2 ON R1.学号 = R2.学号 -- 右外连接 SELECT * FROM 选课表 R1 RIGHT JOIN 学生表 R2 ON R1.学号 = R2.学号 SELECT R1.开课号,R2.* FROM 选课表 R1 RIGHT JOIN 学生表 R2 ON R1.学号 = R2.学号 SELECT R1.开课号,R2.* FROM 选课表 R1 RIGHT OUTER JOIN 学生表 R2 ON R1.学号 = R2.学号 -- 我搜索了百度上面的加outer是完整的不加outer时左右外连接时的默认是加outer所以可以看成一样的 -- 全外连接 SELECT * FROM 学生表 R1 LEFT JOIN 选课表 R2 ON R1.学号 = R2.学号 UNION SELECT * FROM 学生表 R1 RIGHT JOIN 选课表 R2 ON R1.学号 = R2.学号
原文地址:https://www.cnblogs.com/liusanjian/p/11698894.html
- Mysql备份系列(1)--备份方案总结性梳理
- ASP.NET中常用的优化性能的方法(转贴,Icyer收集整理)
- 顶象全场景IoT安全方案解决物联网两大难题
- 诡异的【session丢失】和【<img src="">标签】
- TensorFlow核心使用要点
- “搜一搜”直达生活服务 微信连接移动消费新场景
- Linux服务器安全登录设置记录
- Linux系统下的ssh使用(依据个人经验总结)
- 从MapX到MapXtreme2004[4]-标注AutoLabel
- Linux下锁定账号,禁止登录系统的设置总结
- 深度解析 TypeConverter & TypeConverterAttribute (一)
- 从MapX到MapXtreme2004[7]-对Table、Feature等的理解
- 互联网赋能传统装企 “科技撬动力巨大”
- Python接口自动化-8-测试报告
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- javax.el.PropertyNotFoundException: Property 'XXX' not found on type xx.xx.xx.xx(实体类具体路径)
- java基础知识点总结
- Ajax详解(拓展:利用Ajax实现用户名的校验)
- Maven学习笔记
- com.alibaba.dubbo.remoting.TimeoutException: Waiting server-side response timeout 的解决
- 基于VSFTPD技术与KindEditor的简单案例
- Linux下安装JDK1.8、Tomcat、以及MySQL详细介绍(附软件分享)
- Nginx技术(附软件分享)
- (必考)关于JS中this关键字的说法,下面错误的是?
- OA项目总结(附程序源码)
- Redis技术(附软件分享)
- Redis项目案例
- 前端测试题:(解析)关于JS中this关键字的说法,下面错误的是?
- PostgreSQL 内存消耗从LINUX 系统层次看
- RBAC模型与权限系统的梳理(附案例源码)