SQL的复习与总结
检索数据
关键字:
SELECT DISTINCT LIMIT OFFSET FROM
SELECT与FROM用于基础的检索,基本语法为:
SELECT column_name,column_name,column_name...column_name FROM table_name;
注:默认不排序;sql不区分大小写,但是建议SQL关键字使用大写,本文遵守此规则;建议每个SQL写完后跟上“;”,本文遵守此规则。
检索所有列:
SELECT * FROM table_name;
注:*会默认返回所有列的内容,不建议使用*,因为会检索所有内容造成不必要的性能浪费。
检索不同值:
SELECT DISTINCT column_name,column_name...column_name FROM table_name;
注:DISTINCT关键字作用于所有列,既对所有检索的列名都进行排它。
限制结果:
SELECT column_name FROM table_name LIMIT x;
SELECT column_name FROM table_name LIMIT x OFFSET y;
注:LIMIT表示检索多少行,OFFSET表示从第几行数据开始(第一行数据的下标为0),x与y都是数字(int)
排序检索数据
关键字:
ORDER BY
ORDER BY的基本用法:
SELECT column_name FROM table_name ORDER BY column_name;
注:数据库本身的查询顺序是无意义的(虽然大部分会按照默认顺序排列,但是随着数据的删除等操作,会导致顺序最终无意义,所以就默认为无意义的)
子句:由SQL的关键字与对应的数据组成。例如SELECT子句与FROM子句。
ORDER BY子句的位置应该为SELECT的最后(除正序、倒序关键字外)
ORDER BY也可以对非选择列(不是SELECT子句检索的列)进行排序。
进行多个列检索时:
SELECT column_name FROM table_name ORDER BY column1_name, column2_name;
注:仅当column1_name一致时才会对column2_name进行排序,如果column1_name都是唯一的相当于仅对column1_name排序。
升降序检索:
SELECT column_name FROM table_name ORDER BY column_name DESC/ASC, column2_name;
注:降序:DESC 升序:ASC 默认就是升序的。
升降序关键字仅影响其前面的列。
过滤数据
关键字:
where
操作符:= != >= <= > < BETWEEN(AND) IS NULL
仅对单个值过滤
SELECT column_name FROM table_name WHERE column_name OPERATION condition;
注:condition何时使用引号呢? 仅限限定字符串时才需要使用引号,一般使用单引号即可。
BETWEEN condition1 AND condition2 在限定范围时,该关键字包含限定的两个条件。
高级数据过滤
关键字:
WHERE AND OR IN NOT
多个限定条件的过滤:
SELECT column_name FROM table_name WHERE () AND/OR ();
注:()表示限定的条件。
AND要求两个条件都符合。
OR要求两者符合其一即可,多数DBMS在OR满足条件1时就不在计算第二个条件了。
AND与OR会有默认的求值顺序,即AND操作符优于OR操作符,当过滤条件>=3个的时候就要注意操作符顺序了,可以使用()来强制要求顺序,好习惯就是忽略默认顺序,优先使用()。
IN操作符的用法:
SELECT column_name FROM table_name WHERE column_name IN (condition1, confition2, ..., conditionN);
IN操作符与OR的作用是相同的,但是具有以下优点:
1.语法更加直观清晰。
2.求值顺序更加容易管理。
3.IN操作符比一组OR操作顺序快。
4.IN可以包含其他SELECT语句(后面同步)。
NOT操作符的用法:
SELECT column_name FROM table_name WHERE NOT ();
NOT仅否定跟在其后的条件。NOT与IN联合使用时会更有优势。
用通配符进行过滤
关键字:
LIKE %
概念:
通配符:用来匹配值得一部分的特殊字符。
搜索模式:由字面值和通配符或两者组合构成的搜索条件。
注:使用通配符必须配合LIKE操作符。
百分号(%)通配符:
SELECT column_name FROM table_name WHERE column_name LIKE 'String%'
注:上面的语句将检索column_name以String内容开头的数据。
‘%String’: 匹配以String内容结尾的数据
'%String%': 匹配包含String内容的数据
'String%String' 匹配以String内容开始,以String结尾内容的数据
%匹配0、1和多个字符。且不能匹配到NULL。
下划线(_)通配符:
注:下划线与%的作用相同,但是仅匹配单个字符。
通配符使用注意事项:
1.通配符使用要适度。
2.尽量不要在搜索的开头使用通配符。
3.注意通配符的位置。
拼接字段与计算字段
拼接字段与计算字段都是将多个列的数据进行组合查询。
关键字:
Concat(col, ...) AS + - * /
SELECT Concat(city_name, '(', country_name, ')') AS city_country FROM area ORDER BY city_name
注:因为拼接字段拼接后无法被客户端直接引用,所以使用AS关键字(别名,别名尽量与列名不同),方便客户端引用。
SELECT prod_id, quantity, item_price, quantity*item_price AS expanded_price FROM orderItems WHERE order_num = 100
注:计算字段有四个:+ - * /
函数的使用
由于不同的数据库中对函数的支持不同,所以具体的函数可以再使用的时候去查询,以下以MySQL为准
函数:
提取字符串的组成:SUBSTRING()
类型转换:CONVERT()
当前日期:CURDATE()
以下为统计函数
获取某列的平均值:AVG()
获取某列的行数:COUNT()
获取某列最大值:MAX()
获取某列最小值:MIN()
获取某列值之和:SUM()
注:COUNT(ROW)与COUNT(*) *是会计算库中所有的数据,ROW只会计算有值的数据(会忽略为null)
使用统计时,使用DISTINCT时,会排除不同的值,COUNT(DISTINCT ROW)排除ROW中有相同的值。
分组数据
关键字:
GROUP BY HAVING
- Spring boot · 链接池配置
- Linux下命令行图片格式转换
- 用SQL解一道有趣的数学题:Gauss和Poincare
- OpenSSL 转换证书格式
- 电子邮件服务器DKIM配置
- 自相矛盾:一个进程可以自成死锁么?
- 数据库安全·开发加密插件
- wordpress无法安装这个包。: PCLZIP_ERR_MISSING_FILE (-4) : Missing archive file 'C:WINDOWSTEMP/wordpress-4.
- 数据库安全·数据加密
- Medium网友开发了一款应用程序 让学习算法和数据结构变得更有趣
- 数据库安全·Token 认证
- 数据库安全·用户/角色认证
- 防止在训练模型时信息丢失 用于TensorFlow、Keras和PyTorch的检查点教程
- 帝国cms如何调用栏目别名作为分类标题?[!--classname--]标签不能用
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 我们一起学一学渗透测试——黑客应该掌握的HTML基础知识(一)
- 一套漏洞组合拳接管你的账号
- 我们一起学一学渗透测试——黑客应该掌握的HTML基础知识(二)
- 我用Paddle Lite在树莓派3b+上从零开始搭建“实时表情识别”项目
- mybatis-plus:自动填充功能
- 词义类比与全局词共现信息不可兼得?基于飞桨实现的GloVe说可以
- MyBatis-plus乐观锁插件
- Jmeter(十九) - 从入门到精通 - JMeter监听器 -上篇(详解教程)
- python---rsa加密根据指数和模生成加密参数模板
- 搞了这么多年终于知道接口和抽象类的应用场景了
- css实现页面加载动画
- 用Dota2“最强”算法PPO完成CarPole和四轴飞行器悬浮任务
- 【pyspark】广播变量のdestroy...
- Flink 参数配置和常见参数调优
- 利用InfluxDB+Grafana搭建Flink on YARN作业监控大屏