0x03 MySQL必知必会学习录之查询和排序

MySQL如何检索数据?

本篇博文使用样例表如下:
在这里插入图片描述
SQL 建表语句如下:

/*
 Navicat Premium Data Transfer

 Source Server         : localhost_mysql
 Source Server Type    : MySQL
 Source Server Version : 80019
 Source Host           : localhost:3306
 Source Schema         : mysql_must_be_know_db

 Target Server Type    : MySQL
 Target Server Version : 80019
 File Encoding         : 65001

 Date: 08/04/2020 22:18:27
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for products
-- ----------------------------
DROP TABLE IF EXISTS `products`;
CREATE TABLE `products` (
  `prod_id` int NOT NULL AUTO_INCREMENT,
  `vend_id` int DEFAULT NULL COMMENT '产品供应商ID(关联到vendors表中的vend_id)',
  `prod_name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '产品名',
  `prod_price` decimal(10,2) DEFAULT NULL COMMENT '产品价格',
  `prod_desc` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '产品描述',
  PRIMARY KEY (`prod_id`),
  KEY `vend_foreign_id` (`vend_id`),
  CONSTRAINT `vend_foreign_id` FOREIGN KEY (`vend_id`) REFERENCES `vendors` (`vend_id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

-- ----------------------------
-- Records of products
-- ----------------------------
BEGIN;
COMMIT;

SET FOREIGN_KEY_CHECKS = 1;

点击查看更多
MySQL必知必会学习录之样例表

1.1 检索单个列

检索单个列示例如下:

SELECT
	prod_name 
FROM
	products;

1.2 检索多个列

检索多个列示例如下:

SELECT
	prod_id,
	prod_name,
	prod_price 
FROM
	products;

1.3 检索所有列

检索所有列

SELECT
	* 
FROM
	products;
  • 如果给定一个通配符(*),则返回表中所有列。
  • 列的顺序一般是列在表定义中出现的顺序。
  • 但有时候并不是这样的,表的模式的变化(如添加或删除列)可能会导致顺序的变化
  • 使用通配符 一般,除非你确实需要表中的每个列,否则最好别使用*通配符。虽然使用通配符可能会使你自己省事,不用明确列出所需列,但检索不需要的列通常会降低检索和应用程序的性能
  • 检索未知列 使用通配符有一个大优点。由于不明确指定列名(因为星号检索每个列),所以能检索出名字未知的列

1.4 使用DISTINCT 检索去重

SELECT 会返回所有符合条件的记录,如果有重复的,想要去重怎么办?

SELECT DISTINCT
	vend_id 
FROM
	products;

1.5 使用LIMIT 关键字限制返回前多少条记录

  • 返回前五条记录
SELECT
	prod_name 
FROM
	products 
	LIMIT 5;

行0 检索出来的第一行为行0而不是行1。因此,LIMIT 1, 1将检索出第二行而不是第一行。

  • 返回第5行开始返回五条记录
SELECT
	prod_name 
FROM
	products 
	LIMIT 10,
	5;
  • LIMIT 10,5指示MySQL返回从行10开始的5行。第一个数为开始位置,第二个数为要检索的行数
  • 在行数不够时 LIMIT中指定要检索的行数为检索的最大行数。如果没有足够的行(例如,给出LIMIT 10, 5,但只有13行), MySQL将只返回它能返回的那么多行。

1.6 使用完全限定的列名和表名

针对一些特别场景的时候需要使用完全限制的列名和表名

SELECT
	products.prod_name 
FROM
	mysql_must_be_know_db.products;

0x02 MySQL如何排序数据?

接下来我们讲解下如何针对MySQL 结果进行排序。

2.1 单列排序

如果只针对单个列进行排序,则语法示例如下:

SELECT
	prod_name 
FROM
	products 
ORDER BY
	prod_name;

2.2 多列排序

经常需要按不止一个列进行数据排序。例如,如果要显示雇员清单,可能希望按姓和名排序(首先按姓排序,然后在每个姓中再按名排序)。如果多个雇员具有相同的姓,这样做很有用。

为了按多个列排序,只要指定列名,列名之间用逗号分开即可(就像选择多个列时所做的那样)。

下面的代码检索3个列,并按其中两个列对结果进行排序——首先按价格,然后再按名称排序。

SELECT
	prod_id,
	prod_price,
	prod_name 
FROM
	products 
ORDER BY
	prod_price,
	prod_name;

2.3 指定排序方向

2.3.1 默认ASC 升序 从低到高进行排序

数据排序不限于升序排序(从A到Z)。这只是默认的排序顺序,

按照价格从低到高进行排列,可以使用默认值

SELECT
	prod_id,
	prod_price,
	prod_name 
FROM
	products 
ORDER BY
	prod_price;

也可以显式指定:

SELECT
	prod_id,
	prod_price,
	prod_name 
FROM
	products 
ORDER BY
	prod_price ASC;

2.3.2 DESC 降序 从高到低进行排序

我们还可以使用ORDER BY子句以降序(从Z到A)顺序排序。为了进行降序排序,必须指定DESC关键字

下面的例子按价格以降序排序产品(最贵的排在最前面,即价格从高到低进行排序)

SELECT
	prod_id,
	prod_price,
	prod_name 
FROM
	products 
ORDER BY
	prod_price DESC;
发布了194 篇原创文章 · 获赞 262 · 访问量 48万+

猜你喜欢

转载自blog.csdn.net/hadues/article/details/105400240
今日推荐