文档章节

SQL总结

bithup
 bithup
发布于 2017/12/13 19:26
字数 1691
阅读 21
收藏 0

概要

SQL的增删改查操作的对象是数据库表中的记录
SQL语句的要素:

  • 一是指明具体操作的关键字,insert、delete、update、select;
  • 二是表名,缩小目标记录的范围;
  • 三是条件表达式,对表中记录进行筛选,还可以对筛选出的结果进一步筛选;
  • 四是操作的具体内容,查询和删除不需要指明操作内容,插入和更新需要指明具体的列名和值。

SQL增删改查的重点在于使用条件表达式对记录进行筛选
增删改查四种操作:

  • 按是否对数据库数据有影响,可以分为查和增删改
  • 按操作的记录是已经存在或不存在的,可以分为插入和删改查
  • 按操作表的数量可以分为单表操作和多表操作

条件表达式对插入操作并不适用:insert语句操作的不是已经存在的记录,所有不需要对记录进行筛选的条件表达式,所以insert语句不能带where子句,insert语句可以结合IF、ELSE、NOT等结构实现条件插入。

该总结以MySQL为准,不同数据库系统之间存在差异

 

四种基本操作(单表不带条件)

select语句
select  列名,列名  from 表名
select  列名 as 别名 from 表名
select  *  from 表名
select distinct 列名 from 表名

insert语句
insert  into  表名  values  (值,值......)
insert  into  表名  (列名,列名......)  values  (值,值......)

update语句
update  表名 set  列名=值 ,列名=值

delete语句
delete  from  表名

 

注:多个列名或值用逗号隔开,insert语句需要用括号包裹

 

运算符与表达式

比较运算符
=  
<=> 用于判断NULL,例如:select NULL<=>NULL
<> 或 != 不能判断NULL,建议使用前者
<  
>  
<=  
>=  
IS NULL 或 ISNULL 是NULL返回1
IS NOT NULL  
LEAST 返回最小值,格式 LEAST(val,val,......)
GREATEST  
BETWEEN AND  
IN 判断某个值是否在某个列表中
NOT IN  
LIKE  
REGEXP 正则
逻辑运算符
NOT 或 ! NOT NULL 返回 NULL
AND 或 && 有0返回0,有NULL无0,返回NULL,其他返回1
OR 或 || 有1返回1,有NULL无1,返回NULL,其他返回0
XOR 异或,有NULL返回NULL,一0一1返回1,其他0
算术运算符
+
-
*
/
% 求余
位运算符
&
|
~
^ 异或
<< 左移
>> 右移

注:=、<、>都不能用于比较NULL,应该使用IS NULL等进行判断 ;表达式比较之后的返回值是1或0,而非true或false

MySQL中的通配符、正则表达式

1.正则

2.通配符必须与like一起使用

%  替代一个或多个字符

_  仅替代一个字符

[charlist]  字符列中的任何单一字符

[^charlist]或[!charlist]  不在字符列中的任何单一字符

SQL子句以及执行顺序

WHERE

where后面的表达式格式:列名 + 操作符 + 值 ;多个表达式可以使用AND和OR以及()表达更加复杂的逻辑。

GROUP BY 与 合计函数

 按一个或多个字段分组,多个字段用逗号隔开,一般与合计函数结合使用;合计函数和group by子句并不互相依赖,都可以单独使用,但是只分组不进行合计或其他操作没有什么实际意义。

HAVING

where后面无法使用合计函数,所以引入having子句;where和having子句都可以单独使用,也可以同时使用。先分组,然后合计,然后having判断。

ORDER BY

用于排序,指明升序用ASC ,降序用DESC,默认是升序;格式:order by 列名 ASC , 列名 DESC

LIMIT

通过索引和数量筛选记录,limit子句接收一个或两个参数,第一个表示偏移量,第二个表示从第一个参数开始之后的记录条数,偏移量是从0开始不是1。

执行顺序

select语句的书写顺序是固定的

<SELECT clause> 

[<FROM clause>] 

[<WHERE clause>]

[<GROUP BY clause>] 

[<HAVING clause>]

[<ORDER BY clause>] 

[<LIMIT clause>]

执行顺序为:FROM子句->WHERE子句->GROUP BY子句->HAVING子句->ORDER BY子句->SELECT子句->LIMIT子句->

  每个子句执行后都会产生一个中间结果,供接下来的子句使用。执行select的时候还可能会有聚合函数,DISTINCT字句等 ;

  在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用(聚合函数是针对结果集进行的,但是where条件并不是在查询出结果集之后运行,所以主函数放在where语句中,会出现错误)。

参考博客

MySQL常用系统函数

判断与比较函数

  • isnull()
  • max()/min()  [字符串日期也能比较]

字符串的函数

  • left(字段名,位数)
  • concat()函数
  • length()和char_length()函数,前者返回字节数,后者返回字符数
  • substring(str,m,n)
  • find_in_set(字符串,列名)查找某个字段中包含给定字符串的记录

日期的函数

  • curtime() [当前时间,返回类型为]

聚合函数:SQL基本函数,聚合函数对一组值执行计算,并返回单个值。除了 COUNT 以外,聚合函数都会忽略空值。 聚合函数经常与 SELECT 语句的 GROUP BY 子句一起使用。

  • AVG
  • COUNT [count(*)速度慢]
  • MIN/MAX
  • SUM
  • GROUP_CONCAT

