SQL必知必会学习笔记(1~6)

第一课 了解SQL

1.1数据库基础

数据库:保存有组织的数据的容器(通常是一个文件或一组文件)。

表:某种特定类型数据的结构化清单

列:表中的一个字段。所有表都是由一个或多个列组成的。

数据类型:所允许的数据的类型。每个表都有相应的数据类型,它限制(或允许)该列中存储的数据。

行:表中的一个记录。

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

​ 表中的任何列都可以作为主键,只要满足:

​ 任意两行都不具有相同主键值;

​ 每一行都必须有一个主键值;

主键列中的值不允许修改或更新;

主键值不能重用(如果某行从表中删除,他的主键不能赋给以后的新行)。

可以一起使用多个列作为主键,使用多列作为主键时,上述条件必须应用到所有列,所有列值的组合必须是唯一的(但单个列的值可以不唯一)

1.2什么是SQL

SQL是Structured Query Language(结构化查询语言)的缩写,是一种专门用来与数据库沟通的语言。

第二课 检索数据

2.1SELECT语句

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

2.2检索单个列

例:SELECT prod_name

​ From Products;

利用SELECT语句从Products表中检索名为prod_name的列。

如果没有明确排序查询结果,返回的数据没有特定的顺序。

2.3检索多个列

列名间加逗号

例:

SELECT prod_name, prod_id

From Products;

2.4检索所有列

使用通配符 * 代表检索所有

2.5检索不同的值

使用DISTINCT关键字,它指示数据库只返回不同的值

例:SELECT DISTINCT vend_id

FROM Products;

如果使用DISTINCT关键字,必须直接放到列名前面。

DISTINCT作用于所有列,若指令多列只有多个列的值完全相同才不会被检索,若不完全相同,则会被检索出来。

2.6限制结果

SQL server和Access中:使用TOP关键字来限制最多返回多少行

例:

SELECT TOP 5 prod_name

FROM Products;

DB2中

例:

SELECT prod_name

FROM Products

FETCH FIRST 5 ROWS ONLY;

Oracle:需要基于ROWNUM(行计数器)来计算行

例:

SELECT prod_name

FROM Products

WHERE ROWNUM <= 5;

MySQL、MariaDB、PostgreSQL、SQLite:使用LIMIT子句

例:

SELECT prod_name

FROM Products

LIMIT 5;

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

例:

SELECT prod_name

FROM Products

LIMIT 5 OFFSET 5;

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

注意:第一个被检索的是第0行,而不是第1行,即LIMIT 1 OFFSET 1将会从第二行开始检索。

例:LIMIT 4 OFFSET 3 可以进行简化为 LIMIT 3, 4 前面的值对应OFFSET,逗号后面的值对应LIMIT。

2.7使用注释

–(两个连字符)行内注释

# 行内注释(很少得到支持),一行的开始处使用#,一整行都将作为注释

/* */ 多行注释

第三课 排序检索数据

3.1排序数据

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

例:

SELECT prod_name

FROM Products

ORDER BY prod_name;

**注意:**在指定ORDER BY子句时,必须保证它是SELECT语句中最后一条子句。

可以使用非检索列进行排序。

3.2按多个列排序

例:

SELECT prod_id, prod_price, prod_name

FROM Products

ORDER BY prod_price, prod_name;

按规定顺序进行排序,即如果prod_price相等时,再对prod_name进行排序。

3.3按列位置进行排序

例:

SELECT prod_id, prod_price, prod_name

FROM Products

ORDER BY 2, 3;

按非选择列排序时,可以混合使用实际列名和相对列位置。

3.4指定排序方向

默认升序 ASC

降序 DESC

例:

SELECT prod_id, prod_price, prod_name

FROM Products

ORDER BY prod_price DESC;

多个列排序时:

例:

SELECT prod_id, prod_price, prod_name

FROM Products

ORDER BY prod_price DESC, prod_name;

DESC只应用于直接位于其前面的列名。若想在多个列上进行降序升序,必须对每一列指定DESC关键字。

提示:区分大小写和排序顺序

