【12】WEB安全学习----MYSQL-2

目录

 

一、插入记录

1、不指定字段名

2、指定字段名

二、更新记录

三、删除记录

四、查询记录

1、基本查询

查询表中所有记录:

根据字段名进行查询

多表查询

设置别名

2、条件查询

比较查询

范围查询

模糊查询

逻辑查询

分组查询

对查询结果进行排序 ORDER BY

控制显示条数 LIMIT

3、内连接查询

4、外连接查询

5、联合查询

6、子查询

7、正则表达式查询

8、运算符

算数运算符

比较运算符

逻辑运算符

位运算符


一、插入记录

创建Users表

CREATE TABLE Users(
    id INT PRIMARY KEY AUTO_INCREMENT,
    UserNmae VARCHAR(20) NOT NULL,
    age TINYINT NOT NULL,
    sex ENUM('男','女','保密') DEFAULT '保密',
    caid VARCHAR(18) NOT NULL UNIQUE
);

1、不指定字段名

语法格式:INSERT [INTO] 表名 VALUES(值1,......)

INSERT INTO Users VALUES(NULL,'root',20,'男','500111111111111111');

2、指定字段名

语法格式:INSERT [INTO] 表名(字段1,......) VALUES(值1,......)

INSERT INTO Users(age,UserNmae,caid) VALUES(18,'admin','500222222222222222');

二、更新记录

语法格式:UPDATE 表名 SET 字段名称=值,......[WHERE 条件] [ORDER BY 字段名] [LIMIT 限制条数]

UPDATE Users SET UserNmae='administrator' WHERE UserNmae='root';

三、删除记录

语法格式:DELETE FROM 表名 [WHERE 条件] [ORDER BY 字段名] [LIMIT 限制条数]

DELETE FROM Users WHERE id=1;

彻底清空数据表:TRUNCATE [TABLE] 表名

TRUNCATE TABLE Users;

四、查询记录

1、基本查询

查询表中所有记录:

语法格式:SELECT * FROM 表名,*号代表所有字段

SELECT * FROM Users;

根据字段名进行查询

语法格式:SELECT 字段名1,...... FROM 表名

SELECT UserNmae,sex FROM Users;

多表查询

如果涉及到多数据库、多表查询时,请带上数据库名和表名

SELECT Users.UserNmae,Users.age FROM user.Users;

设置别名

通过设置表名别名,可以简化输入表名。通过设置字段别名,可以自定义显示查询字段名。

SELECT a.UserNmae AS '姓名',a.age AS '年龄' FROM Users AS a;

2、条件查询

WHERE条件
查询条件 符号
比较 =、<、<=、>、>=、!=、<>、!>、!<、<=>
指定范围 BETWEEN AND、NOT BETWEEN AND
指定集合 IN、NOT IN
匹配字符 LIKE、NOT LIKE
是否为控制 IS NULL、IS NOT NULL
多个查询条件 AND、OR

比较查询

SELECT * FROM Users WHERE id>3;
SELECT * FROM Users WHERE id=1;
SELECT * FROM Users WHERE id<>1;

范围查询

使用BETWEEN AND指定查询范围

SELECT * FROM users where id BETWEEN 1 AND 3;
SELECT * FROM users WHERE id NOT BETWEEN 1 AND 2;

使用IN指定集合范围查询

SELECT * FROM users WHERE id IN(1,3);
SELECT * FROM users WHERE id NOT IN(1,3);

模糊查询

%号:表示0个或一个或多个任意字符

_号:表示1个任意字符

//查询用户名以t字符结尾的
SELECT * FROM users WHERE UserNmae LIKE '%t';
//查看用户名包含d字符的
SELECT * FROM users WHERE UserNmae LIKE '%d%';
//查询用户名为四位的
SELECT * FROM users WHERE UserNmae LIKE '____';

逻辑查询

使用AND、OR逻辑运算符进行查询

//查询性别为男并且年龄为20
SELECT * FROM users WHERE sex='男' AND age=20;
//查询身份证号码以500开头的或者是年龄大于20的
SELECT * FROM users WHERE Caid LIKE '500%' OR age>20;
//查询身份证号码以500开头的并且年龄大于20的
SELECT * FROM users WHERE Caid LIKE '500%' AND age>20;

分组查询

使用GROUP BY 进行分组查询,查询结果只会显示该组的第一行记录。

//按照性别进行分组查询,可看到查询结果为3行性别不同的记录
SELECT * FROM users GROUP BY sex;

也可以多字段进行分组查询

//先按照proid进行分组,在按照性别进行分组
SELECT * FROM users GROUP BY proid,sex;

分组查询常用函数
函数名 作用
GROUP_CONCAT() 得到分组详情
COUNT() 统计记录总数
MAX() 统计记录最大值
MIX() 统计记录最小值
AVG() 平均值
SUM() 求和
WITH ROLLUP 分组后进行再次聚合统计

使用GROUP_CONCAT()函数得到分组详情信息

