MySQL基礎語句

鹹水魚發表於2020-10-26

這是第二次打卡作業了,這一次的主要內容是基礎的SQL語句,但是有個概念我們要搞清楚,就是什麼是SQL、什麼是MySQL。以下的語句都是基於MySQL。

什麼是SQL

SQL是Structured Query Language的縮寫,中文叫做結構化查詢語言,是專門用來運算元據庫的。

什麼是MySQL

MySQL是一款資料庫軟體,當然,站在語言的角度也是一門語言,是遵循SQL的一些準則便攜的語言例項。SQL是標準,而MySQL是具體的實現。

SELECT FROM查詢語句

基礎用法

SElECT查詢語句可以說會是資料庫中使用最多的語句了。他可以查詢資料表中的內容。如果你想要從資料庫中查詢某個資訊,你最少需要提供兩個資訊。

  • 想要查詢的欄位名(域名)
  • 想要查詢的表名
    SELECT name 
    FROM student
複製程式碼

上面的這條語句就是從student表中檢索一個欄位名為name的列。這是最簡單的用法,SELECT語句還有很多子語句,我們會在下面介紹。當然,你也可以查詢多個列,就像下面這個樣子,欄位名的中間使用逗號隔開就好。當然,你也可以使用*號,來返回所有的列。

    SELECT id,
           name,
           sex
    FROM student
複製程式碼

去重語句

我們使用上面的查詢語句會有一個很重要的問題,就是他會將所有的查詢結果返回給我們,但是也許我們只是想要不同的那一部分。這時,我們可以使用DISTINCT關鍵字,將它放在相應的欄位名前即可

    SELECT  DISTINCT id,
    FROM products
複製程式碼

這樣的話就會將不同的id幫你檢索出來,還有一個很重要的問題,便是如果DISTINCT後面跟了多個欄位名,那麼這兩個欄位都會起作用,也就是說除非兩行的這兩個欄位是一模一樣的,否則就會被檢索出來。

限制結果

有些時候我們期望檢索從某個位置開始,返回這之後匹配到的指定數量的資料,這時便是限制結果起作用的時候了。

    SELECT name 
    FROM products 
    LIMIT 5;
複製程式碼

上面的語句便是告訴資料庫只返回檢索到的5個資料,limit子語句還有一個關鍵字,允許告訴資料庫從距離起始位置多少個數量的地方開始檢索資料

    SELECT name 
    FROM products 
    LIMIT 5 OFFSET 5 
複製程式碼

上面的語句就是告訴資料庫從便宜起始位置5個數量的地方開始檢索,並且檢索的資料量不超過5個。也可以使用簡寫的方式,LIMIT 5,5;

WHERE篩選語句

上面我們已經看了基本的SELECT語句了,但是上面的無法滿足我們更多的需求,我們使用資料庫查詢資料更多的時候是需要提供一些條件的,這時我們便需要用到WHERE子語句。例如我們從學生表中查詢學號為10的學生名

    SELECT name
    FROM student
    WHERE id = 10;
複製程式碼

最下面的WHERE語句後面跟的是條件,當然我們也可以複合,使用AND、OR操作符(可以想象成程式語言的&&、||操作符)

AND
    SELECT name
    FROM student
    WHERE age < 18 AND sex = female;
複製程式碼

上面的查詢語句表示要查詢年齡小於18歲,並且性別為男性的學生。

OR

    SELECT name
    FROM student
    WHERE age < 18 OR age >20;
複製程式碼

上面的查詢語句表示要查詢年齡小於18歲,或者年齡大於20歲的學生。

BETWEEN AND

使用BETWEEN AND操作符可以將某個條件限定在一定範圍之內,我們可以將上面的查詢在18到20歲年齡區間的改為使用BETWEEN AND查詢

    SELECT name
    FROM student
    WHERE age BETWEEN 18 AND 20;
複製程式碼

還有一些簡答的單個操作符就不再一一介紹了,具體可以去查相關文件

ORDER BY排序語句

