后端开发技能学习(六)sql命令学习(上篇)
1.数据库基础
数据库:保存有组织的数据的容器
表:某种特定类型数据的结构化清单
列:表中的一个字段。所有表都是由一个或多个列组成的
行:表中的一条记录
主键:一列(或一组列),其值能够唯一区分表中的每个行,主键需满足:1.任意两行都不具有相同的主键值 2.每个行都必须具有一个主键值(不能为null)
sql:结构化查询语言,用来与数据库通信
2.检索
要执行检索,首先得有一个表。而手动去创建表有点费时费力,所以这里我们导入一些测试用表下载地址
解压后导入mysql中:
source d:/create.sql # 导入
可以看到我们导入的表:
一般的检索语句:
SELECT prod_name FROM products; # 检索单列
SELECT prod_id,prod_name,prod_price FROM products; # 检索多列
SELECT * FROM products; # 检索所有列
SELECT DISTINCT vend_id FROM products; # 检索结果不重复
SELECT prod_id FROM products LIMIT 5; # 只显示前面5行 (行数不够时只显示最大行数)
SELECT prod_id FROM products LIMIT 5,5; # 只显示5-10行
SELECT products.prod_name FROM products; # 等同于第一句,使用了完全限定的表名
3.排序检索
一般来说,不加以排序的数据会根据添加到表中的顺序来显示。但是为了明确的排序检索出的数据,可使用ORDER BY子句,常见用法如下:
SELECT prod_name FROM products ORDER BY prod_id; # 升序排序(按ascll码的顺序)
SELECT prod_name FROM products ORDER BY prod_price,prod_name; # 多列排序
SELECT prod_name FROM products ORDER BY prod_id DESC; # 降序排序(按ascll码的顺序)
SELECT prod_name FROM products ORDER BY prod_price DESC,prod_name; # 分别升降序排序
SELECT prod_name FROM products ORDER BY prod_id LIMIT 1; # 只显示最大值
4.过滤
4.1 where子句过滤
where确定一个列是否包含特定的值,支持如下运算符:
常见用法:
SELECT prod_name FROM products WHERE prod_price>=10; # 检测单个值
SELECT prod_name FROM products WHERE prod_id<>'ANV01' # <>表示不等于
SELECT prod_name,prod_price FROM products WHERE prod_price BETWEEN 10 AND 20; # 用between and来表示在中间
SELECT prod_id FROM products WHERE prod_id IS NOT NULL; # 判断是否空值
SELECT prod_id FROM products WHERE vend_id IN (1002,1003); # 用IN来过滤
4.2 通配符过滤
LIKE操作符能根据部分字符来进行过滤,直接举例吧:
SELECT prod_id FROM products WHERE prod_id LIKE 'ANV%'; # 用%符号匹配任意字符串
SELECT prod_id FROM products WHERE prod_id LIKE 'ANV0_'; # 用_符号匹配任意单个字符
注意:
- 不要过度使用通配符,尽量使用其他操作代替。
- 最好不要将通配符用于搜索的开始处,这样最慢
5.用正则表达式进行搜索
在mysql中仅支持正则表达式实现的一个很小的子集,本章将覆盖该子集的大多数内容。
基本字符匹配:
SELECT prod_id FROM products WHERE prod_id REGEXP 'A'; # regexp 关键字匹配带有A字符的结果
由于正则表达式的内容极为丰富,所以关于更多正则表达式的学习,请关注我后续的文章,我会专门来学习一下。。。