欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL的核心查詢語句詳解

 更新時間:2023年07月14日 10:40:51   作者:打工人戶戶  
這篇文章主要介紹了MySQL的核心查詢語句詳解,MySQL是一個流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),可用于存儲、管理和檢索數(shù)據(jù)。它是一個獨立的數(shù)據(jù)庫服務(wù)器軟件,可安裝在計算機或服務(wù)器上,需要的朋友可以參考下

本文數(shù)據(jù)分析師必看! 上次講了數(shù)據(jù)庫和MySQL基礎(chǔ),這回咱們來學(xué)點MySQL最常用到的—核心查詢語句。

img

框住的部分是本節(jié)重點

一、單表查詢

SELECT 字段名 FROM 表名 WHERE 條件 [GROUP BY 字段名 HAVING 條件 ORDER BY 字段名 LIMIT 條數(shù)];

1、排序

  • 單列排序
  • asc升序(默認,可不寫),desc降序
  • 語法格式:
SELECT 字段名 FROM 表名 [WHERE 字段 = 值] ORDER BY 字段名 [ASC / DESC]
  • 組合排序
  • 同時對多個字段進行排序, 如果第一個字段相同就按照第二個字段進行排序,以此類推。
  • 比如order by 字段1,字段2 desc—代表先按照字段1升序,再按字段2降序。

2、聚合函數(shù)

img

#1 查詢員工的總數(shù)
-- 統(tǒng)計表中的記錄條數(shù) 使用count()
SELECT COUNT(eid) FROM emp; -- 使用某一個字段 
SELECT COUNT(*) FROM emp; -- 使用 *
SELECT COUNT(1) FROM emp; -- 使用 1,與 * 效果一樣
-- 下面這條SQL 得到的總條數(shù)不準確,因為count函數(shù)忽略了空值 
-- 所以使用時注意不要使用帶有null的列進行統(tǒng)計
SELECT COUNT(dept_name) FROM emp;
#2 查看員工總薪水、最高薪水、最小薪水、薪水的平均值
-- sum函數(shù)求和, max函數(shù)求最大, min函數(shù)求最小, avg函數(shù)求平均值 
SELECT
SUM(salary) AS '總薪水', 
MAX(salary) AS '最高薪水', 
MIN(salary) AS '最低薪水', 
AVG(salary) AS '平均薪水'
FROM emp;

count(1)count(*)count(列名)的區(qū)別: count(1)和count(*)統(tǒng)計所有條數(shù),包括null值; count(列名)統(tǒng)計所有不為null的條數(shù)。

3、分組

分組往往和聚合函數(shù)一起使用,對數(shù)據(jù)進行分組,分完組之后在各個組內(nèi)進行聚合統(tǒng)計分析。 語法格式:

SELECT 分組字段/聚合函數(shù) FROM 表名 GROUP BY 分組字段 [HAVING 條件];

代碼示例:

#1.查詢每個部門的平均薪資 
SELECT
dept_name AS '部門名稱', 
AVG(salary) AS '平均薪資' 
FROM emp 
GROUP BY dept_name;
#2.查詢每個部門的平均薪資, 部門名稱不能為null 
SELECT
dept_name AS '部門名稱',
AVG(salary) AS '平均薪資'
FROM emp 
WHERE dept_name IS NOT NULL 
GROUP BY dept_name;

having的用法:

# 查詢平均薪資大于6000的部門
-- 需要在分組后再次進行過濾,使用 having 
SELECT
dept_name ,
AVG(salary)
FROM emp  
WHERE dept_name IS NOT NULL 
GROUP BY dept_name 
HAVING AVG(salary) > 6000 ;

where 與 having 的區(qū)別:

img

having要放在where和分組之后

4、limit

語法格式:

SELECT 字段1,字段2... FROM 表名 LIMIT offset,length;

參數(shù)說明: offset起始行數(shù),從0開始記數(shù),如果省略則默認為0。 length返回的行數(shù)。

# 查詢emp表中的前5條數(shù)據(jù)
SELECT * FROM emp LIMIT 5;
SELECT * FROM emp LIMIT 0,5;
# 查詢emp表中從第4條開始,查詢6條 
-- 起始值默認是從0開始的
SELECT * FROM emp LIMIT 3,6;

二、SQL約束

約束的作用: 對表中的數(shù)據(jù)進行進一步的限制,從而保證數(shù)據(jù)的正確性、有效性、完整性。 違反約束的不正確數(shù)據(jù)將無法插入到表中。注意:約束是針對字段的。