當我們有了我們想要資料,我們還是不滿足,返回來一大堆資料,毫無順序可言,這怎麼看,這是ORDER BY排序語句就登場了。ORDER BY可以按照升降序排列。預設是升序,想要使用降序時可以使用DESC關鍵字

    SELECT name 
    FROM products 
    ORDER BY name;
複製程式碼

這樣的話就會按照name欄位的字典順序排列,如果想要變為降序,只需在ORDER BY的語句後面新增DESC。

    SELECT name 
    FROM products 
    ORDER BY name DESC;
複製程式碼

還有可以按照多個列排序

    SELECT id, price, name 
    FROM products
    ORDER BY price, name;
複製程式碼

上面的例子就是按照多個列排序,這裡問題是隻有第一個排序條件相同時第二個才會起作用。

GROUP BY子句與HAVING子句

GROUP BY子句

我們直接看一個例子

    SELECT id, COUNT(*) AS count 
    FROM products
    GROUP BY id;
    
    --結果
    
    id    count 
    BRS01   3
    DLL01   4
    FNG01   2

複製程式碼

上面的例子返回的結果有兩個列,其中第一列為id,第二列為第一列id的數量,其實是GROUP BY幫我們根據id分了組,然後再每個組各自計算的數量。有個一個需要注意的地方,GROUP BY子句必須出現在WHERE子句之後,ORDER BY子句之前

HAVING子句

依然是來看例子

    SELECT id, COUNT(*) AS count 
    FROM orders
    GROUP BY id
    HAVING COUNT(*) >= 2;
複製程式碼

上面的語句基本與上一個例子相同,只是最後一行多了HAVING子句,表示查詢分組之後的資料中數量大於2的分組

函式

函式有日期處理函式、熟知處理函式、字元處理函式、聚合函式,我們就來看看應該是使用最多的的聚合函式的用法吧

聚合函式

MySQL基礎語句
上面是聚合函式的型別,他們使用起來很簡單,只要在查詢時,將我們的資料欄位使用函式包裹起來就好。

    --平均值函式
    SELECT AVG(price) AS avg_price 
    FROM products;
    
    --總數函式
    SELECT COUNT(*) AS cust 
    FROM products;
    
    --最大值函式
    SELECT MAX(price) AS max_price
    FROM products;
    
    --最小值函式
    SELECT MIN(price) AS min_price
    FROM products;
    
    -- 求和函式
    SELECT SUM(quantity) AS items_ordered 
    FROM orderItems
    WHERE order_num = 20005;

複製程式碼

作業

作業一

第一步:建立資料表&插入資料

CREATE DATABASE test;
USE test;
CREATE TABLE if NOT EXISTS email(
ID INT NOT NULL PRIMARY KEY,
Email VARCHAR(255)
);
INSERT INTO email VALUES('1','a@b.com');
INSERT INTO email VALUES('2','c@d.com');
INSERT INTO email VALUES('3','a@b.com');
複製程式碼

第二步:查詢資料

    SELECT Email 
	FROM email 
	GROUP BY Email
	HAVING COUNT(*) >=2;

複製程式碼

結果圖:

MySQL基礎語句

作業二

第一步:建立資料表&插入資料

CREATE TABLE if not exists World(
name VARCHAR(50) NOT NULL,
continent VARCHAR(50) NOT NULL,
area INT NOT NULL,
population INT NOT NULL,
gdp INT NOT NULL
);

INSERT INTO World
  VALUES('Afghanistan','Asia',652230,25500100,20343000);
INSERT INTO World 
  VALUES('Albania','Europe',28748,2831741,12960000);
INSERT INTO World 
  VALUES('Algeria','Africa',2381741,37100000,188681000);
INSERT INTO World
  VALUES('Andorra','Europe',468,78115,3712000);
INSERT INTO World
  VALUES('Angola','Africa',1246700,20609294,100990000);
複製程式碼

第二步:查詢資料

    SELECT name,population,area
	FROM World
	WHERE area >= 3000000 
	OR (population >= 25000000 AND gdp >= 20000000);
複製程式碼

結果圖:

MySQL基礎語句

相關文章