2021-1-3 ~ 2021-1-6
本文比較長,這也是我第一次嘗試發長篇博客(24000余字),本文會從MySQL的安裝到SQL語言基礎,帶你入門資料庫,如果覺得對你有幫助的話,點個贊,點個關注吧,這將會給予我更多的動力,Thanks?(・ω・)ノ!!!
文章目錄
- 2021-1-3 ~ 2021-1-6
- 本文比較長,這也是我第一次嘗試發長篇博客(24000余字),本文會從MySQL的安裝到SQL語言基礎,帶你入門資料庫,如果覺得對你有幫助的話,點個贊,點個關注吧,這將會給予我更多的動力,Thanks?(・ω・)ノ!!!
- 一、Java Web 簡介
- Web:
- Java Web :
- 結構組成:
- 二、資料庫:
- MySQL
- 下載安裝:
- 1. 下載鏈接:
- 2. 配環境變數
- 3. 配置 MySQL 的組態檔
- 4. 啟動下 MySQL 資料庫:
- 1. 初始化MySQL
- 2. 注冊MySQL服務
- 3. 啟動MySQL服務
- 4. 改密碼:
- 5. 登錄 mysql
- 6. 退出 mysql
- 5. 卸載 MySQL 資料庫:(提桶跑路)
- MySQL資料模型
- 優點:
- SQL :
- SQL通用語法
- SQL分類
- 1. DDL (Data Definition Language)資料定義語言
- DDL--查詢庫
- DDL--操作表
- 1. 查詢表
- 2. 創建表
- 3. 洗掉表
- 4. 修改表
- 2. DML (Data Manipulation Language)資料操作語言
- 添加資料
- 修改資料
- 洗掉資料
- 3. DQL (Data Query Language)資料查詢語言
- 資料準備
- 查詢語法
- 查詢全部
- 查詢部分
- 多個欄位查詢
- 去除重復查詢
- 計算列的值(四則運算)
- 起別名
- 條件查詢
- 條件分類
- 條件查詢語法
- 排序查詢
- 排序分類
- 排序語法
- 聚合函式
- 聚合函式分類
- 聚合函式語法
- 分組查詢
- 分頁查詢
- 4. DCL (Data Control Language)資料控制語言
- MySQL 用戶設定
- 以下內容將在后續更新,敬請期待!!!!
- JDBC
- Maven
- MyBatis
一、Java Web 簡介
Web:
Web (World Wide Web) 即全球廣域網,也稱為萬維網,它是一種基于超文本和HTTP的、全球性的、動態互動的、跨平臺的分布式圖形資訊系統,是建立在Internet上的一種網路服務,為瀏覽者在Internet上查找和瀏覽資訊提供了圖形化的、易于訪問的直觀界面,其中的檔案及超級鏈接將Internet上的資訊節點組織成一個互為關聯的網狀結構,能夠通過瀏覽器訪問的網站,
web包括:web服務器和web客戶端兩部分,
Java Web :
是用Java技術來解決web互聯網領域的技術堆疊
結構組成:
- 網頁:展現資料
- 資料庫:存盤和管理資料
- Java web 程式:邏輯處理

二、資料庫:
- 存盤資料的倉庫,資料是有組織的進行存盤,英文:DateBase(DB)
- 資料管理系統:管理資料庫的大型軟體,英文:DateBase Management System( DBMS)
- 資料庫: 資料庫是一些關聯表的集合,.
- 資料表: 表是資料的矩陣,在一個資料庫中的表看起來像一個簡單的電子表格,
- 列: 一列(資料元素) 包含了相同的資料, 例如郵政編碼的資料,
- 行:一行(元組,或記錄)是一組相關的資料,例如一條用戶訂閱的資料,
- 冗余:存盤兩倍資料,冗余可以使系統速度更快,
- 主鍵:主鍵是唯一的,一個資料表中只能包含一個主鍵,你可以使用主鍵來查詢資料,
- 外鍵:外鍵用于關聯兩個表,
- 復合鍵:復合鍵(組合鍵)將多個列作為一個索引鍵,一般用于復合索引,
- 索引:使用索引可快速訪問資料庫表中的特定資訊,索引是對資料庫表中一列或多列的值 進行排序的一種結構,類似于書籍的目錄,
- 參照完整性: 參照的完整性要求關系中不允許參考不存在的物體,與物體完整性是關系模型必須滿足的完整性約束條件,目的是保證資料的一致性,
- SQL: (Structured Query Language)結構化查詢語言,操作關系型資料庫的編程語言,定義操作所有關系型資料庫的統一標準

MySQL
MySQL是一個關系型資料庫管理系統,由瑞典MySQL AB 公司開發,目前屬于 Oracle 旗下產品,MySQL 最流行的關系型資料庫管理系統,在 WEB 應用方面MySQL是最好的 RDBMS (Relational Database Management System,關系資料庫管理系統) 應用軟體之一,MySQL是一種關聯資料庫管理系統,關聯資料庫將資料保存在不同的表中,而不是將所有資料放在一個大倉庫內,這樣就增加了速度并提高了靈活性,MySQL所使用的 SQL 語言是用于訪問資料庫的最常用標準化語言,
下載安裝:
1. 下載鏈接:
MySQL官方鏈接https://downloads.mysql.com/archives/community/
2. 配環境變數
高級系統設定中的環境變數,設定path路徑

