网络安全小白学习记录-5-SQL查询语句

210 阅读6分钟

SQL查询语句

查询数据

数据库中最常用的操作。通过对数据库的查询,用户可以从数据库中获取需要的数据

基本查询语句

select 属性列表 from 表名

[where 条件表达式]

[group by 字段名]([having 条件表达式])

[order by 属性名 [asc|desc]]

表单查询

  • 使用*查询所有字段,*可以表示所有字段,不能改变字段的排列顺序;

84682c1493f0121b5a5c22800072d15.png

  • 查看数据库中表结构:

desc(describe);

41fe069c0f8dd6ddb3b51b0ffd8bf71.png

  • 查询指定字段:

select 字段名1,字段名2 from 表名;

57fa7b65ea90813c58da9555329e59d.png

  • 去除重复数值:

select distinct 字段名 from 表名;

eecce0a2291b9a1e0e683bdfb678d94.png

where子句---查询指定记录

  • 常用查询条件:
    • 比较、指定范围(between and---闭区间)、指定集合(in)、匹配字符(like---字符串)、多个查询条件(and,or)

1fe5f29455875f0a0129a1e9562784b.png

e4313868bed18bd93ebd1ab58214266.png

85d2a146ea56390b59c8352970effc0.png

  • like匹配查询:通配符'%'、'_',前者匹配多个字符,后者匹配单个字符

36b170eade74ccb7b43e8b01194082f.png

e1b1dd40637ab692b28f1c350352e35.png

  • and多条件查询,等同于&&,or多条件查询,等同于||,and比or要先运算

e57b14733517c3b88093630a577c8a5.png

  • limit子句:限制查询结果的数量---不指定初始位置,从第一条记录开始显示
    • limit 记录数(limit n,m---n:开始位置 m:要检索的行数)
    • 注意:行0,检索出来的第一行为行0,而不是行1,limit 1,1检索出的是第二行
  • 对查询结果排序:order by 属性名 [ASC升序(默认)|DESC降序]
    • 考虑和limit组合使用,找出一个列中的最高或最低的值
    • select 字段名 from 表名 order by 字段名 DESC|ASC limit 1;

b40b02ab45cf54074da241bc01a4b83.png

aefa973ec091a9423bca3b7f0e4cdee.png

83b3e999ab162015da682ceb756d058.png

  • 分组查询:group by 属性名 [having 条件表达式]
    • 将查询结果按某个字段或多个字段进行分组。字段中值相等的为一组。
    • having对分组后的结果按条件筛选,只能在group by子句后使用

cd1ec809d1465e032db24c174ca3343.png

集合函数

  • count()、sum()、avg()、max()和min();

group by关键字通常需要与集合函数一起使用

f80410eac24ba7514184beabd98cb98.png

bd5632ff3d4644bcf5a7965efcef482.png

244b1b38631edfe0a4a1719ed0dad00.png

033ead88b9778dd66cdec8d42d9deb6.png

933caf2836c27df99aed20ad5072be2.png

正则表达式查询

用某种模式去匹配一类字符串的方式,比通配符的查询能力更强大、更灵活。应用于复杂查询

  • 使用regexp匹配查询正则表达式

属性名(需要查询的字段的名称) regexp '匹配方式'(以哪种方式进行匹配查询)

  1. '^':查询以特定字符或者字符串开头的记录

c1d9dc174f6554271bda53d6b3152b7.png 2. '$':查询以特定字符或者字符串结尾的记录

92b23a383c0bae557973ab0713ecef0.png 3. '.':匹配字符串中的任意一个字符

'.'和'_'的区别:.只能用于regexp关键字匹配;_不能用于regexp关键字匹配

b671a435a3f9a3b57af37fc77f0bd50.png 4. '[]':字符集合。匹配所包含的任意一个字符;可以指定集合的区间:[a-z],[1-9]

7f64aff55fcbcffebbea7315c2951ea.png 5. '[^字符集合]':匹配指定字符以外的字符

匹配指定字符串:如果指定多个字符串时,需要用符号"|"隔开。匹配字符串中任意一个即可。

723a6ef911c9f7fd62d0c6e4f8b6a96.png

8b510f3201d6f5fa21e0cfc550b0d16.png 6. '*'和'+':匹配多个字符---匹配多个该符号之前的字符

"+":至少表示一个字符 "*":可以表示0个字符

2c108f7da6140f061824c63bff31217.png

e7481f355e0114143963f1ae757cd60.png 7. '{m}'或者'{m,n}'来指定字符串连续出现的次数

m是一个非负整数,匹配确定的m次

m和n均为非负整数,其中m<=n

a1702be4cb97c92beb170a6960f30d0.png

运算符

算数运算符

  • 加减乘除求余

除法:/或DIV

取余:%或MOD

f9472f2a3bf731cce861c01cad1ea4b.png

比较运算符

  • 数值比较和字符串匹配

IS NULL为空、REGEXP正则表达式匹配、IN集合、BETWEEN两值之间

