SQL语句进阶学习一

  • MYSQL的基本概念
    • 主键(primary key):其值能够区分表中的每一行
    • sql(strutured query language)
    • 过滤数据
    • 搜索模式:由字面值、通配符或两者组合构成的搜索条件
    • 变量名:所有MySQL的变量必须以@开始。
  • where子句操作符
    • 1.检查单个值
    • 2.不匹配检查
    • 3.范围值检查:只能从小到大的顺序编写。
    • 4.or和and同时存在的情况
      • 注意事项:计算次序,当and和or同时在场时,先执行and的语句再执行or的语句
    • 5.in操作符
      • 两者的差别
    • not语句
    • 不等于的语句
  • 通配符进行过滤,子句中使用通配符,必须使用like操作符,代表不是精确匹配而是模糊匹配
    • 百分号(%)通配符:%代表搜索模式中给定位置的0个,1个或者多个字符。
        • 通配符%在字符串的后面
        • 通配符%在字符两侧,构成模糊查询
        • 通配符%在字符中间
      • 尾空格问题:如果它后面有一个或者多个空格,则不会被匹配成功。如:product_name like '%联想' ,将不能匹配‘联想 ’成功。
    • 下划线(_)通配符:下划线通配符表示只能匹配单个字符
      • 注意事项
  • 正则表达式的使用
    • 1.正则表达式的概念:匹配文本中一些特殊的字符,文本。
    • 2.like操作符和正则表达式的区别:like匹配的是整列值,而正则表达式匹配的是整列值内进行匹配。当然正则表达式也可以匹配整列。
    • 3.使用BINARY关键字,对其搜索进行大小写区分。而regexp是对搜索不进行大小写区分的。
    • 4.基本字符匹配
    • 5.进行or匹配
    • 6.匹配几个字符之一
    • 7.范围匹配
    • 8.匹配特殊字符
    • 9.匹配字符类
    • 10.匹配对个实例
    • 11.匹配定位符
  • 计算字段
    • 1.拼接字段
    • 2.执行算术计算
  • 使用数据处理函数
    • 1.文本处理函数
    • 2.日期和时间使用函数(对时间区间的筛选)
    • 3.数值处理函数
  • 汇总数据
    • 1.聚集函数
    • 2.聚集不同值
  • 分组数据
    • 1.创建分组
    • 2.过滤分组
    • 3.分组排序
      • select * from table order by price desc/asc;
      • select sort,output,price from book where price between 10 and 20 order by price , output;
    • 4.select子句顺序

MYSQL的基本概念

主键(primary key):其值能够区分表中的每一行

sql(strutured query language)

过滤数据

搜索模式:由字面值、通配符或两者组合构成的搜索条件

变量名:所有MySQL的变量必须以@开始。

where子句操作符

1.检查单个值

select * from table where username = ‘张三’;(查找名字叫做张三的用户信息)
select * from table where price >= 10;(查找价格大于或等于10元的商品信息)

2.不匹配检查

select * from table where price <>13;(查找价格不等于13元的商品信息)

3.范围值检查:只能从小到大的顺序编写。

select * from table where price between 13 and 17;(查找价格为13到17的商品)

4.or和and同时存在的情况

注意事项:计算次序,当and和or同时在场时,先执行and的语句再执行or的语句

1)select * from table where id = 1 or id = 2 and price >=13;(当or和and同时存在时,sql会先执行and的语句。即查找出id为2且价格大于等于13或者id=1的商品信息)
2)select * from table where (id = 1 or id = 2) and price >=13;(查找商品id为1或者2且他们的价格小于等于13的商品)

5.in操作符

select * from tabel where price in (1,3,13);(查找商品价格为1,3,13的商品信息)
本条语句也可以 select * from tabel price = 1 or price = 3 or price = 13;

两者的差别

1.使用in的语法更清晰
2.使用in的次序更清楚,而or还要考虑次序的规则
3.in的操作速度会比or的操作速度更快
4.in的最大优点是可以包含其他的where语句

not语句

select * from table where price not in (1,3);(查找价格不为1和3的商品信息)

不等于的语句

select * from reader where name != ‘赵正义’;

通配符进行过滤,子句中使用通配符,必须使用like操作符,代表不是精确匹配而是模糊匹配

百分号(%)通配符:%代表搜索模式中给定位置的0个,1个或者多个字符。

通配符%在字符串的后面

select * from table where username like ‘ZW%’;(查找出用户名以ZW开头的信息,%告诉MySQL接受ZW之后的任意字符,不管它有多少字符,这个搜索是区分大小写的)