3. 配置 MySQL 的組態檔
打開剛剛解壓的檔案夾 D:\MySQL\mysql-5.7.24-winx64 ,在該檔案夾下創建 my.ini 組態檔,編輯 my.ini 配置以下基本資訊:
[mysql]
# 設定mysql客戶端默認字符集
default-character-set=utf8
[mysqld]
# 設定3306埠
port = 3306
# 設定mysql的安裝目錄
basedir=D:\\MySQL\\mysql-5.7.24-winx64
# 設定mysql資料庫的資料的存放目錄
datadir= D:\\MySQL\\mysql-5.7.24-winx64\data
# 允許最大連接數
max_connections=20
# 服務端使用的字符集默認為8位元編碼的latin1字符集
character-set-server=utf8
# 創建新表時將使用的默認存盤引擎
default-storage-engine=INNODB
# 跳過登錄密碼驗證
skip-grant-tables
4. 啟動下 MySQL 資料庫:
以管理員的身份打開cmd

1. 初始化MySQL
在命令列輸入如下命令:
mysqld --initialize-insecure
結果顯示:

命令列里沒有輸出
注意:
如果顯示:由于找不到MSVCR120.dll,無法繼續執行代碼,重新安裝程式可能會解決此問題,
解決辦法:這是因為沒有安裝如下軟體導致的,點擊如下鏈接,下載vcredist.
https://www.microsoft.com/zh-CN/download/details.aspx?id=40784
無腦安裝就好了
2. 注冊MySQL服務
在命令列輸入如下命令:
mysqld -install
結果顯示:

現在你的計算機上已經安裝好了MySQL服務,計算機可以稱其為:MySQL服務器
3. 啟動MySQL服務
在命令列輸入如下命令:
net start mysql//啟動服務
net stop mysql //停止服務
結果顯示:

4. 改密碼:
在命令列輸入如下命令:
mysqladmin -u root password 1234
結果顯示:

mysqladmin: [警告] 在命令列界面上使用密碼可能不安全,
警告:由于密碼將以明文形式發送到服務器,請使用 ssl 連接以確保密碼安全,
mysql管理員:
您不能在 mysqld 運行時使用“密碼”命令
禁用授權表(以 --skip-grant-tables 開始),
使用:“mysqladmin flush-privileges password '*'”代替
5. 登錄 mysql
在命令列輸入如下命令:
mysql -uroot -p
結果顯示:

6. 退出 mysql
在命令列輸入如下命令:
exit

5. 卸載 MySQL 資料庫:(提桶跑路)
1.敲入net stop mysql,回車
2.敲入mysqld -remove mysql,回車
3.洗掉MySQL目錄以及相關配置的環境變數,
MySQL資料模型
關系型資料庫:是建立在關系結構基礎上的資料庫,簡單來說,關系型資料庫是由多張能相互連接的二維表組成的資料庫
優點:
- 都是使用表結構,格式一致,便于維護,
- 使用通用的SQL語言操作,使用方便,可用于復雜查詢
- 資料存盤在磁盤中,安全,

資料庫就是檔案夾,資料表是檔案
SQL :
-
什么是SQL
- Structured Query Language:結構化查詢語言
- 其實就是定義了操作所有關系型資料庫的規則,每一種資料庫操作的方式可能會存在一些不一樣的地方,我們稱為“方言”,
-
SQL分類
- DDL(Data Definition Language)資料定義語言
- 用來定義資料庫物件:資料庫,表,列等,關鍵字:create, drop,alter 等
- DML(Data Manipulation Language)資料操作語言
- 用來對資料庫中表的資料進行增刪改,關鍵字:insert, delete, update 等
- DQL(Data Query Language)資料查詢語言
- 用來查詢資料庫中表的記錄(資料),關鍵字:select, where 等
- DCL(Data Control Language)資料控制語言(了解)
- 用來定義資料庫的訪問權限和安全級別,及創建用戶,關鍵字:GRANT, REVOKE 等
- DDL(Data Definition Language)資料定義語言
- 英文: Structured Query Language,簡稱SQL
- 結構化查詢語言,一門操作關系型資料庫的編程語言
- 定義操作所有關系型資料庫的統一標準
- 對于同一個需求,每一種資料庫操作的方式可能會有所不同,
SQL通用語法
- 單行或多行書寫,以分號結尾;
- MySQL資料庫的SQL陳述句不區分大小寫,關鍵字建議使用大寫
- 注釋:單行注釋:
-- 注釋內容或#注釋內容;多行注釋:/* 注釋內容 */
mysql> show databases;-- 資料結束
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql> show databases;#資料結束
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql> show databases;/*資料結束
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
/*> asjjfha
/*> hasjh
/*> */
SQL分類
- DDL (Data Definition Language)資料定義語言,用來定義資料庫物件:資料庫,表,列;
- DML (Data Manipulation Language)資料操作語言,用來對資料庫中表的資料進行增刪改;
- DQL (Data Query Language)資料查詢語言,用來查詢資料庫中表的記錄(資料);
- DCL (Data Control Language)資料控制語言,用來定義資料庫的訪問權限和安全級別,及創建用戶,

