數據庫開發:mysql基礎一

文章目錄

  • 數據庫開發
    • Day15:MySQL基礎(一)
      • 一、MySQL介紹與安裝
        • 【1】MySQL介紹
          • ==(5)啟動MySQL服務==
          • (6)修改root登陸密碼
      • 二、SQL簡介
      • 三、數據庫操作
      • 四、數據表操作
        • 4.1、數據庫數據類型
        • 4.2、創建數據表
        • 4.3、約束
          • 【1】非空約束
          • 【2】唯一約束
          • 【3】默認值約束
          • 【4】主鍵約束
        • 4.4、查看表
        • 4.5、刪除表
        • 4.6、修改表結構
          • 修改表名和編碼
          • 修改表字段
      • 五、表記錄操作
        • 5.1、添加記錄
          • 【1】INSERT…VALUES語句
          • 【2】 INSERT…SET語句
        • 5.2、查詢記錄
          • 【1】查詢字段(select)
          • 【2】where語句
          • 【3】order:排序
          • 【4】group by:分組查詢
          • 【5】limit:記錄條數限制
          • 【6】distinct:查詢去重
        • 5.3、更新記錄
        • 5.4、刪除記錄

數據庫開發

從古至今人們都有存儲數據的需求,比方說記錄賬目開支、貨物清單、人口統計等等等等,存儲的方式也一直在變化。

很久很久以前,人們把數據存在動物骨頭上,后來存到竹片上,再后來存到紙上,直到近代發明了磁帶留聲機啥的,不過這些都是依賴人工進行整理、保存和查詢的,特點就是效率低下、錯誤率高、查找不方便等等等等。

后來人們發明了計算機,為了管理各種數據,人們發明了一種叫文件系統的東東,可以方便的通過文件的存儲路徑和文件名來訪問各個文件的內容,計算機程序也可以直接通過文件系統來操作各種文件,比人工管理爽多了。

隨著文件中存儲的內容越來越多,在文件中修改和查找某些數據已經變得非常困難了,所以人們發明了一種專門的軟件來管理存儲的數據,這些數據依照一定格式保存,通過這個軟件可以方便的對數據進行增刪改查操作,從而極大的提升了數據管理效率,人們就把這個管理數據的軟件叫做數據庫管理系統(英文:Database Management System,簡稱:DBMS)。

Day15:MySQL基礎(一)

在這里插入圖片描述

一、MySQL介紹與安裝

【1】MySQL介紹

MySQL是一種開源關系型數據庫管理系統(RDBMS),它是最流行和廣泛使用的數據庫系統之一。

  • 1996年,MySQL 1.0,由瑞典公司MySQL AB開發

  • 2008年1月16號 Sun公司收購MySQL。

  • 2009年4月20,Oracle收購Sun公司。

MySQL以其高性能、穩定性和可靠性而聞名,由于其體積小、速度快,尤其是開放源碼這一特點,并被廣泛應用于各種規模的應用程序和網站。

(5)啟動MySQL服務

方式1:啟動服務進程

把mysql注冊到操作系統作為系統服務,保證將來電腦重啟了就可以開機自啟了。在上面打開的黑窗口中如下以下命令:

# 啟動mysql服務
mysqld

確認是否安裝到了系統服務,可以通過【此電腦】- 【右鍵】-【管理】- 【服務與應用程序】 - 【服務】- 【右邊窗口】

快捷方式:

  1. 按下Ctrl + Alt + Del組合鍵。
  2. 在彈出的菜單中,選擇"任務管理器"。這將打開任務管理器。

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

注意這是進程,不是系統服務

通過以下命令按回車鍵,接著輸入上面初始化的登陸密碼,就可以登陸MySQL交互終端了。

mysql -uroot -p
# 退出終端
# exit

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

方式2:注冊系統服務并啟動

安裝名為"mysql80"的MySQL服務,但一定注意需要管理員權限,否則報權限錯誤

管理員權限啟動終端:

  1. 在開始菜單中找到 “命令提示符”。
  2. 右鍵單擊 “命令提示符” 并選擇 “以管理員身份運行”。
  3. 如果系統提示確認,點擊 “是” 或 “繼續” 以授予管理員權限。
mysqld --install mysql80
# 注銷服務,用于卸載的,別亂用
# mysqld --remove mysql80

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

mysql80就是自己取的服務名(服務器是唯一的),只要符合python的變量規則,不要使用中文,可以自己發揮。

