MySql學習筆記一

来源:https://www.cnblogs.com/ys1109/archive/2019/08/22/11396955.html
-Advertisement-
Play Games

MySql學習筆記1 1.SQL 分類 1. DDL(Data Definition Language)數據定義語言 2. DML(Data Manipulation Language)數據操作語言 3. DQL(Data Query Language)數據查詢語言 4. DCL(Data Cont ...


MySql學習筆記一

1.SQL 分類

  1. DDL(Data Definition Language)數據定義語言
  2. DML(Data Manipulation Language)數據操作語言
  3. DQL(Data Query Language)數據查詢語言
  4. DCL(Data Control Language)數據控制語言
  5. TCL(Transaction Control Language)事務控制語言

2.常見指令

  1. 查看當前所有資料庫: show databases

  2. 打開指定的庫:use 庫名

  3. 查看當前庫的所有表:show tables

  4. 查看其它庫的所有表:show tables from 庫名

  5. 創建表:create table 表名(

    ​ 列名 列類型,

    ​ 列名 列類型,

    ​ ......

    );

  6. 查看表結構:DESC 表名

  7. 查看伺服器版本:select version() || mysql --V

  8. 查看字元集:Show variables like '%char%'

  9. 查看當前用戶:Select USER();

3.DQL(數據查詢語言)

3.1基礎查詢

select 查詢列表 from 表名

查詢列表可以是:表中欄位、常量、表達式、函數

查詢的結果是一個虛擬機的表格

3.1.1.常用關鍵字

3.1.1.1.起別名

as 或者 空格 例如 select 欄位名 as a from 表名 as b

對欄位的別名最好加上雙引號,可以在別名裡加空格

3.1.1.2.去重

利用關鍵字DISTINCT

select distinct 欄位名 from 表名

3.1.1.3.'+'只有計算功能

1 + 1 = 2

'1' + 1 = 2

'a' + 1 = 1

null + 1 = null

3.1.1.4.CONCAT

select 欄位名 CONCAT 欄位名 (AS 別名)from 表名

CONCAT相當於java中的 '+'


3.2.條件查詢

select 查詢列表 from 表名 where 篩選條件

3.2.1.按條件表達式篩選

條件運算符:>, < , =, !=, >=, <= ; != MySql建議寫為 <>

3.2.2.按邏輯表達式篩選

and or not

3.2.3.模糊查詢

  • like

    ​ %任意多個字元

    ​ _任意單個字元

    ​ 如果查詢含有轉移符號的數據,要用\轉義如\%\_

    ​ 也可以用ESCAPE 如 like '_$%' ESCAPLE '$'

  • between...and... 兩邊都包含

  • in

    ​ in列表中的值類型必須一致或者相容

    ​ 不支持通配符

  • is null

    ​ null值判斷不能用 = null 要用 is null, is not null

3.2.4.安全等於

​ <=> 可以判斷Null值,也可以判斷普通數值

​ 但是可讀性較差


3.3.排序查詢

示例: select 查詢列表 from 表名 order by 排序列表 ASC(DESC)

ASC是升序排列,DESC是降序排列, 預設是ASC

排序列表可以是 欄位名,表達式,別名,函數

支持按多個欄位排序, 例 order by 排序列表1 ASC(DESC), 排序列表2 ASC(DESC)....

先按按排序列表1進行排序,然後排序列表1相同的按排序列表進行排序,以此類推。


3.4.常見函數

函數類似於java中的方法,將一組邏輯語句封裝在方法體中,對外暴露方法名

好處:1.隱藏了實現細節 2.提高代碼重用性

3.4.1.單行函數

如count, length, IFNULL等

3.4.1.1.字元函數
length

​ 統計參數值的位元組個數,utf-8中文占三個位元組, gbk中文占兩個位元組

CONCAT

​ 拼接字元串 例CONCAT(str1,str2,str3.....)

​ 和null拼接會編程null

upper,lower

​ upper變大寫,lower變小寫

substr, subString

​ 截取字元串

​ substr(str, index) 截取從index開始後面所有的字元

​ substr(str, pos, len) 截取從pos到len的字元

​ sql中索引是從1開始的

instr

​ instr(str1, str2)

​ 判斷str2在str1中第一次出現的索引,如果找不到返回0

trim

​ trim(str)

​ 去除str中的前後空格

​ trim(str1 from str2)

​ 去除str2中開頭結尾重覆出現的str1

LPAD、RPAD

​ LPAD(STR1, LEN, STR2)

​ 在STR1的前面重覆填充STR2直到長度為LEN,如果LEN < STR1的LENGTH, 會截斷STR1

​ RPAD同理

Replace

​ Replace(STR1, STR2, STR3)

​ 將STR1中的所有的STR2都替換為STR3

3.4.1.2.數學函數
round

​ round(double) 四捨五入為整數

​ round(double, num) 四捨五入保留num位小數

ceil

​ ceil(double) 返回>=num的最小整數

floor

​ floor(double) 返回<=num的最大整數

truncate

​ truncate(double, num) 小數點num位以後截斷捨去

mod

​ mod(num1, num2) 取餘 相當於%

rand

​ 獲取0-1之間的隨機數

3.4.1.3.日期函數
now

​ now() 返回當前系統日期+時間

CURDATE

​ CURDATE() 返回當前系統日期,不包含時間

CURTIME

​ CURTIME() 返回當前系統時間,不包含日期

獲取日期指定部分

​ YEAR(date) 獲取年

​ MONTH(date) 獲取月

​ MONTHNAME(date) 獲取月名

​ DAY, HOUR, MINUTE, SECOND同上

字元串與日期的相互轉換

​ STR_TO_DATE('STRDATE', 'Format') 例STR_TO_DATE('9-13-2019', '%m-%d-%Y') m是月份,必須用m

​ 將字元串按照format格式轉換成日期

​ date_format(date, format) 例 date_format(now(), '%m月%d日%Y年')

​ 將日期按照format格式轉換成字元串

DateDiff

DateDiff(date1, date2)

返回的是date1日期減去date2日期的天數差

3.4.1.4 流程式控制制函數
if函數

​ 實現類似於if else 的效果

​ 例如 if(experssion, trueResult, falseResult)

case函數

使用1 實現類似switch case的效果

case 要判斷的欄位或表達式
when 常量1 then 要顯示的值1或語句1;
when 常量2 then 要顯示的值2或語句2;
when 常量3 then 要顯示的值3或語句2;
...
else 要顯示的值或語句
end

使用2 實現類似於if ,else if...的效果

case
when 條件1 then 要顯示的值1或語句1;
when 條件2 then 要顯示的值2或語句2;
when 條件3 then 要顯示的值3或語句3;
...
else 要顯示的值或語句
end

3.4.2.分組函數

做統計使用,又稱為統計函數,聚合函數,組函數

  • sum(): 求和

  • avg(): 平均值

  • max(): 最大值

  • min(): 最小值

  • count(): 計算個數

    count(欄位名) 統計欄位名非空的行數

    count(*) 統計總行數 等價於count(常量) 如count(1), count('a')等

    效率:MYISAM引擎下:count(*)效率最高

    ​ INNODB引擎下:count(*)和count(1)效率差不多,比cout('str')高

分組函數參數支持類型:

字元型 日期型 數值型 忽略null值 與DISTINCT搭配
sum() X X
avg() X X
max()
min()
count()

與分組函數一同查詢的欄位有限制,一般都是group by之後的欄位


3.5.分組查詢

Select 分組函數, 欄位(要求該欄位出現在group by的後面)
from 表
(where 分組前的篩選條件)
group by 分組的欄位1 (分組的欄位2.....)
(having 分組後的篩選條件)
(order by 排序)

where篩選的是分組前的原來的表中的數據

having篩選的是分組後的數據

分組函數的條件一定是放在having子句中

為了性能,能用分組前篩選的條件儘量放在where子句中

當group by之後有多個條件時,條件的先後順序不影響查詢結果,條目分組時必須滿足每一個條件都相等


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 安裝: yum install -y httpd php 查看版本:、 rpm -qa httpd php httpd-2.2.15-54.el6.centos.x86_64 php-5.3.3-48.el6_8.x86_64 修改apache配置文件: vim /etc/httpd/conf/ht ...
  • 需求1:新建除了root之外的新用戶,並且新用戶具有root用戶的相關功能 1.首先修改/etc/sudoers文件具有寫入的許可權 chmod 777 /etc/sudoers 2.修改/etc/sudoers vim /etc/sudoers,定位到如下行: ## Allow root to ru ...
  • 備份資料庫/usr/local/mysql5.5/bin/mysqldump -uroot -p1234abcd wordpress >~/wordpress_20151206.sql59 23 * * * /usr/local/mysql5.5/bin/mysqldump -uroot -p123 ...
  • 1.進程管理 psps --help 列印當前的進程信息ps -a 列印所有進程信息ps -e 列印所有進程信息 用的最多ps -eu 列印所有進程信息(更便捷的顯示方式)2.需要在進程中挑出我們需要管理的進程ps -e | grep mysqld3.kill進程典型需要kill關閉進程kill:向 ...
  • 0. 基本概念 一個【傳輸】(控制、批量、中斷、等時):由多個【事務】組成; 一個【事務】(IN、OUT、SETUP):由一多個【Packet】組成。 USB數據在【主機軟體】與【USB設備特定的端點】間被傳輸。【主機軟體】與【USB設備特定的端點】間的關聯叫做【pipes】。一個USB設備可以有多 ...
  • 轉自Clement-Xu的csdn博客 http://blog.csdn.net/clementad/article/details/41620631 Apache在Linux系統中,其實叫“httpd”,可以使用yum來安裝。 1、查看httpd包是否可用: # yum list | grep h ...
  • 1、某進程1執行 SETNX lock 以嘗試獲取鎖 2、由於某進程2已獲得了鎖,所以進程1執行 SETNX lock 返回0,即獲取鎖失敗 3、進程1執行 GET lock 來檢測鎖是否已超時,如果沒超時,則線程等待一段時間,再次檢測 4、如果進程1檢測到鎖已超時,即當前的時間大於鍵 lock 的 ...
  • [20190821]關於CPU成本計算.txt--//有人問鏈接http://blog.itpub.net/267265/viewspace-2653964/中CPU成本如何計算的,實際上一般在優化中考慮這個細節很少,--//因為CPU COST占整個COST的比例很少,至於如何計算說複雜很複雜,說 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...