sql注入语法基础入门

SQL注入基础语法

数据库的操作

查看数据库:
show databases;
创建数据库employees并选择字符集
create database employees charset utf-8;
删除数据库employees
drop database employees;
选择进入数据库
use employees;

数据表的操作:

创建数据表employee
create table employee(
    id int,
    name varchar(40),
    sex char(4),
    birthday date,
    job varchar(100)
);
查看数据表信息
show full columns from employee.employee;    //在一般的数据库里面是不支持full的
DESCRIBE employee; //后面的两个用的多
DESC employee;
查看数据表列表
select*from employee;
删除数据表
drop table employee;
修改数据表名称为user
rename table employees to user;
修改字符级
alter table user character set utf8;

数据列和数据行:

写入内容
insert into employees(
    id,name,sex,birthday,job
)values(
    1,'ctftu','male','1999-05-06','it'
);
增加一列内容
alter table employees add salary decimal(8,2); //数据类型,表示一个精度为 8 位,小数点后保留 2 位的十进制数
修改某一列的信息
update employees set salary = 500; //会把所有内容的后面添加500
指定修改某一类信息
update employees set name = 'benben' where id = 1; //修改id=1的行name为benben
update employees set name = 'benben',salary = 300 where id = 1;
删除列
alter table user drop salary;
删除行
alter table user where job = 'it';
删除表
delete from employees;

基础查询语句

SQL 的基本查询语句是 SELECT 语句,用于从数据库中检索数据。下面是 SELECT 语句的基本语法:

SELECT column1, column2, ...
FROM table_name
WHERE condition;

解释:

  • SELECT: 关键字,用于指定要检索的列。
  • column1, column2, …: 要检索的列名,可以用逗号分隔多个列。
  • FROM: 关键字,用于指定要检索的表名。
  • table_name: 要检索的表的名称。
  • WHERE: 可选关键字,用于指定检索条件,过滤要检索的数据。
  • condition: 检索条件,可以是单个条件或多个条件组合。

示例:

假设我们有一个名为 employees 的表,包含以下列:

  • emp_id (员工 ID)
  • emp_name (员工姓名)
  • department (部门)
  • salary (薪资)

以下是一些基本的 SELECT 语句示例:

  1. 检索所有列:
SELECT *
FROM employees;
  1. 检索特定列:
SELECT emp_name, salary
FROM employees;
  1. 使用 WHERE 子句过滤数据:
SELECT *
FROM employees
WHERE department = 'Sales'; 
  1. 使用多个条件:
SELECT *
FROM employees
WHERE department = 'Sales' AND salary > 50000;
  1. 使用别名:
SELECT emp_name AS name, salary AS pay
FROM employees;
  1. 使用 DISTINCT 去重:
SELECT DISTINCT department
FROM employees;  //对有重复的结果进行去重
  1. 排序结果:
SELECT *
FROM employees
ORDER BY salary DESC;
//ASC: 指定升序排序,这是默认排序方式。
//DESC: 指定降序排序。

其他常用选项:

  • LIMIT: 用于限制检索结果的数量。
  • OFFSET: 用于跳过指定数量的结果。
  • GROUP BY: 用于对数据进行分组。
  • HAVING: 用于对分组结果进行过滤。

你说得没错,这些都是 SQL 查询语句中的常用子句,它们能够帮助你更精细地控制查询结果。下面就分别来详细解释一下:

1. LIMIT:

  • 作用: LIMIT 子句用于限制查询返回的结果数量。它可以用来限制查询返回的最大行数,防止一次查询返回过多的数据。

  • 语法:

    SELECT column1, column2, ...
    FROM table_name
    WHERE condition
    LIMIT number; 
    
    • number 指定要返回的最大行数。
  • 例子:

    SELECT * FROM employees LIMIT 10; -- 返回前10行数据
    

2. OFFSET:

  • 作用: OFFSET 子句用于跳过查询结果中前 offset 行数据,并返回剩余的数据。它可以用来实现分页功能,让查询结果分批显示。

  • 语法:

    SELECT column1, column2, ...
    FROM table_name
    WHERE condition
    LIMIT number OFFSET offset;
    
    • number 指定要返回的最大行数。
    • offset 指定要跳过的行数。
  • 例子:

    SELECT * FROM employees LIMIT 10 OFFSET 20; -- 跳过前 20 行,再返回 10 行,返回第30行的数据
    

3. GROUP BY:

  • 作用: GROUP BY 子句用于将查询结果按照一个或多个列进行分组,并在每个分组上执行聚合函数。

  • 语法:

    SELECT column1, column2, ...
    FROM table_name
    WHERE condition
    GROUP BY column1, column2, ...;
    
    • column1, column2, ... 指定要分组的列。
  • 例子:

    SELECT department, COUNT(*) AS num_employees  -- 统计每个部门的员工数量
    FROM employees
    GROUP BY department;
    
    
    select group_concat(username) from users; //将多行直接显示为一行
    
  • COUNT(*): 一个聚合函数,它会计算查询结果中的行数。这里用 * 表示计算所有行的数量,也就是统计所有员工数量。

  • AS num_employees: 将 COUNT(*) 计算的结果取一个别名为 num_employees,便于在结果集中用这个别名显示员工数量。

  • GROUP BY 是用于分组数据的子句。这里根据 department 列进行分组,也就是说,把属于同一个部门的员工都归为一组。

  • emp_idemp_namedepartmentsalary
    1John SmithSales50000
    2Jane DoeMarketing60000
    3David LeeSales45000
    4Emily ChenFinance55000
    5Michael BrownMarketing58000

    那么执行这段 SQL 代码后,将会返回以下结果:

    departmentnum_employees
    Sales2
    Marketing2
    Finance1