windows下安裝的mysql默認是沒有啟動服務的。

net start mysql80
# 關閉mysql的命令:
# net stop mysql80
# 重啟mysql的命令:
# net start mysql80

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

通過以下命令按回車鍵,接著輸入上面初始化的登陸密碼,就可以登陸MySQL交互終端了。

mysql -uroot -p
# 退出終端
# exit

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

注意:mysql與linux一樣,在安裝成功以后默認就存在了一個權限最高的用戶,叫root用戶。

(6)修改root登陸密碼

接下來的操作是在登陸了mysql終端以后的操作。

alter user 'root'@'localhost' identified by '123';
# 'root' 就是要修改密碼的用戶名
# 'localhost' 表示允許用戶在什么地址下可以使用密碼登陸到數據庫服務器,localhost表示本地登陸
# '123'  就是新的密碼了,注意,不要設置空密碼!以后公司里面的密碼一定要非常難記的才最好。

完成了上面的操作以后,mysql就安裝完成了。

二、SQL簡介

對數據庫進行查詢和修改操作的語言叫做 SQL(Structured Query Language,結構化查詢語言)。SQL是專為數據庫而建立的操作命令集,是一種功能齊全的數據庫語言。

SQL 是一種數據庫查詢和程序設計語言,用于存取數據以及查詢、更新和管理關系數據庫系統。與其他程序設計語言(如 C語言、Java 等)不同的是,SQL 由很少的關鍵字組成,每個 SQL 語句通過一個或多個關鍵字構成。

在使用它時,只需要發出“做什么”的命令,“怎么做”是不用使用者考慮的。SQL功能強大、簡單易學、使用方便,已經成為了數據庫操作的基礎,并且現在幾乎所有的數據庫(Oracle、DB2、Sybase、SQL Server )均支持sql。

SQL的規范:

  1. 在數據庫系統中,SQL語句不區分大小寫(建議用大寫) 。但字符串常量區分大小寫。建議命令大寫,表名庫名小寫;

  2. SQL語句可單行或多行書寫,以“;”結尾。關鍵詞不能跨多行或簡寫。

  3. 用空格和縮進以及折行來提高語句的可讀性。子句通常位于獨立行,便于編輯,提高可讀性。

SELECT column1, column2, column3
FROM table1
WHERE column1 = 'value1'AND column2 = 'value2'AND column3 = 'value3'
  1. 注釋:
-- 單行注釋
/*
多行注釋
*/

三、數據庫操作

在這里插入圖片描述

數據庫的操作:
select database();查看當前數據庫。只有剛進入數據庫是是null初始狀態,一旦選擇數據庫就回不去了,只能從一個數據庫直接換到另一個數據庫,而不是先回到初始狀態再轉到某數據庫。

mysqldump -uroot -p123456 庫名 > backup.sql; 數據庫備份操作。要退出數據庫的環境執行。只需要執行sql文件就可以生成一樣的數據庫。

-- 1.創建數據庫(在磁盤上創建一個對應的文件夾)create database [if not exists] db_name [character set xxx] -- 2.查看數據庫show databases;  -- 查看所有數據庫SHOW DATABASES LIKE '%test%';-- 查看名字中包含 test 的數據庫show create database db_name; -- 查看數據庫的創建方式-- 3.修改數據庫alter database db_name [character set xxx] -- 4.刪除數據庫drop database [if exists] db_name;-- 5.使用數據庫use db_name; -- 切換數據庫  注意:進入到某個數據庫后沒辦法再退回之前狀態,但可以通過use進行切換select database(); --  查看當前使用的數據庫-- 數據庫備份mysqldump -u username -p password database_name > backup.sql

使用 DROP DATABASE 命令時要非常謹慎,在執行該命令后,MySQL 不會給出任何提示確認信息。

DROP DATABASE 刪除數據庫后,數據庫中存儲的所有數據表和數據也將一同被刪除,而且不能恢復。因此最好在刪除數據庫之前先將數據庫進行備份。

四、數據表操作

數據表是數據庫的重要組成部分,每一個數據庫都是由若干個數據表組成的。比如,在電腦中一個文件夾有若干excel文件。這里的文件夾就相當于數據庫,excel文件就相當于數據表。

MySQL 的數據類型有大概可以分為 5 種,分別是整數類型、浮點數類型、日期和時間類型、字符串類型、二進制類型等。

4.1、數據庫數據類型

