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;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章