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
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...