1. DDL (Data Definition Language)資料定義語言
DDL–查詢庫
1.查詢
在命令列輸入如下命令:
show databases;
2.創建
創建資料庫
create database 資料庫名稱;
創建資料庫(判斷,如果不存在則創建)
create database if not exists 資料庫名稱;
3.洗掉
洗掉資料庫:
drop database 資料庫名稱;
洗掉資料庫(判斷,如果存在則洗掉)
drop database if exists 資料庫名稱;
4.使用資料庫
查看當前使用的資料庫:
select database();
使用資料庫:
use 資料庫名稱;
DDL–操作表
1. 查詢表
查詢當前資料庫下所有表的名稱
show tables;
查詢表結構
desc 表名稱;
2. 創建表
create table 表名(
欄位名1 資料型別1,
欄位名2 資料型別2,
...
欄位名n 資料型別n
);
注意:最后一行末尾不加逗號,
樣例展示:
mysql> create database db1
-> ;
Query OK, 1 row affected (0.00 sec)
mysql> use db1
Database changed
mysql>
mysql>
mysql> create table tb_user(
-> id int,
-> username varchar(20),
-> password varchar(32)
-> );
Query OK, 0 rows affected (0.04 sec)
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| tb_user |
+---------------+
1 row in set (0.00 sec)
mysql> desc tb_user
-> ;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| username | varchar(20) | YES | | NULL | |
| password | varchar(32) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
mysql>
資料型別:數值,日期,字串