//查询所有用户名
SELECT id,GROUP_CONCAT(username) FROM users;
//按照性别进行分组,然后显示各分组里的用户名信息
SELECT id,GROUP_CONCAT(username) FROM users GROUP BY sex;
//按照性别进行分组,然后显示各分组里的用户名信息、密码信息
SELECT id,GROUP_CONCAT(username),GROUP_CONCAT(password) FROM users GROUP BY sex;

使用聚合函数

//得到表中总记录数
SELECT COUNT(*) AS '总数' FROM users;

//对性别进行分组查询,显示各组的用户名信息,并统计各组的个数
SELECT ID,GROUP_CONCAT(username) AS '用户名',COUNT(*) AS '个数' FROM users GROUP BY sex;

//对性别进行分组,并得到各组里年龄最大的用户信息
SELECT id,GROUP_CONCAT(username),MAX(age) FROM users GROUP BY sex;

使用WITH ROLLUP进行分组后再次统计

SELECT id,GROUP_CONCAT(username),MAX(age) FROM users GROUP BY sex WITH ROLLUP;

如图所示,使用WITH ROLLUP可以对分组后的信息再次统计。

对分组查询再次筛选

使用HAVING语句可以对分组查询进行二次筛选,HAVING只能用于分组查询中

//对性别进行分组查询,显示各分组用户名信息、最大年龄数、年龄总和
SELECT GROUP_CONCAT(username),MAX(age),SUM(age) AS sum FROM users GROUP BY sex;
//对性别进行分组查询,显示各分组用户名信息、最大年龄数、年龄总和,并且年龄总合大于50的
SELECT GROUP_CONCAT(username),MAX(age),SUM(age) AS sum FROM users GROUP BY sex HAVING sum>50;

对查询结果进行排序 ORDER BY

//对查询结果按照年龄进行排序
SELECT * FROM users ORDER BY age;
//或者通过数字也可以表示字段
SELECT * FROM users ORDER BY 5

小技巧:ORDER BY 和 GROUP BY都可以用于猜字段数

控制显示条数 LIMIT

//显示1条查询结果
SELECT * FROM users LIMIT 1;
//显示3条查询结果
SELECT * FROM users LIMIT 3;

//LIMIT 偏移量,条数
//显示第一条结果
SELECT * FROM users LIMIT 0,1;
//显示第二条结果
SELECT * FROM users LIMIT 1,1;

3、内连接查询

连接查询是将两个或两个以上的表按某个条件连接起来,从中选取需要的数据。

当不同的表中存在相同的意义的字段时,可以通过该字段连接这几个表。

使用JOIN ON进行内连接查询

demo:users表中的proid对应着proid表中的id

//使用where条件进行多表连接查询
SELECT users.username,users.sex,users.age,proid.proname FROM users,proid WHERE users.proid=proid.id;

//使用JOIN ON进行内连接查询
SELECT users.username,users.sex,users.age,proid.proname FROM users JOIN proid ON users.proid=proid.id;

以上两条查询语句结果相同,那为什么还要用内连接查询呢,因为WHERE条件只能使用一次,使用JOIN ON内连接查询后还可以用WHERE进行再次筛选。

SELECT users.username,users.sex,users.age,proid.proname FROM users JOIN proid ON users.proid=proid.id WHERE sex='男';

4、外连接查询

左外连接:LEFT JOIN 显示左表的全部记录及右表符合连接条件的记录

右外连接:RIGHT JOIN 显示右表的全部记录及左表符合连接条件的记录

demo:在ussers表中插入一条记录,其中proid=10,这个值在proid表中不存在

当用内连接查询时,是看不到proid=10的那条记录,因为不满足条件users.proid=proid.id

但用外连接进行查询时,可以看到,能查询到proid=10那条记录,其中不满足的条件的字段用NULL表示

SELECT users.username,users.sex,users.age,proid.proname FROM users LEFT JOIN proid ON users.proid=proid.id;

5、联合查询

将多个查询结果合并在一起。两个表对应的列数和数据类型必须相同或兼容

UNION:去掉重复记录,在合并

UNION ALL:合并

SELECT username FROM users UNION SELECT proname FROM proid;

6、子查询

子查询是将一个查询语句嵌套在另一个查询语句中,内层查询语句的查询结果可以作为外层查询语句提供条件。

子查询支持 IN、比较运算符(>、<、>=、等等)、EXISTS

SELECT * FROM users WHERE proid IN(SELECT id FROM proid);
SELECT * FROM users WHERE proid > (SELECT id FROM proid WHERE id=1);

7、正则表达式查询

通过REGEXP '匹配方式'

SELECT * FROM users WHERE username REGEXP '^r';
SELECT * FROM users WHERE username REGEXP 't$';
SELECT * FROM users WHERE username REGEXP 'r.*';

8、运算符

算数运算符

算数运算符用于各类数值运算,包括+、-、*、/、%

比较运算符

比较运算符用于比较运算,包括>、<、=、>=、<=、!=以及in、between and、is null、greatest、least、like、regexp等。

逻辑运算符

逻辑运算符的求值结果为true和false,包括not/!、and/&&、or/||、xor

位运算符

位操作运算符运算按二进制位进行运算,包括&、|、~、^、<<、>>

猜你喜欢

转载自blog.csdn.net/a15803617402/article/details/82625465