10c3bfd6b85c91a6f6a1bb73298a3bf.png

逻辑运算符

  • 结果返回真值(1或true)和假值(0或false)

XOR-逻辑异或、OR或||-逻辑或、AND或&&-逻辑与、NOT或!-逻辑非

2c2a0b2f0e80ec8b2514aee7370b1c1.png

运算符优先级

e49e1d0e69c70f0b1d58497f82032d2.png

注释符

  1. #...:单行注释,语法"#注释内容"(-- +)
  2. "-- " :(注意:"--"后面有一个空格)单行注释,语法"-- 注释内容"
  3. /.../:多行注释,语法"/注释内容/"

查询函数

  • 联合查询UNION:用于合并具有相同字段结构的两个表的内容,主要用在一个结果中集中显示不同表的内容

并操作union、交操作intersect、差操作except

默认不返回重复记录、查询的表的字段必须一样、查询的数据类型必须能兼容

查询结果只是增加了行数而列数不变

c1cf48a79ff2d3c202a3ad49817e971.png

bb41774f3fe2f37110e4be91d9a363a.png

  • order by用于判断字段数量,联合查询union判断字段数量

6e08a0dd644cbf9db8842ead7e4f575.png

  • 系统用户名:

select system_user()

7d4e409e2f4ac3f648f9316413ce23b.png

  • 当前日期:

current_date()

image.png

  • 连接数据库用户名:

session_user()

image.png

  • 数据库名:

database()或schema()

image.png

image.png

  • 数据库版本:

version()

image.png

  • 数据库读取路径:

@@basedir

image.png

  • mysql安装路径:

@@char

image.png

  • 查看当前系统版本:

@@version_compile_os

image.png

  • 当前机器的机器名:

@@hostname

image.png

截取函数

  • 从左边返回字符数:

left(str,length)

image.png

  • 从右边返回字符数:

right(str,length)

image.png

  • 指定str起始位置pos,截取长度length:

Substr(str,pos,length)---substring

image.png

image.png

  • 指定str,起始位置pos(默认为1),length可选,如果省略,则返回剩余文本:

mid(str,pos,length)

image.png

字符串连接函数

  • 没有分隔符地连接字符串:

concat(str1,str2,...)

image.png

  • 含有分隔符地连接字符串:

concat_ws(separator,str1,str2,...)

image.png

  • 连接一个组的所有字符串:

group_concat(str1,str2,...)

fe9995c204d1cc453716652114f0897.png

字符串检索函数

  • 返回str在str1中第一次出现的位置:

locate(‘str’,’str1’)

image.png

  • 返回str中出现str1字符串的位置:

instr(‘str’,’str1’)

image.png

进制转换

  • 八进制:

oct()

image.png

  • 十六进制:

hex()

image.png

时间函数

sleep(N):让此语句运行N秒

image.png

编码值转换

  • 返回字符串str最左面的字符的ASCII代码值,如果是空字符串,则返回0:

Ascii(str)

image.png

拓展作业一:

  • 字符串截取函数:

1. Substring_index(str,dim,count)

从指定字符位置开始截取指定长度字符串

select substring_index('www.baidu.com.123', '.', 2);    

输出:www.baidu

(从首位开始截取至第2个.点号前一位的字符串)

select substring_index('www.baidu.com.123', '.', -2);

输出:com.123

(从末尾开始第2个.点号开始截取到最后的字符串)

(若找不到任何标识,返回整个字符串)

 

  • 系统函数:
  1. 数学函数:

1. ABS(x):返回绝对值

2. PI(x):返回圆周率,默认显示6位小数

3. CEIL(x):返回不小于x的最小整数;FLOOR(x):返回不大于x的最大整数;

4. POW(x,y)和POWER(x,y):返回x的y次乘方的值

5. EXP(x):返回e的x乘方后的值

6. LOG(x):返回x的自然对数,x相对于基数e的对数

7. COS(x),SIN(x),TAN(x)

  1. 字符串函数:

1. CHAR_LENGTH(str)

计算字符串字符个数

2. SPACE(n)

返回一个由n个空格组成的字符串

3. REPLACE(s,s1,s2)

返回一个字符串,用字符串s2替代字符串s中的所有的字符串s1

4. REVERSE(s)

将字符串s反转

5. REPEAT(s,n)

返回一个由重复字符串s组成的字符串,字符串s的数目等于n

拓展作业二:

1. 截取字符串中的部分字符

在acceses数据库中,使用mid()
在DB2和ORACLE数据库中使用函数substr()
在mysql和sql server数据库中使用函数substring()

  1. 日期形式转换

在access和oracle数据库中使用的是复合函数
在DB2数据库中使用的是cast()
在mysql和sql server数据库中使用函数convert()

  1. 获取当前日期

在access数据库中使用的是函数是now()
在DB2数据库中使用函数current_date()
在oracle数据库中使用函数sysdate()
在sql server数据库中使用函数 getdate()