前军教程网

中小站长与DIV+CSS网页布局开发技术人员的首选CSS学习平台

《MySQL必知必会》_笔记02

第4章 检索数据

一、SELECT语句基础

  1. 基本作用与语法
    • SELECT是SQL中用于从一个或多个表检索信息的常用语句。
    • 使用时需明确指定要选择的内容及数据来源表,如:SELECT prod_name FROM products;。
  1. 语句书写规范
    • SQL语句不区分大小写,但习惯上关键字大写,列和表名小写。
    • 多条SQL语句以分号分隔,MySQL中单行语句分号可省略,但建议加上。
    • 语句中的空格会被忽略,可将长语句分行书写以提高可读性。

二、检索不同数据形式

  1. 检索单个列
    • 格式:SELECT 列名 FROM 表名;,如SELECT prod_name FROM products; 。
    • 特点:返回数据顺序不确定,若未排序则无特殊意义。
  1. 检索多个列
    • 格式:SELECT 列名1,列名2,... FROM 表名;,列名间用逗号分隔,最后一列后不加逗号。
    • 示例:SELECT prod_id,prod_name,prod_price FROM products;
  1. 检索所有列
    • 格式:SELECT * FROM 表名;,如SELECT * FROM products; 。
    • 注意:尽量少用,避免检索不必要列影响性能,但可用于未知列名情况。
  1. 检索不同的行
    • 格式:SELECT DISTINCT 列名 FROM 表名;,如SELECT DISTINCT vend_id FROM products; 。
    • 注意:DISTINCT作用于所有列,而非仅前置列。

三、限制和格式化检索结果

  1. 限制结果数量
    • 格式:SELECT 列名 FROM 表名 LIMIT [起始行,]返回行数;,起始行从0开始计数。
    • 示例:SELECT prod_name FROM products LIMIT 5; 返回前5行;SELECT prod_name FROM products LIMIT 5,5; 从第5行开始返回5行。
  1. 使用完全限定的表名
    • 格式:SELECT 表名.列名 FROM 表名; 或 SELECT 数据库名.表名.列名 FROM 数据库名.表名;。
    • 示例:SELECT products.prod_name FROM products; 、SELECT crashcourse.products.prod_name FROM crashcourse.products;

四、小结

  1. 重点内容回顾:掌握SELECT语句检索各类数据的方法,包括单列、多列、所有列、不同行及限制结果数量。
  2. 后续学习方向:下一章将学习对检索数据进行排序的方法,进一步完善数据查询技能。

第5章 排序检索数据

一、排序数据的基本概念

  1. 未排序数据的缺陷:SELECT语句若不排序,数据显示顺序不确定,依赖于表内存储顺序,更新删除操作会改变该顺序,其顺序在多数情况下无意义。
  2. ORDER BY子句功能:用于对SELECT检索的数据排序,可按指定列或多列排序,让数据按特定规则呈现。

二、ORDER BY子句的使用方法

  1. 单列排序:在ORDER BY后指定列名,如SELECT prod_name FROM products ORDER BY prod_name;,将按该列内容排序。
  2. 非选择列排序:ORDER BY的列可不显示在SELECT中,如SELECT prod_id, prod_price FROM products ORDER BY vend_id; ,按vend_id列排序但结果不展示该列。
  3. 多列排序:在ORDER BY中用逗号分隔多个列名,如SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_price,prod_name; ,先按prod_price排序,相同价格再按prod_name排序。

三、指定排序方向

  1. 升序降序:默认升序,使用DESC关键字可实现降序,如SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_price DESC; 按价格从高到低排。
  2. 多列不同排序方向:为各列分别指定排序方向,如SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_price DESC,prod_name; ,价格降序,同价时产品名升序。
  3. 大小写与排序:MySQL默认对文本排序不区分大小写,特定需求下需数据库管理员调整设置来实现区分大小写排序 。

四、ORDER BY和LIMIT的组合运用

  1. 获取最值:结合ORDER BY和LIMIT能获取列的最值,如SELECT prod_price FROM products ORDER BY prod_price DESC LIMIT 1; ,可得到产品最高价格。
  2. 子句顺序:ORDER BY在FROM后,若用LIMIT ,LIMIT应在ORDER BY后,顺序错误会报错。

五、小结

  1. 理论要点:重点学习了ORDER BY子句排序数据的多种方式,包括单列、多列排序及排序方向设定,还有与LIMIT组合的用法和子句顺序。
  2. 实战总结
    • 建表与插入数据
-- 创建商品表
CREATE TABLE products (
    prod_id INT,
    prod_name VARCHAR(255),
    prod_price DECIMAL(10, 2),
    vend_id INT
);
-- 插入数据
INSERT INTO products (prod_id, prod_name, prod_price, vend_id)
VALUES
(1, '笔记本电脑', 5000.00, 101),
(2, '鼠标', 50.00, 102),
(3, '键盘', 80.00, 102),
(4, '耳机', 150.00, 103);
- **实战应用**:在实际场景中,比如电商网站商品展示。
    - **按价格从低到高展示商品信息**:使用以下SQL语句,可将商品按照价格由低到高的顺序展示出来,方便用户快速找到价格较为便宜的商品。
