SQL学习笔记

持续更新中。。。

检索数据

检索不同的值

检索出不同的值,使用distinct,而且必须放在列的前面,作用于后面所有的列

select distinct vend_id from Products;

限制结果

使用MySQL、MariaDB、PostgreSQL或者SQLite,需要使用LIMIT子句

select prod_name from Products limit 5;

LIMIT 5指示MySQL等DBMS返回不超过5行的数据

为了得到后面的5行数据,需要指定从哪儿开始以及检索的行数,像这样:

select prod_name from Products limit 5 offset 5;

LIMIT 5 OFFSET 5指示MySQL等DBMS返回从第5行起的5行数据。第一个数字是检索的行数,第二个数字是指从哪儿开始

注意:数据库行数是从第0行开始

MySQL、MariaDB和SQLite支持简化版的LIMIT 4 OFFSET 3语句,即LIMIT3,4。使用这个语法,逗号之前的值对应OFFSET,逗号之后的值对应LIMIT

注释

单行注释使用 -- 或者 #
多行注释使用 /* */

排序检索数据

排序数据

ORDER BY子句取一个或多个列的名字,据此对输出进行排序

select prod_name from Products order by prod_name;

在指定一条ORDER BY子句时,应该保证它是SELECT语句中最后一条子句。如果它不是最后的子句,将会出现错误消息。

按多个列排序

首先按价格,然后按名称排序。

select prod_id, prod_price, prod_name from Products order by prod_price, prod_name;

对于上述例子中的输出,仅在多个行具有相同的prod_price值时才对产品按prod_name进行排序。如果prod_price列中所有的值都是唯一的,则不会按prod_name排序

按列位置排序

select prod_id, prod_price, prod_name from Products order by 2, 3;

SELECT清单中指定的是选择列的相对位置而不是列名。ORDER BY 2表示按SELECT清单中的第二个列prod_price进行排序。ORDER BY 2, 3表示先按prod_price,再按prod_name进行排序。

指定排序方向

与DESC(降序)相对的是ASC(升序)
为了进行降序排序,必须指定DESC关键字。

select prod_id, prod_price, prod_name from Products order by prod_price desc;

使用多个列排序
DESC关键字只应用到直接位于其前面的列名

select prod_id, prod_price, prod_name from Products order by prod_price desc, prod_name;

与DESC相对的是ASC,在升序排序时可以指定它

过滤数据

使用WHERE子句

在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。WHERE子句在表名(FROM子句)之后给出

select prod_name, prod_price from products where prod_price = 3.49;

在同时使用ORDER BY和WHERE子句时,应该让ORDER BY位于WHERE之后,否则将会产生错误

WHERE子句操作符
操作符说明
=等于
!=不等于
<>不等于
>大于
!>不大于
>=大于等于
<小于
!<不小于
<=小于等于
BETWEEN在指定的两个值之间
IS NULL为NULL
检查单个值

检索所有价格小于等于10美元的产品

select prod_name, prod_price from products where prod_price <= 10;

不匹配检查

WHERE子句中的条件,单引号用来限定字符串。如果将值与字符串类型的列进行比较,就需要限定引号。用来与数值列进行比较的值不用引号。

SELECT vend_id, prod_name from products where vend_id <> "DLL01"; SELECT vend_id, prod_name from products where vend_id != "DLL01";

范围值检查

要检查某个范围的值,可以使用BETWEEN操作符。其语法与其他WHERE子句的操作符稍有不同,因为它需要两个值,即范围的开始值和结束值。

检索价格在5美元和10美元之间的所有产品

SELECT prod_name, prod_price FROM products WHERE prod_price BETWEEN 5 AND 10;

在使用BETWEEN时,必须指定两个值——所需范围的低端值和高端值。这两个值必须用AND关键字分隔。BETWEEN匹配范围中所有的值,包括指定的开始值和结束值。

空值检查

在创建表时,表设计人员可以指定其中的列能否不包含值。在一个列不包含值时,称其包含空值NULL。

NULL : 无值(no value),它与字段包含0、空字符串或仅仅包含空格不同。

确定值是否为NULL,不能简单地检查是否= NULL。SELECT语句有一个特殊的WHERE子句,可用来检查具有NULL值的列。这个WHERE子句就是IS NULL子句。其语法如下:

SELECT prod_name FROM products WHERE prod_price IS NULL;

这条语句返回所有没有价格(空prod_price字段,不是价格为0)的产品,由于表中没有这样的行,所以没有返回数据

通过过滤选择不包含指定值的所有行时,你可能希望返回含NULL值的行。但是这做不到。因为未知(unknown)有特殊的含义,数据库不知道它们是否匹配,所以在进行匹配过滤或非匹配过滤时,不会返回这些结果。过滤数据时,一定要验证被过滤列中含NULL的行确实出现在返回的数据中。

高级数据过滤

组合WHERE子句
AND操作符
OR操作符
求值顺序
IN操作符
NOT操作符

用通配符进行过滤

LIKE操作符
百分号(%)通配符
下划线(_)通配符
方括号([ ])通配符
使用通配符的技巧

创建计算字段

计算字段
拼接字段
执行算术计算

使用函数处理数据

函数
使用函数
文本处理函数
日期和时间处理函数
数值处理函数

汇总数据

聚集函数
AVG()函数
COUNT()函数
MAX()函数
MIN()函数
SUM()函数
聚集不同值
组合聚集函数

分组数据

数据分组
创建分组
过滤分组
分组和排序
SELECT子句顺序

使用子查询

子查询
利用子查询进行过滤
作为计算字段使用子查询

联接表

联结
关系表
为什么使用联结
创建联结
WHERE子句的重要性
内联结
联结多个表

创建高级联结

使用表别名
使用不同类型的联结
自联结
自然联结
外联结
使用带聚集函数的联结
使用联结和联结条件

组合查询

组合查询
创建组合查询
使用UNION
UNION规则
包含或取消重复的行
对组合查询结果排序

插入数据

数据插入
插入完整的行
插入部分行
插入检索出的数据
从一个表复制到另一个表

更新和删除数据

更新数据
删除数据
更新和删除的指导原则

创建和操纵表

创建表
表创建基础
使用NULL值
指定默认值
更新表
删除表
重命名表

使用视图

视图
为什么使用视图
视图的规则和限制
创建视图
利用视图简化复杂的联结
用视图重新格式化检索出的数据
用视图过滤不想要的数据
使用视图与计算字段

使用存储过程

存储过程
为什么要使用存储过程
执行存储过程
创建存储过程

管理事务处理

事务处理
控制事务处理
使用ROLLBACK
使用COMMIT
使用保留点

使用游标

游标
使用游标
创建游标
使用游标
关闭游标

高级SQL特性

约束
主键
外键
唯一约束
检查约束
索引
触发器
数据库安全

附录C

附录D

常用SQL语句速查

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值