SQL必知必会学习笔记


转行的辛酸。。。加油!

1.了解SQL

1.1.1数据库

保存有组织的数据的容器

1.1.2表

某种特定类型数据的结构化清单
存储在表中的数据是同一种类型的数据或者清单
表名是唯一的

1.1.3列和数据类型

表由列组成。列存储表中某部分的信息
列(column):表中的一个字段。所有表都是有一个或多个列组成的
数据库中每个列都有相应的数据类型。数据类型定义了列可以存储哪些数据种类。

1.1.4行

表中的数据是按行存储的,所保存的每个记录存储在自己的行内。

1.1.5主键

表中每一行都应有一列(或几列)可以唯一标识自己。

主键(primary key):一列(或一组列),其值能够唯一标识表中每一行

唯一标识表中每行的这个列(或这几列)称为主键,主键用来表示一个特定的行。没有主键,更新或删除表中特定行就极为困难

表中任何列都可以作为主键,只需要满足以下的条件:

  • 任意两行都不具有相同的主键值
  • 每一行都必须具有一个主键值(主键列不允许NULL)
  • 主键列中的值不允许修改或者更新
  • 主键值不能重用(如果某行从表中删除,它的主键不能赋值给以后的新行)

主键通常定义在表的一列上,但并不是必须这么做,也可以一起使用多列作为主键。在使用多列作为主键时,上述条件必须应用到所有列,所有列值的组合必须是唯一的(但是单个列的值可以不唯一)。

2.检索数据

2.1SELECT语句

关键字(keyword)

作为SQL组成部分的保留字。关键字不能用作表或列的名字。

2.2检索单个列

SELECT prod_name
FROM Products;

多条SQL语句必须以分好(;)分隔。SQL语句部分大小写,因此SELECT与select是相同的。

2.3检索单个列

检索多个列必须是在SELECT关键字后面给出多个列名,列名之间必须以逗号分隔。

2.4检索所有列

SELECT * FROM Products;

如果给定一个通配符(*),则返回表中所有列。

2.5检索不同的值

使用DISTINCT关键字,顾名思义,指示数据库只返回不同的值

SELECT DISTINCT vend_id FROM Products;

2.6限制结果

SELECT prod_name FROM Products LIMIT 5 OFFSET 5;

指示MYSQL返回从第5行起的5行数据,第一个数字是检索的行数,第二个数字是指从哪里开始。

3.排序检索数据

3.1排序数据

SELECT prod_name FROM Products;

为了明确地排序用SELECT语句检索出的数据,可以使用ORDER BY子句。ORDER BY子句取一个或多个列的名字,据此对输出进行排序。

ORDER BY语句应当是SELECT语句中最后一条子句。

3.2按多个列排序

要按多个列排序,简单指定列名,列名之间用逗号分开即可

下面的代码检索3个列,并按其中两个列对结果进行排序----首先按价格,然后按名称排序。

SELECT prod_id,prod_price,prod_name FROM Products ORDER BY prod_price,prod_name;

3.3 按列位置排序

SELECT prod_id,prod_price,prod_name FROM Products ORDER BY 2,3;

ORDER BY 2表示按SELECT清单中的第二列prod_price进行排序。ORDER BY 2,3表示先按prod_price,再按prod_name进行排序。

3.4指定排序方向

降序排序指定DESC关键字

SELECT prod_id,prod_price,prod_name FROM Products ORDER BY prod_price DESC ,prod_name;

DESC关键字只应用到直接位于其前面的列名。例如prod_price列以降序排列,而prod_name列(在每个价格内)仍然按标准的升序排列。

4 过滤数据

4.1使用WHERE 子句

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

SELECT prod_name,prod_price FROM Products WHERE prod_price=3.49;

这条语句从products表中检索两个列,但不返回所有行,只返回prod_price值为3.49的行。
同时使用ORDER BY和WHERE子句时,应该让ORDER BY语句位于WHERE子句之后。

4.2WHERE子句操作符

4.2.1检查单个值

SELECT prod_name ,prod_price FROM Products WHERE prod_price<=10;

4.2.2不匹配检查

SELECT vend_id,prod_name FROM Products WHERE vend_id <> 'DLL01';
SELECT vend_id,prod_name FROM Products WHERE vend_id !='DLL01';

4.2.3 范围值检查

要检查某个范围的值,可以使用BETWEEN操作符

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

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

4.2.4空值检查

一个列不包含值时,称其包含空值NULL。

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

确定值是否为NULL,使用的WHERE子句为IS NULL子句。

SELECT prod_name FROM Products WHERE prod_price IS NULL;

5.高级数据过滤

5.1组合WHERE子句

SQL允许给出多个WHERE子句,这些子句有两种方式,即以AND子句或OR子句的方式使用。

操作符(operator):
用来联结或改变WHERE子句中的子句的关键字,也称为逻辑操作符(logical operator)

5.1.1AND操作符

AND用在WHERE子句中的关键字,用来指示检索满足所有给定条件的行

SELECT prod_id,prod_price,prod_name FROM Products WHERE vend_id='DLL01' AND prod_price <= 4; 

5.1.2OR操作符

OR用在WHERE子句中使用的关键字,用来表示检索匹配任一给定条件的行

5.1.3求值顺序

在处理OR操作符前,优先处理AND操作符。

SELECT prod_name,prod_price FROM Products WHERE (vend_id='DLL01' OR vend_id='BRS01') AND prod_price >= 10;

圆括号相当于明确的分组操作符

5.2IN操作符

In操作符用来指定条件范围,范围中的每个条件都可以进行匹配

SELECT prod_name ,prod_price FROM Products WHERE vend_id IN ('DLL01','BRS01') ORDER BY prod_name;
SELECT prod_name,prod_price FROM Products WHERE vend_id='DLL01' OR 'BRS01' ORDER BY prod_name;

为什么要使用In操作符?

  • 在有很多合法选项时,IN操作符的语法更加的清除,更直观
  • 在与其他AND和OR操作符组合使用IN时,求值顺序更容易管理
  • IN操作符比一组OR操作符执行的更快
  • IN的最大的优点是可以包含其他的SELECT语句,更加动态的建立WHERE子句。

5.3NOT操作符

WHERE子句中的NOT操作符有且只有一个功能,那就是否定其后所跟的任何条件

SELECT prod_name FROM Products WHERE NOT vend_id='DLL01' ORDER BY prod_name;

这里的NOT否定跟在其后的条件,因此匹配非DLL01之外的所有东西。

等价于

SELECT prod_name FROM Products WHERE vend_id <> 'DLL01' ORDER BY prod_name;

6.用通配符进行过滤

6.1LIKE操作符

通配符搜索只能用于文本字段(字符串),非文本数据类型字段不能使用通配符搜索

6.1.1百分号(%)通配符

最常使用的通配符是百分号(%)。在搜索中,%表示任何字符出现任意次数

SELECT prod_id,prod_name FROM Products WHERE prod_name LIKE 'Fish%';

通配符可在搜索模式中的任意位置使用,且可以使用多个通配符。

SLECT prod_name ,prod_price FROM Products WHERE prod_name LIKE '%bean bag%';

%代表搜索模式中给定位置的0个、1个或多个字符。

通配符%

6.1.2下划线(_)通配符

另一个有用的通配符是下划线(_)。只能匹配单个字符,而不是多个字符。

6.1.3方括号([])通配符

方括号([])通配符来指定一个字符集,必须匹配指定位置(通配符的位置)的一个字符

8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值