這是第二次打卡做業了,這一次的主要內容是基礎的SQL語句,可是有個概念咱們要搞清楚,就是什麼是SQL、什麼是MySQL。如下的語句都是基於MySQL。數據庫
SQL是Structured Query Language的縮寫,中文叫作結構化查詢語言,是專門用來操做數據庫的。編程
MySQL是一款數據庫軟件,固然,站在語言的角度也是一門語言,是遵循SQL的一些準則便攜的語言實例。SQL是標準,而MySQL是具體的實現。bash
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
上面咱們已經看了基本的SELECT語句了,可是上面的沒法知足咱們更多的需求,咱們使用數據庫查詢數據更多的時候是須要提供一些條件的,這時咱們便須要用到WHERE子語句。例如咱們從學生表中查詢學號爲10的學生名
SELECT name
FROM student
WHERE id = 10;
複製代碼
最下面的WHERE語句後面跟的是條件,固然咱們也能夠複合,使用AND、OR操做符(能夠想象成編程語言的&&、||操做符)
SELECT name
FROM student
WHERE age < 18 AND sex = female;
複製代碼
上面的查詢語句表示要查詢年齡小於18歲,而且性別爲男性的學生。
SELECT name
FROM student
WHERE age < 18 OR age >20;
複製代碼
上面的查詢語句表示要查詢年齡小於18歲,或者年齡大於20歲的學生。
使用BETWEEN AND操做符能夠將某個條件限定在必定範圍以內,咱們能夠將上面的查詢在18到20歲年齡區間的改成使用BETWEEN AND查詢
SELECT name
FROM student
WHERE age BETWEEN 18 AND 20;
複製代碼
還有一些簡答的單個操做符就再也不一一介紹了,具體能夠去查相關文檔
當咱們有了咱們想要數據,咱們仍是不知足,返回來一大堆數據,毫無順序可言,這怎麼看,這是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;
複製代碼
上面的例子就是按照多個列排序,這裏問題是隻有第一個排序條件相同時第二個纔會起做用。
咱們直接看一個例子
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子句以前
依然是來看例子
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);
複製代碼
結果圖: