主頁 > 後端開發 > MySQL_基本概念&DQL查詢語言

MySQL_基本概念&DQL查詢語言

2021-12-28 07:59:06 後端開發

目錄

一、資料庫的好處

二、資料庫相關概念

三、資料庫存盤資料的特點

四、MYSQL服務的啟動和停止

五、MySQL常見命令

六、MysSQL的語法規范

七、基礎查詢

1.介紹

2.查詢方式

3.補充

八、條件查詢

1.介紹

2.運算子分類

3.like 介紹

4.between and 介紹

5.in 介紹

6.is (not) null 介紹

九、排序查詢

1.介紹

十、分組查詢

1.分組函式

2.分組查詢介紹

十一、連接查詢

1.介紹

2.分類

3.笛卡爾積(笛卡爾乘積)

4.內連接

5.外連接

6.交叉連接

十二、子查詢

1.介紹

2.分類

3.where或having后面

4.select后面

5.from后面

6.exists后面(相關子查詢)

十三、分頁查詢

1.介紹(1-9為執行順序)

2.特點

十四、聯合查詢

1.介紹

2.特點

十五、預祝元旦快樂


一、資料庫的好處

? 持久化資料到本地
? 可以實作結構化查詢,方便管理

二、資料庫相關概念

? DB:資料庫,保存一組有組織的資料的容器
? DMBS:資料庫管理系統,又稱為資料庫軟體,用于管理DB中的資料
? SQL:結構化查詢語言,用于和DBMS通信的語言

三、資料庫存盤資料的特點

? 將資料放倒表中,表在放到庫中,
? 一個資料庫中可以有多個表,每個表都有一個名字用來標識自己,表名具有唯一性,
? 表具有一些特性,這些特性定義了資料在表中如何存盤,類似java中類的設計,
? 表由列組成,我們稱為欄位,所有表都是由一個或多個列組成的,每一列類似java中的屬性,
? 表中的資料是按行存盤的,每一行類似于java中的物件,

四、MYSQL服務的啟動和停止

方式一:計算機--右擊管理--服務
方式二:通過管理員身份運行dos視窗
net start 服務名(啟動服務)
net stop 服務名(停止服務)

五、MySQL常見命令

? 查看當前所有的資料庫
show databases;
? 打開指定的庫
use 庫名;
? 查看當前庫的所有表
show tables
? 查看其他庫的所有表
show tables from 庫名;
? 創建表
create table 表名(
列名 列型別,
列名 列型別,
.....
) ;
? 查看表結構
desc 表名;
? 查看服務器的版本
方式一:登錄到mysql服務端
select version();
方式二:沒有登錄到mysql服務端
mysql --version

mysql --V

六、MysSQL的語法規范

? 不區分大小寫,但建議關鍵字大寫,表名、列名小寫
? 每條命令最好用分號結尾
? 每條命令根據需要,可以縮進 或換行
? 注釋
單行注釋:#注釋文字
單行注釋:-- 注釋文字
多行注釋:/*注釋文字*/

七、基礎查詢

1.介紹

語法:
SELECT 查詢串列 FROM 表名;
類似于:System.out.println(列印東西);
特點:
? 查詢串列可以是:表中的欄位、常量值、運算式、函式
? 查詢的結果是一個虛擬的表格

2.查詢方式

? 查詢表中的單個欄位 SELECT last_name FROM employees;
? 查詢表中的多個欄位 SELECT last_name,salary,email FROM employees;
? 查詢表中所有欄位 SELECT 所有欄位 FROM employees;2.SELECT * FROM employees;
? 查詢常量值 SELECT 100;SELECT 'John';
? 查詢運算式 SELCET 100%98;
? 查詢函式 SELECT VERSION();

3.補充

? 起別名