一般數(shù)據(jù)分析師對數(shù)據(jù)只是查詢,基本沒有創(chuàng)建修改表的權(quán)限,所以這塊大家了解就好,不用糾結(jié)語法怎么寫。在表結(jié)構(gòu)中見到以下約束關(guān)鍵字,知道是對數(shù)據(jù)的約束就行了。

img

常見的四種約束

1、主鍵約束

特點:不可重復(fù)、唯一、非空

創(chuàng)建主鍵

# 方式1 創(chuàng)建一個帶主鍵的表 
CREATE TABLE emp2(
-- 設(shè)置主鍵 唯一 非空 
eid INT PRIMARY KEY, 
ename VARCHAR(20),
sex CHAR(1)
);
-- 方式2 創(chuàng)建一個帶主鍵的表 
CREATE TABLE emp3(
eid INT ,
ename VARCHAR(20), 
sex CHAR(1),
-- 指定主鍵為 eid字段 
PRIMARY KEY(eid)
);

增加主鍵

-- 創(chuàng)建的時候不指定主鍵,然后通過DDL語句進行設(shè)置 
ALTER TABLE emp2 ADD PRIMARY KEY(eid);

2、非空約束

3、唯一約束

4、外鍵約束

主鍵:數(shù)據(jù)表A中有一列,這一列可以唯一的標識一條記錄。 外鍵:數(shù)據(jù)表A中有一列,這一列指向了另外一張數(shù)據(jù)表B的主鍵。

5、默認值

-- 表示性別這字段,若沒有數(shù)據(jù)則會默認填女,若有數(shù)據(jù)則顯示該數(shù)據(jù)。
CREATE TABLE emp4(
eid INT PRIMARY KEY AUTO_INCREMENT,
ename VARCHAR(20),
sex CHAR(1) DEFAULT '女'
); 

三、多表查詢

數(shù)據(jù)分析師在實際工作中提取數(shù)據(jù),不可能在一張表中就能把所有想要的數(shù)據(jù)都取到,而是關(guān)聯(lián)多張表,從不同的表中拿到不同的目標數(shù)據(jù),這就需要掌握表和表連接的知識了。這塊非常重要!??!

1、內(nèi)連接

**特點:**通過指定的條件去匹配兩張表中的數(shù)據(jù),匹配上就顯示,匹配不上就不顯示。

1)隱式內(nèi)連接:

SELECT 字段名 FROM 左表, 右表 WHERE 連接條件;

示例代碼:

SELECT
    p.pname,
    p.price,
    c.cname
FROM products p , category c 
WHERE p.category_id = c.cid;

2)顯式內(nèi)連接:

SELECT 字段名 FROM 左表 [INNER] JOIN 右表 ON 條件 
-- inner 可以省略

示例代碼:

SELECT * 
FROM products p 
INNER JOIN category c ON p.category_id = c.cid;

2、外連接

1)左外連接

特點: 以左表為基準,匹配右邊表中的數(shù)據(jù),如果匹配的上就展示匹配到的數(shù)據(jù); 如果匹配不到,左表中的數(shù)據(jù)正常展示,右邊的展示為null。

語法格式:

SELECT 字段名 FROM 左表 LEFT [OUTER] JOIN 右表 ON 條件

示例代碼:

-- 左外連接查詢
SELECT * 
FROM category c 
LEFT JOIN products p ON c.cid= p.category_id;

2)右外連接

特點: 以右表為基準,匹配左邊表中的數(shù)據(jù),如果匹配的上就展示匹配到的數(shù)據(jù); 如果匹配不到,右表中的數(shù)據(jù)正常展示,左邊的展示為null。

語法格式:

SELECT 字段名 FROM 左表 RIGHT [OUTER ]JOIN 右表 ON 條件

示例代碼:

-- 右外連接查詢
SELECT * 
FROM products p 
RIGHT JOIN category c ON p.category_id = c.cid;

各種連接方式的總結(jié):

img

四、合并查詢

1、UNION

UNION 操作符用于合并兩個或多個SELECT語句的結(jié)果集,并消除重復(fù)行。 注意,UNION內(nèi)部的SELECT 語句必須擁有相同數(shù)量的列。列也必須擁有相似的數(shù)據(jù)類型。 同時,每條 SELECT 語句中的列的順序必須相同。

代碼示例:

SELECT id,name,amount,date
FROM customers
LEFT JOIN orders on customers.Id = orders.customers_id
UNION
SELECT id,name,amount,date
from customers
RIGHT JOIN orders on customers.Id = orders.customers_id;

注意:

1. 選擇的列數(shù)必須相同;

2. 所選列的數(shù)據(jù)類型必須在相同的數(shù)據(jù)類型組中(如數(shù)字或字符);

