sql练习

Oracle 之 SQL 面试题 录(转)

匿名 (未验证) 提交于 2019-12-03 00:17:01
多上网查查 SQL  面试题 2. 数据库 有3个表 teacher表 student表 tea_stu关系表 teacher表 teaID name age student表 stuID name age teacher_student表 teaID stuID 要求用一条sql查询出这样的结果: 1.显示的字段要有老师id age 每个老师所带的学生人数 2.只列出老师age为40以下 学生age为12以上的记录。 select a.teaID,a.age count(*) from teacher a,student b,teacher_student c where a.teaID=c.teaID and b.stuID=c.stuID and a.age>40 and b.age>12 group by a.teaID,a.age; select a.department,count from tA a,tB b where a.id=b.id group by b.id,a,deparment 方法1: select Sname,sum(Ccredit) as totalCredit from Student,Course,SC where Grade>=60 and Student.Sno=SC.Sno and Course.Cno=SC.Cno group by

SQL手工注入基础篇

匿名 (未验证) 提交于 2019-12-03 00:09:02
0.前言 本篇博文是对SQL手工注入进行基础知识的讲解,更多进阶知识请参考进阶篇(咕咕),文中有误之处,还请各位师傅指出来。学习本篇之前,请先确保以及掌握了以下知识: 基本的SQL语句 HTTP的GET、POST请求,URL编码 文中所有例题选自sqlilab,可以先配置好一起边看边操作。 因为虚拟机炸了,所以我自己搭建了一个简陋的平台,sqlilab可自行进行搭建练习,在后面的博客也会写一些关于sqlilab的wp。 1.准备工作 在开始SQL注入之前,我们首要需要了解SQL注入的原理,对于一个新安装好的MySql数据库,你至少会包含三个已经建立好的数据库分别是user、infomation_schema、performance_schema如下图所示 而SQL注入要干的,这些系统数据库中存储了MySql各个数据库的属性以及用户信息,我们要做的就是绕过过滤再来利用这些系统表进行查询。 了解了这个之后我们还要了解一点就是PHP的GET方法和POST方法传参的区别,如果使用GET方法,则会自动进行一次url解码,例如传入%23实际得到‘#’,而POST则会将数据原封不动的传输。下面我们开始进入正式的SQL注入阶段。 2.判断注入类型 一般的对于SQL的查询语句,有字符型和数值型查询,而这两者的区别就是是否有单引号,这决定了我们接下来应该如何构造SQL注入语句。   判断方法有如下几种

sql手工注入原理

匿名 (未验证) 提交于 2019-12-03 00:03:02
判断是否存在注入 纯粹一些个人练习心得,所以今天就写一篇博客记录一下 数值型 1.URL输入 and 1=1 / and 1=2 回显页面不同(整形判断) 如果页面运行错误,则说明此 Sql 注入为数字型注入。 因为当我们输入 and 1=1时,后台执行 Sql 语句: 如:select * from <表名> where id = x and 1=1 没有语法错误且逻辑判断为正确,所以返回正常。 当输入 and 1=2时,后台执行 Sql 语句: select * from <表名> where id = x and 1=2 语句被带进数据库进行查询,虽然没有语法错误但是逻辑判断为假,所以返回错误,这时候我们就可以基本确定页面存在sql注入。 字符型 如这是一条后台语句:$sql=“SELECT * FROM users WHERE id='1 ’ LIMIT 0,1”; 可以看出,id被单引号包裹住 如果后台语句是:GET_id=’$id’这样子传 那么 ?id=’1’ 1就是$id 里面的值 这时候要注入可以这样 ? id =’ 1 然后在 id 的引号里面构造攻击语句 ’ 如? id = 1 ' union select 1,2,3,4 --+' // 这条语句的作用是联合查询第1,2,3,4列, 空格--+的作用是注释后面的内容 如 在URL地址栏输入?id=1’ 这时候

python学习笔记之数据库表的读写操作

匿名 (未验证) 提交于 2019-12-02 22:51:30
一、executemany()函数 import pymysql #随机生成20条用户数据; 列表里面嵌套元组; list_infor = [('user'+str(num),'00000')for num in range(1,21)] dbconfig = { 'host' :'localhost', 'user' : 'root', 'passwd' : '123456', 'db' :'mariadb_learn' } # 1. 连接数据库连接 conn = pymysql.connect(**dbconfig) # 2. 创建游标, 给数据库发送sql指令 cur = conn.cursor() try: insert_sqli = 'insert into userinfor values(%s,%s)' cur.executemany(insert_sqli,list_infor) except Exception as Error: print('sql exrcutemany failed:',Error) else: print('sql executeamny success!') # 4. 提交sql语句, 作用于数据库; conn.commit() # 5. 先关闭游标 cur.close() # 6. 关闭数据库连接 conn.close() 输出

Django ORM 高性能查询优化

匿名 (未验证) 提交于 2019-12-02 22:51:30
一、QuerySet 使用Python 的切片语法来限制 查询集 记录的数目 。它等同于SQL 的 LIMIT 和 OFFSET 子句。 >>> Entry.objects.all()[:5] # (LIMIT 5) >>> Entry.objects.all()[5:10] # (OFFSET 5 LIMIT 5) 不支持负的索引(例如 Entry.objects.all()[-1] )。通常, 查询集 的切片返回一个新的 查询集 ―― 它不会执行查询。 articleList=models.Article.objects.all() for article in articleList: print(article.title) 查询集 是惰性执行的 ―― 创建 查询集 不会带来任何数据库的访问。你可以将过滤器保持一整天,直到 查询集 需要求值时,Django 才会真正运行这个查询。 queryResult=models.Article.objects.all() # not hits database print(queryResult) # hits database for article in queryResult: print(article.title) # hits database 一般来说,只有在“请求” 查询集 的结果时才会到数据库中去获取它们

