day38-数据库应用软件

# mysql

select distinct 字段1,字段2,。。。 from 表名
where    分组之前的过滤条件
group by 分组条件
having    分组之后过滤条件
order by 排序字段1 asc,排序字段2 desc
limit 5,5as语法中给某个查询结果起别名的时候需要把查询语句中的分号去除
(select name,salary*12 as '年薪' from emp) as t1;

# 一个字段展示用户名和年龄
select concat(name,':',age) as info from emp;

# 字段为NAME和AGE,值为‘NAME:jason’,'AGE:18'
select concat("NAME:",name) as NAME,concat("AGE:",age) as AGE from emp;

# 如果拼接的符号是统一的可以用
select concat_ws(':',name,age,sex) as info from emp;

# 1.子查询相关
# 查询平均年轻在25岁以上的部门名

select name from dep 
where id in 
(select dep_id from emp group by dep_id having avg(age)>25);select dep.name from emp inner join dep on emp.dep_id = dep.id 
group by dep.name
having avg(age) > 25;

exist(了解)

EXISTS关字键字表示存在。在使用EXISTS关键字时,内层查询语句不返回查询的记录,
而是返回一个真假值,True或False。
当返回True时,外层查询语句将进行查询
当返回值为False时,外层查询语句不进行查询。
select * from employee
where exists
(select id from department where id > 3);select * from employee
where exists
(select id from department where id > 250);

 

1. Navicat使用

#1. 测试+链接数据库
#2. 新建库
#3. 新建表,新增字段+类型+约束
#4. 设计表:外键
#5. 新建查询
#6. 建立表模型#注意:
批量加注释:ctrl+?键
批量去注释:ctrl+shift+?键

# 练习题

导出的sql语句代码

 

2. 数据导入:

Navicat Premium Data TransferSource Server : localhost
Source Server Type : MySQL
Source Server Version : 50624
Source Host : localhost
Source Database : sqlexamTarget Server Type : MySQL
Target Server Version : 50624
File Encoding : utf-8Date: 10/21/2016 06:46:46 AM
*/SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for `class`
-- ----------------------------
DROP TABLE IF EXISTS `class`;
CREATE TABLE `class` (
`cid` int(11) NOT NULL AUTO_INCREMENT,
`caption` varchar(32) NOT NULL,
PRIMARY KEY (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of `class`
-- ----------------------------
BEGIN;
INSERT INTO `class` VALUES ('1', '三年二班'), ('2', '三年三班'), ('3', '一年二班'), ('4', '二年九班');
COMMIT;-- ----------------------------
-- Table structure for `course`
-- ----------------------------
DROP TABLE IF EXISTS `course`;
CREATE TABLE `course` (
`cid` int(11) NOT NULL AUTO_INCREMENT,
`cname` varchar(32) NOT NULL,
`teacher_id` int(11) NOT NULL,
PRIMARY KEY (`cid`),
KEY `fk_course_teacher` (`teacher_id`),
CONSTRAINT `fk_course_teacher` FOREIGN KEY (`teacher_id`) REFERENCES `teacher` (`tid`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of `course`
-- ----------------------------
BEGIN;
INSERT INTO `course` VALUES ('1', '生物', '1'), ('2', '物理', '2'), ('3', '体育', '3'), ('4', '美术', '2');
COMMIT;-- ----------------------------
-- Table structure for `score`
-- ----------------------------
DROP TABLE IF EXISTS `score`;
CREATE TABLE `score` (
`sid` int(11) NOT NULL AUTO_INCREMENT,
`student_id` int(11) NOT NULL,
`course_id` int(11) NOT NULL,
`num` int(11) NOT NULL,
PRIMARY KEY (`sid`),
KEY `fk_score_student` (`student_id`),
KEY `fk_score_course` (`course_id`),
CONSTRAINT `fk_score_course` FOREIGN KEY (`course_id`) REFERENCES `course` (`cid`),
CONSTRAINT `fk_score_student` FOREIGN KEY (`student_id`) REFERENCES `student` (`sid`)
) ENGINE=InnoDB AUTO_INCREMENT=53 DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of `score`
-- ----------------------------
BEGIN;
INSERT INTO `score` VALUES ('1', '1', '1', '10'), ('2', '1', '2', '9'), ('5', '1', '4', '66'), ('6', '2', '1', '8'), ('8', '2', '3', '68'), ('9', '2', '4', '99'), ('10', '3', '1', '77'), ('11', '3', '2', '66'), ('12', '3', '3', '87'), ('13', '3', '4', '99'), ('14', '4', '1', '79'), ('15', '4', '2', '11'), ('16', '4', '3', '67'), ('17', '4', '4', '100'), ('18', '5', '1', '79'), ('19', '5', '2', '11'), ('20', '5', '3', '67'), ('21', '5', '4', '100'), ('22', '6', '1', '9'), ('23', '6', '2', '100'), ('24', '6', '3', '67'), ('25', '6', '4', '100'), ('26', '7', '1', '9'), ('27', '7', '2', '100'), ('28', '7', '3', '67'), ('29', '7', '4', '88'), ('30', '8', '1', '9'), ('31', '8', '2', '100'), ('32', '8', '3', '67'), ('33', '8', '4', '88'), ('34', '9', '1', '91'), ('35', '9', '2', '88'), ('36', '9', '3', '67'), ('37', '9', '4', '22'), ('38', '10', '1', '90'), ('39', '10', '2', '77'), ('40', '10', '3', '43'), ('41', '10', '4', '87'), ('42', '11', '1', '90'), ('43', '11', '2', '77'), ('44', '11', '3', '43'), ('45', '11', '4', '87'), ('46', '12', '1', '90'), ('47', '12', '2', '77'), ('48', '12', '3', '43'), ('49', '12', '4', '87'), ('52', '13', '3', '87');
COMMIT;-- ----------------------------
-- Table structure for `student`
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`sid` int(11) NOT NULL AUTO_INCREMENT,
`gender` char(1) NOT NULL,
`class_id` int(11) NOT NULL,
`sname` varchar(32) NOT NULL,
PRIMARY KEY (`sid`),
KEY `fk_class` (`class_id`),
CONSTRAINT `fk_class` FOREIGN KEY (`class_id`) REFERENCES `class` (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of `student`
-- ----------------------------
BEGIN;
INSERT INTO `student` VALUES ('1', '', '1', '理解'), ('2', '', '1', '钢蛋'), ('3', '', '1', '张三'), ('4', '', '1', '张一'), ('5', '', '1', '张二'), ('6', '', '1', '张四'), ('7', '', '2', '铁锤'), ('8', '', '2', '李三'), ('9', '', '2', '李一'), ('10', '', '2', '李二'), ('11', '', '2', '李四'), ('12', '', '3', '如花'), ('13', '', '3', '刘三'), ('14', '', '3', '刘一'), ('15', '', '3', '刘二'), ('16', '', '3', '刘四');
COMMIT;-- ----------------------------
-- Table structure for `teacher`
-- ----------------------------
DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher` (
`tid` int(11) NOT NULL AUTO_INCREMENT,
`tname` varchar(32) NOT NULL,
PRIMARY KEY (`tid`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of `teacher`
-- ----------------------------
BEGIN;
INSERT INTO `teacher` VALUES ('1', '张磊老师'), ('2', '李平老师'), ('3', '刘海燕老师'), ('4', '朱云海老师'), ('5', '李杰老师');
COMMIT;SET FOREIGN_KEY_CHECKS = 1;
View Code

拷贝上述代码,新建一个.sql文件,保存到桌面

打开navicat新建数据库day41,选中新建的数据库鼠标右键选择运行SQL文件

弹出文件框,选中刚刚保存到桌面的.sql文件即可

**快速建表**

#准备表、记录 >>> 命令行
mysql> create database db1;
mysql> use db1;
mysql> source /root/init.sql# navicat建表

 

# 练习题

1、查询所有的课程的名称以及对应的任课老师姓名
4、查询平均成绩大于八十分的同学的姓名和平均成绩
7、 查询没有报李平老师课的学生姓名
8、 查询没有同时选修物理课程和体育课程的学生姓名
9、 查询挂科超过两门(包括两门)的学生姓名和班级

# 参考答案

#1、查询所有的课程的名称以及对应的任课老师姓名
SELECT
course.cname,
teacher.tname
FROM
course
INNER JOIN teacher ON course.teacher_id = teacher.tid;#4、查询平均成绩大于八十分的同学的姓名和平均成绩
SELECT
student.sname,
t1.avg_num
FROM
student
INNER JOIN (
SELECT
student_id,
avg(num) AS avg_num
FROM
score
GROUP BY
student_id
HAVING
avg(num) > 80
) AS t1 ON student.sid = t1.student_id;#7、 查询没有报李平老师课的学生姓名(找出报名李平老师课程的学生,然后取反就可以)
SELECT
student.sname
FROM
student
WHERE
sid NOT IN (
SELECT DISTINCT
student_id
FROM
score
WHERE
course_id IN (
SELECT
course.cid
FROM
course
INNER JOIN teacher ON course.teacher_id = teacher.tid
WHERE
teacher.tname = '李平老师'
)
);#8、 查询没有同时选修物理课程和体育课程的学生姓名(没有同时选修指的是选修了一门的,思路是得到物理+体育课程的学生信息表,然后基于学生分组,统计count(课程)=1)
SELECT
student.sname
FROM
student
WHERE
sid IN (
SELECT
student_id
FROM
score
WHERE
course_id IN (
SELECT
cid
FROM
course
WHERE
cname = '物理'
OR cname = '体育'
)
GROUP BY
student_id
HAVING
COUNT(course_id) = 1
);# 9、 查询挂科超过两门(包括两门)的学生姓名和班级
select student.sname,class.caption from class INNER JOIN student
on class.cid = student.class_id
WHERE student.sid in 
(select student_id from score where num < 60
GROUP BY student_id
HAVING COUNT(course_id) >=2)
;
View Code

 

3. pymysql模块

# 1.安装:pip3 insatll pymysql# 2.代码链接
import pymysql
#链接
conn=pymysql.connect(
host='localhost',
user='root',
password='123',
database='egon',
charset='utf8')
#游标
cursor=conn.cursor() #执行完毕返回的结果集默认以元组显示
#cursor=conn.cursor(cursor=pymysql.cursors.DictCursor) # 以字典的方式显示数据# 3.pymysql操作数据库
#执行sql语句
user = input(">>>:").strip()
pwd = input(">>>:").strip()
sql='select * from userinfo where name="%s" and password="%s"' %(user,pwd) #注意%s需要加引号

rows=cursor.execute(sql) #执行sql语句,返回sql查询成功的记录数目
# 获取真实数据cursor.fetchone(),cursor.fetchall(),cursor.fetchmany(),类似管道取值,获取一条,所有,多条

cursor.scroll(1,'relative') # 相对移动
cursor.scroll(3,'absolute') # 绝对移动
cursor.close()
conn.close()

 

# sql注入问题

# 不要手动去拼接查询的sql语句
username = input(">>>:").strip()
password = input(">>>:").strip()
sql = "select * from user where username='%s' and password='%s'"%(username,password)# 用户名正确
username >>>: jason' -- jjsakfjjdkjjkjs
# 用户名密码都不对的情况
username >>>: xxx' or 1=1 --asdjkdklqwjdjkjasdljad
password >>>: ''

 

#### 增删改

#
sql = "insert into user(username,password) values(%s,%s)"
rows = cursor.excute(sql,('jason','123'))# 修改
sql = "update user set username='jasonDSB' where id=1"
rows = cursor.excute(sql)

 

增和改单单执行excute并不会真正影响到数据,需要再执行conn.commit()才可以完成真正的增改

# 一次插入多行记录
res = cursor,excutemany(sql,[(),(),()]

 

转载于:https://www.cnblogs.com/Ryan-Yuan/p/11394991.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/482455.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

世界被一种神秘的数学力量彻底改变了

来源&#xff1a;《微积分的力量》编辑&#xff1a;nhyilin01科学或许是唯一的神上世纪60年代&#xff0c;小说家赫尔曼沃克&#xff08;Herman Wouk&#xff09;正在为他计划中的巨著《战争风云》做调研&#xff0c;他去加州理工学院采访了参与过原子弹研发的物理学家&#xf…

程序异常退出后,托盘残留图标清理方法(C#)

程序猿对于宕机再熟悉不过了&#xff0c;如果一个程序异常退出&#xff0c;那我们只能在Windows日志中找到它的踪迹&#xff1b;如果它是一个托盘程序&#xff0c;异常退出后&#xff0c;它会停留在托盘中久久不能离去&#xff0c;直到我们的鼠标从它身上划过&#xff1b;如果一…

汪劲:生命系统中的非平衡物理学

来源&#xff1a;集智俱乐部作者&#xff1a;汪劲编译&#xff1a;袁郭玲编辑&#xff1a;邓一雪导语非平衡物理学将在生物应用中发挥重要作用&#xff0c;如酶动力学、新陈代谢、基因调控&#xff0c;细胞的结构、功能和动力学&#xff0c;生理学、癌症、分化和发育&#xff0…

虚拟现实和元宇宙的最大短板在哪里?

出品&#xff1a;科技智谷编辑&#xff1a;王晓东虚拟现实和元宇宙面临的最大问题不是技术问题而是功能问题。在所有关于Metaverse以及虚拟现实或VR将给我们的生活带来什么的讨论中&#xff0c;有一个很大的功能问题被忽略了。正如几大巨头宣传的那样&#xff0c;Metaverse是一…

解密通往元宇宙的三大入口,VR先上AR紧跟,但脑机接口才是未来

来源: 智东西编辑&#xff1a;智东西内参VR、AR和脑机接口&#xff0c;谁是人类通往元宇宙的合适入口&#xff1f;VR/AR/脑机接口是集合了微显示、传感器、芯片和算法等多项技术在内的下一代人机交互平台。回顾整个人机交互发展历程&#xff0c;我们看到人机交互的指令输入形式…

python enumerate用法总结(转)

原文链接&#xff1a;https://blog.csdn.net/churximi/article/details/51648388 enumerate()说明 enumerate()是python的内置函数enumerate在字典上是枚举、列举的意思对于一个可迭代的&#xff08;iterable&#xff09;/可遍历的对象&#xff08;如列表、字符串&#xff09;&…

特约专栏丨孙茂松教授——自然语言处理一瞥:知往鉴今瞻未来

来源&#xff1a;中国人工智能学会文 &#xff1a;孙茂松人类语言&#xff08;即自然语言&#xff09;的重要性无论怎么讲都不为过。社会生物学之父爱德华威尔逊曾说过&#xff1a;“语言是继真核细胞之后最伟大的进化成就”。科普畅销书《信息简史》的作者詹姆斯格雷克也深刻地…

安全隐患:神经网络可以隐藏恶意软件

来源&#xff1a;AI科技大本营&#xff08;ID:rgznai100&#xff09;编译&#xff1a;禾木木凭借数百万和数十亿的数值参数&#xff0c;深度学习模型可以做到很多的事情&#xff0c;例如&#xff0c;检测照片中的对象、识别语音、生成文本以及隐藏恶意软件。加州大学圣地亚哥分…

ASP.NET MVC教程四:ASP.NET MVC中页面传值的几种方式

准备 在Models文件夹里面新添加Student实体类&#xff0c;用来模拟从Controller向View传递数据&#xff0c;Student类定义如下&#xff1a; using System; using System.Collections.Generic; using System.Linq; using System.Web;namespace MVCStudyDemo.Models {public clas…

量子计算,后摩尔时代计算能力提升的解决方案

来源&#xff1a;微信公众号蓝海长青智库原载于《学习时报》2022年3月2日刊作者&#xff1a;朱晓波1、陆朝阳1、潘建伟2,31 中科学技术大学合肥微尺度物质科学国家研究中心2 中国科学院院士3 中国科学技术大学量子计算是基于量子力学的全新计算模式&#xff0c;具有原理上远超经…

ASP.NET MVC教程六:两个配置文件详解

前言 在新建完一个MVC项目之后&#xff0c;你会发现整个整个项目结构中存在有两个web.config文件&#xff0c;如下图所示&#xff1a; 这两个配置文件&#xff0c;一个位于项目的根目录下面&#xff0c;一个位于Views文件夹下面&#xff0c;这两个配置文件有什么不同呢&#xf…

Nat. Commun. 速递:虚拟颅内脑电与神经动力学模型

来源&#xff1a;集智俱乐部作者&#xff1a;曹淼 编辑&#xff1a;邓一雪 导语时间-空间尺度动态演变的动力学系统建模&#xff0c;为研究大脑状态和状态转移的神经机制提供了理论基础。最近墨尔本大学曹淼等人的联合团队在Nature Communications发表论文&#xff0c;提出了虚…

ASP.NET MVC教程五:ASP.NET MVC中的路由

一、概述 在ASP.NET MVC架构中&#xff0c;控制器在3大核心构件中处于中心地位&#xff0c;通过控制器支配模型和视图&#xff0c;然而从浏览器发出的请求到控制器还需要路由的协助&#xff0c;路由将特定的请求和控制器的动作对应起来。 在ASP.NET MVC程序中&#xff0c;路由主…

一文梳理深度学习算法演进

来源&#xff1a;https://zhuanlan.zhihu.com/p/464515049作者&#xff1a;Peter潘欣编辑&#xff1a;蘑菇先生学习记涉及语音、图像、nlp、强化学习、隐私保护、艺术创作、目标检测、医疗、压缩序列、推荐排序等方向。文章较长&#xff0c;耐心读完会有收获。1. 前言如果说高德…

ASP.NET MVC教程八:_ViewStart.cshtml

一、引言 _ViewStart.cshtml是在ASP.NET MVC 3.0及更高版本以后出现的&#xff0c;用Razor模板引擎新建项目后&#xff0c;Views目录下面会出现一个这样的文件&#xff1a; 打开_ViewStart.cshtml文件&#xff0c;里面只有一行代码&#xff1a; 这行代码表示使用Views文件夹下的…

2021年全球十大工程成就,中国有几个? | 科技袁人

来源&#xff1a; 风云之声视频链接&#xff1a;西瓜视频&#xff1a;https://www.ixigua.com/7068180516549329415本视频发布于2021年2月25日&#xff0c;观看量已达7.4万次精彩呈现&#xff1a;2021年&#xff0c;中国工程院院刊《Engineering》组织了一个“全球十大工程成就…

formSelects-v4.js 基于Layui的多选解决方案

详情链接地址&#xff1a; https://hnzzmsf.github.io/example/example_v4.html#select_search_server1、闲谈杂趣v3传送门 v3文档其实思考了很久, 还是放弃了v3, 因为开发v3的时候很粗暴, 按照编程角度来看就是硬撸, 也怪自己实力有限, 所以反思了一下, 尝试着继续前行...…

将公平注入AI:机器学习模型即使在不公平数据上训练也能产生公平输出

来源&#xff1a;ScienceAI编译&#xff1a;绿萝如果使用不平衡的数据集训练机器学习模型&#xff0c;比如一个包含远多于肤色较浅的人的图像的数据集&#xff0c;则当模型部署在现实世界中时&#xff0c;该模型的预测存在严重风险。但这只是问题的一部分。麻省理工学院的研究人…

使用ngModel创建组件

angular/forms里有个接口用来实现支持[(ngModel)]&#xff0c;具体可查ControlValueAccessor&#xff0c;这边还未深入理解只是为了开发组件而初步了解 interface ControlValueAccessor {writeValue(obj: any): voidregisterOnChange(fn: any): voidregisterOnTouched(fn: any)…

制定城市大脑建设标准应遵循的十条原则探讨

作者&#xff1a;刘锋本文发表于2022年3月《中国建设信息化杂志》2015以来&#xff0c;城市大脑被提出并成为前沿科技和智慧城市建设领域的新热点。到2022年&#xff0c;全国已经有包括北京、上海、杭州、深圳、郑州、呼和浩特、合肥等数百个城市宣布建设城市大脑的规划。有包括…