3. 列的名稱不必相同;

4. 在重復(fù)檢查期間,NULL值不會被忽略;

2、UNION ALL

UNION ALL 運算符用于將兩個 SELECT 語句的結(jié)果組合在一起,重復(fù)行也包含在內(nèi)。 UNION ALL 運算符所遵從的規(guī)則與UNION一致。

總結(jié): UNION和UNION ALL關(guān)鍵字都是將兩個結(jié)果集合并為一個,也有區(qū)別。

1、重復(fù)值:UNION在進行表連接后會篩選掉重復(fù)的記錄,而UNION All不會去除重復(fù)記錄。

2、UNION ALL只是簡單的將兩個結(jié)果合并后就返回。

3、在執(zhí)行效率上,UNION ALL 要比UNION快很多。因此,若可以確認合并的兩個結(jié)果集中不 包含重復(fù)數(shù)據(jù),那么就使用UNION ALL。

五、子查詢

定義:一條select 查詢語句的結(jié)果, 作為另一條select語句的一部分。

1、where型:

子查詢的結(jié)果作為查詢條件

SELECT 查詢字段 FROM 表 WHERE 字段=(子查詢);

代碼示例:

-- 查詢價格最高的商品信息
SELECT * FROM products WHERE price = (SELECT MAX(price) FROM products);

2、from型:

將子查詢的結(jié)果作為一張表

SELECT 查詢字段 FROM (子查詢)表別名 WHERE 條件;

代碼示例:

-- 查詢商品中,價格大于500的商品信息,包括商品名稱、商品價格、商品所屬分類名稱
SELECT
    p.pname,
    p.price,
    c.cname
FROM products p
-- 子查詢作為一張表使用時要起別名,才能訪問表中字段 
INNER JOIN (SELECT * FROM category) c ON p.category_id = c.cid 
WHERE p.price > 500;

3、exists型:

子查詢結(jié)果是單列多行

SELECT 查詢字段 FROM 表 WHERE 字段 IN (子查詢); 

代碼示例:

--查詢價格小于2000的商品,來自于哪些分類
SELECT * 
FROM category
WHERE cid in (SELECT DISTINCT category_id FROM products WHERE price < 2000);

總結(jié):

1. 子查詢?nèi)绻槌龅氖且粋€字段(單列),那就在where后面作為條件使用。 單列單行 = 單列多行 in

2. 子查詢?nèi)绻樵兂龅氖嵌鄠€字段(多列),就當做一張表使用(要起別名)。

六、MySQL函數(shù)

函數(shù)常用的就這些了,不用硬記,不會的百度查就行了,寫著寫著就記住了。

1、數(shù)學(xué)函數(shù)

img

2、字符串函數(shù)

img

3、日期和時間函數(shù)(必學(xué))

img

4、條件判斷函數(shù)(這個必須掌握!?。。?/strong>

img

5、系統(tǒng)信息函數(shù)(可忽略)

img

到此這篇關(guān)于MySQL的核心查詢語句詳解的文章就介紹到這了,更多相關(guān)MySQL的核心查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL數(shù)據(jù)庫char與varchar的區(qū)別分析及使用建議

    MySQL數(shù)據(jù)庫char與varchar的區(qū)別分析及使用建議

    本文主要介紹了mysql中VARCHAR與CHAR字符型數(shù)據(jù)的差異以及這兩種字符型數(shù)據(jù)在項目中的使用建議,真心不錯。值得一看。小編有種受益匪淺的感覺。
    2014-09-09
  • MySQL進行大數(shù)據(jù)量分頁的優(yōu)化技巧分享

    MySQL進行大數(shù)據(jù)量分頁的優(yōu)化技巧分享

    mysql大數(shù)據(jù)量分頁情況下性能會很差,所以本文就來講一講mysql大數(shù)據(jù)量下偏移量很大,性能很差的問題,并附上解決方式,希望對大家有所幫助
    2024-01-01
  • MySQL最大連接數(shù)max_connections設(shè)置的兩種方法

    MySQL最大連接數(shù)max_connections設(shè)置的兩種方法

    MySQL的最大連接數(shù)可以通過兩種方法進行設(shè)置,通過命令行臨時修改和通過配置文件永久修改這兩種方法,本文將通過代碼示例給大家詳細的講解一下這兩種方法,需要的朋友可以參考下
    2024-05-05
  • 淺談MySQL分頁Limit的性能問題

    淺談MySQL分頁Limit的性能問題

    這篇文章主要介紹了淺談MySQL分頁Limit的性能問題,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 最新評論