SQL 入门

xiaoxiao2021-02-27  303

了解SQL

数据库是一个以某种有组织的方式存储的数据集合。表是某种(同一种)特定类型数据的结构化清单数据库名和表名的组合可以唯一的标识一个表名。就像 C++ 中的类名加函数名。表由列组成。列存储表中某部分的信息。每个列都有自己的数据类型。表中的数据按行存储。行是表中的一个记录。主键(primary key)是表中的 一列 或 几列 的组合其值能够唯一标识表中每一行。

主键满足以下条件:

任何两行不能有相同主键。每一行都必须有一个主键值(主键值不允许NULL列)。主键列中的值不允许修改或更新。主键值不能重用(如果某行被删除,他的主键不能赋给以后的新行)。

SQL 是结构化查询语言的英文缩写。

检索数据

列说明prod_id唯一的产品IDvend_id产品供应商ID(关联到Vendors表中的vend_id)prod_name产品价格prod_price产品价格prod_desc产品描述

所有表都应该有主键,这个表应该用prod_id作为其主键。

SELECT 语句。

用途:从一个或多个表中检索信息。

检索单个列。 SELECT prod_name FROM Products; 上述语句利用 SELECT 语句 从 Products 表中检索一个名为prod_name的列。所需的列名写在 SELECT 关键字之后。FROM 关键字指出从哪个表中检索数据。*

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

SQL 关键字不区分大小写。

检索多个列。 SELECT prod_id, prod_name, prod_price from Products;

SQL 语句一般返回原始的、无格式的数据。数据的格式化是表示问题,> 而不是检索问题。

检索所有列。 SELECT * FROM Products;

通配符 * 表示返回表中所有列。一般使用 * 会降低检索和应用程序的性> 能。

DISTINCT 关键字 SELECT vend_id FROM Products; 假如以上代码返回的结果如下:

vend_idBRS01BRS01BRS01DLL01DLL01DLL01DLL01FNG01FNG01

使用DISTINCT关键字 SELECT DISTINCT vend_id FROM Products; 输出:

vend_idBRS01DLL01FNG01 限制结果 SELECT prod_name FROM Products LIMIT 4 OFFSET 3 返回第 3 行起的 4 行数据,如果最后不足 5 行则返回到结尾为止。第一个被检索的行是第 0 行,而不是第一行。上述语句在 mysql 中可被简化为 SELECT prod_name FROM Products LIMIT 3, 4注释

SELECT prod_name --这是一条注释 FROM Products;

/*这也是 注释*/ SELECT prod_name FROM Products;

排序检索数据

排序数据 SELECT prod_name from Products ORDER BY prod_name

将检索结果按 prod_name 的顺序排列。

ORDER BY 应保证在 SELECT 语句中最后出现,否则会出现错误消息。

ORDER BY 的列不一定要是被显示的列。

多重排序 SELECT prod_id, prod_price, prod_name from Products ORDER BY prod_price, prod_name

先按 prod_price 排, 再按 prod_name 排。

多重排序简写 SELECT prod_id, prod_price, prod_name from Products ORDER BY 2, 3

按 SELECT 返回的第 2、3行排列。注意:当根据不出现在 SELECT 清单中的列进行排序时,不能采用这项技术。

指定排序方向 SELECT prod_name from Products ORDER BY prod_price DESC, prod_name ASC --ASC可以不写ASC 与 DESC 相对,ASC为默认顺序。

过滤数据

使用 WHERE 字句 SELECT prod_name, prod_price FROM Products WHERE prod_price = 3.49

返回 Products 表中 prod_price 值为 3.49 的 prod_name, prod_price 列。

先写 WHERE 子句,再写 ORDER BY 子句。

操作符说明=等于<>不等于!< 和 !=不小于!>不大于BETWEEN在指定的两个值之间IS NULL为 NULL 值

其他逻辑符号的和C语言一样

检查单个值 SELECT prod_name, prod_price FROM Products WHERE prod_price < 10不匹配检查 SELECT vend_id, prod_name FROM Products WHERE vend_id <> 'DLL01' 单引号来限定字符串。

范围值检查 SELECT prod_name, prod_price FROM Products WHERE prod_price BETWEEN 5 AND 10 返回 prod_price 在 5 和 10 之间的 prod_name, prod_price。

不同的数据库对 BETWEEN…AND 操作符的处理方式是有差异的。某些数据库会列出介于 5和 10 之间的数据,但不包括 5 和 10 ;某些数据库会列出介于 5 和 10 之间并包括 5 和 10 的人;而另一些数据库会列出介于 5 和 10 之间的人,包括 5 ,但不包括 10 。 所以,请检查你的数据库是如何处理 BETWEEN….AND 操作符的!

空值检查 SELECT prod_name FROM Products WHERE prod_price IS NULL

NULL 表示无值,它与字段包含0、空字符串或仅仅包含空格不同。 判断 空值 应用 IS NULL 子句。

通过过滤选择不包含指定值的所有行时,不会返回含 NULL 的行。因为未知有特殊的含义,数据库不知道他们是否匹配。

高级数据过滤

AND 操作符 SELECT prod_id, prod_price, prod_name FROM Products WHERE vend_id = 'DLL01' AND prod_price <= 4

OR 操作符 和 AND 操作符用法一样。

IN 操作符 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 一般比 OR 执行得更快

优先级 并不是简单的从左到右执行,AND 的优先级高于 OR,默认先执行 AND(即使 OR 在前面),如果要先执行 OR,就要加括号。

NOT 操作符 否定跟在其后的条件。

SELEVCT prod_name FROM Products WHERE NOT vend_id = 'DLL01' ORDER BY prod_name 等价于 SELEVCT prod_name FROM Products WHERE vend_id <> 'DLL01' ORDER BY prod_name

使用通配符进行过滤

LIKE 操作符 当作为谓词(predicate)时,LIKE是谓词而不是操作符通配符搜索只能用于文本字段(字符串),非文本数据类型字段不能使用通配符搜索。百分号(%):表示任何字符出现任意次数(0次也可以)。 SELECT prod_id, prod_name FROM Products WHERE prod_name LIKE 'Fish%';字符串区分大小写,’Fish’ 不同于 ‘fish’。% 不会匹配值为 NULL 的行。

下划线(_)通配符

只匹配一个字符,其他用法和 % 一样。

方括号([ ])通配符

用于指定一个字符集,必须匹配指定位置的一个字符。 SELECT cust_contact FROM Customers Where cust_contact LIKE '[JM]%' ORDER BY cust_contact 上述 SQL 语句匹配了 J 或 M 开头的值。使用 SQL 一般比前面讨论的其他搜索付要耗费更长的时间。 能使用其他操作符代替时,尽量不要使用操作符。确实需要使用通配符时,也不要放在搜索模式的开始处。置于开始处搜索是很慢的。仔细注意通配符的位置看有没有放错。

创建计算字段

转载请注明原文地址: https://www.6miu.com/read-1748.html

最新回复(0)