數據庫的數據類型:
最常用的VARCHAR和CHAR,TEXT,ENUM,SET。
INT系列。DECMAL系列。
DATETIME,事件類型系列。
BINARY,VARBINARY,BIT二進制系列。
數據庫是有bool類型的,但是不能識別TRUE和FALSE關鍵字。所以可以通過VARCHAR(1),TINYINT(1)類型,通過1和0的方式來表示布爾類型。更好的是BIT(1)類型來表示,因為BIT(比特)類型只能存放1和0,會更節約空間。

在這里插入圖片描述

在 MySQL 中,布爾類型被稱為 BOOLEANBOOL 類型。BOOLEAN 類型用于存儲布爾值,即 TRUE(真)或 FALSE(假)。

MySQL 中的布爾類型可以有以下幾種表示方式:

  1. 整數類型:布爾類型可以表示為整數類型,其中 0 表示 FALSE,非零整數表示 TRUE。常見的表示 TRUE 的整數值為 1
  2. 字符串類型:布爾類型也可以表示為字符串類型,其中 '0' 表示 FALSE,而 '1' 表示 TRUE。這種表示方式更貼近人類可讀的布爾值。

需要注意的是,盡管 MySQL 支持布爾類型的不同表示方式,但它并沒有專門的存儲布爾值的數據類型。在實際使用中,你可以選擇使用 TINYINT(1)VARCHAR(1) 等其他數據類型來存儲布爾值,但約定使用 01'0''1' 來表示布爾值。

在這里插入圖片描述

在這里插入圖片描述

BIT數據類型可以用來存儲布爾值。

CREATE TABLE my_table (is_active BIT(1)
);
INSERT INTO my_table (is_active) VALUES (1); -- 存儲真值
INSERT INTO my_table (is_active) VALUES (0); -- 存儲假值
4.2、創建數據表
-- 語法
CREATE TABLE tab_name(field1 type [約束條件],field2 type,...fieldn type    -- 一定不要加逗號,否則報錯!)[character set utf8];

案例:

 CREATE TABLE student(          name varchar(20),gender bit,age int,birth date,gpa double(8,2) unsigned, -- 平均績點)character set=utf8;
-- show tables;
4.3、約束

約束:
非空約束NOT NULL
唯一約束UNIQUE
默認約束DEFAULT
主鍵約束PRIMARY KEY
如果沒有定義主鍵約束,系統會從上到下找我們的字段,如果我們的字段有同時設為唯一和非空的,就將找到的第一個設為主鍵。如果沒有系統就自己設置一個_id主鍵。

約束是一種限制,它通過限制表中的數據,來確保數據的完整性和唯一性。使用約束來限定表中的數據很多情況下是很有必要的。在 MySQL 中,約束是指對表中數據的一種約束,能夠幫助數據庫管理員更好地管理數據庫,并且能夠確保數據庫中數據的正確性和有效性。例如,在數據表中存放年齡的值時,如果存入 200、300 這些無效的值就毫無意義了。因此,使用約束來限定表中的數據范圍是很有必要的。

添加記錄:

INSERT <表名> 字段1,...字段n VALUES (1,...值n) ;
【1】非空約束

非空約束用來約束表中的字段不能為空。比如,在用戶信息表中,如果不添加用戶名,那么這條用戶信息就是無效的,這時就可以為用戶名字段設置非空約束。

創建表時可以使用NOT NULL關鍵字設置非空約束

CREATE TABLE user(name VARCHAR(22),age int
);
insert user (name) values ("yuan");CREATE TABLE user(name VARCHAR(22),age int NOT NULL
);insert user (name) values ("yuan");
【2】唯一約束

唯一約束(Unique Key)是指所有記錄中字段的值不能重復出現。例如,為name字段加上唯一性約束后,每條記錄的name值都是唯一的,不能出現重復的情況。

創建表時可以使用UNIQUE關鍵字設置非空約束

例如,在用戶信息表中,要避免表中的用戶名重名,就可以把用戶名列設置為唯一約束。

CREATE TABLE user(name VARCHAR(22),age int
);
insert user (name) values ("yuan");
insert user (name) values ("yuan");CREATE TABLE user(name VARCHAR(22) UNIQUE,age int
);
insert user (name) values ("yuan");
【3】默認值約束

默認值約束用來約束當數據表中某個字段不輸入值時,自動為其添加一個已經設置好的值。

創建表時可以使用DEFAULT關鍵字設置默認值約束