通配符%在字符两侧,构成模糊查询

select * from table where username like ‘%ZW%(查找出用户名包含ZW的信息的用户信息)’

通配符%在字符中间

select * from table where username like ‘e%s’(查找出用用户名以e开头,以s结尾的信息)

尾空格问题:如果它后面有一个或者多个空格,则不会被匹配成功。如:product_name like ‘%联想’ ,将不能匹配‘联想 ’成功。

解决办法:1.后面再增加通配符%
2.使用函数去掉首尾空格

下划线(_)通配符:下划线通配符表示只能匹配单个字符

select * from table where username like ‘_ZW’;

注意事项

1.通配符的查询效率很低,尽量使用其他的操作符
2.不要将通配符放在搜索模式的开始处,像like ‘%ZW’,造成索引失效;
3.注意通配符的位置。
4.通配符%不能匹配到NULL值

正则表达式的使用

1.正则表达式的概念:匹配文本中一些特殊的字符,文本。

2.like操作符和正则表达式的区别:like匹配的是整列值,而正则表达式匹配的是整列值内进行匹配。当然正则表达式也可以匹配整列。

如:select * from table where username like ‘zhangsan’;
select * from table where username regexp ‘zhangsan’;
第一个不能查出叫做zhangsanfeng的信息,而第二个可以查出叫做zhangsanfeng的信息。

3.使用BINARY关键字,对其搜索进行大小写区分。而regexp是对搜索不进行大小写区分的。

4.基本字符匹配

select username from table where username regexp ‘ZW’;(查找含有用户名含有zw的信息)
select username from table where username regexp ‘.000’;(.是正则表达式语言中一个特殊的字符。它表示可以匹配任意一个字符。因此,1000和2000都可以匹配)

5.进行or匹配

select * from table where username regexp ‘Z|W’;(查找出用户名含有Z或者W的用户信息)
|是正则表达式当中or操作符。

6.匹配几个字符之一

select * from table where username regexp ‘[123]TON’;(查找开头为1,2,3中之一后接TON的用户名信息);
【123】(等价于【1|2|3】)是正则表达式当中的匹配指定的单一字符,指定的字符中取一,是另一种形式的or语言。【^123】排除指定的字符,匹配其余的任意字符。

7.范围匹配

select * from table where phone regexp ‘[1-7]ZW’;(查找口头为1到7这个范围的数字且含有ZW的信息)

8.匹配特殊字符

select * from table where username regexp ‘.’;(在正则表达式中,.代表可以匹配任意字符,因此需要增加\来进行转义,使其表达可以匹配带有.的字符)
MySQL使用两个转义字符对其进行编译,MySQL自己解释一个,正则表达式库解释另一个。

9.匹配字符类

[:alnum:] 任意字母和数字(同[a-zA-Z0-9])
[:alpha:] 任意字符(同[a-zA-Z])
[:blank:] 空格和制表(同[\\t])
[:cntrl:] ASCII控制字符(ASCII 0到31和127)
[:digit:] 任意数字(同[0-9])
[:graph:] 与[:print:]相同,但不包括空格
[:lower:] 任意小写字母(同[a-z])
[:print:] 任意可打印字符
[:punct:] 既不在[:alnum:]又不在[:cntrl:]中的任意字符
[:space:] 包括空格在内的任意空白字符(同[\\f\\n\\r\\t\\v])
[:upper:] 任意大写字母(同[A-Z])
[:xdigit:] 任意十六进制数字(同[a-fA-F0-9])

10.匹配对个实例

select product from table where regexp ‘\\([0-9] sticks?\\)’(\\是对()是对其转义,正则表达式中,?代表?前的字符可以出现一次或者零次。如:s可以出现一次或者零次。查询的结果为(1 sticks) 或(1 stick)).
正则表达式
*0个或多个匹配
+1个或多个匹配(等于{1,})
? 0个或1个匹配(等于{0,1})
{n} 指定数目的匹配
{n,} 不少于指定数目的匹配
{n,m} 匹配数目的范围(m不超过255)

11.匹配定位符

定位元字符
^ 文本的开始
$ 文本的结尾
[[:<:]] 词的开始
[[:>:]] 词的结尾
select * from table where regexp ‘^[0-9\\.]’;
(查出表格中以数字或者.开头的用户信息)

计算字段

1.拼接字段

1)拼接
a)含义:将值连接在一起拼接成单个值。MySQL使用concat()函数。多数DBMS使用+或||实现拼接。
b)实例:

