18luck网站

18luck网站電子設計 | 18luck网站Rss 2.0 會員中心 會員注冊
搜索: 您現在的位置: 18luck网站 >> 編程學習 >> 數據庫語言 >> 正文

數據庫入門-----SQL基礎知識_sql數據庫

作者:佚名    文章來源:網絡整理    點擊數:    更新時間:2024/10/1

目錄

📖前言:

📑SQL概述&&通用語法:

🐳DDL:

🐻操作數據庫:

🐞數據類型:

🦉操作表:

🦦DML:

語法規則:

案例演示:

🦏DQL:

語法規則:

案例演示:

# 基礎查詢:

# 條件查詢:

#聚合函數:

# 分組查詢:

#排序查詢:

#分頁查詢:

執行順序:

🫎DCL:

語法規則:


📖前言:

SQL語言有40多年的曆史,從(cong) 它被應用至今幾乎無處不在。我們(men) 消費的每一筆支付記錄,收集的每一條用戶信息,發出去的每一條消息,都會(hui) 使用數庫或與(yu) 其相關(guan) 的產(chan) 品來據存儲(chu) ,而操縱數據庫的語言正是 SQL !!!

 

SQL相當於(yu) 一種工具,它可以幫助我們(men) 完成工作,創造價(jia) 值。 本文就來詳細講解SQL的相關(guan) 概念與(yu) 操作,為(wei) 後麵的數據庫深入學習(xi) 打下基礎。

😺😺😺數據庫與(yu) SQL相關(guan) 說明:

名稱 全稱 簡稱
數據庫
存儲數據的倉庫,數據是有組織的進行存儲
DataBase DB
數據庫管 理係統
操縱和管理數據庫的大型軟件
DataBase Management
System (DBMS)
SQL
操作關係型數據庫的編程語言,定義了一套操作關係型數據庫統一標準
Structured Query
Language (SQL)

 

📑SQL概述&&通用語法:

SQL,全稱 Structured Query Language,結構化查詢語言。操作關(guan) 係型數據庫的編程語言,定義(yi) 了一套操作關(guan) 係型數據庫統一標準 。

😀學習(xi) SQL的作用:

SQL 是一門 ANSI 的標準計算機語言,用來訪問和操作數據庫係統。SQL 語句用於(yu) 取回和更新數據庫中的數據。

  • SQL 可創建新數據庫
  • SQL 麵向數據庫執行查詢
  • SQL 可從數據庫取回數據
  • SQL 可在數據庫中插入新的記錄
  • SQL 可從數據庫刪除記錄
  • SQL 可更新數據庫中的數據

👌SQL分類:

SQL 語句,根據其功能,主要分為四類: DDL DML DQL DCL

🧐SQL通用語法:

  • SQL語句可以單行或多行書寫,以分號結尾。
  • SQL 語句可以使用空格 / 縮進來增強語句的可讀性
  • MySQL 數據庫的 SQL 語句不區分大小寫,關鍵字建議使用大寫。​​​​​​
    * 注釋:
    1)單行注釋: -- 注釋內容 # 注釋內容
    2)多行注釋: /* 注釋內容 */

好了,通過上麵的一些說明,想必你對SQL有了一定了解了,那我們(men) 直接開始SQL的學習(xi) 吧~~~

🐳DDL:

Data Definition Language,數據定義(yi) 語言,用來定義(yi) 數據庫對象(數據庫,表,字段)

🐻操作數據庫:

這裏先列出總的語法,後麵依次解釋說明:

# 庫操作 -- 1.1 查詢所有數據庫 show databases ; -- 1.2 查詢當前數據庫 select database() ; -- 1.3 創建數據庫 create database [ if not exists ] 數據庫名 [ default charset 字符集 ] [ collate 排序 規則 ] ; -- 1.4 刪除數據庫 drop database [ if exists ] 數據庫名 ; -- 1.5 切換數據庫 use 數據庫名 ; # 表操作: -- 2.1 查詢當前數據庫所有表 show tables; -- 2.2 查看指定表結構 desc 表名 ; -- 2.3 查詢指定表的建表語句 show create table 表名 ; -- 2.4 創建表結構 create table 表名( 字段1 字段1類型 [comment 字段1注釋 ], 字段2 字段2類型 [comment 字段2注釋 ], 字段3 字段3類型 [comment 字段3注釋 ], ...... 字段n 字段n類型 [comment 字段n注釋 ] ) [ comment 表注釋 ] ;

  • 查詢所有數據庫:
