MySQL基礎&SQL入門
MySQL基礎&SQL入門
1. 資料庫的基本概念
1.1 什麼是資料庫
- 1. 資料庫(DataBase) 就是儲存和管理資料的倉庫
- 2. 其本質是一個檔案系統, 還是以檔案的方式,將資料儲存在電腦上
1.2 為什麼使用資料庫
資料儲存方式的比較
通過上面的比較,我們可以看出,使用資料庫儲存資料, 使用者可以非常方便對資料庫中的資料進行增加, 刪除, 修改及查詢操作。
1.3 常見的資料庫軟體排行榜
2020年資料庫排行
開發中常見的資料庫
為什麼選擇MySQL ?
- 1. 功能強大,足以應付web應用開發
- 2. 開源, 免費
2. MySQL的安裝及配置
2.1 安裝MySQL
- 詳見 MySQL安裝文件
2.2 解除安裝MySQL
- 詳見 MySQL解除安裝文件
2.3 MySQL環境變數配置
- 詳見 MySQL環境變數配置文件
2.4 MySQL的啟動與關閉
2.4.1 方式一 : window服務啟動 MySQL
1) 右鍵此電腦 --> 管理
2) 選擇服務--> 找到MysQL服務
3) 右鍵選擇 --> 啟動或停止
2.4.2 方式二: DOS 命令方式啟動
1) 首先以管理員身份 開啟命令列視窗
2) 啟動MySql
3) 關閉MySql
2.5 命令列登入資料庫
MySQL是一個需要賬戶名密碼登入的資料庫,登陸後使用,它提供了一個預設的root賬號,使用安裝時設定的密碼即可登入。
命令演示:
退出命令
2.6 SqlYog的使用
1) 簡介
SQLyog是業界著名的Webyog公司出品的一款簡潔高效、功能強大的圖形化MySQL資料庫管理工具。使用 SQLyog 可以快速直觀地讓您從世界的任何角落通過網路來維護遠端的 MySQL 資料庫
2) 具體安裝教程 請檢視
- SQLyog安裝教程
2.7 MySql的目錄結構
1) MySQL安裝目錄
MySql的預設安裝目錄在 C:\Program Files\MySQL\MySQL Server 5.7
2) MySQL配置檔案 與 資料庫及 資料表所在目錄
- my.ini 檔案 是 mysql 的配置檔案,一般不建議去修改
- data<目錄> Mysql管理的資料庫檔案所在的目錄
- 幾個概念
- 資料庫: 資料夾
- 表: 檔案
- 資料: 檔案中的記錄
2.8 資料庫管理系統
1) 什麼是資料庫管理系統 ?
資料庫管理系統(DataBase Management System,DBMS):指一種操作和管理維護資料庫的大型軟體。
MySQL就是一個 資料庫管理系統軟體, 安裝了Mysql的電腦,我們叫它資料庫伺服器.
2) 資料庫管理系統的作用
用於建立、使用和維護資料庫,對資料庫進行統一的管理。
3)資料庫管理系統、資料庫 和表之間的關係
MySQL中管理著很多資料庫,在實際開發環境中 一個數據庫一般對應了一個的應用,資料庫當中儲存著多張表,每一張表對應著不同的業務,表中儲存著對應業務的資料。
2.9 資料庫表
- 資料庫中以表為組織單位儲存資料
- 表類似我們Java中的類,每個欄位都有對應的資料型別
那麼我們使用熟悉的Java程式來與關係型資料對比,就會發現以下關係:
3. SQL(重點)
3.1 SQL的概念
1) 什麼是SQL ?
結構化查詢語言(Structured Query Language)簡稱SQL,是一種特殊目的的程式語言,是一種資料庫查詢和程式設計語言,用於存取資料以及查詢、更新和管理關係資料庫系統。
2) SQL 的作用
- 是所有關係型資料庫的統一查詢規範,不同的關係型資料庫都支援SQL
- 所有的關係型資料庫都可以使用SQL
- 不同資料庫之間的SQL 有一些區別 方言
3.2 SQL通用語法
1) SQL語句可以單行 或者 多行書寫,以分號 結尾 ; (Sqlyog中可以不用寫分號)
2) 可以使用空格和縮排來增加語句的可讀性。
3) MySql中使用SQL不區分大小寫,一般關鍵字大寫,資料庫名 表名列名 小寫。
4) 註釋方式
3.3 SQL的分類
注: 我們重點學習 DML 與 DQL!
3.4 DDL操作 資料庫
3.4.1 建立資料庫
3.4.2 檢視/選擇資料庫
3.4.3 修改資料庫
3.4.4 刪除資料庫
3.5 DDL 操作 資料表
3.5.1 MySQL常見的資料型別
1)常用的資料型別:
2) 詳細的資料型別(瞭解即可)
注意:MySQL中的 char型別與 varchar型別,都對應了 Java中的字串型別,區別在於:
- char型別是固定長度的: 根據定義的字串長度分配足夠的空間。
- varchar型別是可變長度的: 只使用字串長度所需的空間
比如:儲存字串 "abc"
適用場景:
- char型別適合儲存 固定長度的字串,比如 密碼 ,性別一類
- varchar型別適合儲存 在一定範圍內,有長度變化的字串
3.5.2 建立表
語法格式:
- 需求1: 建立商品分類表
- SQL實現
- 需求2: 建立測試表
- SQL實現
- 需求3: 快速建立一個表結構相同的表(複製表結構)
- 語法格式:
- 程式碼示例:
3.5.3 查看錶
程式碼示例:
3.5.4 刪除表
程式碼示例:
3.5.5 修改表
1)修改表名
語法格式:
需求: 將category表 改為 category1
2) 修改表的字符集
語法格式:
需求: 將category表的字符集 修改為gbk
3)向表中新增列, 關鍵字 ADD
- 語法格式:
- 需求: 為分類表新增一個新的欄位為 分類描述 cdesc varchar(20)
4)修改表中列的 資料型別或長度 , 關鍵字 MODIFY
- 語法格式:
- 需求:對分類表的描述欄位進行修改,型別varchar(50)
5)修改列名稱 , 關鍵字 CHANGE
- 語法格式
- 需求: 對分類表中的 desc欄位進行更換, 更換為 description varchar(30)
6)刪除列 ,關鍵字 DROP
- 語法格式
- 需求: 刪除分類表中description這列
3.6 DML 操作表中資料
- SQL中的DML 用於對錶中的資料進行增刪改操作
3.6.1 插入資料
- 語法格式:
1)程式碼準備,建立一個學生表:
2)向學生表中新增資料,3種方式
- 方式1: 插入全部欄位, 將所有欄位名都寫出來
- 方式2: 插入全部欄位,不寫欄位名
- 方式3:插入指定欄位的值
注意:
1) 值與欄位必須要對應,個數相同&資料型別相同
2)值的資料大小,必須在欄位指定的長度範圍內
3)varchar char date型別的值必須使用單引號,或者雙引號 包裹。
4)如果要插入空值,可以忽略不寫,或者插入null
5) 如果插入指定欄位的值,必須要上寫列名
3.6.2 更改資料
語法格式1:不帶條件的修改
語法格式2:帶條件的修改
1)不帶條件修改,將所有的性別改為女(慎用!!)
2)帶條件的修改,將sid 為3的學生,性別改為男
3)一次修改多個列, 將sid為 2 的學員,年齡改為 20,地址改為 北京
3.6.3 刪除資料
語法格式1:刪除所有資料
語法格式2: 指定條件 刪除資料
1)刪除 sid 為 1 的資料
2) 刪除所有資料
3) 如果要刪除表中的所有資料,有兩種做法
1. delete from 表名; 不推薦. 有多少條記錄 就執行多少次刪除操作. 效率低
2. truncate table 表名: 推薦. 先刪除整張表, 然後再重新建立一張一模一樣的表. 效率高
3.7 DQL 查詢表中資料
3.7.1 準備資料
#建立員工表
表名 emp
表中欄位:
eid 員工id,int
ename 姓名,varchar
sex 性別,char
salary 薪資,double
hire_date 入職時間,date
dept_name 部門名稱,varchar
#建立員工表
CREATE TABLE emp(
eid INT,
ename VARCHAR(20),
sex CHAR(1),
salary DOUBLE,
hire_date DATE,
dept_name VARCHAR(20)
);
#新增資料
INSERT INTO emp VALUES(1,'孫悟空','男',7200,'2013-02-04','教學部');
INSERT INTO emp VALUES(2,'豬八戒','男',3600,'2010-12-02','教學部');
INSERT INTO emp VALUES(3,'唐僧','男',9000,'2008-08-08','教學部');
INSERT INTO emp VALUES(4,'白骨精','女',5000,'2015-10-07','市場部');
INSERT INTO emp VALUES(5,'蜘蛛精','女',5000,'2011-03-14','市場部');
INSERT INTO emp VALUES(6,'玉兔精','女',200,'2000-03-14','市場部');
INSERT INTO emp VALUES(7,'林黛玉','女',10000,'2019-10-07','財務部');
INSERT INTO emp VALUES(8,'黃蓉','女',3500,'2011-09-14','財務部');
INSERT INTO emp VALUES(9,'吳承恩','男',20000,'2000-03-14',NULL);
INSERT INTO emp VALUES(10,'孫悟飯','男', 10,'2020-03-14',財務部);
INSERT INTO emp VALUES(11,'兔八哥','女', 300,'2010-03-14',財務部);
3.7.2 簡單查詢
- 查詢不會對資料庫中的資料進行修改.只是一種顯示資料的方式 SELECT
- 語法格式
-
select 列名 from 表名
- 需求1: 查詢emp中的 所有資料
-
SELECT * FROM emp; -- 使用 * 表示所有列
- 需求2: 查詢emp表中的所有記錄,僅顯示id和name欄位
-
SELECT eid,ename FROM emp;
- 需求3: 將所有的員工資訊查詢出來,並將列名改為中文
- 別名查詢,使用關鍵字 as
-
# 使用 AS關鍵字,為列起別名 SELECT eid AS '編號', ename AS '姓名' , sex AS '性別', salary AS '薪資', hire_date '入職時間', -- AS 可以省略 dept_name '部門名稱' FROM emp;
- 需求4:查詢一共有幾個部門
- 使用去重關鍵字 distinct
-
-- 使用distinct 關鍵字,去掉重複部門資訊 SELECT DISTINCT dept_name FROM emp;
- 需求5: 將所有員工的工資 +1000 元進行顯示
- 運算查詢 (查詢結果參與運算)
-
SELECT ename , salary + 1000 FROM emp;
3.7.3 條件查詢
如果查詢語句中沒有設定條件,就會查詢所有的行資訊,在實際應用中,一定要指定查詢條件,對記錄進行過濾
語法格式
select 列名 from 表名 where 條件表示式
* 先取出表中的每條資料,滿足條件的資料就返回,不滿足的就過
運算子
1) 比較運算子
運算子 | 說明 |
> < <= >= = <> != | 大於、小於、大於(小於)等於、不等於 |
BETWEEN ...AND... |
顯示在某一區間的值 |
IN(集合) |
集合表示多個值,使用逗號分隔,例如: name in (悟空,八戒) |
LIKE '%張%' | 模糊查詢 |
IS NULL | 查詢某一列為NULL的值, 注: 不能寫 = NULL |
2) 邏輯運算子
運算子 | 說明 |
And && | 多個條件同時成立 |
Or || | 多個條件任一成立 |
Not | 不成立,取反。 |
需求1:
# 查詢員工姓名為黃蓉的員工資訊
# 查詢薪水價格為5000的員工資訊
# 查詢薪水價格不是5000的所有員工資訊
# 查詢薪水價格大於6000元的所有員工資訊
# 查詢薪水價格在5000到10000之間所有員工資訊
# 查詢薪水價格是3600或7200或者20000的所有員工資訊
程式碼實現
# 查詢員工姓名為黃蓉的員工資訊
SELECT * FROM emp WHERE ename = '黃蓉';
# 查詢薪水價格為5000的員工資訊
SELECT * FROM emp WHERE salary = 5000;
# 查詢薪水價格不是5000的所有員工資訊
SELECT * FROM emp WHERE salary != 5000;
SELECT * FROM emp WHERE salary <> 5000;
# 查詢薪水價格大於6000元的所有員工資訊
SELECT * FROM emp WH# 查詢薪水價格在5000到10000之間所有員工資訊
SELECT * FROM emp WHERE salary BETWEEN 5000 AND 10000;
# 查詢薪水價格是3600或7200或者20000的所有員工資訊
-- 方式1: or
SELECT * FROM emp WHERE salary = 3600 OR salary = 7200 OR salary = 20000;
-- 方式2: in() 匹配括號中指定的引數
SELECT * FROM emp WHERE salary IN(3600,7200,20000);ERE salary > 6000;
需求2:
# 查詢含有'精'字的所有員工資訊
# 查詢以'孫'開頭的所有員工資訊
# 查詢第二個字為'兔'的所有員工資訊
# 查詢沒有部門的員工資訊
# 查詢有部門的員工資訊
模糊查詢 萬用字元
萬用字元 | 說明 |
% | 表示匹配任意多個字串 |
_ | 表示匹配 一個字元 |
# 查詢含有'精'字的所有員工資訊
SELECT * FROM emp WHERE ename LIKE '%精%';
# 查詢以'孫'開頭的所有員工資訊
SELECT * FROM emp WHERE ename LIKE '孫%';
# 查詢第二個字為'兔'的所有員工資訊
SELECT * FROM emp WHERE ename LIKE '_兔%';
# 查詢沒有部門的員工資訊
SELECT * FROM emp WHERE dept_name IS NULL;
-- SELECT * FROM emp WHERE dept_name = NULL;
# 查詢有部門的員工資訊
SELECT * FROM emp WHERE dept_name IS NOT NULL;