SQL 入门
来源:互联网 发布:暗网8级网络 编辑:程序博客网 时间:2024/05/22 03:25
了解SQL
- 数据库是一个以某种有组织的方式存储的数据集合。
- 表是某种(同一种)特定类型数据的结构化清单
- 数据库名和表名的组合可以唯一的标识一个表名。就像 C++ 中的类名加函数名。
- 表由列组成。列存储表中某部分的信息。
- 每个列都有自己的数据类型。
- 表中的数据按行存储。行是表中的一个记录。
- 主键(primary key)是表中的 一列 或 几列 的组合其值能够唯一标识表中每一行。
主键满足以下条件:
- 任何两行不能有相同主键。
- 每一行都必须有一个主键值(主键值不允许NULL列)。
- 主键列中的值不允许修改或更新。
- 主键值不能重用(如果某行被删除,他的主键不能赋给以后的新行)。
SQL 是结构化查询语言的英文缩写。
检索数据
所有表都应该有主键,这个表应该用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;
假如以上代码返回的结果如下:
使用DISTINCT关键字 SELECT DISTINCT vend_id FROM Products;
输出:
- 限制结果
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 子句。
其他逻辑符号的和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 NULLNULL 表示无值,它与字段包含0、空字符串或仅仅包含空格不同。
判断 空值 应用 IS NULL 子句。
通过过滤选择不包含指定值的所有行时,不会返回含 NULL 的行。因为未知有特殊的含义,数据库不知道他们是否匹配。
高级数据过滤
AND 操作符
SELECT prod_id, prod_price, prod_name
FROM Products
WHERE vend_id = 'DLL01' AND prod_price <= 4OR 操作符
和 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 一般比前面讨论的其他搜索付要耗费更长的时间。
- 能使用其他操作符代替时,尽量不要使用操作符。
- 确实需要使用通配符时,也不要放在搜索模式的开始处。置于开始处搜索是很慢的。
- 仔细注意通配符的位置看有没有放错。
创建计算字段
- sql 入门
- SQL 入门
- SQL入门
- SQL 入门
- SQL入门
- SQL入门
- SQL入门
- SQL入门
- SQL入门
- SQL入门
- SQL入门
- sql入门
- sql入门
- Sql入门
- SQL入门
- SQL入门
- SQL 入门
- SQL入门
- LTE-TDD随机接入过程(2)-前导码Preamble的格式与时频位置
- 165
- java泛型(一)、泛型的基本介绍和使用
- ElasticSearch--相关度背后的理论
- 整理的操作系统运行命令
- SQL 入门
- wininet进行http请求时候,当服务器端返回setcookie设置JSESSIONID就会自动设置该cookie
- 机器学习:什么是欠拟合和过拟合
- Java关于Properties用法——替换配置文件中的参数
- java-排序查找算法
- Next Permutation
- LTE-TDD随机接入过程(3)-RAR(MSG2)以及MSG1的重传
- IO流-文件的拷贝、删除
- gradle build太慢,使用ali镜像