3. 洗掉表
洗掉表:
drop table 表名稱;
洗掉表(判斷,如果存在則洗掉)
drop table if exists 表名稱;
測驗樣例輸出:
mysql> show databases
-> ;
+--------------------+
| Database |
+--------------------+
| information_schema |
| db1 |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.01 sec)
mysql> use db1; -- 使用資料庫
Database changed
mysql> select database(); -- 查看當前使用的資料庫
+------------+
| database() |
+------------+
| db1 |
+------------+
1 row in set (0.00 sec)
mysql> show tables;-- 查詢當前資料庫下所有表的名稱
+---------------+
| Tables_in_db1 |
+---------------+
| tb_user |
+---------------+
1 row in set (0.00 sec)
mysql> desc tb_user;-- 查詢表結構
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| username | varchar(20) | YES | | NULL | |
| password | varchar(32) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
mysql> drop tb_user;-- 洗掉表
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'tb_user' at line 1
mysql> drop table tb_user;
Query OK, 0 rows affected (0.03 sec)
mysql> show tables;
Empty set (0.00 sec)
4. 修改表
1.修改表名
alter table 表名 rename to 新的表名;
測驗樣例:
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| hello |
+---------------+
1 row in set (0.01 sec)
mysql> desc hello;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| username | varchar(20) | YES | | NULL | |
| pass | int(11) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
mysql> alter table hello rename to user;\
Query OK, 0 rows affected (0.02 sec)
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| user |
+---------------+
1 row in set (0.00 sec)
2.添加一列:
alter table 表名 add 列名 資料型別;
測驗樣例:
mysql> alter table user add sex int;
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc user;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| username | varchar(20) | YES | | NULL | |
| pass | int(11) | YES | | NULL | |
| sex | int(11) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)
3.修改資料型別:
alter table 表名 modify 列名 新資料型別;
測驗樣例:
mysql> alter table user modify sex varchar(10);
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc user;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| username | varchar(20) | YES | | NULL | |
| pass | int(11) | YES | | NULL | |
| sex | varchar(10) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
4.修改列名和資料型別
alter table 表名 change 列名 新列名 新資料型別;
測驗樣例:
mysql> desc hello;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| username | varchar(20) | YES | | NULL | |
| password | varchar(32) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
mysql> alter table hello change password pass int;
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc hello;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| username | varchar(20) | YES | | NULL | |
| pass | int(11) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
5.修改字符集
-- 標準語法
alter table 表名 character set 字符集名稱;
-- 查看資料庫中資料表字符集
show table status from 資料庫名 like '資料表名';
6.洗掉列
alter table 表名 drop 列名;
測驗樣例:
mysql> alter table hello drop sex;
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc hello;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| username | varchar(20) | YES | | NULL | |
| password | varchar(32) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
2. DML (Data Manipulation Language)資料操作語言
添加資料
新增格式1:給指定列添加資料
-- 標準語法
INSERT INTO 表名(列名1,列名2,...) VALUES (值1,值2,...);
-- 查看表中所有資料
SELECT * FROM 表名;
測驗樣例:
mysql> insert into user(id,username) values(1,'zhangsan');
Query OK, 1 row affected (0.01 sec)
mysql> select * from user;
+------+----------+------+------+
| id | username | pass | sex |
+------+----------+------+------+
| 1 | zhangsan | NULL | NULL |
+------+----------+------+------+
1 row in set (0.01 sec)
新增格式2:默認給全部列添加資料
-- 標準語法
INSERT INTO 表名 VALUES (值1,值2,值3,...);
-- 查看表中所有資料
SELECT * FROM 表名;
測驗樣例:
mysql> insert into user values(4,'xiaoyan',6666,'female');
Query OK, 1 row affected (0.01 sec)
mysql> select * from user;
+------+----------+------+--------+
| id | username | pass | sex |
+------+----------+------+--------+
| 1 | zhangsan | NULL | NULL |
| 2 | lisi | 1234 | male |
| 3 | wangwu | 1234 | female |
| 4 | xiaoyan | 6666 | female |
+------+----------+------+--------+
4 rows in set (0.00 sec)
新增格式3:批量添加資料
-- 默認添加所有列資料 標準語法
INSERT INTO 表名 VALUES (值1,值2,值3,...),(值1,值2,值3,...),(值1,值2,值3,...);
-- 查看表中所有資料
SELECT * FROM 表名;
-- 給指定列添加資料 標準語法
INSERT INTO 表名(列名1,列名2,...) VALUES (值1,值2,...),(值1,值2,...),(值1,值2,...);
-- 查看表中所有資料
SELECT * FROM 表名;
測驗樣例:
mysql> insert into user(id,username,pass,sex) values(2,'lisi',1234,'male'),(3,'wangwu',1234,'female');
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from user;
+------+----------+------+--------+
| id | username | pass | sex |
+------+----------+------+--------+
| 1 | zhangsan | NULL | NULL |
| 2 | lisi | 1234 | male |
| 3 | wangwu | 1234 | female |
+------+----------+------+--------+
3 rows in set (0.00 sec)
mysql> insert into user values(4,'xiaoyan',6666,'female'),(4,'xiaoyan',6666,'female'),(4,'xiaoyan',6666,'female');
Query OK, 3 rows affected (0.04 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from user;
+------+----------+------+--------+
| id | username | pass | sex |
+------+----------+------+--------+
| 1 | zhangsan | NULL | NULL |
| 2 | lisi | 1234 | male |
| 3 | wangwu | 1234 | female |
| 4 | xiaoyan | 6666 | female |
| 4 | xiaoyan | 6666 | female |
| 4 | xiaoyan | 6666 | female |
| 4 | xiaoyan | 6666 | female |
+------+----------+------+--------+
7 rows in set (0.00 sec)
-
注意事項
- 列名和值的數量以及資料型別要對應
- 除了數字型別,其他資料型別的資料都需要加引號(單引雙引都可以,推薦單引)
修改資料
-- 標準語法
UPDATE 表名 SET 列名1 = 值1,列名2 = 值2,... [where 條件];
-- 查看所有資料
SELECT * FROM 表名;
測驗樣例:
mysql> update user set id=6,pass=8888 where username='xiaoyan';
Query OK, 4 rows affected (0.02 sec)
Rows matched: 4 Changed: 4 Warnings: 0
mysql> select * from user;
+------+----------+------+--------+
| id | username | pass | sex |
+------+----------+------+--------+
| 1 | zhangsan | NULL | NULL |
| 2 | lisi | 1234 | male |
| 3 | wangwu | 1234 | female |
| 6 | xiaoyan | 8888 | female |
| 6 | xiaoyan | 8888 | female |
| 6 | xiaoyan | 8888 | female |
| 6 | xiaoyan | 8888 | female |
+------+----------+------+--------+
7 rows in set (0.00 sec)
- 注意事項
- 修改陳述句中必須加條件
- 如果不加條件,則將所有資料都修改
洗掉資料
-- 標準語法
DELETE FROM 表名 [WHERE 條件];
-- 查看所有商品資訊
SELECT * FROM product;
測驗樣例:
mysql> delete from user where id = 6;
Query OK, 4 rows affected (0.00 sec)
mysql> select * from user;
+------+----------+------+--------+
| id | username | pass | sex |
+------+----------+------+--------+
| 1 | zhangsan | NULL | NULL |
| 2 | lisi | 1234 | male |
| 3 | wangwu | 1234 | female |
+------+----------+------+--------+
3 rows in set (0.00 sec)
mysql> delete from user;
Query OK, 3 rows affected (0.00 sec)
mysql> select * from user;
Empty set (0.00 sec)
- 注意事項
- 洗掉陳述句中必須加條件
- 如果不加條件,則將所有資料洗掉
3. DQL (Data Query Language)資料查詢語言
資料準備
-- 創建db1資料庫
CREATE DATABASE db1;
-- 使用db1資料庫
USE db1;
-- 創建資料表
CREATE TABLE product(
id INT, -- 商品編號
NAME VARCHAR(20), -- 商品名稱
price DOUBLE, -- 商品價格
brand VARCHAR(10), -- 商品品牌
stock INT, -- 商品庫存
insert_time DATE -- 添加時間
);
-- 添加資料
INSERT INTO product VALUES (1,'華為手機',3999,'華為',23,'2088-03-10'),
(2,'小米手機',2999,'小米',30,'2088-05-15'),
(3,'蘋果手機',5999,'蘋果',18,'2088-08-20'),
(4,'華為電腦',6999,'華為',14,'2088-06-16'),
(5,'小米電腦',4999,'小米',26,'2088-07-08'),
(6,'蘋果電腦',8999,'蘋果',15,'2088-10-25'),
(7,'聯想電腦',7999,'聯想',NULL,'2088-11-11');
測驗輸出:
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| product |
+---------------+
1 row in set (0.00 sec)
mysql> select * from product;
+------+--------------+-------+--------+-------+-------------+
| id | NAME | price | brand | stock | insert_time |
+------+--------------+-------+--------+-------+-------------+
| 1 | 華為手機 | 3999 | 華為 | 23 | 2088-03-10 |
| 2 | 小米手機 | 2999 | 小米 | 30 | 2088-05-15 |
| 3 | 蘋果手機 | 5999 | 蘋果 | 18 | 2088-08-20 |
| 4 | 華為電腦 | 6999 | 華為 | 14 | 2088-06-16 |
| 5 | 小米電腦 | 4999 | 小米 | 26 | 2088-07-08 |
| 6 | 蘋果電腦 | 8999 | 蘋果 | 15 | 2088-10-25 |
| 7 | 聯想電腦 | 7999 | 聯想 | NULL | 2088-11-11 |
+------+--------------+-------+--------+-------+-------------+
7 rows in set (0.00 sec)
查詢語法
select
欄位串列
from
表名串列
where
條件串列
group by
分組欄位
having
分組之后的條件
order by
排序
limit
分頁限定
查詢全部
-- 標準語法
SELECT * FROM 表名;
-- 查詢product表所有資料
-- 查詢所以列的資料,列名的串列可以使用*代替
SELECT * FROM product;
查詢部分
多個欄位查詢
-- 標準語法
SELECT 列名1,列名2,... FROM 表名;
-- 查詢名稱、價格、品牌
SELECT NAME,price,brand FROM product;
測驗樣例:
mysql> select NAME,price,brand from product;
+--------------+-------+--------+
| NAME | price | brand |
+--------------+-------+--------+
| 華為手機 | 3999 | 華為 |
| 小米手機 | 2999 | 小米 |
| 蘋果手機 | 5999 | 蘋果 |
| 華為電腦 | 6999 | 華為 |
| 小米電腦 | 4999 | 小米 |
| 蘋果電腦 | 8999 | 蘋果 |
| 聯想電腦 | 7999 | 聯想 |
+--------------+-------+--------+
7 rows in set (0.00 sec)
去除重復查詢
- 注意:只有全部重復的才可以去除
-- 標準語法
SELECT DISTINCT 列名1,列名2,... FROM 表名;
-- 查詢品牌
SELECT brand FROM product;
-- 查詢品牌,去除重復
SELECT DISTINCT brand FROM product;
測驗樣例:
mysql> select brand from product;
+--------+
| brand |
+--------+
| 華為 |
| 小米 |
| 蘋果 |
| 華為 |
| 小米 |
| 蘋果 |
| 聯想 |
+--------+
7 rows in set (0.00 sec)
mysql> select distinct brand from product;
+--------+
| brand |
+--------+
| 華為 |
| 小米 |
| 蘋果 |
| 聯想 |
+--------+
4 rows in set (0.00 sec)
計算列的值(四則運算)
-- 標準語法
SELECT 列名1 運算子(+ - * /) 列名2 FROM 表名;
/*
計算列的值
標準語法:
SELECT 列名1 運算子(+ - * /) 列名2 FROM 表名;
如果某一列為null,可以進行替換
ifnull(運算式1,運算式2)
運算式1:想替換的列
運算式2:想替換的值
*/
-- 查詢商品名稱和庫存,庫存數量在原有基礎上加10
SELECT NAME,stock+10 FROM product;
-- 查詢商品名稱和庫存,庫存數量在原有基礎上加10,進行null值判斷
SELECT NAME,IFNULL(stock,0)+10 FROM product;
起別名
-- 標準語法
SELECT 列名1,列名2,... AS 別名 FROM 表名;
-- 查詢商品名稱和庫存,庫存數量在原有基礎上加10,進行null值判斷,起別名為getSum
SELECT NAME,IFNULL(stock,0)+10 AS getsum FROM product;
SELECT NAME,IFNULL(stock,0)+10 getsum FROM product;
測驗樣例:
mysql> select NAME,stock from product;
+--------------+-------+
| NAME | stock |
+--------------+-------+
| 華為手機 | 23 |
| 小米手機 | 30 |
| 蘋果手機 | 18 |
| 華為電腦 | 14 |
| 小米電腦 | 26 |
| 蘋果電腦 | 15 |
| 聯想電腦 | NULL |
+--------------+-------+
7 rows in set (0.00 sec)
mysql> SELECT NAME,stock+10 FROM product;
+--------------+----------+
| NAME | stock+10 |
+--------------+----------+
| 華為手機 | 33 |
| 小米手機 | 40 |
| 蘋果手機 | 28 |
| 華為電腦 | 24 |
| 小米電腦 | 36 |
| 蘋果電腦 | 25 |
| 聯想電腦 | NULL |
+--------------+----------+
7 rows in set (0.00 sec)
mysql> select NAME,IFNULL(stock,0)+10 getsum from product;
+--------------+--------+
| NAME | getsum |
+--------------+--------+
| 華為手機 | 33 |
| 小米手機 | 40 |
| 蘋果手機 | 28 |
| 華為電腦 | 24 |
| 小米電腦 | 36 |
| 蘋果電腦 | 25 |
| 聯想電腦 | 10 |
+--------------+--------+
7 rows in set (0.01 sec)
條件查詢
條件分類
| 符號 | 功能 |
|---|---|
| > | 大于 |
| < | 小于 |
| >= | 大于等于 |
| <= | 小于等于 |
| = | 等于 ‘==’是錯的 |
<> 或 != | 不等于 |
| BETWEEN … AND … | 在某個范圍之內(都包含) |
| IN(…) | 多選一 |
| LIKE 占位符 | 模糊查詢 _單個任意字符 %多個任意字符 |
IS NULL | 是NULL |
IS NOT NULL | 不是NULL |
| AND 或 && | 并且 |
| OR 或 || | 或者 |
| NOT 或 ! | 非,不是 |
條件查詢語法
-- 標準語法
SELECT 列名 FROM 表名 WHERE 條件;
-- 查詢庫存大于20的商品資訊
SELECT * FROM product WHERE stock > 20;
-- 查詢品牌為華為的商品資訊
SELECT * FROM product WHERE brand='華為';
-- 查詢金額在4000 ~ 6000之間的商品資訊
SELECT * FROM product WHERE price >= 4000 AND price <= 6000;
SELECT * FROM product WHERE price BETWEEN 4000 AND 6000;
-- 查詢庫存為14、30、23的商品資訊
SELECT * FROM product WHERE stock=14 OR stock=30 OR stock=23;
SELECT * FROM product WHERE stock IN(14,30,23);
-- 查詢庫存為null的商品資訊
SELECT * FROM product WHERE stock IS NULL;
-- 查詢庫存不為null的商品資訊
SELECT * FROM product WHERE stock IS NOT NULL;
-- 查詢名稱以小米為開頭的商品資訊
SELECT * FROM product WHERE NAME LIKE '小米%';
-- 查詢名稱第二個字是為的商品資訊
SELECT * FROM product WHERE NAME LIKE '_為%';
-- 查詢名稱為四個字符的商品資訊
SELECT * FROM product WHERE NAME LIKE '____';
-- 查詢名稱中包含電腦的商品資訊
SELECT * FROM product WHERE NAME LIKE '%電腦%';
測驗函式:
mysql> SELECT * FROM product WHERE NAME LIKE '_為%';
+------+--------------+-------+--------+-------+-------------+
| id | NAME | price | brand | stock | insert_time |
+------+--------------+-------+--------+-------+-------------+
| 1 | 華為手機 | 3999 | 華為 | 23 | 2088-03-10 |
| 4 | 華為電腦 | 6999 | 華為 | 14 | 2088-06-16 |
+------+--------------+-------+--------+-------+-------------+
2 rows in set (0.01 sec)
mysql> SELECT * FROM product WHERE NAME LIKE '%電腦%';
+------+--------------+-------+--------+-------+-------------+
| id | NAME | price | brand | stock | insert_time |
+------+--------------+-------+--------+-------+-------------+
| 4 | 華為電腦 | 6999 | 華為 | 14 | 2088-06-16 |
| 5 | 小米電腦 | 4999 | 小米 | 26 | 2088-07-08 |
| 6 | 蘋果電腦 | 8999 | 蘋果 | 15 | 2088-10-25 |
| 7 | 聯想電腦 | 7999 | 聯想 | NULL | 2088-11-11 |
+------+--------------+-------+--------+-------+-------------+
4 rows in set (0.00 sec)
排序查詢
排序分類
- 注意:多個排序條件,當前邊的條件值一樣時,才會判斷第二條件
| 關鍵詞 | 功能 |
|---|---|
| ORDER BY 列名1 排序方式1,列名2 排序方式2 | 對指定列排序,ASC升序(默認的) DESC降序 |
排序語法
-- 標準語法
SELECT 列名 FROM 表名 [WHERE 條件] ORDER BY 列名1 排序方式1,列名2 排序方式2;
-- 按照庫存升序排序,默認升序
SELECT * FROM product ORDER BY stock ASC;
-- 查詢名稱中包含手機的商品資訊,按照金額降序排序
SELECT * FROM product WHERE NAME LIKE '%手機%' ORDER BY price DESC;
-- 按照金額升序排序,如果金額相同,按照庫存降序排列
SELECT * FROM product ORDER BY price ASC,stock DESC;
測驗樣例:
mysql> select * from product order by insert_time asc;
+------+--------------+-------+--------+-------+-------------+
| id | NAME | price | brand | stock | insert_time |
+------+--------------+-------+--------+-------+-------------+
| 1 | 華為手機 | 3999 | 華為 | 23 | 2088-03-10 |
| 2 | 小米手機 | 2999 | 小米 | 30 | 2088-05-15 |
| 4 | 華為電腦 | 6999 | 華為 | 14 | 2088-06-16 |
| 5 | 小米電腦 | 4999 | 小米 | 26 | 2088-07-08 |
| 3 | 蘋果手機 | 5999 | 蘋果 | 18 | 2088-08-20 |
| 6 | 蘋果電腦 | 8999 | 蘋果 | 15 | 2088-10-25 |
| 7 | 聯想電腦 | 7999 | 聯想 | NULL | 2088-11-11 |
+------+--------------+-------+--------+-------+-------------+
7 rows in set (0.00 sec)
mysql> SELECT * FROM product WHERE NAME LIKE '%手機%' ORDER BY price DESC;
+------+--------------+-------+--------+-------+-------------+
| id | NAME | price | brand | stock | insert_time |
+------+--------------+-------+--------+-------+-------------+
| 3 | 蘋果手機 | 5999 | 蘋果 | 18 | 2088-08-20 |
| 1 | 華為手機 | 3999 | 華為 | 23 | 2088-03-10 |
| 2 | 小米手機 | 2999 | 小米 | 30 | 2088-05-15 |
+------+--------------+-------+--------+-------+-------------+
3 rows in set (0.00 sec)
mysql> SELECT * FROM product ORDER BY price ASC,stock DESC;
+------+--------------+-------+--------+-------+-------------+
| id | NAME | price | brand | stock | insert_time |
+------+--------------+-------+--------+-------+-------------+
| 2 | 小米手機 | 2999 | 小米 | 30 | 2088-05-15 |
| 1 | 華為手機 | 3999 | 華為 | 23 | 2088-03-10 |
| 5 | 小米電腦 | 4999 | 小米 | 26 | 2088-07-08 |
| 3 | 蘋果手機 | 5999 | 蘋果 | 18 | 2088-08-20 |
| 4 | 華為電腦 | 6999 | 華為 | 14 | 2088-06-16 |
| 7 | 聯想電腦 | 7999 | 聯想 | NULL | 2088-11-11 |
| 6 | 蘋果電腦 | 8999 | 蘋果 | 15 | 2088-10-25 |
+------+--------------+-------+--------+-------+-------------+
7 rows in set (0.00 sec)
聚合函式
- 將一列資料作為一個整體,進行縱向的計算,null值不參與運算
聚合函式分類
| 函式名 | 功能 |
|---|---|
| count(列名) | 統計數量(一般選用不為null的列) |
| max(列名) | 最大值 |
| min(列名) | 最小值 |
| sum(列名) | 求和 |
| avg(列名) | 平均值 |
聚合函式語法
-- 標準語法
SELECT 函式名(列名) FROM 表名 [WHERE 條件];
-- 計算product表中總記錄條數
SELECT COUNT(*) FROM product;
-- 獲取最高價格
SELECT MAX(price) FROM product;
-- 獲取最高價格的商品名稱
SELECT NAME,price FROM product WHERE price = (SELECT MAX(price) FROM product);
-- 獲取最低庫存
SELECT MIN(stock) FROM product;
-- 獲取最低庫存的商品名稱
SELECT NAME,stock FROM product WHERE stock = (SELECT MIN(stock) FROM product);
-- 獲取總庫存數量
SELECT SUM(stock) FROM product;
-- 獲取品牌為蘋果的總庫存數量
SELECT SUM(stock) FROM product WHERE brand='蘋果';
-- 獲取品牌為小米的平均商品價格
SELECT AVG(price) FROM product WHERE brand='小米';
分組查詢
- 分組之后,查詢的欄位為聚合函式和分組欄位,查詢其他欄位毫無意義,
- where 和 having 的區別:
- 執行時機不一致:where 是分組前經行限定,不滿足 where 條件,則不參與分組,而 having 是分組之后對結果進行過濾,
- 可判斷的條件不一樣:where 不能對聚合函式進行判斷, having 可以,
- 執行順序:
where > 聚合函式 > having
-- 標準語法
SELECT 列名 FROM 表名 [WHERE 條件] GROUP BY 分組列名 [HAVING 分組后條件過濾] [ORDER BY 排序列名 排序方式];
-- 按照品牌分組,獲取每組商品的總金額
SELECT brand,SUM(price) FROM product GROUP BY brand;
-- 對金額大于4000元的商品,按照品牌分組,獲取每組商品的總金額
SELECT brand,SUM(price) FROM product WHERE price > 4000 GROUP BY brand;
-- 對金額大于4000元的商品,按照品牌分組,獲取每組商品的總金額,只顯示總金額大于7000元的
SELECT brand,SUM(price) AS getSum FROM product WHERE price > 4000 GROUP BY brand HAVING getSum > 7000;
-- 對金額大于4000元的商品,按照品牌分組,獲取每組商品的總金額,只顯示總金額大于7000元的、并按照總金額的降序排列
SELECT brand,SUM(price) AS getSum FROM product WHERE price > 4000 GROUP BY brand HAVING getSum > 7000 ORDER BY getSum DESC;
測驗樣例:
mysql> select brand,SUM(price) from product group by brand;
+--------+------------+
| brand | SUM(price) |
+--------+------------+
| 華為 | 10998 |
| 小米 | 7998 |
| 聯想 | 7999 |
| 蘋果 | 14998 |
+--------+------------+
4 rows in set (0.01 sec)
mysql> select brand,sum(price) from product where price>4000 group by brand;
+--------+------------+
| brand | sum(price) |
+--------+------------+
| 華為 | 6999 |
| 小米 | 4999 |
| 聯想 | 7999 |
| 蘋果 | 14998 |
+--------+------------+
4 rows in set (0.01 sec)
mysql> select brand,sum(price) as getsum from product where price>4000 group by brand having getsum>7000;
+--------+--------+
| brand | getsum |
+--------+--------+
| 聯想 | 7999 |
| 蘋果 | 14998 |
+--------+--------+
2 rows in set (0.00 sec)
mysql> select brand,sum(price) as getsum from product where price>4000 group by brand having getsum>7000 order by getsum desc;
+--------+--------+
| brand | getsum |
+--------+--------+
| 蘋果 | 14998 |
| 聯想 | 7999 |
+--------+--------+
2 rows in set (0.00 sec)
分頁查詢
開始索引從 0 開始,計算公式:起始索引=(當前頁碼-1)*每頁條數
-- 標準語法
SELECT 列名 FROM 表名 [WHERE 條件] GROUP BY 分組列名 [HAVING 分組后條件過濾] [ORDER BY 排序列名 排序方式] LIMIT 開始索引,查詢條數;
-- 公式:開始索引 = (當前頁碼-1) * 每頁顯示的條數
-- 每頁顯示2條資料
SELECT * FROM product LIMIT 0,2; -- 第一頁 開始索引=(1-1) * 2
SELECT * FROM product LIMIT 2,2; -- 第二頁 開始索引=(2-1) * 2
SELECT * FROM product LIMIT 4,2; -- 第三頁 開始索引=(3-1) * 2
SELECT * FROM product LIMIT 6,2; -- 第四頁 開始索引=(4-1) * 2
測驗樣例:
mysql> SELECT * FROM product LIMIT 0,3;
+------+--------------+-------+--------+-------+-------------+
| id | NAME | price | brand | stock | insert_time |
+------+--------------+-------+--------+-------+-------------+
| 1 | 華為手機 | 3999 | 華為 | 23 | 2088-03-10 |
| 2 | 小米手機 | 2999 | 小米 | 30 | 2088-05-15 |
| 3 | 蘋果手機 | 5999 | 蘋果 | 18 | 2088-08-20 |
+------+--------------+-------+--------+-------+-------------+
3 rows in set (0.00 sec)
mysql> select * from product limit 3,3;
+------+--------------+-------+--------+-------+-------------+
| id | NAME | price | brand | stock | insert_time |
+------+--------------+-------+--------+-------+-------------+
| 4 | 華為電腦 | 6999 | 華為 | 14 | 2088-06-16 |
| 5 | 小米電腦 | 4999 | 小米 | 26 | 2088-07-08 |
| 6 | 蘋果電腦 | 8999 | 蘋果 | 15 | 2088-10-25 |
+------+--------------+-------+--------+-------+-------------+
3 rows in set (0.00 sec)
4. DCL (Data Control Language)資料控制語言
DCL學習
MySQL 用戶設定
如果你需要添加 MySQL 用戶,你只需要在 mysql 資料庫中的 user 表添加新用戶即可,
以下為添加用戶的的實體,用戶名為guest,密碼為guest123,并授權用戶可進行 SELECT, INSERT 和 UPDATE操作權限:
mysql> use mysql;
Database changed
mysql> INSERT INTO user
(host, user, password,
select_priv, insert_priv, update_priv)
VALUES ('localhost', 'guest',
PASSWORD('guest123'), 'Y', 'Y', 'Y');
Query OK, 1 row affected (0.20 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 1 row affected (0.01 sec)
mysql> SELECT host, user, password FROM user WHERE user = 'guest';
+-----------+---------+------------------+
| host | user | password |
+-----------+---------+------------------+
| localhost | guest | 6f8c114b58f2ce9e |
+-----------+---------+------------------+
1 row in set (0.00 sec)
在添加用戶時,請注意使用MySQL提供的 PASSWORD() 函式來對密碼進行加密, 你可以在以上實體看到用戶密碼加密后為: 6f8c114b58f2ce9e.
注意:在 MySQL5.7 中 user 表的 password 已換成了authentication_string,
注意:password() 加密函式已經在 8.0.11 中移除了,可以使用 MD5() 函式代替,
注意:在注意需要執行 FLUSH PRIVILEGES 陳述句, 這個命令執行后會重新載入授權表,
如果你不使用該命令,你就無法使用新創建的用戶來連接mysql服務器,除非你重啟mysql服務器,
你可以在創建用戶時,為用戶指定權限,在對應的權限列中,在插入陳述句中設定為 ‘Y’ 即可,用戶權限串列如下:
Select_priv
Insert_priv
Update_priv
Delete_priv
Create_priv
Drop_priv
Reload_priv
Shutdown_priv
Process_priv
File_priv
Grant_priv
References_priv
Index_priv
Alter_priv
另外一種添加用戶的方法為通過SQL的 GRANT 命令,以下命令會給指定資料庫TUTORIALS添加用戶 zara ,密碼為 zara123 :
mysql> use mysql;
Database changed
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
-> ON TUTORIALS.*
-> TO 'zara'@'localhost'
-> IDENTIFIED BY 'zara123';
以上命令會在mysql資料庫中的user表創建一條用戶資訊記錄,
注意: MySQL 的SQL陳述句以分號 ; 作為結束標識,
以下內容將在后續更新,敬請期待!!!!
JDBC
JDBC API 是一個 Java API,它可以訪問任何型別的表格資料,特別是可以訪問存盤在關系資料庫里的資料,JDBC 可以用 Java 語言在各種平臺上實作,
Maven
Apache Maven 是一套軟體工程管理和整合工具,基于專案物件模型(POM)的概念,通過一個中央資訊管理模塊,Maven 能夠管理專案的構建、報告和檔案,
MyBatis
MyBatis 是支持定制化 SQL、存盤程序以及高級映射的優秀的持久層框架,MyBatis 避免了幾乎所有的 JDBC 代碼和手動設定引數以及獲取結果集,MyBatis 可以對配置和原生Map使用簡單的 XML 或注解,將介面和 Java 的 POJOs(Plain Old Java Objects,普通的 Java物件)映射成資料庫中的記錄,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/404347.html
標籤:java