Django-model进阶

核能气质少年 提交于 2019-12-02 16:21:33
目录 Django-model进阶 一 QuerySet对象 1.1可切片 1.2可迭代 1.3惰性查询 1.4缓存机制 1.5 exists()与iterator()方法 二 中介模型 三 查询优化 3.1表数据 3.2 select_related 3.3 prefetch_related() 四 extra 4.1参数之select 4.2参数之 where / tables 五 原生sql QuerySet方法大全 update()与save()的区别 select_related和prefetch_related bulk_create批量插入数据 方法大全 六 整体插入 七 事务操作 八 defer和only Django-model进阶 一 QuerySet对象 1.1可切片 使用Python 的切片语法来限制 查询集 记录的数目 。它等同于SQL 的 LIMIT 和 OFFSET 子句。 Entry.objects.all()[:5] # (LIMIT 5) Entry.objects.all()[5:10] # (OFFSET 5 LIMIT 5) 不支持负的索引(例如 Entry.objects.all()[-1] )。通常, 查询集 的切片返回一个新的 查询集 —— 它不会执行查询。 1.2可迭代 articleList=models.Article

Day3 - 数据库SQL语句——分页

混江龙づ霸主 提交于 2019-12-02 10:41:36
获取部分行 当数据量过大时,在一页中查看数据是一件非常麻烦的事情 语法 select * from 表名 limit start , count 从 start 开始,获取 count 条数据 start 索引从 0 开始 例1:查询前3行学生信息 select * from students limit 0,3 练习: 查询第4到第6行学生信息 分页 已知:每页显示m条数据,求:显示第n页的数据 select from students limit (n-1)m,m 求总页数 查询总条数 p1 使用 p1 除以 m 得到 p2 如果整除则 p2 为总数页 如果不整除则 p2 + 1 为总页数 练习: 每页显示5条数据,显示每一页的数据 来源: https://www.cnblogs.com/hyf224317/p/11741936.html

Day3 - 数据库SQL语句——排序

本秂侑毒 提交于 2019-12-02 10:41:11
排序 为了方便查看数据,可以对数据进行排序 语法: select * from 表名 order by 列1 asc|desc,列2 asc|desc,… 将行数据按照列1进行排序,如果某些行列1的值相同时,则按照列2排序,以此类推 默认按照列值从小到大排列 asc从小到大排列,即升序 desc从大到小排序,即降序 例1:查询所有学生信息,按年龄从小到大排序 select * from students order by age 例2:查询所有学生信息,按年龄从大到小排序,年龄相同时,再按学号从小到大排序 select * from students order by age desc,studentNo 练习: 1、查询所有学生信息,按班级从小到大排序,班级相同时,再按学号再按学号从小到大排序 来源: https://www.cnblogs.com/hyf224317/p/11741952.html

SQL基础练习2

跟風遠走 提交于 2019-12-02 09:11:01
数据库: 练习题: 1.查询所有员工的FNAME、LNAME、SSN、SEX和SALARY,并分别将SEX和SALARY的列名重命名为“性别”、“工资”。 2.从Employee表中检索出员工的FNAME、LNAME、SSN、BDATE、SALARY等字段,并分别加上“名”、“姓”、“社会保险号”、“生日”、“工资”的标题。员工的排序规则为:首先按工资的降序排列,然后按FNAME的字母升序排列。 3.查询不重复的员工工资值 4.查询没有直接上司的员工姓名 5.从Employee表中查询出工资大于等于40000的员工资料 6.查询所有的女性家属的全部信息,并按生日的降序排列 7.查询所有不属于5号部门的员工信息 8.利用OR关键字查询属于1号或4号部门的员工信息 9.检索姓名为John B.Smith的员工的SSN、性别、出生日期和地址 10.查询1960年以后出生的员工信息(注意日期写完整) 11.从Employee表中查询出1960年——1970年之间出生的员工资料(注意日期写完整) 12. 从Employee表中查询出部门号为4或者5的员工资料 13. 从Employee表中查询出LNAME中含有字母o的员工资料 14. 查询项目名称以P开头的项目信息 15. 检索居住在Houston的员工所有信息 16. 从Employee表中检索出员工的FNAME、LNAME、SSN

各种数据库对应的jar包、驱动类名和URL格式

邮差的信 提交于 2019-12-01 23:13:26
通过JDBC进行简单的增删改查(以MySQL为例) 目录 前言:什么是JDBC 一、准备工作(一):MySQL安装配置和基础学习 二、准备工作(二):下载数据库对应的jar包并导入 三、JDBC基本操作 (1)定义记录的类(可选) (2)连接的获取 (3)insert (4)update (5)select (6)delete 四、测试 五、代码分析 六、思考问题 前言:什么是JDBC   维基百科的简介:    Java 数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标。它JDBC是面向关系型数据库的。   简单地说,就是用于执行SQL语句的一类Java API,通过JDBC使得我们可以直接使用Java编程来对关系数据库进行操作。通过封装,可以使开发人员使用纯Java API完成SQL的执行。 一、准备工作(一):MySQL安装配置和基础学习   使用JDBC操作数据库之前,首先你需要有一个数据库。这里提供了3个链接供读者自学,如果曾有过SQL语言的使用经历(包括在学校中的课堂学习),前两个链接足以上手。   1.安装和配置: mysql安装图解 mysql图文安装教程(详细说明)   2