concat()连接每一个串,每一个串必须用,号隔开。上条语句包含四个串,vend_name,(左圆括号,)右圆括号,vend_country.
2)去除空格
a)含义:将串的空格删除去掉。去除串两端的空格使用trim()函数,去掉串左边的空格使用Ltrim()函数,去掉右边的空格使用Rtrim()函数。
b)实例:

3)使用别名
a)含义:为新的拼接字段赋予一个新的名字。使用关键字as.
b)实例:

2.执行算术计算

a)含义:对检索的字段进行算术计算。
b)实例:

计算检索出来的数据quantity*item_price作为expanded_price新字段。

使用数据处理函数

1.文本处理函数

a)常用的文本处理函数
函 数 说 明
Left() 返回串左边的字符
Length() 返回串的长度
Locate() 找出串的一个子串
Lower() 将串转换为小写
LTrim() 去掉串左边的空格
Right() 返回串右边的字符
RTrim() 去掉串右边的空格
Soundex() 返回串的SOUNDEX值
SubString() 返回子串的字符
Upper() 将串转换为大写
b)实例

2.日期和时间使用函数(对时间区间的筛选)

a)常见日期和时间函数
函 数 说 明
AddDate() 增加一个日期(天、周等)
AddTime() 增加一个时间(时、分等)
CurDate() 返回当前日期
CurTime() 返回当前时间
Date() 返回日期时间的日期部分
DateDiff() 计算两个日期之差
Date_Add() 高度灵活的日期运算函数
Date_Format() 返回一个格式化的日期或时间串
Day() 返回一个日期的天数部分
DayOfWeek() 对于一个日期,返回对应的星期几
Hour() 返回一个时间的小时部分
Minute() 返回一个时间的分钟部分
Month() 返回一个日期的月份部分
Now() 返回当前日期和时间
Second() 返回一个时间的秒部分
Time() 返回一个日期时间的时间部分
Year() 返回一个日期的年份部分
b)实例

order_date是个dateTime的类型数据时,其不单单有日期还有具体的时间,使用Date()的函数就可以只筛选出日期,而且时间的范围应该用beteen and的关键字进行连接。

此方法无需记住该月份有多少天。

3.数值处理函数

函 数 说 明
Abs() 返回一个数的绝对值
Cos() 返回一个角度的余弦
Exp() 返回一个数的指数值
Mod() 返回除操作的余数
Pi() 返回圆周率
Rand() 返回一个随机数
Sin() 返回一个角度的正弦
Sqrt() 返回一个数的平方根
Tan() 返回一个角度的正切

汇总数据

1.聚集函数

a)常见的聚集函数
函 数 说 明
AVG() 返回某列的平均值
COUNT() 返回某列的行数
MAX() 返回某列的最大值
MIN() 返回某列的最小值
SUM() 返回某列值之和
b)一些注意事项
1.count(*)是计算当前表格的列数,包含null值的列数。而count(column)则不包含null值的函数。
2.max()也可以找出文本数据的最大值,如select max(name) from t_student;同理min()亦是如此。

2.聚集不同值

1)使用distinct()函数。对于只包含不同值的计算。
2)实例:

distinct()函数可以将相同的商品的价格去除。

分组数据

1.创建分组

1)group by关键字。对指定的列进行分组。
2)实例:
注意事项:
group by语句必须在order by语句之前。

2.过滤分组

1)使用关键字having进行分组。
2)having和where的区别。having是对分组进行过滤,而where是对表格行进行过滤。having是对分组后的数据进行过滤,而where是对分组前的数据进行操作。
3)实例

3.分组排序

1)使用关键字。order by关键字。
2)实例

注意事项:
1.order by默认以升序排列,acs是按升序排列,decs是按降序排列。

select * from table order by price desc/asc;

2.order by接多个字段列排序时,字段与字段之间用,号连接。

select sort,output,price from book where price between 10 and 20 order by price , output;

先按price升序进行排序,当价格相同时再按output(出版社)进行排序。

4.select子句顺序

子句 说明
select 要返回的列或表达式
from 从中检索数据的表
where 仅在从表选择数据时使用
group by 分组说明
having 对分组后的数据进行过滤
order by 进行牌序
limit 要检索的行数