CREATE TABLE user(name VARCHAR(22),gender bit
);
insert user (name) values ("yuan");CREATE TABLE user(name VARCHAR(22),gender bit default 1
);
insert user (name) values ("yuan");CREATE TABLE user(name VARCHAR(22),gender varchar(2) default "保密"
);
【4】主鍵約束

主鍵約束是使用最頻繁的約束。在設計數據表時,一般情況下,都會要求表中設置一個主鍵。主鍵是表的一個特殊字段,該字段能唯一標識該表中的每條信息。

CREATE TABLE user(name VARCHAR(22),age int,gender varchar(1) default "男"
);
insert user (name,age) values ("yuan",18);
insert user (name,age) values ("rain",28);
insert user (name,age) values ("eric",23);
insert user (name,age) values ("yuan",18);-- 沒有唯一能標識該表中的每條記錄的字段值CREATE TABLE user(id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(20)
);
insert user (name) values ("yuan");
select * from user;
  1. 一張表中最多只能有一個主鍵
  2. 主鍵類型不一定必須是整型
  3. 表中如果沒有設置主鍵,默認設置NOT NULL和UNIQUE的字段為主鍵;此外,表中如果有多個NOT NULL和UNIQUE的字段,則按順序將第一個設置NOT NULL和UNIQUE的字段設為主鍵。所以主鍵一定是非空且唯一,但非空且唯一的字段不一定是主鍵。

講完約束,最后學生表就可以調整為

CREATE TABLE student(id int primary key auto_increment ,name varchar(20) not null,gender bit default 1,age int,birth date,gpa double(8,2) unsigned -- 平均績點)character set=utf8;
4.4、查看表
desc employee;    -- 查看表結構,等同于show columns from tab_name  
show tables            -- 查看當前數據庫中的所有的表
show create table tab_name      -- 查看當前數據庫表建表語句 
4.5、刪除表
DROP TABLE [IF EXISTS] 表名1 [ ,表名2, 表名3 ...]
4.6、修改表結構

可以找到一個規律:

當操作表和數據庫共有的指令時,要提前說明是表還是數據庫。例如:create,show,alter。

而add,rename,change,modify等就不需要加table,以為這幾個指令只是操作table的

當修改表字段的類型和名字時:都要重新寫約束。

因為修改表字段本質上時,刪除再添加。

修改表名和編碼
  • 修改表名

    ALTER TABLE <舊表名> RENAME [TO] <新表名>
  • 修該表所用的字符集

    ALTER TABLE 表名 [DEFAULT] CHARACTER SET <字符集名> 
    
修改表字段
  • 增加列(字段)

    ALTER TABLE <表名> ADD <新字段名><數據類型>[約束條件]firstafter 字段名];
    
  • 增加多個字段

    alter table users2 add addr varchar(20),add age  int first,add birth varchar(20) after name;
    
  • 刪除某字段

    ALTER TABLE <表名> DROP <字段名>
  • 修改某字段類型

    ALTER TABLE <表名> MODIFY <字段名> <數據類型> [完整性約束條件]firstafter 字段名];
    
  • 修改某字段名

    ALTER TABLE <表名> CHANGE <舊字段名> <新字段名> <新數據類型>  [完整性約束條件]firstafter 字段名];
    

五、表記錄操作


在這里插入圖片描述

可以有很多種方式的客戶端與服務端連接,從而對磁盤的數據進行操作


5.1、添加記錄

插入單挑記錄:字段映射值,insert student () values ()

每一次insert都是再撞擊表,heat the database。每次撞擊都會浪費時間。

所以插入大量數據時:不要一條一條來,要有一條直接insert。

INSERT 語句有兩種語法形式,分別是 INSERT…VALUES 語句和 INSERT…SET 語句。

【1】INSERT…VALUES語句
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);
  1. INSERT 語句后面的列名稱順序可以不是 表定義時的順序,即插入數據時,不需要按照表定義的順序插入,只要保證值的順序與列字段的順序相同就可以。
  2. 若向表中的所有列插入數據,則全部的列名均可以省略,直接采用 INSERT<表名>VALUES(…) 即可。
  3. 使用 INSERT…VALUES 語句可以向表中插入一行數據,也可以插入多行數據;
INSERT [INTO] <表名> [ <列名1> [ ,<列名n>] ] VALUES (1,值n),(1,值n),...(1,值n);
-- 用單條 INSERT 語句處理多個插入要比使用多條 INSERT 語句更快。