多表联合操作

JOIN

/*user表id是主键,order表u_id关联user表id*/
select user.xxx,order.xxx from user,order where user.id=order.u_id;

INNER JOIN(和JOIN是相同的)

/*使用on关键字*/
select user.xxx,order.xxx from user inner join order on user.id=order.u_id;

LEFT JOIN

从左表那里返回所有的行,即使在右表中没有匹配的行

RIGHT JOIN

和left join相反,如果交换左右表的位置可以达到同样的效果

FULL JOIN

left join和right join的并集

UNION

对两个查询语句的结果集进行纵向合并,要求两个结果集字段的数据类型,顺序都是相同的。

union不允许重复记录,union all可以重复

ON和USING

/*使用on关键字*/
select user.xxx,order.xxx from user inner join order on user.id=order.u_id;

/*如果order表和user表中关联字段的字段名相同,都是xxx,可以使用using简化*/
select user.xxx,order.xxx from user inner join order on using(xxx);

子查询

--创建临时表
select * from (select * from tb_demo) as tb_temp where 

--重复的记录只返回一条
select distinct * from tb_demo;

--某个字段相同的记录只返回一条
select distinct 字段名 from tb_demo;

http://www.jb51.net/article/48994.htm

存储过程

索引

触发器

游标

视图

SQL编程

SQL自定义函数

流程控制

if(expr1,expr2,expr3)实现0、1与男、女的转换

case...when...then...else...end 实现if表达式

ifnull(expr1,expr2) 参考

if else 流程控制

© 著作权归作者所有

上一篇: Java IO与NIO总结
下一篇: ajax跨域访问笔记
bithup
粉丝 8
博文 101
码字总数 82172
作品 0
朝阳
程序员
私信 提问
MongoDB查询总结

MongoDB查询总结 MongoDB查询总结 介绍 普通查询 聚合查询 Map-Reduce 示例说明 总结 相关资料 介绍 前面写过一篇关于Mongodb的例子——浅谈MongoDB数据库,当时使用的只是简单的查询,然后后...

流水不腐小夏
2017/10/25
0
0
mybatis中${}和#{}的区别

在mybatis中的编写xml文件时 我们经常遇到参数的传入 总结一下${}和#{}的区别: 1.#{} 有效的防止sql注入 #{} 直接传入的是你参数值 不会加上"" 2.${} order by 排序是 必须使用${} 例如: ord...

技术小牛人
2017/11/06
0
0
SQL 常用优化手段总结 - 索引的使用误区

回顾上一章索引的应用的内容,除了介绍了基本的使用索引优化 sql 语句的基本手法以外,还提到了滥用索引会引起性能恶化的问题。本章节的内容将会举例说明哪些场景的索引属于滥用,以及如何避...

给你添麻烦了
2018/01/10
0
0
mybatis学习笔记(1)-对原生jdbc程序中的问题总结

mybatis学习笔记(1)-对原生jdbc程序中的问题总结 标签:mybatis [TOC] 本文总结jdbc编程的一般步骤,总结这样编程存在的问题,并附上典型地jdbc示例demo jdbc编程步骤 加载数据库驱动 创建并...

brianway
2016/02/27
351
0
你能看懂我的总结吗,求改进总结中的语句,拯救我的总结无能吧。。

以上是我测试单引号在SQL中显示的语句,我是这么总结的: /*总结: *1.在SQL中,'可以使用两个'来表达; *2.使用q-quoet特性:Q'{***}',***是所要输入的内容,如果其中包含单引号,那么单句执...

末日花都
2016/11/23
167
0

没有更多内容

加载失败,请刷新页面

加载更多

VMware vSphere ESXi主机的访问控制

在vShpere中,访问ESXi主机的途径很多,如下: ESXi DCUI ESXi Shell ESXi SSH ESXi Host Client vCenter --> vSphere web client / vSphere Client VMware vSphere ESXi主机的访问控制,除了......

大别阿郎
37分钟前
4
0
大神讲解CGI、FastCGI和PHP-FPM关系图解

参考资料 概念了解:CGI,FastCGI,PHP-CGI与PHP-FPM:http://www.nowamagic.net/librarys/veda/detail/1319 php中fastcgi和php-fpm是什么东西:https://www.zybuluo.com/phper/note/50231 ......

网络小虾米
46分钟前
4
0
《DNS攻击防范科普系列3》 -如何保障 DNS 操作安全

引言 前两讲我们介绍了 DNS 相关的攻击类型,以及针对 DDoS 攻击的防范措施。这些都是更底层的知识,有同学就来问能否讲讲和我们的日常操作相关的知识点,今天我们就来说说和我们日常 DNS 操...

Mr_zebra
47分钟前
4
0
zk中ServerCnxn

实现接口Stats, Watcher 内部类 DisconnectReason CloseRequestException EndOfStreamException(流关闭) 属性 方法 getSessionTimeout 获取session失效时间 sendResponse 发送回复数据 se......

writeademo
52分钟前
4
0
如何将 Redis 用于微服务通信的事件存储

来源:Redislabs 作者:Martin Forstner 翻译:Kevin (公众号:中间件小哥) 以我的经验,将某些应用拆分成更小的、松耦合的、可协同工作的独立逻辑业务服务会更易于构建和维护。这些服务(也...

中间件小哥
55分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部