zc110

Navicat 是以直觉化的图形用户界面而建的

Navicat内部封装了所有的操作数据库的命令
用户在使用它的时候只需要鼠标即可完成操作 无需书写sql语句

安装和使用的方法navicat

在navicat的练习

1、查询所有的课程的名称以及对应的任课老师姓名

SELECT
	cname,
	tname 
FROM
	course
	INNER JOIN teacher ON teacher.tid = course.teacher_id;
2.查询平均成绩大于八十分的同学的姓名和平均成绩
			1.先拿大于80分的学生id号,在跟学生表做拼接
SELECT
	student.sname,
	t1.avg_nun 
FROM
	student
	INNER JOIN (
	SELECT
		score.student_id,
		AVG( score.num ) AS avg_nun 
	FROM
		score
		INNER JOIN student ON student.sid =.score.student_id 
	GROUP BY
		score.student_id 
	HAVING
		AVG( score.num )> 80 
	) AS t1 ON student.sid = t1.student_id;

7、 查询没有报李平老师课的学生姓名
# 先找到李平老师的课程id
# 再找到所有报了李平老师课程学生的id
# 之后去学生表里取反,就可以获取到没有报李平老师课程的学生姓名
SELECT
	student.sname 
FROM
	student 
WHERE
	sid NOT IN (
	SELECT DISTINCT
		score.student_id 
	FROM
		score 
WHERE
	score.course_id IN ( SELECT course.cid FROM course INNER JOIN teacher ON course.teacher_id = teacher.tid WHERE teacher.tname = \'李平老师\' ));
	
	
8、 查询没有同时选修物理课程和体育课程的学生姓名
    (只要选了一门的 选了两门和没有选的都不要)
# 1 先查物理和体育课程的id
# 2 再去获取所有选了物理和体育的学生数据
# 3 按照学生分组 利用聚合函数count筛选出只选了一门的学生id
# 4 依旧id获取学生姓名
SELECT
	student.sname 
FROM
	student 
WHERE
	student.sid IN #3
	(
	SELECT
		score.student_id 
	FROM
		score 
	WHERE
		score.course_id IN # 2
		(
		SELECT
			course.cid 
		FROM
			course 
		WHERE
		course.cname IN ( \'物理\', \'体育\' )) # 1
		
	GROUP BY
		score.student_id 
	HAVING
		COUNT( score.course_id )= 1 
	);

-- 9、 查询挂科超过两门(包括两门)的学生姓名和班级
# 1 先筛选出所有分数小于60的数据
# 2 按照学生分组 对数据进行计数获取大于等于2的数据
SELECT
	student.sname,
	class.caption 
FROM
	student
	INNER JOIN class ON class.cid = student.class_id 
WHERE
	student.sid IN ( SELECT score.student_id FROM score WHERE score.num < 60 GROUP BY score.student_id HAVING COUNT( score.course_id )>= 2 );

mysql注入

"""
利用一些语法的特性 书写一些特点的语句实现固定的语法
MySQL利用的是MySQL的注释语法
select * from user where name=\'jason\' -- jhsadklsajdkla\' and password=\'\'

select * from user where name=\'xxx\' or 1=1 -- sakjdkljakldjasl\' and password=\'\'
"""
日常生活中很多软件在注册的时候都不能含有特殊符号
因为怕你构造出特定的语句入侵数据库 不安全

# 敏感的数据不要自己做拼接 交给execute帮你拼接即可
# 结合数据库完成一个用户的登录功能?
import pymysql


conn = pymysql.connect(
    host = \'127.0.0.1\',
    port = 3306,
    user = \'root\',
    password = \'123456\',
    database = \'day48\',
    charset = \'utf8\'  # 编码千万不要加-
)  # 链接数据库
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

username = input(\'>>>:\')
password = input(\'>>>:\')
sql = "select * from user where name=%s and password=%s"
# 不要手动拼接数据 先用%s占位 之后将需要拼接的数据直接交给execute方法即可
print(sql)
rows = cursor.execute(sql,(username,password))  # 自动识别sql里面的%s用后面元组里面的数据替换
if rows:
    print(\'登录成功\')
    print(cursor.fetchall())
else:
    print(\'用户名密码错误\')

分类:

技术点:

相关文章:

  • 2021-11-27
  • 2022-12-23
  • 2021-12-02
  • 2021-11-27
  • 2022-12-23
  • 2022-12-23
  • 2021-09-16
猜你喜欢
  • 2022-03-01
  • 2022-02-07
  • 2021-11-27
  • 2021-10-03
  • 2022-02-07
  • 2021-12-07
相关资源
相似解决方案