案例:

CREATE TABLE student
(id     int primary key auto_increment,name   varchar(20) not null,gender bit default 1,age    int,birth  date
)character set=utf8;-- 單行插入
INSERT
student (name,gender,age,birth) VALUES("yuan",1,18,"2002-11-12"),-- 多行批量插入
INSERT student (name,gender,age,birth) VALUES("張三",1,22,"2000-12-12"),
("李四",1,32,"1990-12-12"),
("王五",0,42,"1980-06-06");
【2】 INSERT…SET語句
INSERT INTO table_name
SET column1 = value1, column2 = value2, ...;

此語句用于直接給表中的某些列指定對應的列值,即要插入的數據的列名在 SET 子句中指定。對于未指定的列,列值會指定為該列的默認值。

5.2、查詢記錄

select * from student。這種查詢方式盡量不要用,效率很慢。

哪怕是要查詢所有的,要逐個寫上去select name,age,gender from student。

因為星號的方式會找有哪些字段,增加運行時間。

where是對記錄做篩選

having是對分組之后對組的內容做篩選

sql語句的執行順序

在這里插入圖片描述

在這里插入圖片描述

標準語法:

-- 查詢語法:SELECT *|field1,filed2 ...   FROM tab_nameWHERE 條件GROUP BY fieldHAVING 篩選ORDER BY fieldLIMIT 限制條數-- Mysql在執行sql語句時的執行順序:-- from join on where group by having select order by limit

準備數據:

CREATE TABLE emp2(id       INT PRIMARY KEY AUTO_INCREMENT,name     VARCHAR(20),gender   ENUM("male","female","other"),age      TINYINT,dep      VARCHAR(20),province VARCHAR(20),salary    DOUBLE(7,2),birthday DATE
) CHARACTER SET=utf8;INSERT INTO emp (name, gender, age, dep, province, salary, birthday)
VALUES ("George", "male", 24, "教學部", "河北省", 6000, '1999-02-18'),("danae", "male", 32, "運營部", "北京", 12000, '1992-07-12'),("Sera", "male", 38, "運營部", "河北省", 7000, '1986-11-05'),("Echo", "male", 19, "運營部", "河北省", 9000, '2002-03-28'),("Abel", "female", 24, "銷售部", "北京", 9000, '1999-09-10'),("John", "male", 28, "教學部", "山東省", 8000, '1993-06-15'),("Alice", "female", 32, "運營部", "北京", 10000, '1990-12-25'),("Bob", "male", 24, "教學部", "河北省", 9000, '1999-08-03'),("Cather", "female", 28, "銷售部", "山東省", 6000, '1993-04-20'),("David", "male", 34, "銷售部", "山東省", 12000, '1987-09-01'),("Emily", "female", 22, "教學部", "北京", 7000, '1999-01-08'),("Frank", "male", 24, "教學部", "河北省", 9000, '1999-07-17'),("Grace", "female", 32, "運營部", "北京", 8000, '1990-05-30'),("Henry", "male", 38, "運營部", "河北省", 9000, '1984-03-12'),("Ivy", "female", 19, "運營部", "河北省", 9000, '2002-08-22'),("Jack", "male", 24, "銷售部", "北京", 8000, '1999-10-05'),("Kelly", "female", 28, "教學部", "山東省", 10000, '1993-02-28'),("Leo", "male", 32, "運營部", "北京", 6000, '1990-11-11'),("Megan", "female", 24, "教學部", "河北省", 12000, '1999-06-03'),("Nick", "male", 34, "銷售部", "山東省", 7000, '1987-07-08'),("Olivia", "female", 22, "銷售部", "山東省", 9000, '1999-03-18'),("Peter", "male", 24, "教學部", "北京", 8000, '1999-12-01'),("Queen", "female", 32, "運營部", "河北省", 9000, '1990-09-15'),("Ryan", "male", 38, "運營部", "北京", 8000, '1984-11-20'),("Sandy", "female", 19, "運營部", "河北省", 10000, '2002-05-07'),("Tom", "male", 24, "銷售部", "北京", 7000, '1999-04-27'),("Uma", "female", 28, "教學部", "山東省", 9000, '1993-08-14'),("Victor", "male", 32, "運營部", "北京", 6000, '1990-02-05'),("Wendy", "female", 24, "教學部", "河北省", 12000, '1999-07-23'),("Xander", "male", 34, "銷售部", "山東省", 7000, '1987-12-16'),("Yvonne", "female", 22, "銷售部", "山東省", 9000, '1999-01-30'),("Zack", "male", 24, "教學部", "北京", 8000, '1999-10-13');
【1】查詢字段(select)
mysql> SELECT  * FROM emp;
mysql> SELECT  name,dep,salary FROM emp;
【2】where語句
-- where字句中可以使用:--比較運算符:> < >= <= <> != = between 10 and 100 值在10100之間in(10,20,30) 值是102030like 'yuan%'/*pattern可以是%或者_,如果是%則表示任意多字符,此例如唐僧,唐國強如果是_則表示一個字符唐_,只有唐僧符合。兩個_則表示兩個字符:__*/-- 正則 SELECT * FROM emp WHERE emp_name REGEXP '^yu';SELECT * FROM emp WHERE name REGEXP 'n$';  -- 邏輯運算符在多個條件直接可以使用邏輯運算符 and or not

