MySQL基礎語句

這是第二次打卡做業了,這一次的主要內容是基礎的SQL語句,可是有個概念咱們要搞清楚,就是什麼是SQL、什麼是MySQL。如下的語句都是基於MySQL。數據庫

什麼是SQL

SQL是Structured Query Language的縮寫,中文叫作結構化查詢語言,是專門用來操做數據庫的。編程

什麼是MySQL

MySQL是一款數據庫軟件,固然,站在語言的角度也是一門語言,是遵循SQL的一些準則便攜的語言實例。SQL是標準,而MySQL是具體的實現。bash

SELECT FROM查詢語句

基礎用法

SElECT查詢語句能夠說會是數據庫中使用最多的語句了。他能夠查詢數據表中的內容。若是你想要從數據庫中查詢某個信息,你最少須要提供兩個信息。編程語言

  • 想要查詢的字段名(域名)
  • 想要查詢的表名
SELECT name 
    FROM student
複製代碼

上面的這條語句就是從student表中檢索一個字段名爲name的列。這是最簡單的用法,SELECT語句還有不少子語句,咱們會在下面介紹。固然,你也能夠查詢多個列,就像下面這個樣子,字段名的中間使用逗號隔開就好。固然,你也可使用*號,來返回全部的列。函數

SELECT id,
           name,
           sex
    FROM student
複製代碼

去重語句

咱們使用上面的查詢語句會有一個很重要的問題,就是他會將全部的查詢結果返回給咱們,可是也許咱們只是想要不一樣的那一部分。這時,咱們可使用DISTINCT關鍵字,將它放在相應的字段名前便可ui

SELECT  DISTINCT id,
    FROM products
複製代碼

這樣的話就會將不一樣的id幫你檢索出來,還有一個很重要的問題,即是若是DISTINCT後面跟了多個字段名,那麼這兩個字段都會起做用,也就是說除非兩行的這兩個字段是如出一轍的,不然就會被檢索出來。spa

限制結果

有些時候咱們指望檢索從某個位置開始,返回這以後匹配到的指定數量的數據,這時即是限制結果起做用的時候了。code

SELECT name 
    FROM products 
    LIMIT 5;
複製代碼

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

SELECT name 
    FROM products 
    LIMIT 5 OFFSET 5 
複製代碼

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

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的分組

函數

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

聚合函數

上面是聚合函數的類型,他們使用起來很簡單,只要在查詢時,將咱們的數據字段使用函數包裹起來就好。

--平均值函數
    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;

複製代碼

結果圖:

做業二

第一步:建立數據表&插入數據

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);
複製代碼

結果圖:

相關文章
相關標籤/搜索