show databases ;

 

------->可以看到這裏有四個(ge) 係統自帶的數據庫

  • 創建數據庫:

create database [ if not exists ] 數據庫名 [ default charset 字符集 ] [ collate 排序 規則 ] ; /*create database if not exists 數據庫名 --->如果數據庫已經存在(同名)則不創建,否則創建*/ /*中括號中的內(nei) 容是可選的,可以寫(xie) 也可以不寫(xie) */

在mysql中輸入下麵指令,名為(wei) itcast的數據庫創建成功

 

  • 查詢當前數據庫:

select database() ;

  • 切換數據庫 :
我們(men) 要操作某一個(ge) 數據庫下的表時,就需要通過該指令,切換到對應的數據庫下,否則是不能操作的。比如,切換到itcast 數據,執行如下 SQL
use itcast;

 

  • 刪除數據庫 :

drop database [ if exists ] 數據庫名 ; /*如果刪除一個(ge) 不存在的數據庫,將會(hui) 報錯。 此時,可以加上參數 if exists ,如果數據庫存在,再 執行刪除,否則不執行刪除。*/

 

🐞數據類型:

在建表語句中,我們(men) 指定字段的數據類型時,常常用到int ,varchar,那麽(me) 在MySQL中除了 以上的數據類型,還有哪些常見的數據類型呢? 接下來,我們(men) 就來詳細介紹一下MySQL的數據類型。

MySQL中的數據類型有很多,主要分為(wei) 三類:數值類型、字符串類型、日期時間類型。

🦏🦏🦏常用類型

  • int:整型
  • double:浮點型,例如 double(5,2)表示最多 5 位,其中必須有 2 位小數,即最大值為 999.99;
  • decimal:泛型型,在表單線方麵使用該類型,因為不會出現精度缺失問題;
  • char:固定長度字符串類型;(當輸入的字符不夠長度時會補空格)
  • varchar:固定長度字符串類型;
  • text:字符串類型;
  • blob:字節類型;
  • date:日期類型,格式為:yyyy-MM-dd;
  • time:時間類型,格式為:hh:mm:ss
  • timestamp:時間戳類型;

更多數據類型可以查看這篇文章:最全 SQL 字段類型(4種)、屬性(6種)總結_sql字段類型-CSDN博客

🦉操作表:

  • 創建表:

 

🐞🐞🐞注意:[ ] 中的內(nei) 容是可選的,最後一個(ge) 字段沒有逗號.

比如,我們創建一張表 tb_user ,對應的結構如下

那麽(me) 建表語句為(wei) :

create table tb_user( id int comment '編號', name varchar(50) comment '姓名', age int comment '年齡', gender varchar(1) comment '性別' ) comment '用戶表';

  • 查詢當前數據庫所有表:
show tables;
  • . 查看指定表結構:
desc 表名 ;

演示:

 

  • 查詢指定表的建表語句:

show create table 表名 ;

 

上述,我們(men) 已經講解了通過DDL語句,如何操作數據庫、操作表、操作表中的字段,而通過DDL語句執 行在命令進行操作,主要存在以下兩(liang) 點問題:

1).會(hui) 影響開發效率 ;

2). 使用起來,並不直觀,並不方便 ;

所以,後續語法與(yu) 操作展示我將在SQL圖示化工具------Vavicat中展示,感興(xing) 趣的小夥(huo) 伴可已自行下載:

 

🦦DML:

DML英文全稱是Data Manipulation Language(數據操作語言),用來對數據庫中表的數據記錄進 行增、刪、改操作。

語法規則:

-- 1. 添加數據 # 1.1 給指定字段添加數據 INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...); # 1.2 給全部字段添加數據 INSERT INTO 表名 VALUES (值1, 值2, ...); # 1.3 批量添加數據 INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), (值 1, 值2, ...) ; -- 2. 修改數據 UPDATE 表名 SET 字段名1 = 值1 , 字段名2 = 值2 , .... [ WHERE 條件 ] ; /* 沒有條件where表示將表中的所有數據都進行修改*/ -- 3. 刪除數據 DELETE FROM 表名 [ WHERE 條件 ] ; /* 沒有條件where相當於(yu) 刪除所有數據 */