練習:

-- 查詢年紀大于24的員工
SELECT * FROM emp WHERE age > 24;-- 查詢年齡在20到30之間的員工
SELECT * FROM emp WHERE age between 20 and 30;-- 查詢工資等于7000,8000和9000的所有員工
SELECT * FROM emp WHERE salary in (7000,8000,9000);-- 查詢名字以A開頭的員工
SELECT * FROM emp WHERE name like "A%";-- 查詢名字包含A的員工
SELECT * FROM emp WHERE name like "%A%";
SELECT * FROM emp WHERE REGEXP_LIKE(name, '.*A.*',"c");-- 查詢教學部的男老師信息
SELECT * FROM emp WHERE dep="教學部" AND gender="male";-- 查詢名字以A開頭的員工并且工資大于等于10000的員工的姓名
SELECT * FROM emp WHERE name like "A%" and salary>=10000;-- 查詢年齡小于25或工資低于10000的員工
SELECT * FROM emp WHERE age<25 or  salary < 8000;-- 日期相關的
SELECT *
FROM emp
WHERE birthday > '1990-01-01';SELECT *
FROM emp
WHERE MONTH(birthday) = 12;
【3】order:排序

按指定的列進行,排序的列即可是表中的列名,也可以是select語句后指定的別名。

-- 語法:
select *|field1,field2... from tab_name order by field [Asc|Desc]-- Asc 升序、Desc 降序,其中asc為默認值 ORDER BY 子句應位于SELECT語句的結尾。

練習:

-- 按年齡從高到低進行排序
SELECT * FROM emp ORDER BY age DESC ;-- 按工資從低到高進行排序
SELECT * FROM emp ORDER BY salary;-- 先按工資排序,工資相同的按年齡排序
SELECT * FROM emp ORDER BY salary,age;
【4】group by:分組查詢

GROUP BY 語句根據某個列對結果集進行分組。分組一般配合著聚合函數完成查詢。

常用聚合(統計)函數

  • max():最大值。
  • min():最小值。
  • avg():平均值。
  • sum():總和。
  • count():個數。

在MySQL的SQL執行邏輯中,where條件必須放在group by前面!也就是先通過where條件將結果查詢出來,再交給group by去分組,完事之后進行統計,統計之后的查詢用having。

練習:

-- 練習案例-- 查詢男女員工各有多少人-- 查詢教學部的員工最高工資:-- 查詢平均薪水超過8000的部門-- 查詢每個組的員工姓名-- 查詢公司一共有多少員工(可以將所有記錄看成一個組)-- 每年出生的員工人數-- 查詢公司所有員工的平均工資
【5】limit:記錄條數限制
SELECT * from emp limit 10;
SELECT * from emp limit 2,5;        --  跳過前兩條顯示接下來的五條紀錄
SELECT * from emp limit 2,2;
【6】distinct:查詢去重
-- 獲取員工表中不重復的年齡值和薪水值,并按照相應的字段進行升序排序。
SELECT distinct age from emp order by age;
SELECT distinct salary from emp order by salary;
5.3、更新記錄
UPDATE <表名> SET 字段 1=1 [,字段 2=2] [WHERE 子句 ]

案例:

-- 更新員工職位和工資-- 更改部門名稱-- 年齡大于35歲的員工薪資增加百分之十五-- 薪資最高的五個人降薪百分之三十
5.4、刪除記錄
DELETE FROM <表名> [WHERE 子句] [ORDER BY 子句] [LIMIT 子句]
  • <表名>:指定要刪除數據的表名。
  • ORDER BY 子句:可選項。表示刪除時,表中各行將按照子句中指定的順序進行刪除。
  • WHERE 子句:可選項。表示為刪除操作限定刪除條件,若省略該子句,則代表刪除該表中的所有行。
  • LIMIT 子句:可選項。用于告知服務器在控制命令被返回到客戶端前被刪除行的最大值。
-- 刪除薪資最高的五個人,相同薪資按年齡優先
-- 刪除教學部年齡最大的男老師

若有錯誤與不足請指出,關注DPT一起進步吧!!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/40953.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/40953.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/40953.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

對標 GPT-4o 的開源實時語音多模態模型:Moshi

是由法國的 AI 實驗室 Kyutai 推出的實時語音多模態模型&#xff0c;支持聽、說、看&#xff0c;最關鍵的是你現在就可以在瀏覽器中使用&#xff0c;如果這個鏈接延遲高&#xff0c;可以試試這個, 無需輸入郵箱&#xff0c;點擊 Join queue 即可。 簡單體驗了下&#xff0c;比…

#### golang中【堆】的使用及底層 ####

聲明&#xff0c;本文部分內容摘自&#xff1a; Go: 深入理解堆實現及應用-騰訊云開發者社區-騰訊云 數組實現堆 | WXue 堆&#xff08;Heap&#xff09;是實現優先隊列的數據結構&#xff0c;Go提供了接口和方法來操作堆。 應用 package mainimport ("container/heap&q…

結構方程模型-驗證性因子分析模型

初級 第7講 驗證性因子分析模_嗶哩嗶哩_bilibili

使用 ESP32 接收來自 MAX4466 模擬麥克風模塊的數據,并通過 DAC 輸出模擬音頻信號,可以通過以下步驟實現:

硬件準備 ESP32 開發板MAX4466 模擬麥克風模塊揚聲器或耳機接線 MAX4466 模塊輸出(AO) -> ESP32 ADC 引腳(如 GPIO 34)ESP32 DAC 引腳(如 GPIO 25 或 GPIO 26) -> 揚聲器或耳機軟件準備 音頻采集DAC 轉碼并播放代碼實現 以下代碼展示了如何從 MAX4466 讀取模擬音頻…

【Go語言入門學習筆記】Part7.閉包和defer關鍵字

一、前言 閉包有點像對象&#xff0c;而defer適合于類似功能中利用資源時&#xff0c;提前寫幾句defer 釋放資源&#xff0c;防止后面釋放資源忘記寫釋放資源。 二、學習代碼 package mainimport ("fmt" )// getC的返回值是一個函數&#xff0c;需要的參數為空&…

GitHub Pull Request流程詳解

GitHub Pull Request流程詳解 在協作開發中&#xff0c;GitHub的Pull Request&#xff08;PR&#xff09;功能至關重要&#xff0c;它允許開發者在代碼庫中進行修改、審查和合并代碼。本文將詳細介紹GitHub Pull Request的完整流程&#xff0c;幫助你更好地理解和使用這一強大…

網絡安全的十字路口:向“架構化”轉移

市場條件正在快速變化 針對上述這些問題&#xff0c;在這段時間里&#xff0c;安全技術供應商推出了許多技術解決方案&#xff0c;比如SIEM、SOAR、XDR、UEBA等&#xff0c;但新產品的推出并未使得安全態勢有所好轉&#xff0c;許多問題依然存在&#xff0c;這導致了市場動態的…

【DevOps】Java內存分配與JVM參數詳解

目錄 引言 JVM內存結構 JVM參數概述 堆內存分配 年輕代與老年代 調整堆內存大小 調整年輕代與老年代比例 元空間分配 調整元空間大小 垃圾回收 調整GC參數 調整GC日志 線程棧分配 調整線程棧大小 性能調優 結論 在Java開發中&#xff0c;理解Java虛擬機&#x…

claude3.5寫作——《基于灰色預測的中國人口數量預測》

文章目錄 站點和提問引言一、灰色預測模型介紹二、中國歷年人口數據三、灰色預測模型的建立1.建立原始序列2.生成1-AGO序列3.計算背景值4.構造數據矩陣并計算參數5.模型檢驗6.模型預測 四、預測結果分析五、政策建議結語參考文獻 站點和提問 站點&#xff1a;中國官方克勞德3.…