好處:
1.便于理解
2.如果要查詢的欄位有重名的情況,使用別名可以區分開來
例:
SELECT last_name AS 姓,first_name AS 名 FROM employees;(AS可省略)
注意:
別名中有特殊符號時(空格,#等),用雙引號標識起來(mysql中建議雙引號,單引號也行)
例:
SELECT salary AS "out put" FROM employees;

? +號的作用

java中的+號:
? 運算子,兩個運算元都為數值型
? 連接符,只要有一個運算元為字串
mysql中的+號:
僅僅只有一個功能,運算子
例:
SELECT 100+90; 兩個運算元都為數值型,做加法運算
SELECT '123'+90; 數字字符型將轉換成數值型,而后做加法運算
SELECT 'john'+90; 非數字字符型將轉換成數值型0,而后做加法運算
SELECT null+10; 只要其中一方為null,結果肯定為null

八、條件查詢

1.介紹

語法:
SELECT
查詢串列
FROM
表名
WHERE
篩選條件;

2.運算子分類

? 條件運算子: > < = != <> >= <=
? 邏輯運算子:&& || ! and or not
? 模糊查詢:like between and in is null is not null

3.like 介紹

特點

一般和通配符搭配使用:
? % 任意多個字符,包含0個字符
? _ 任意單個字符

案例

案例一:查詢員工名中包含字符a的員工資訊
SELECT * FROM employees WHERE last_name LIKE '%a%';
案例二:查詢員工中第三個字符為e,第五個字符為a的員工名
SELECT last_name FROM employees WHERE last_name LIKE '__e_a';
案例三:查詢員工名中第二個字符為_的員工名(轉譯,通配符等特殊符號充普通字符)
SELECT last_name FROM employees WHERE last_name LIKE '_$_%' ESCAPE '$';
LIKE '_\_%';

4.between and 介紹

特點

? 使用between and 可以提高陳述句的簡潔度
? 包含臨界值
? 兩個臨界值不要調換順序(between 120 and 100 報錯)

案例

案例一:查詢員工編號在100到120之間的員工資訊
SELECT
*
FROM
employees
WHERE
employees_id >=120 AND employees_id<=100;
--------------------------------------------------------------------------------
SELECT
*
FROM
employees
WHERE
employees_id BETWEEN 100 AND 120;

5.in 介紹

含義:判斷某欄位的值是否屬于in串列中的某一項
特點:1.使用in提高陳述句的簡潔度
2.in串列的值型別必須統一

案例

案例:查詢員工的工種編號是IT_PROG、AD_VP、AD_PRES中的一個的員工名和工種編號
SELECT
last_name'
job_id
FROM
employees
WHERE
job_id='IT_PROG', OR job id ='AD_VP, OR job id ='AD_PRES';
--------------------------------------------------------------------------------------------
SELECT
last_name
job_id
FROM
employees
WHERE
job_id IN('IT_PORG','AD_VP','AD_PRES');

6.is (not) null 介紹

特點

? = 或 <> 不能用于判斷null值
? is null 或 is not null 可判斷null值

補充:安全等于 <=>

? IS NULL :只可以判斷NULL值,可讀性高,建議使用
? <=> : 既可以判斷NULL值,又可以判斷普通的數值,但可讀性低

九、排序查詢

1.介紹

語法:
SELECT 查詢串列
FROM 表
WHERE 篩選條件
ORER BY 排序串列【asc,desc】
特點:
? asc表升序,可省略;desc表降序
? order by 子句中可以支持單個欄位,多個欄位(按第一個欄位為主要關鍵字進行排序,后續欄位為次要關鍵字進行排序)、運算式、函式、別名,
? order by 字句中一般是放在查詢陳述句的最后面,limit子句除外,

十、分組查詢

1.分組函式

功能:
用作統計使用,又稱為聚合函式或統計函式或組函式
分類:
sum求和、avg平均值、max最大值、min最小值、count計算個數
特點:
? sum、avg一般用于處理數值型
max、min、count可以處理任何型別
? 以上分組函式都忽略null值
? 可以和distinct搭配實作去重的運算
? 一般使用count(*)用作統計行數
? 和分組函式一同查詢的欄位要求是group by后的欄位

2.分組查詢介紹

語法:
SELECT 分組函式,列(要求出現在group by的后面)
FROM 表
WHERE 篩選條件
GROUP BY 分組的串列
ORDER BY 子句
注意:
查詢串列比較特殊,要求是分組函式和group by 后出現的欄位
特點:
? 分組查詢中的篩選條件分為兩類
資料源 位置 關鍵字
分組前篩選 原始表 group by子句的前面 where
分組后篩選 分組后的結果集 group by子句的后面 having
? group by子句支持單個欄位分組,多個欄位分組,(欄位間用逗號隔開沒有順序要求),運算式或函式用的較少,
? 也可以添加排序(排序放在整個分組查詢最后)
注意:
? 分組函式做條件肯定放在having子句中
? 能在分組前篩選的,就優先考慮分組前篩選

十一、連接查詢

1.介紹

含義:
又稱多表查詢,當查詢的欄位來自于多個表時,就會用到連接查詢

2.分類

按年代分類:
sql92標準:僅僅支持內連接
sql99標準(推薦):支持內連接+外連接(左外和右外)+交叉連接
按功能分類:
內連接:
等值連接
非等值連接
自連接
外連接:
左外連接
右外連接
全外連接
交叉連接

3.笛卡爾積(笛卡爾乘積)

? 產生條件:
1.省略連接條件
2.連接條件無效
3.所有表中所有行互相連接
? 解決辦法:
添加有效的篩選條件

4.內連接

* SQL92語法:
SELECT 查詢串列
FROM 表名1 別名1 ,表名2 別名2
WHERE 連接條件
AND 篩選條件
GROUP BY 分組串列
HAVING 分組后篩選條件
ORDER BY 排序串列
* SQL99語法:
select 欄位串列
from 表名1
[inner] join 表名2 on 條件
where 篩選條件
group by 分組條件
having 分組后的篩選條件
order by 排序欄位
* 注意:
? 使用表名前綴在多個表中區分相同的列
? 在不同表中具有相同列名的列可以用表的別名加以區分
? 如果使用了表別名,則在select陳述句中需要使用表別名代替表名
? 表別名最多支持32個字符長度,但建議越少越好

5.外連接

? 左外連接(兩表交集部分,和左表的非交集部分)
* 語法:
select 欄位串列
from 表1
left [outer] join 表2 on 條件
...
* 注意:
左外連接查詢的是左表所有資料以及其交集部分
-------------------------------------------------------------------------
? 右外連接(兩表交集部分,和右表的非交集部分)
* 語法:
select 欄位串列
from 表1
right [outer] join 表2 on 條件
...
* 注意:
右外連接查詢的是右表所有資料以及其交集部分
----------------------------------------------------------------------------
? 全外連接(mysql不支持):兩個表的全部(表a表b的交際部分,和非交集部分)

6.交叉連接

含義:使用99語法標準實作的笛卡爾乘積

十二、子查詢

1.介紹

含義:
1.出現在其他陳述句中的select陳述句,稱為子查詢或內查詢
2.外部的查詢陳述句,稱為主查詢或外查詢

2.分類

? 按子查詢出現的位置:
● select后面:
僅僅支持標量子查詢
● from后面:
支持表子查詢
● where或having后面:(常用)
標量子查詢(單行子查詢)(常用)
列子查詢 (多行子查詢)(常用)
行子查詢
● exists后面(相關子查詢)
表子查詢
? 按結果集的行列數不同:
● 標量子查詢(結果集只有一行一列)
● 列子查詢(結果集只有一列多行)
● 行子查詢(結果集有一行多列)
● 表子查詢(結果集一般為多行多列)

3.where或having后面

where或having后面:
? 標量子查詢(單行子查詢)
? 列子查詢(多行子查詢)
? 行子查詢(多列多行)
特點:
? 子查詢放在小括號內
? 子查詢一般放在條件的右側
? 標量子查詢,一般搭配單行運算子使用
> < >= <= = <>
? 列子查詢,一般搭配多行運算子使用
in、any/some、all
? 子查詢的執行優先于主查詢執行,主查詢的條件用到了子查詢的結果

4.select后面

select后面:
僅僅支持標量子查詢

5.from后面

from后面:
將子查詢結果沖到一張表,要求必須起別名

6.exists后面(相關子查詢)

語法:
exists(完整的查詢陳述句)
結果:
1(存在)或0(不存在)

十三、分頁查詢

1.介紹(1-9為執行順序)

應用場景:當要顯示的資料,一頁顯示不全,需要分頁提交sql請求
語法:
select 查詢串列 7
from 表 1
【join type jion表2 2
on 連接條件 3
where 篩選條件 4
group by 分組欄位 5
having 分組后篩選 6
order by 排序的欄位】 8
limit offset,size; 9

offset 要顯示條目的起始索引(起始索引從0開始)
size 要顯示的條目個數

2.特點

? limit陳述句放在查詢陳述句的最后
? 公式:
要顯示的頁數page,每頁的條目數size
select 查詢串列
from 表
limit (page-1)*size,size;

十四、聯合查詢

1.介紹

union 聯合 合并:將多條查詢陳述句的結果合并成一個結果
語法:
查詢陳述句1
union
查詢陳述句2
union
.........
應用場景:
要查詢的結果來自于多個表,且多個表沒有直接的連接關系,但查詢的資訊一致時

2.特點

特點:
? 要求多條查詢陳述句的查詢列數時一致的
? 要求多個查詢陳述句的查詢的每一列的型別和順序最好一致
? union關鍵字默認去重,如果使用union all 可以包含重復項

十五、預祝元旦快樂

作為純小白(非計算機專業)學java已經是4個多月了,很感謝自己的堅持,我從一竅不通到漸漸地覺得學習編程并不是那么難,甚至還自大的感覺自己有點入門了- - 學起來不那么吃力,但依然是枯燥的,現在主要是克服惰性,也希望大家也都能堅持住,一起加油!

元旦左右不一定會更新,最后預祝大家元旦快樂,心想事成!!

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/395104.html

標籤:java

上一篇:Redis常用資料結構及應用場景

下一篇:LeetCode114 二叉樹展開為鏈表 ---二叉樹題 三種解法 (遞回) (迭代) (前驅節點)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more