SQL 入门

来源:互联网 发布:暗网8级网络 编辑:程序博客网 时间:2024/05/22 03:25

了解SQL

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

    1. 任何两行不能有相同主键。
    2. 每一行都必须有一个主键值(主键值不允许NULL列)。
    3. 主键列中的值不允许修改或更新。
    4. 主键值不能重用(如果某行被删除,他的主键不能赋给以后的新行)。
  • SQL 是结构化查询语言的英文缩写。

检索数据

列 说明 prod_id 唯一的产品ID vend_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_id BRS01 BRS01 BRS01 DLL01 DLL01 DLL01 DLL01 FNG01 FNG01

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

vend_id BRS01 DLL01 FNG01
  • 限制结果
    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 一般比前面讨论的其他搜索付要耗费更长的时间。
    • 能使用其他操作符代替时,尽量不要使用操作符。
    • 确实需要使用通配符时,也不要放在搜索模式的开始处。置于开始处搜索是很慢的。
    • 仔细注意通配符的位置看有没有放错。

创建计算字段

0 0
原创粉丝点击