​ 在字典(dictionary)排序顺序中,A被视为和a相同,这是大多数数据库管理系统的默认行为。

第四课 过滤数据

4.1使用WHERE语句

只检索所需数据需要指定搜索条件,搜索条件也称为过滤条件。

例:

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子句操作符

操作符说明
=等于
!=不等于
<小于
<=小于等于
!<不小于
>大于
>=大于等于
!>不大于
BETWEEN在两个指定值之间(包括开始值和结束值)
IS NULL为NULL值

使用单引号限定字符串,如果将值和字符串类型的列进行比较,就需要限定引号。

第五课 高级数据过滤

5.1组合WHERE子句

为了进行更强的过滤方式,SQL允许给出多个WHERE子句。这些子句有两种使用方式,即以AND子句或OR子句的方式使用。

**SQL在处理OR操作符前,优先处理AND操作符。**此问题的解决方法是使用圆括号对操作符明确分组。

5.2IN操作符

IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。IN取一组由逗号分隔、括在圆括号中的合法值。

例:检索由供应商DLL01和BRS01制造的所有产品

SELECT prod_name, prod_price

FROM Products

WHERE vend_id IN ('DLL01', 'BRS01');

--等同于

SELECT prod_name, prod_price

FROM Products

WHERE vend_id = 'DLL01' OR vend_id = 'BRS01');

IN操作符优点

​ 在有很多合法选项时,IN操作符的语法更清楚,更直观;

​ 在与其他AND和OR操作符组合使用IN时,求值顺序更容易管理;

​ IN操作符一般比一组OR操作符执行得更快;

​ IN的最大优点是可以包含其他的SELECT语句,能够更动态的建立WHERE子句。

5.3NOT操作符

NOT操作符有且仅有一个功能,那就是否定其后所跟的任何条件。NOT从不单独使用,所以它的语法和其他操作符有所不同。NOT关键字可以用在要过滤的列前。

例:列出除供应商DLL01之外的所有供应商制造的产品

SELECT prod_name

FROM Products

WHERE NOT vend_id = 'DLL01';

NOT优点:在更复杂子句中,NOT非常有用。例如,在与IN操作符联合使用时,NOT可以非常简单的找出与条件列表不匹配的行。

第六课 用通配符进行过滤

6.1LIKE操作符

通配符:用来匹配值的一部分的特殊字符。

通配符本身实际上是SQL的WHERE子句中有特殊含义的字符,SQL支持几种通配符。为在搜索子句中使用通配符,必须使用LIKE操作符。

6.1.1百分号(%)通配符

在搜索串中,%表示任何字符出现任意次数。

例:找出所有以词Fish起头的产品

SELECT prod_id, prod_name

FROM Products

WHERE prod_name LIKE 'Fish%';

如果使用的是Microsoft Access,需要使用*而不是%。

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

例如,搜索模式’%bean bag%‘表示匹配任何位置上半酣文本bean bag的值。'F%y’表示找出以F起头,y结尾的商品。

注意:除了能匹配一个或多个字符外,%还能匹配0个字符。

6.1.2下划线(_)通配符

下划线的用途与%一样,单只匹配单个字符。

注意:DB2不支持通配符_。如果使用的是Microsoft Access,需要使用?而不是_。

6.1.3方括号([ ])通配符

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

注意:只有微软的Access和SQL server支持集合。

例:找出所有名字以J或M起头的联系人

SELECT cust_contact

FROM Customers

WHERE cust_contact LIKE '[JM]%';

[JM]匹配方括号中任意一个字符,它也只能匹配单个字符。

此通配符可以用^来否定,例如’[JM]%’,表示查找除J和M开头的联系人。(如使用的是Microsoft Access,需要使用!而不是^来否定一个集合)

6.2使用通配符的技巧

1)不要过度使用通配符,如果其他操作符能达到相同目的,应使用其他操作符。

2)在确实需要使用通配符时,也尽量不要把他们用在搜索模式的开始处。把通配符置于开始处,搜索起来是最慢的。

3)仔细注意通配符的位置。如果放错地方,可能会返回不想要的数据。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值