SELECT prod_id, prod_name, prod_price FROM products ORDER BY prod_price;
    - **获取价格最高的商品**:执行这条SQL语句,能从商品表中筛选出价格最高的商品,可用于展示热门或高端商品。
SELECT prod_id, prod_name, prod_price FROM products ORDER BY prod_price DESC LIMIT 1;
    - **先按供应商ID升序,同供应商下按价格降序展示商品**:通过这条SQL语句,在展示商品时先按供应商ID进行升序排列,对于来自同一供应商的商品,再按照价格进行降序排列,便于用户对比同一供应商的不同价格商品。
SELECT prod_id, prod_name, prod_price, vend_id FROM products ORDER BY vend_id, prod_price DESC;

第6章 过滤数据

一、过滤数据的重要性

在实际的数据查询中,往往不需要获取表中的所有数据,而是需要根据特定的条件筛选出符合要求的数据。使用 WHERE 子句可以实现这一目的,它能让 SELECT 语句仅返回满足指定条件的行,从而使查询结果更精准、更有针对性。

二、WHERE 子句的基本使用

1. 位置与作用

WHERE 子句紧跟在表名(FROM 子句)之后,用于对查询结果进行过滤。例如 SELECT prod_name, prod_price FROM products WHERE prod_price = 2.50; ,此语句从 products 表中查询出价格为 2.50 的产品名称和价格。

2. WHERE 与 ORDER BY 的顺序

在同时使用 WHERE 子句和 ORDER BY 子句时,WHERE 子句必须位于 ORDER BY 子句之前。若顺序错误,如先写 ORDER BY 再写 WHERE,会导致 SQL 语句执行出错。

三、WHERE 子句的操作符

1. 等于(=)

用于判断某列的值是否等于指定值。如 SELECT prod_name FROM products WHERE vend_id = 1003; ,会返回供应商 ID 为 1003 的所有产品名称。

2. 不等于(<> 和 !=)

在 MySQL 中,<> 和 != 都可用于表示不等于。例如 SELECT prod_name FROM products WHERE vend_id != 1003; ,会返回供应商 ID 不为 1003 的产品名称。

3. 小于(<)、小于等于(<=)、大于(>)、大于等于(>=)

这些操作符用于比较列值与指定值的大小关系。如 SELECT prod_name, prod_price FROM products WHERE prod_price < 10; ,会返回价格小于 10 的产品名称和价格。

4. BETWEEN

用于判断列值是否在指定的两个值之间(包含边界值)。例如 SELECT prod_name, prod_price FROM products WHERE prod_price BETWEEN 5 AND 10; ,会返回价格在 5 到 10 之间(包括 5 和 10)的产品名称和价格。

5. IS NULL

用于查找某列值为 NULL 的行。如 SELECT cust_id FROM customers WHERE cust_email IS NULL; ,会返回客户邮箱为空的客户 ID。

四、小结

1. 理论要点

本章重点介绍了使用 WHERE 子句过滤数据的方法,包括 WHERE 子句的位置、与 ORDER BY 子句的顺序关系,以及各种比较操作符(=、<>、!=、<、<=、>、>=、BETWEEN、IS NULL)的使用,这些操作符能帮助我们根据不同的条件精确筛选出所需的数据。

2. 实战总结

建表与插入数据

-- 创建商品表
CREATE TABLE products (
    prod_id INT,
    prod_name VARCHAR(255),
    prod_price DECIMAL(10, 2),
    vend_id INT
);
-- 插入数据
INSERT INTO products (prod_id, prod_name, prod_price, vend_id)
VALUES
(1, '苹果手机', 5000.00, 101),
(2, '安卓手机', 2500.00, 102),
(3, '平板电脑', 1800.00, 102),
(4, '智能手表', 800.00, 103);

-- 创建客户表
CREATE TABLE customers (
    cust_id INT,
    cust_name VARCHAR(255),
    cust_email VARCHAR(255)
);
-- 插入数据
INSERT INTO customers (cust_id, cust_name, cust_email)
VALUES
(1, '张三', 'zhangsan@example.com'),
(2, '李四', NULL),
(3, '王五', 'wangwu@example.com');

实战应用

  • 查询价格等于指定值的商品:若要查询价格为 2500 的商品,可使用以下 SQL 语句。
SELECT prod_name FROM products WHERE prod_price = 2500.00;
  • 查询价格在某个区间的商品:若想查询价格在 1000 到 3000 之间的商品,可执行此 SQL 语句。
SELECT prod_name, prod_price FROM products WHERE prod_price BETWEEN 1000 AND 3000;
  • 查询邮箱为空的客户:当需要找出没有提供邮箱的客户时,可使用该 SQL 语句。
SELECT cust_name FROM customers WHERE cust_email IS NULL;

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言