如何更改 Python pip 源為國內源

在使用 Python 安裝包工具 pip 時&#xff0c;經常會遇到下載速度慢的問題。這通常是因為默認使用的官方源 https://pypi.org/simple 在國內訪問速度較慢。為了提高下載速度&#xff0c;我們可以將 pip 源更改為國內的鏡像源。本文將介紹如何臨時和永久地更改 pip 源為國內源。…

光伏電站數據采集方案(基于工業路由器部署)

? 一、方案概述 本方案采用星創易聯SR500工業路由器作為核心網關設備&#xff0c;實現對光伏電站現場數據的實時采集、安全傳輸和遠程監控。SR500具備多接口、多功能、高可靠性等特點&#xff0c;能夠滿足光伏電站數據采集的各種需求。&#xff08;key-iot.com/iotlist/sr500…

RK3568平臺(opencv篇)ubuntu18.04上安裝opencv環境

一.什么是 OpenCV-Python OpenCV-Python 是一個 Python 綁定庫&#xff0c;旨在解決計算機視覺問題。 ? Python 是一種由 Guido van Rossum 開發的通用編程語言&#xff0c;它很快就變得非常流行&#xff0c;主要是 因為它的簡單性和代碼可讀性。它使程序員能夠用更少的代碼行…

C++ 運算符的優先級和關聯性表

C 運算符的優先級和關聯性表 1. Precedence and associativity (優先級和結合性)2. Alternative spellings (替代拼寫)3. C operator precedence and associativity table (C 運算符的優先級和關聯性表)References C documentation (C 文檔) https://learn.microsoft.com/en-us…

網絡IO模型之多路復用器.md

多路復用是什么&#xff1f;怎么理解&#xff1f; 本文主要涉及為 程序中處理網絡IO時的模型&#xff0c;對于系統內核而言網絡IO模型。這里只做普及使用 前置知識&#xff0c;什么是IO&#xff1f;怎么理解IO IO其實就是In和Out。中文翻譯是輸入和輸出&#xff0c;只要涉及到輸…

clone()方法

在Java中&#xff0c;clone() 方法是一個非常有趣且強大的工具&#xff0c;用于創建對象的一個副本。這個方法位于 Object 類中&#xff0c;因此可以被所有類使用。讓我們討論一下它的幾個要點&#xff1a; 什么是克隆&#xff1f; 克隆就是創建一個對象的新副本&#xff0c;這…

2005-2022全國及各省家庭承包耕地流轉總面積及經營耕地面積數據(無缺失)

2005-2022全國及各省家庭承包耕地流轉總面積及經營耕地面積數據&#xff08;無缺失&#xff09; 1、時間&#xff1a;2005-2022年 2、范圍&#xff1a;全國及30省 3、指標&#xff1a;家庭承包耕地流轉總面積、家庭承包經營耕地面積、土地流轉率、 4、來源&#xff1a;農村…

《web應用技術》第十一次課后作業

驗證過濾器進行權限驗證的原理。 創建Filter&#xff1a; package com.example.filter;import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException;WebFilter(urlPatterns "/*") public class DemoFilter implements Filter …

【3維BFS】個人練習-Leetcode-LCP 79. 提取咒文

題目鏈接&#xff1a;https://leetcode.cn/problems/kjpLFZ/ 題目大意&#xff1a;給一個矩陣matrix[][]&#xff0c;元素為小寫英文字母。給一個字符串mantra&#xff0c;求從矩陣的(0,0)位置開始&#xff0c;可以移動&#xff08;上下左右&#xff09;或者提取字母&#xff…

怎么搭建個人博客教程,附云主機選購指南

一、搭建個人博客教程 1. 規劃博客內容與技術棧 確定博客主題&#xff1a;首先明確博客的定位和主題&#xff0c;這將影響后續的技術選擇和內容規劃。選擇技術棧&#xff1a;根據個人偏好和技術背景&#xff0c;選擇合適的建站技術。例如&#xff0c;可以使用WordPress&#…

adobe pdf設置默認打開是滾動而不是單頁視圖

上班公司用adobe pdf&#xff0c;自己還不能安裝其它軟件。 每次打開pdf&#xff0c;總是默認單頁視圖&#xff0c;修改滾動后&#xff0c;下次打開又 一樣&#xff0c;有時候比較煩。 后面打開編輯->首選項&#xff0c; 如下修改&#xff0c;下次打開就是默認滾動了