4. HAVING:

  • 作用: HAVING 子句用于过滤 GROUP BY 子句分组后的结果集。它类似于 WHERE 子句,但用于过滤分组后的数据。

  • 语法:

    SELECT column1, column2, ...
    FROM table_name
    WHERE condition
    GROUP BY column1, column2, ...
    HAVING condition;
    
    • condition 指定过滤条件,用于过滤分组后的数据。
  • 例子:

    SELECT department, COUNT(*) AS num_employees
    FROM employees
    GROUP BY department
    HAVING COUNT(*) > 5; -- 只显示员工数量大于 5 的部门
    

总结:

LIMITOFFSETGROUP BYHAVING 这些子句能让你更加灵活地控制查询结果,实现更复杂的数据分析和处理。掌握这些子句,可以让你的 SQL 查询语句更加强大。

常见函数:

你说得对!仅仅列出 SQL 函数还不够,重要的是要了解如何使用它们。以下是一些常用函数的用法示例:

1. 聚合函数

  • COUNT():

    SELECT COUNT(*) FROM employees;  // 统计 `employees` 表中所有员工的数量
    SELECT COUNT(DISTINCT department) FROM employees; // 统计 `employees` 表中不同部门的数量
    
  • SUM():

    SELECT SUM(salary) FROM employees; // 计算 `employees` 表中所有员工的工资总和
    
  • AVG():

    SELECT AVG(age) FROM employees; // 计算 `employees` 表中所有员工的平均年龄
    
  • MAX():

    SELECT MAX(salary) FROM employees; // 找出 `employees` 表中工资最高的员工的工资
    
  • MIN():

    SELECT MIN(salary) FROM employees;// 找出 `employees` 表中工资最低的员工的工资
    

2. 字符串函数

  • LENGTH(string):

    SELECT LENGTH('Hello World'); // 返回 11,因为 "Hello World" 有 11 个字符
    
  • SUBSTRING(string, start, length):

    SELECT SUBSTRING('Hello World', 7, 5);// 返回 "World",从第 7 个字符开始提取 5 个字符
    
  • UPPER(string):

    SELECT UPPER('hello world');` // 返回 "HELLO WORLD"
    
  • LOWER(string):

    SELECT LOWER('HELLO WORLD');// 返回 "hello world"
    
  • TRIM(string):

    SELECT TRIM(' Hello World '); // 返回 "Hello World",去除两端的空格
    
  • REPLACE(string, old_string, new_string):

    SELECT REPLACE('Hello World', 'World', 'Universe');` // 返回 "Hello Universe",将 "World" 替换成 "Universe"
    
  • CONCAT(string1, string2, …):

    
    

3. 数值函数

  • ABS(number):
    • SELECT ABS(-10); // 返回 10,取绝对值
  • ROUND(number, precision):
    • SELECT ROUND(3.14159, 2); // 返回 3.14,保留两位小数
  • FLOOR(number):
    • SELECT FLOOR(3.14159); // 返回 3,向下取整
  • CEILING(number):
    • SELECT CEILING(3.14159); // 返回 4,向上取整
  • SQRT(number):
    • SELECT SQRT(16); // 返回 4,计算平方根

4. 日期和时间函数

  • NOW():
    • SELECT NOW(); // 返回当前日期和时间
  • CURDATE():
    • SELECT CURDATE(); // 返回当前日期
  • CURTIME():
    • SELECT CURTIME(); // 返回当前时间
  • DATE(date_expression):
    • SELECT DATE('2023-03-15 10:30:00'); // 返回 “2023-03-15”
  • TIME(date_expression):
    • SELECT TIME('2023-03-15 10:30:00'); // 返回 “10:30:00”
  • DATE_ADD(date, INTERVAL expr type):
    • SELECT DATE_ADD('2023-03-15', INTERVAL 1 DAY); // 返回 “2023-03-16”,添加一天
  • DATE_SUB(date, INTERVAL expr type):
    • SELECT DATE_SUB('2023-03-15', INTERVAL 1 DAY); // 返回 “2023-03-14”,减去一天

5. 其他常用函数

  • IFNULL(expr1, expr2):

    • SELECT IFNULL(NULL, 'Default Value'); // 返回 “Default Value”,因为第一个参数为空
  • COALESCE(expr1, expr2, …):

    • SELECT COALESCE(NULL, 0, 'Default Value'); // 返回 0,因为它是第一个非空值
  • CASE WHEN … THEN … ELSE … END:

    • SELECT 
        CASE 
          WHEN age < 18 THEN 'Minor'
          WHEN age >= 18 AND age < 65 THEN 'Adult'
          ELSE 'Senior' 
        END AS age_group    //筛选出的内容条被匿名为 age_group
      FROM employees;
      

      // 根据员工的年龄,将他们分为 “Minor”,“Adult” 和 “Senior” 三组

联合注入:

select*from users where id=6 union select*from email where id=6;

这里需要注意,用union链接的查询,查询的列数必须一样,要不然会报错,如果不一样可以如下:

select*from users where id=6 union select*,3 from email where id=6;
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值