日韩欧美视频第二区,秋霞成人午夜鲁丝一区二区三区,美女日批视频在线观看,av在线不卡免费

電子開發網

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

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

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

目錄

📖前言:

📑SQL概述&&通用語法:

🐳DDL:

🐻操作數據庫:

🐞數據類型:

🦉操作表:

🦦DML:

語法規則:

案例演示:

🦏DQL:

語法規則:

案例演示:

# 基礎查詢:

# 條件查詢:

#聚合函數:

# 分組查詢:

#排序查詢:

#分頁查詢:

執行順序:

🫎DCL:

語法規則:


📖前言:

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

 

SQL相當于一種工具,它可以幫助我們完成工作,創造價值。 本文就來詳細講解SQL的相關概念與操作,為后面的數據庫深入學習打下基礎。

😺😺😺數據庫與SQL相關說明:

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

 

📑SQL概述&&通用語法:

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

😀學習SQL的作用:

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

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

👌SQL分類:

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

🧐SQL通用語法:

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

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

🐳DDL:

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

🐻操作數據庫:

這里先列出總的語法,后面依次解釋說明:

# 庫操作
-- 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 ;

 

------->可以看到這里有四個系統自帶的數據庫

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

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

 

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

 

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

 

🐞數據類型:

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

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

🦏🦏🦏常用類型

  • 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博客

🦉操作表:

  • 創建表:

 

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

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

那么建表語句為:

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 表名 ;

 

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

1).會影響開發效率 ;

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

所以,后續語法與操作展示我將在SQL圖示化工具------Vavicat中展示,感興趣的小伙伴可已自行下載:Navicat 中國 | 支持 MySQL、Redis、MariaDB、MongoDB、SQL Server、SQLite、Oracle 和 PostgreSQL 的數據庫管理

 

🦦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相當于刪除所有數據 */

按照上述操作,我們創建表并給表插入信息:

案例演示:

-- 查看所有數據庫
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', '麗華', '女', 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');
-- 這里先用來查看所有表中信息,后續會講到
select * from emp;
/*  這里是不運行的部分,僅作展示
-- 修改表中信息:
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(數據查詢語言),數據查詢語言,用來查詢數據庫中表的記 錄。查詢關鍵字: SELECT

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

 

語法規則:

# 基礎查詢
-- 1.1 查詢多個字段
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:這里演示最后一個查詢結果,其他類似(以DML中創建的員工表為例):

 

# 條件查詢:

常用的比較運算符如下:

 

常用的邏輯運算符如下:

 

案例:

A. 查詢年齡等于 88 的員工:

select * from emp where age = 88;

B.查詢年齡小于等于 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的員工信息:

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

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

 

#聚合函數:

將一列數據作為一個整體,進行縱向計算 ,下面展示常見聚合函數:

 

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

案例:

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

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

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

select avg(age) from emp;

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

select max(age) from emp;

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

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

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

 

# 分組查詢:

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. 查詢年齡小于45的員工 , 并根據工作地址分組 , 獲取員工數量大于等于2的工作地址:

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

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

 

#排序查詢:

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:這里演示最后一個查詢結果,其他類似(以DML中創建的員工表為例):

 

#分頁查詢:

分頁操作在業務系統開發時,也是非常常見的一個功能,我們在網站中看到的各種各樣的分頁條,后臺 都需要借助于數據庫的分頁操作。

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:這里演示第一個查詢結果,其他類似(以DML中創建的員工表為例):

 

執行順序:

在講解DQL語句的具體語法之前,我們已經講解了DQL語句的完整語法,及編寫順序,接下來,我們要來說明的是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 數據庫 管理員)使用。

對于權限控制,官方提供了許多方法 ,可以參考:MySQL :: MySQL 8.0 Reference Manual :: 8.2.2 Privileges Provided by MySQL

這里不做過多展示了,有興趣的小伙伴可以自行想學習相應規則

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

Tags:SQL,基礎入門,數據庫  
責任編輯:admin
請文明參與討論,禁止漫罵攻擊。 昵稱:注冊  登錄
[ 查看全部 ] 網友評論
關于我們 - 聯系我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
返回頂部
刷新頁面
下到頁底
晶體管查詢
主站蜘蛛池模板: 勐海县| 扶沟县| 昭觉县| 兴城市| 格尔木市| 宁武县| 吉木乃县| 紫金县| 扎兰屯市| 锡林郭勒盟| 浮山县| 安多县| 禹城市| 双城市| 冷水江市| 桦川县| 曲靖市| 青田县| 阜新| 饶河县| 娄底市| 通海县| 寿阳县| 休宁县| 济阳县| 安仁县| 柘城县| 清远市| 全南县| 徐闻县| 荆门市| 宁德市| 辽源市| 南开区| 安塞县| 岱山县| 探索| 江永县| 博客| 普安县| 凤城市|