初識MySQL(一)

2020-08-14 19:09:36

一、SQL, DB, DBMS 分別是什麼, 他們之間的關係?

DB: DataBase (數據庫, 實際上在硬碟上以檔案的形似存在)
DBMS: Database Management System(數據庫管理系統,常見的有:MySQL, Oracle DB2 Sybase, SqlServer…)
SQL: 結構化查詢語言, 是一門標準通用語言, 標準的sql語句適用於所有的數據庫產偶
DBMS 負責執行 sql 語句, 通過執行 sql 語句來操作 db 中的數據
DBMS -----(執行)> SQL 語句 -(操作)-> DB

執行
操作
DBMS
SQL語句
DB

二、什麼是表(table)?

表(table)是數據庫的基本組成單元, 所有的數據都以表格的格式組織 一個表包括行和列:
行: 被稱爲數據/記錄(date) 列: 被稱爲欄位(column) 字串(varchar)
每個欄位名包含哪些資訊: 欄位名, 數據型別, 相關約束

三、學習通用的 SQL 語句,sql 語句分類:

DQL(數據查詢語言): 查詢語句, 凡是 select 語句都是 DQL
DML(數據操作語言):insert /delete /update 對錶當中的數據進行增刪改
DDL(數據定義語言):create drop alter , 對錶結構的增刪改
TCL(事務控制語言):commit 提交事務, rollback 回滾事務
DCL(數據控制語言):grant 授權, revoke 復原許可權等

四、匯入數據

  • 第一步:登錄mysql數據庫管理系統
    dos命令視窗
    mysql -uroot -p0320
  • 第二步:檢視有哪些數據庫
    show databases;(這個不是SQL語句,屬於MySQL的命令。)
  • 第三步:建立屬於我們自己的數據庫
    create database cqnb; (這個不是SQL語句,屬於MySQL的命令。)
  • 第四步:使用cqnb數據
    use cqnb; (這個不是SQL語句,屬於MySQL的命令。)
  • 第五步:檢視當前使用的數據庫中有哪些表?
    show tables; (這個不是SQL語句,屬於MySQL的命令。)
  • 第六步:初始化數據
    source D:\resources\bjpowernode.sql

五、什麼是sql指令碼?

xxxxxxx.sql, 這個檔案以sql結尾,這樣的檔案被稱爲 「sql指令碼」

當一個檔案的擴充套件名是.sql,並且該檔案中編寫了大量的sql語句,我們稱這樣的檔案爲sql指令碼。
注意:直接使用source命令可以執行sql指令碼。
sql指令碼中的數據量太大的時候,無法開啓,請使用source命令完成初始化。

刪除數據庫:drop database xxxxx;

六、檢視錶結構(desc):

在这里插入图片描述

七、常用命令

select datebase(); 檢視當前使用的是哪個數據庫
select version(); 檢視mysql的版本號
\c 命令,結束一條語句
exit 命令,退出mysql
show create table emp; 檢視建立表的語句

八、簡單的查詢語句(DQL 數據查詢語言)

語法格式:
select 欄位1,欄位2,欄位名,... from 表名;
提示:

  1. 任何一條sql語句以";"結尾
  2. sql語句不區分大小寫
    在这里插入图片描述
    給查詢結果的列重新命名?
select ename,sal*12 as yearsal from emp;
select ename,sal*12 as '年薪' from emp;

注意:
標準sql語句中要求字串使用單引號括起來。倏然mysql支援雙引號,儘量別用。
as關鍵字可以省略。
查詢所有欄位?
select * from emp; // 實際開發中不建議使用*,效率較低!!!

九、條件查詢

語法格式:
select 欄位,欄位... from 表名 where 條件;
執行順序:先from,然後where,最後select
在这里插入图片描述
between…and… 使用時左小右大[…~…]
between…and…還可以使用在字串方面[…~…)
模糊查詢like //在模糊查詢當中,必須掌握兩個特殊的符號,一個是 % ,一個是 _

十、排序(升序、降序)

select ename , sal from emp order by sal;     //升序(預設)
select ename , sal from emp order by sal asc; //升序
select ename , sal from emp order by sal desc; //降序

select 執行順序
欄位 ------>3
from
表名 ------->1
where
條件 ------->2
order by
… ------->4
order by 是最後執行的。

十一、分組函數

count 計數
sum 求和
avg 平均值
max 最大值
min 最小值
記住: 所有的分組函數都是對"某一組"數據進行操作。

記住:所有的分組函數都是對"某一組"數據進行操作。
select sum(sal) from emp; // 找出工資總和
select max(sal) from emp; // 找出最高工資
select min(sal) from emp; // 找出最低工資
select avg(sal) from emp; // 找出平均工資
select count(*) from emp; // 找出總人數

分組函數一共5個。
分組函數還有另一個名字:多行處理常式。
多行處理常式的特點:輸入多行,最終輸出的結果是1行

ifnull()空處理常式
ifnull(可能爲null的數據,被當做什麼處理)
分組函數自動忽略NULL
重點:所有的數據庫都是這樣規定的,只要有NULL參與的運算結果一定是NULL。

單行處理常式
什是單行處理常式?
輸入一行,輸出一行。

count(*)和count(具體的某個欄位),他們有什麼區別?

count(*): 不是統計某個字中數據的個數,而是統計總記錄條數。(和某個欄位無關)
count(comm): 表示統計comm欄位中不爲NULL的數量總數量。

十二、group by 和 having

group by : 按照某個欄位或者某些欄位進行分組。
having : having是對分組之後的數據進行再次過濾。
在这里插入图片描述
注意: 分組函數一般都會和group by聯合使用,這也是爲什麼它被稱爲分組函數的原因。
並且任何一個分組函數(count sum acg max min)都是group by語句執行結束之後纔會執行的。
當一條sql語句沒有group by的話,整張表的數據會自成一組。

select ename,max(sal),job from emp group by job;

以上在mysql當中,查詢結果是有的,但是結果沒有意義,在Oracle數據庫當中會報錯。語法錯誤。
記住一個規則: 能跟分組函數和參與分組欄位。
在这里插入图片描述

十三、總結一個完整的DQL語句

在这里插入图片描述