SQL语句进阶学习一(where、通配符、正则表达式、计算字段、数据处理函数、分组数据)相关推荐

  1. 【SQL】进阶学习与题目补充

    [SQL]进阶学习与题目练习 1. 学习框架 2. leetcode日常练习 Q1 [1097. 游戏玩法分析 V](https://leetcode-cn.com/problems/game-pla ...

  2. Mysql数据库——sql语句进阶

    SQL语句进阶 1.查询字段: ----查询所有字段 select * from 表名; ----查询指定字段 select 字段名,字段名- from 表名; ----多数据表连接查询时 selec ...

  3. SQL语句行列转换两种方法 case ...when 和pivot函数应用

    2019独角兽企业重金招聘Python工程师标准>>> SQL语句行列转换两种方法 case ...when 和pivot函数应用SQL语句行列转换两种方法 case ...when ...

  4. SQL语句判断指定的数据库、表、字段、存储过程是否存在

    SQL语句判断指定的数据库.表.字段.存储过程是否存在 直接上代码,对大家有用就好! 代码 --判断[TestDB]是否存在 if exists(select 1 from master..sysda ...

  5. iif在mysql能用不_在写SQL语句时,你们会经常用IIF(ISNULL(字段))吗

    你的位置: 问答吧 -> .NET -> 问题详情 在写SQL语句时,你们会经常用IIF(ISNULL(字段))吗 我是个新手,刚写好一个东西,现在咨询个经验的问题.在写SQL语句时,你们 ...

  6. 使用SQL语句中的Group by分组并计算每组的数量

    在SQL语句中,Group by一般用来做分组统计使用,在实际的开发中我们可能会遇到不仅需要分组,还需统计出每组的数量条数,那这时候可以结合count函数来一起使用即可完成此项操作,最后的结果展示出所 ...

  7. sql语句进阶教程(学习sql这一篇就够了)

    转载自:http://blog.csdn.net/u011001084/article/details/51318434 最近从图书馆借了本介绍SQL的书,打算复习一下基本语法,记录一下笔记,整理一下 ...

  8. db2分页查询sql语句_MySQL学习(八):SQL查询语句的用法和优化

    一.概述 MySQL的性能优化可以从机器硬件,如磁盘,内存等:MySQL服务器配置,如线程数,查询缓存等:MySQL的主从分离和分库分表等:SQL语句优化等.其中SQL语句优化是与日常开发密切相关的, ...

  9. 存储过程中定义sql语句_学习SQL:用户定义的存储过程

    存储过程中定义sql语句 Stored procedures (SPs) are one more powerful database object we have at our disposal. ...

  10. MysQL高级SQL语句|进阶语句|select语句(一)【图文细解】

    MysQL高级SQL语句 一.SQL语句的概述 SELECT DISTINCT WHERE AND.OR IN BETWEEN 通配符 LIKE ORDER BY GROUP BY HAVING 二. ...

最新文章

  1. CRF(条件随机场)与Viterbi(维特比)算法原理详解
  2. 域上的全矩阵环是单环
  3. 如何评价三国里的袁绍
  4. 1024我摊牌了,谈谈自己2020剩余两月的学习计划
  5. Leetcode刷题(6)有效的括号
  6. win7系统临时文件夹的打开方法
  7. java opencv gamma_OpenCV函数cvAddWeighted调整alpha和gamma值 | 学步园
  8. java batik 字体文件_java使用batik转换svg文件-Go语言中文社区
  9. Windows下安装HDFView
  10. iPhone 快捷指令 文本朗读
  11. 台式计算机显卡是哪个好,台式电脑显卡排行榜
  12. 明源软件热忱欢迎您的加入---2011年校园招聘
  13. Android Studio 环信IM聊天设置用户头像
  14. layout_constraintWidth_percent in java
  15. 部门来了个卷王之王,真的让人奔溃
  16. 手游虚拟机中连接不到服务器,自由幻想手游模拟器进不去游戏 登录失败解决办法...
  17. Running flutter pub get in flutter_app...卡死
  18. 移动办公市场叫好不叫座 CRM尚需努力
  19. java8新特性:对map集合排序,根据key或者value操作排序(升序、降序)
  20. python生成word文档的表格_说说如何使用 Python 在 word 中创建表格

热门文章

  1. MFC SDL FFmpeg视频播放器开发教程(一)
  2. .net rdlc 自定义函数把数字转换为大写中文
  3. 【小峰の题单】网络流经典题目
  4. 有趣的微分方程之齐次方程
  5. 在web上制作动画(css3)
  6. Quadratic probing
  7. 网络传输数据基本流程 详解
  8. android 自定义 锁屏
  9. CI框架使用PHPExcel生成快递面单
  10. Android动画全篇系列(二)——补间动画