SQL语法
本篇用于学习基础的sql语法,更多偏向于ctf的学习,也就是PHP Mysql
基础语句
SELECT * FROM table_name;
从表中选取所有记录
- SQL 对大小写不敏感:SELECT 与 select 是相同的
- 分号是在数据库系统中分隔每条 SQL 语句的标准方法,这样就可以在对服务器的相同请求中执行一条以上的 SQL 语句。
database():数据库
table_name:表名(表名为数字时:要用反引号包起来查询)
column_name:列名/字段名
命令
SELECT
从数据库中提取数据
SELECT column_name,column_name FROM table_name;
SELECT FROM table_name;
select distinct+...
可用于返回唯一不同的值
SELECT FROM语句 + where column_name = value;
可用于提取满足指定条件的记录SELECT FROM语句 + order by column_name(可多列查询 + ,column_name) ASC(升序)|DESC(降序);
对结果集按照一个列或者多个列进行排序1‘ order by + 字段数# 用于查询可显示的字段
SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2;
合并两个或多个 SELECT 语句的结果union select
group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])
将相同的行组合起来
句法
WHERE 子句
提取那些满足指定条件的记录
SELECT column_name,column_name FROM table_name WHERE condition;
LIKE 操作符
用于在 WHERE 子句中搜索列中的指定模式
SELECT column_name, column_name FROM table_name WHERE column LIKE pattern;
“%” 符号用于在模式的前后定义通配符(默认字母)
eg:下列语句选取 name 以字母 “G” 开始的所有字段
SELECT * FROM table_name WHERE name LIKE 'G%';
以此类推%G
,%G%
分别为结尾和包含
ORDER BY 关键字
对结果集按照一个列或者多个列进行排序
SELECT column_name,column_name FROM table_name ORDER BY column_name, column_name ASC|DESC;
ASC:表示按升序排序。
DESC:表示按降序排序。
当按照多个列进行排序时,只有第一列的值相同时才使用第二列
INSERT INTO语句
用于向表中插入新记录
INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);
注:不用向 id 字段插入任何数字,id 列是自动更新的,表中的每条记录都有一个唯一的数字
UPDATE 语句
用于更新表中的记录
UPDATE table_name
SET column1 = value1, column2 = value2, ...
(WHERE condition);
函数
COUNT() 函数
返回匹配指定条件的行数
SELECT COUNT(column_name) FROM table_name; # 返回指定列的值的数目(NULL 不计入)
SELECT COUNT(*) FROM table_name; # 返回表中的记录数
SELECT COUNT(DISTINCT column_name) FROM table_name; # 返回指定列的不同值的数目
REGEXP()函数
执行正则表达式模式匹配,在文本中查找与指定模式相匹配的字符串
爆破时括号内请使用十六进制进行匹配以避免语法错误
GROUP BY 语句
结合聚合函数,根据一个或多个列对结果集进行分组
SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name;
aggregate_function():即上文的几个函数
HAVING 子句
因为WHERE 关键字无法与聚合函数一起使用,所以有了having
筛选分组后的各组数据
SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name HAVING aggregate_function(column_name) operator value;
CONCAT()函数
将多个字符串连接成一个字符串。它接受两个或多个字符串作为参数,并返回一个包含这些字符串连接在一起的新字符串
CONCAT(str1, str2, ...)
每个参数必须是字符串类型或可隐式转换为字符串类型(char
转换)
load_file()函数
从文件系统中读取文件内容并将其作为字符串返回
SELECT load_file('/var/www/html/index.html');
if()函数
根据条件返回不同的值的条件
IF(condition, value_if_true, value_if_false)
一个条件表达式,一个在条件为真时返回的值,以及一个在条件为假时返回的值
case函数
根据条件返回不同值的条件语句,可以替代复杂的 IF-ELSE 逻辑
CASE expression
WHEN value1 THEN result1
WHEN value2 THEN result2
...
ELSE result
END
substr()函数
从字符串中提取一个子串,类似php中的substr
第一个参数是要提取子串的字符串,第二个参数是子串的开始位置,第三个参数是子串的长度
REPLACE()函数
REPLACE(string, old_substring, new_substring)
string是要进行替换操作的字符串;old_substring是要被替换的子串;new_substring是要替换成的子串
LIKE()函数
用于在数据列中搜索特定的模式。它通常与
WHERE
子句一起使用,根据某个字符串模式过滤数据
LIKE
函数使用两个通配符:%
和 _
。%
通配符表示零个或多个字符,而 _
通配符表示一个字符
例:查找所有名字以字母 “J” 开头的记录:
SELECT * FROM customers WHERE first_name LIKE 'J%';
面向对象
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
$sql = "SELECT id, firstname, lastname FROM MyGuests";// 读取数据(注入关键,一般会在这段语句中加入参数)
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// 输出数据
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 结果";
}
$conn->close();
?>
从 myDB 数据库的 MyGuests 表读取了 id, firstname 和 lastname 列的数据并显示在页面上
解析:我们设置了 SQL 语句从 MyGuests数据表中读取 id, firstname 和 lastname 三个字段。之后我们使用该 SQL 语句从数据库中取出结果集并赋给复制给变量 $result。