按照上述操作,我們(men) 創建表並給表插入信息:

案例演示:

-- 查看所有數據庫 show databases; -- 創建itcast數據庫 create database if not exists itcast; -- 使用當前數據庫 use itcast; -- 創建員工表 create table emp( id int comment '編號', workno varchar(10) comment '工號', name varchar(10) comment '姓名', gender char(1) comment '性別', age tinyint unsigned comment '年齡', idcard char(18) comment '身份證號', workaddress varchar(50) comment '工作地址', entrydate date comment '入職時間' )comment '員工表'; -- 展示所創建的表信息 desc emp; -- 加入表中成員 INSERT INTO `emp` (`id`, `workno`, `name`, `gender`, `age`, `idcard`, `workaddress`, `entrydate`) VALUES (1, '0001', ' 柳岩', '女', 19, ' 123445', '北京', '2024-04-01'); INSERT INTO `emp` (`id`, `workno`, `name`, `gender`, `age`, `idcard`, `workaddress`, `entrydate`) VALUES (2, '0002', '坤坤', '男', 20, '34568', '北京', '2024-04-02'); INSERT INTO `emp` (`id`, `workno`, `name`, `gender`, `age`, `idcard`, `workaddress`, `entrydate`) VALUES (3, '0004', '張三', '男', 22, '45678', '上海', '2024-04-03'); INSERT INTO `emp` (`id`, `workno`, `name`, `gender`, `age`, `idcard`, `workaddress`, `entrydate`) VALUES (4, '0005', '李四', '男', 18, '23535', '深圳', '2024-04-05'); INSERT INTO `emp` (`id`, `workno`, `name`, `gender`, `age`, `idcard`, `workaddress`, `entrydate`) VALUES (5, '0006', '小明', '男', 35, '23535', '福建', '2024-04-06'); INSERT INTO `emp` (`id`, `workno`, `name`, `gender`, `age`, `idcard`, `workaddress`, `entrydate`) VALUES (6, '0007', '麗(li) 華', '女', 34, '135252', '天津', '2024-04-07'); INSERT INTO `emp` (`id`, `workno`, `name`, `gender`, `age`, `idcard`, `workaddress`, `entrydate`) VALUES (8, '0008', '小貓', '女', 18, '1235215', '福建', '2024-04-05'); INSERT INTO `emp` (`id`, `workno`, `name`, `gender`, `age`, `idcard`, `workaddress`, `entrydate`) VALUES (9, '0009', '涼涼', '男', 20, '12345135', '西安', '2024-04-04'); INSERT INTO `emp` (`id`, `workno`, `name`, `gender`, `age`, `idcard`, `workaddress`, `entrydate`) VALUES (10, '0010', '菜菜', '女', 19, '135235', '安徽', '2024-04-02'); -- 這裏先用來查看所有表中信息,後續會(hui) 講到 select * from emp; /* 這裏是不運行的部分,僅(jin) 作展示 -- 修改表中信息: update emp set name = '小王' where id = 1; update emp set entrydate = '2008-01-01'; -- 沒有條件where就是全部修改 -- 刪除表中數據 delete from emp where gender = '女'; */

運行結果:

 

注意:

  • DELETE 語句的條件可以有,也可以沒有,如果沒有條件,則會刪除整張表的所有數據。
  • DELETE 語句不能刪除某一個字段的值(可以使用UPDATE,將該字段值置為NULL即可)。
  • 所有字符串數據必須使用單引用!

🦏DQL:

DQL英文全稱是Data Query Language(數據查詢語言),數據查詢語言,用來查詢數據庫中表的記 錄。查詢關(guan) 鍵字: SELECT

在一個(ge) 正常的業(ye) 務係統中,查詢操作的頻次是要遠高於(yu) 增刪改的,當我們(men) 去訪問企業(ye) 官網、電商網站, 在這些網站中我們(men) 所看到的數據,實際都是需要從(cong) 數據庫中查詢並展示的。而且在查詢的過程中,可能 還會(hui) 涉及到條件、排序、分頁等操作。比如京東(dong) 購物網站:

 

語法規則:

# 基礎查詢 -- 1.1 查詢多個(ge) 字段 SELECT 字段1, 字段2, 字段3 ... FROM 表名 ; SELECT * FROM 表名 ;-- 帶*號是查詢所有字段 -- 1.2 字段設置別名: SELECT 字段1 [ AS 別名1 ] , 字段2 [ AS 別名2 ] ... FROM 表名; SELECT 字段1 [ 別名1 ] , 字段2 [ 別名2 ] ... FROM 表名; -- as可以省略 -- 1.3 去除重複記錄 SELECT DISTINCT 字段列表 FROM 表名; -- 保留不同的字段 # 條件查詢 SELECT 字段列表 FROM 表名 WHERE 條件列表 ; #聚合函數 SELECT 聚合函數(字段列表) FROM 表名 ; #分組查詢 SELECT 字段列表 FROM 表名 [ WHERE 條件 ] GROUP BY 分組字段名 [ HAVING 分組 後過濾條件 ]; # 排序查詢 SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1 , 字段2 排序方式2 ; ASC : 升序(默認值) -- 排序方式 DESC: 降序 -- 排序方式 # 分頁查詢 SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查詢記錄數 ;

案例演示:

# 基礎查詢

A.查詢指定字段 name, workno, age並返回:

select name,workno,age from emp;

B:查詢返回所有字段:

select id ,workno,name,gender,age,idcard,workaddress,entrydate from emp; -- 1 select * from emp; -- 2

C:查詢所有員工的工作地址,起別名:

select workaddress (as) '工作地址' from emp; -- as 可以省略

D:查詢公司員工的上班地址有哪些(不要重複):

select distinct workaddress '工作地址' from emp;

D:這裏演示最後一個(ge) 查詢結果,其他類似(以DML中創建的員工表為(wei) 例):

 

# 條件查詢:

常用的比較運算符如下:

 

常用的邏輯運算符如下:

 

案例:

A. 查詢年齡等於(yu) 88 的員工:

select * from emp where age = 88;

B.查詢年齡小於(yu) 等於(yu) 20 的員工信息:

select * from emp where age <= 20;

C.查詢年齡在15歲(包含) 到 20歲(包含)之間的員工信息:

select * from emp where age >= 15 && age <= 20; -- 1 select * from emp where age >= 15 and age <= 20; -- 2 select * from emp where age between 15 and 20; -- 3

D.查詢身份證號最後一位是X的員工信息:

-- % 匹配任意個(ge) 字符 select * from emp where idcard like '%X'; -- _ 匹配一個(ge) 字符,若身份證號18位,則X前有17個(ge) 空格 select * from emp where idcard like '_________________X';

D:這裏演示最後一個(ge) 查詢結果,其他類似(以DML中創建的員工表為(wei) 例):

 

#聚合函數:

將一列數據作為(wei) 一個(ge) 整體(ti) ,進行縱向計算 ,下麵展示常見聚合函數:

 

注意 : NULL值是不參與(yu) 所有聚合函數運算的!!!

案例:

A. 統計該企業(ye) 員工數量:

select count(*) from emp; -- 統計的是總記錄數,含創建的null字段 select count(idcard) from emp; -- 統計的是idcard字段不為(wei) null的記錄數

B.統計該企業(ye) 員工的平均年齡:

select avg(age) from emp;

C. 統計該企業(ye) 員工的最大年齡:

select max(age) from emp;

D.統計福建地區員工的年齡之和:

select sum(age) from emp where workaddress = '福建';

D:這裏演示最後一個(ge) 查詢結果,其他類似(以DML中創建的員工表為(wei) 例):

 

# 分組查詢:

SELECT 字段列表 FROM 表名 [ WHERE 條件 ] GROUP BY 分組字段名 [ HAVING 分組 後過濾條件 ];

🐻🐻🐻 where 和 having的區別:

  • 執行時機不同:where是分組之前進行過濾,不滿足where條件,不參與分組;而having是分組 之後對結果進行過濾。
  • 判斷條件不同:where不能對聚合函數進行判斷,而having可以

案例:

A. 根據性別分組 , 統計男性員工 和 女性員工的數量:

select gender, count(*) from emp group by gender ;

B. 根據性別分組 , 統計男性員工 和 女性員工的平均年齡:

select gender, avg(age) from emp group by gender

C. 查詢年齡小於(yu) 45的員工 , 並根據工作地址分組 , 獲取員工數量大於(yu) 等於(yu) 2的工作地址:

select workaddress, count(*) address_count from emp where age < 45 group by workaddress having address_count >= 2;

C:這裏演示最後一個(ge) 查詢結果,其他類似(以DML中創建的員工表為(wei) 例):

 

#排序查詢:

SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1 , 字段2 排序方式2 ;

注意:

  • 如果是升序, 可以不指定排序方式ASC ;
  • 如果是多字段排序,當第一個字段值相同時,才會根據第二個字段進行排序 ;

案例:

A. 根據年齡對公司的員工進行升序排序:

select * from emp order by age asc; select * from emp order by age; -- 默認升序排序

B.根據年齡對公司的員工進行升序排序 , 年齡相同 , 再按照入職時間進行降序排序:

select * from emp order by age asc , entrydate desc;

B:這裏演示最後一個(ge) 查詢結果,其他類似(以DML中創建的員工表為(wei) 例):

 

#分頁查詢:

分頁操作在業(ye) 務係統開發時,也是非常常見的一個(ge) 功能,我們(men) 在網站中看到的各種各樣的分頁條,後台 都需要借助於(yu) 數據庫的分頁操作。

1).語法:

SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查詢記錄數 ;

注意事項:

  • 起始索引從0開始,起始索引 = (查詢頁碼 - 1)* 每頁顯示記錄數。
  • 分頁查詢是數據庫的方言,不同的數據庫有不同的實現,MySQL中是LIMIT。
  • 如果查詢的是第一頁數據,起始索引可以省略,直接簡寫為 limit 10(一頁10條信息)。

案例:

A.查詢第1頁員工數據, 每頁展示10條記錄:

select * from emp limit 0,10; select * from emp limit 10; -- 第一頁,0可以省略

B.查詢第2頁員工數據, 每頁展示10條記錄 --------> (頁碼-1)*頁展示記錄數:

select * from emp limit 10,10;

A:這裏演示第一個(ge) 查詢結果,其他類似(以DML中創建的員工表為(wei) 例):

 

執行順序:

在講解DQL語句的具體(ti) 語法之前,我們(men) 已經講解了DQL語句的完整語法,及編寫(xie) 順序,接下來,我們(men) 要來說明的是DQL語句在執行時的執行順序,也就是先執行那一部分,後執行那一部分,下麵一張圖說明執行順序:

 

🫎DCL:

DCL英文全稱是Data Control Language(數據控製語言),用來管理數據庫用戶、控製數據庫的訪 問權限。

語法規則:

# 管理用戶 -- 1.1 查詢用戶 select * from mysql.user; -- 1.2 創建用戶 -- 1.3 修改用戶密碼 -- 1.4 刪除用戶 DROP USER '用戶名'@'主機名' ; # 權限控製 -- 2.1 查詢權限 SHOW GRANTS FOR '用戶名'@'主機名' ; -- 2.2 授予權限 GRANT 權限列表 ON 數據庫名.表名 TO '用戶名'@'主機名'; -- 2.3 撤銷權限 REVOKE 權限列表 ON 數據庫名.表名 FROM '用戶名'@'主機名';

注意:

  • 在MySQL中需要通過用戶名@主機名的方式,來唯一標識一個用戶
  • 主機名可以使用 % 通配
  • 這類SQL開發人員操作的比較少,主要是DBA( Database Administrator 數據庫 管理員)使用。

對於(yu) 權限控製,官方提供了許多方法 ,可以參考:

這裏不做過多展示了,有興(xing) 趣的小夥(huo) 伴可以自行想學習(xi) 相應規則

結語: 寫(xie) 博文不僅(jin) 僅(jin) 是為(wei) 了分享學習(xi) 經曆,同時這也有利於(yu) 我鞏固知識點,總結該知識點,由於(yu) 作者水平有限,對文章有任何問題的還請指出,接受大家的批評,讓我改進。同時也希望讀者們(men) 不吝嗇你們(men) 的點讚+收藏+關(guan) 注,你們(men) 的鼓勵是我創作的最大動力!

Tags:SQL,基礎入門,數據庫  
責任編輯:admin
請文明參與討論,禁止漫罵攻擊。 昵稱:注冊  登錄
[ 查看全部 ] 網友評論
關於我們 - 聯係我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
返回頂部
刷新頁麵
下到頁底
晶體管查詢