01-MySQL(上)

一、數(shù)據(jù)庫簡(jiǎn)介

1.數(shù)據(jù)庫系統(tǒng)

1.1數(shù)據(jù)庫

DataBase【DB】,指的是長(zhǎng)期保存到計(jì)算機(jī)上的數(shù)據(jù),按照一定順序組織,可以被各種用戶或者應(yīng)用共享的數(shù)據(jù)集合

【用于存儲(chǔ)數(shù)據(jù)的地方,可以視為存儲(chǔ)數(shù)據(jù)的容器】

1.2數(shù)據(jù)庫管理系統(tǒng)

DataBase Management System【DBMS】,能夠管理和操作數(shù)據(jù)庫的大型的軟件

用于建立、使用和維護(hù)數(shù)據(jù)庫,對(duì)數(shù)據(jù)庫進(jìn)行統(tǒng)一的管理和控制,為了保證數(shù)據(jù)庫的安全性和完整性,用戶可以通過數(shù)據(jù)庫管理系統(tǒng)訪問數(shù)據(jù)庫中的數(shù)據(jù)

【面試題:數(shù)據(jù)庫和數(shù)據(jù)庫管理系統(tǒng)之間的關(guān)系】

數(shù)據(jù)庫:存儲(chǔ),維護(hù)和管理數(shù)據(jù)的集合

數(shù)據(jù)庫管理系統(tǒng)其實(shí)就是數(shù)據(jù)庫管理軟件,通過它可以進(jìn)行數(shù)據(jù)庫的管理和維護(hù)工作

【見圖1】

1.3數(shù)據(jù)庫的應(yīng)用

涉及到大量的數(shù)據(jù)需要長(zhǎng)期存儲(chǔ),就可以使用數(shù)據(jù)庫

使用:增刪改查的操作

2.常見數(shù)據(jù)庫管理系統(tǒng)

1>Oracle(甲骨文):目前比較成功的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),運(yùn)行穩(wěn)定,功能齊全,性能超群,技術(shù)領(lǐng)先,主要應(yīng)用在大型的企業(yè)數(shù)據(jù)庫領(lǐng)域

2>DB2:IBM(國(guó)際商業(yè)機(jī)器公司)的產(chǎn)品,伸縮性比較強(qiáng)

3>SQL Server:Microsoft的產(chǎn)品,軟件界面友好,易學(xué)易用,在操作性和交互性方面獨(dú)樹一幟

4>PostgreSQL:加州大學(xué)伯克利分校以教學(xué)為目地開發(fā)的數(shù)據(jù)庫系統(tǒng),支持關(guān)系和面向?qū)ο蟮臄?shù)據(jù)庫,屬于數(shù)據(jù)庫管理系統(tǒng)

5>MySQL:免費(fèi)的數(shù)據(jù)庫系統(tǒng),被廣泛引用于中小型應(yīng)用系統(tǒng),體積小,速度快,總體擁有成本低,開發(fā)源代碼,2008年被SUN收購,2009年SUN被Oracle收購

二.數(shù)據(jù)庫的安裝

1.安裝

1.驗(yàn)證是否安裝MySQL

演示命令:
yangyang@yangyang-virtualmachine:~$ mysql -u root -p      #登錄MySQL數(shù)據(jù)庫
Enter password: 
ERROR 2002 (HY000): Can't connect to local MySQL server through socket    '/var/run/mysqld/mysqld.sock' (2)               #報(bào)錯(cuò),說明數(shù)據(jù)庫沒有啟動(dòng)
yangyang@yangyang-virtualmachine:~$ sudo service mysql start      #啟動(dòng)數(shù)據(jù)庫
yangyang@yangyang-virtualmachine:~$ mysql -u root -p      
Enter password:                           #輸入數(shù)據(jù)庫密碼rock1204
Welcome to the MySQL monitor.  Commands end with ; or \g.     #出現(xiàn)左邊的信息說明已經(jīng)安裝
Your MySQL connection id is 3
Server version: 5.7.22-0ubuntu0.16.04.1 (Ubuntu)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

#退出數(shù)據(jù)庫
mysql> exit       
Bye

2.如果之前有安裝 不能使用的話 可按如下步驟卸載

演示命令:
#第一步:依次執(zhí)行下面的語句
sudo apt-get autoremove --purge mysql-server
sudo apt-get remove mysql-server
sudo apt-get autoremove mysql-server
sudo apt-get remove mysql-common 

#第二步:清理殘留數(shù)據(jù)
dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P
#這個(gè)步驟盡量多執(zhí)行幾次,清理干凈

3.重新安裝

第一步:下載MySQL資源,安裝之前請(qǐng)先卸載之前的,一定要卸載干凈

https://dev.mysql.com/downloads/file/?id=477124,進(jìn)入官網(wǎng)之后直接點(diǎn)擊No thanks, just start my download,下載下來的是mysql-apt-config_0.8.10-1_all.deb安裝包【注意:如果是其他的則有問題】

第二步:在終端里輸入下面的命令安裝下載的發(fā)布包

sudo dpkg -i 文件路徑+文件名 
也可以cd到文件目錄下,直接執(zhí)行sudo dpkg -i mysql-apt-config_0.8.10-1_all.deb

第三步:使用以下命令從MySQL APT存儲(chǔ)庫更新包信息

sudo apt-get update

第四步:安裝MySQL

sudo apt-get install mysql-server

注意:這里要選擇第二個(gè),不然安裝之后只有用sudo才能進(jìn)入MySQL,而且不能使用數(shù)據(jù)庫

2.啟動(dòng)和停止mysql服務(wù)

查看mysql服務(wù)端的狀態(tài)

檢查MySQL的狀態(tài):sudo service mysql status

開啟MySQL服務(wù)器:sudo service mysql start

關(guān)閉MySQL服務(wù)器:sudo service mysql stop

三、SQL概述

1.簡(jiǎn)介

Structure Query Language,結(jié)構(gòu)化查詢語言,

2.數(shù)據(jù)庫服務(wù)器、數(shù)據(jù)庫和表之間的關(guān)系

表:為了保存應(yīng)用實(shí)體中的數(shù)據(jù),一般會(huì)給數(shù)據(jù)庫中創(chuàng)建表,一個(gè)數(shù)據(jù)庫可以同時(shí)管理多個(gè)表

【見圖2】

3.數(shù)據(jù)在SQL中的存儲(chǔ)形式

案例:

User表

id name age

1 lisi 10

2 zhangsan 18

說明:

? a.表中的一條數(shù)據(jù)被稱為一條記錄【實(shí)體】

? b.表中的一列記錄的是不同對(duì)象的同一類數(shù)據(jù)

4.SQL的分類

DDL【Data Definition Language】,數(shù)據(jù)定義語言,用戶創(chuàng)建、修改、刪除表結(jié)構(gòu)

DML【Data Manipulation Language】,數(shù)據(jù)操作語言,用于對(duì)數(shù)據(jù)表進(jìn)行增刪改的操作

DQL【Data Query Language】,數(shù)據(jù)查詢語言,用于負(fù)責(zé)數(shù)據(jù)表的查詢工作

DCL【Data Control Language】:數(shù)據(jù)控制語言,用來定義訪問權(quán)限和安全級(jí)別

四、數(shù)據(jù)庫操作

1.DDL

使用關(guān)鍵字:CREATE ALTER DROP

注意:一般情況下,mysql關(guān)鍵字是大寫的,但是為了方便,一般小寫

1.1create創(chuàng)建

語法:

#創(chuàng)建數(shù)據(jù)庫
CREATE DATABASE database_name;

#創(chuàng)建數(shù)據(jù)庫時(shí),指定字符編碼.
CREATE DATABASE database_name charset utf8;

#創(chuàng)建表
CREATE TABLE 表名(
      字段1 字段類型[列級(jí)別約束條件][默認(rèn)值],
      字段2 字段類型[列級(jí)別約束條件][默認(rèn)值],
      ….
      字段n 字段類型[列級(jí)別約束條件][默認(rèn)值]
      [表級(jí)別約束條件]
)

演示:

#查詢當(dāng)前數(shù)據(jù)庫服務(wù)器中的所有數(shù)據(jù)庫
mysql> show databases;                
+--------------------+    
| Database           |
+--------------------+
| information_schema |
| mydb1              |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.01 sec)

#查看當(dāng)前正在使用的數(shù)據(jù)庫
mysql> select database();
+------------+
| database() |
+------------+
| mydb1      |
+------------+
1 row in set (0.00 sec)

#切換數(shù)據(jù)庫
mysql> use mydb1;
Database changed

#修改數(shù)據(jù)庫的編碼
#第一步:查看切換后該數(shù)據(jù)庫的信息
mysql> show create database mydb1 \G;
*************************** 1. row ***************************
       Database: mydb1
Create Database: CREATE DATABASE `mydb1` /*!40100 DEFAULT CHARACTER SET latin1 */
1 row in set (0.00 sec)

#第二步:重啟一個(gè)終端
#首先進(jìn)入MySQL存放配置文件的目錄
yangyang@yangyang-virtualmachine:~$ cd /etc/mysql/
#執(zhí)行l(wèi)s,查看下此文件夾下的文件
yangyang@yangyang-virtualmachine:/etc/mysql$ ls
conf.d        fabric.cfg       mysql.cnf
debian.cnf    my.cnf           mysql.conf.d
debian-start  my.cnf.fallback  mysql-fabric-doctrine-1.4.0.zip
#會(huì)發(fā)現(xiàn)有個(gè)文件是my.cnf,這個(gè)文件是mysql的配置文件

#第三步:用vim打開my.cnf文件
yangyang@yangyang-virtualmachine:/etc/mysql$ vim my.cnf
#打開my.cnf后,會(huì)發(fā)現(xiàn)在此文件的最后有兩行(此配置文件又引用了其他的兩個(gè)配置文件,我們需要修改的是mysqld.cnf ,這是mysql服務(wù)端基礎(chǔ)配置文件 )
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

#第四步:用vim打開/etc/mysql/mysql.conf.d/mysqld.cnf文件
#(如果提示不可編輯的話,可以切換賬號(hào)為root或者用sudo命令)
yangyang@yangyang-virtualmachine:/etc/mysql$ vim /etc/mysql/mysql.conf.d/mysqld.cnf 
yangyang@yangyang-virtualmachine:/etc/mysql$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
[sudo] yangyang 的密碼: 

#第五步
#打開文件后,在[mysqld]下,添加character-set-server=utf8【注意:是utf8,而不是utf-8】
[mysqld]
character-set-server=utf8

#第六步:重啟mysql服務(wù)
yangyang@yangyang-virtualmachine:/etc/mysql$ cd ../..
yangyang@yangyang-virtualmachine:/$ service mysql restart
  
#第七步:回到原來的終端中,退出mysql服務(wù),重新登錄
mysql> exit
Bye
yangyang@yangyang-virtualmachine:~$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.22-0ubuntu0.16.04.1 (Ubuntu)

#第八步:用\s查看是否修改成功
mysql> \s
--------------
mysql  Ver 14.14 Distrib 5.7.22, for Linux (x86_64) using  EditLine wrapper
Server characterset:  utf8
Db     characterset:  utf8
Client characterset:  utf8
Conn.  characterset:  utf8

#退出數(shù)據(jù)庫
演示命令:
#方式一
mysql> exit
Bye

#方式二
mysql> quit
Bye

#注意:如要再次使用數(shù)據(jù)庫,則需要重新登錄

總結(jié):

#1.創(chuàng)建數(shù)據(jù)庫
create database xxx;

#2.切換數(shù)據(jù)庫
use  xxx;

#3.查看正在使用的數(shù)據(jù)庫的信息
select database();

#4.查看當(dāng)前數(shù)據(jù)庫管理系統(tǒng)中所有的數(shù)據(jù)庫
show databases;

#5.退出數(shù)據(jù)庫
quit / exit

#6.顯示當(dāng)前數(shù)據(jù)庫中所有的表
show tables;
1.2alter操作

a.語法:

#1.修改表名
語法規(guī)則:ALTER TABLE old_table_name RENAME [TO] new_table_name

#2.修改字段的數(shù)據(jù)類型
語法規(guī)則:ALTER TABLE table_name MODIFY 字段名 數(shù)據(jù)類型
修改完成之后可以查看DESC table_name檢驗(yàn)結(jié)果

#3.修改字段名
語法規(guī)則:ALTER TABLE table_name CHANGE 舊字段名 新字段名 數(shù)據(jù)類型

#4.添加字段
語法規(guī)則:ALTER TABLE table_name ADD 新字段名 數(shù)據(jù)類型 [約束條件] [FIRST|AFTER 已經(jīng)存在的字段名]

#5.刪除字段
語法規(guī)則:ALTER TABLE table_name DROP 字段名

#6.修改字段的排列位置
語法規(guī)則:ALTER TABLE table_name MODIFY 字段1 數(shù)據(jù)類型 FIRST|AFTER 字段2
  first: 設(shè)置成第一個(gè)
  after 字段2: 在指定字段2的后面
  
#7.刪除表的外鍵約束
語法規(guī)則:ALTER TABLE table_name DROP FOREIGN KEY 外鍵約束名

#8.刪除數(shù)據(jù)表
#刪除沒有被關(guān)聯(lián)的表
語法規(guī)則:DROP TABLE [IF EXISTS] 表1,表2...
#刪除被其他表關(guān)聯(lián)的的表
直接刪除會(huì)出現(xiàn)錯(cuò)誤的,操作: 先解除關(guān)聯(lián) 再進(jìn)行刪除

b.常用數(shù)據(jù)類型

1.數(shù)字?jǐn)?shù)據(jù)類型
- INT - 正常大小的整數(shù),可以帶符號(hào)。如果是有符號(hào)的,它允許的范圍是從-2147483648到2147483647。如果是無符號(hào),允許的范圍是從0到4294967295。 可以指定多達(dá)11位的寬度。
- TINYINT - 一個(gè)非常小的整數(shù),可以帶符號(hào)。如果是有符號(hào),它允許的范圍是從-128到127。如果是無符號(hào),允許的范圍是從0到255,可以指定多達(dá)4位數(shù)的寬度。
- SMALLINT - 一個(gè)小的整數(shù),可以帶符號(hào)。如果有符號(hào),允許范圍為-32768至32767。如果無符號(hào),允許的范圍是從0到65535,可以指定最多5位的寬度。
- MEDIUMINT - 一個(gè)中等大小的整數(shù),可以帶符號(hào)。如果有符號(hào),允許范圍為-8388608至8388607。 如果無符號(hào),允許的范圍是從0到16777215,可以指定最多9位的寬度。
- BIGINT - 一個(gè)大的整數(shù),可以帶符號(hào)。如果有符號(hào),允許范圍為-9223372036854775808到9223372036854775807。如果無符號(hào),允許的范圍是從0到18446744073709551615. 可以指定最多20位的寬度。
- FLOAT(M,D) - 不能使用無符號(hào)的浮點(diǎn)數(shù)字。可以定義顯示長(zhǎng)度(M)和小數(shù)位數(shù)(D)。這不是必需的,并且默認(rèn)為10,2。其中2是小數(shù)的位數(shù),10是數(shù)字(包括小數(shù))的總數(shù)。小數(shù)精度可以到24個(gè)浮點(diǎn)。
- DOUBLE(M,D) - 不能使用無符號(hào)的雙精度浮點(diǎn)數(shù)??梢远x顯示長(zhǎng)度(M)和小數(shù)位數(shù)(D)。 這不是必需的,默認(rèn)為16,4,其中4是小數(shù)的位數(shù)。小數(shù)精度可以達(dá)到53位的DOUBLE。 REAL是DOUBLE同義詞。
- DECIMAL(M,D) - 非壓縮浮點(diǎn)數(shù)不能是無符號(hào)的。在解包小數(shù),每個(gè)小數(shù)對(duì)應(yīng)于一個(gè)字節(jié)。定義顯示長(zhǎng)度(M)和小數(shù)(D)的數(shù)量是必需的。 NUMERIC是DECIMAL的同義詞。[decimal]

2.日期和時(shí)間類型
- DATE - 以YYYY-MM-DD格式的日期,在1000-01-01和9999-12-31之間。 例如,1973年12月30日將被存儲(chǔ)為1973-12-30。
- DATETIME - 日期和時(shí)間組合以YYYY-MM-DD HH:MM:SS格式,在1000-01-01 00:00:00 到9999-12-31 23:59:59之間。例如,1973年12月30日下午3:30,會(huì)被存儲(chǔ)為1973-12-30 15:30:00。
- TIMESTAMP - 1970年1月1日午夜之間的時(shí)間戳,到2037的某個(gè)時(shí)候。這看起來像前面的DATETIME格式,無需只是數(shù)字之間的連字符; 1973年12月30日下午3點(diǎn)30分將被存儲(chǔ)為19731230153000(YYYYMMDDHHMMSS)。
- TIME - 存儲(chǔ)時(shí)間在HH:MM:SS格式。
- YEAR(M) - 以2位或4位數(shù)字格式來存儲(chǔ)年份。如果長(zhǎng)度指定為2(例如YEAR(2)),年份就可以為1970至2069(70?69)。如果長(zhǎng)度指定為4,年份范圍是1901-2155,默認(rèn)長(zhǎng)度為4。

3.字符串類型
雖然數(shù)字和日期類型比較有意思,但存儲(chǔ)大多數(shù)數(shù)據(jù)都可能是字符串格式。 下面列出了在MySQL中常見的字符串?dāng)?shù)據(jù)類型。
- CHAR(M) - 固定長(zhǎng)度的字符串是以長(zhǎng)度為1到255之間個(gè)字符長(zhǎng)度(例如:CHAR(5)),存儲(chǔ)右空格填充到指定的長(zhǎng)度。 限定長(zhǎng)度不是必需的,它會(huì)默認(rèn)為1。
- VARCHAR(M) - 可變長(zhǎng)度的字符串是以長(zhǎng)度為1到255之間字符數(shù)(高版本的MySQL超過255); 例如: VARCHAR(25). 創(chuàng)建VARCHAR類型字段時(shí),必須定義長(zhǎng)度。 [varchar]
- BLOB or TEXT - 字段的最大長(zhǎng)度是65535個(gè)字符。 BLOB是“二進(jìn)制大對(duì)象”,并用來存儲(chǔ)大的二進(jìn)制數(shù)據(jù),如圖像或其他類型的文件。定義為TEXT文本字段還持有大量的數(shù)據(jù); 兩者之間的區(qū)別是,排序和比較上存儲(chǔ)的數(shù)據(jù),BLOB大小寫敏感,而TEXT字段不區(qū)分大小寫。不用指定BLOB或TEXT的長(zhǎng)度。
- TINYBLOB 或 TINYTEXT - BLOB或TEXT列用255個(gè)字符的最大長(zhǎng)度。不指定TINYBLOB或TINYTEXT的長(zhǎng)度。
- MEDIUMBLOB or MEDIUMTEXT - BLOB或TEXT列具有16777215字符的最大長(zhǎng)度。不指定MEDIUMBLOB或MEDIUMTEXT的長(zhǎng)度。
- LONGBLOB 或 LONGTEXT -  BLOB或TEXT列具有4294967295字符的最大長(zhǎng)度。不指定LONGBLOB或LONGTEXT的長(zhǎng)度。
- ENUM - 枚舉,這是一個(gè)奇特的術(shù)語列表。當(dāng)定義一個(gè)ENUM,要?jiǎng)?chuàng)建它的值的列表,這些是必須用于選擇的項(xiàng)(也可以是NULL)。例如,如果想要字段包含“A”或“B”或“C”,那么可以定義為ENUM為 ENUM(“A”,“B”,“C”)也只有這些值(或NULL)才能用來填充這個(gè)字段。

注意:主要了解 char 和 varchar 的區(qū)別

char(M)是固定長(zhǎng)度的字符串, 在定義時(shí)指定字符串列長(zhǎng)。當(dāng)保存數(shù)據(jù)時(shí)如果長(zhǎng)度不夠在右側(cè)填充空格以達(dá)到指定的長(zhǎng)度。M 表示列的長(zhǎng)度,M 的取值范圍是0-255個(gè)字符

varchar(M)是長(zhǎng)度可變的字符串,M 表示最大的列長(zhǎng)度。M 的取值范圍是0-65535。varchar的最大實(shí)際長(zhǎng)度是由最長(zhǎng)的行的大小和使用的字符集確定的,而實(shí)際占用的空間為字符串的實(shí)際長(zhǎng)度+1

主要使用的數(shù)據(jù)類型:

? 數(shù)字型數(shù)據(jù)類型:int float double decimal

? 日期類:date

? 字符串:varchar(num) blob【二進(jìn)制】

c.需求:創(chuàng)建一個(gè)員工表【圖3】

演示:

#切換數(shù)據(jù)庫
mysql> use mydb1          
Database changed
#查看當(dāng)前正在使用的數(shù)據(jù)庫
mysql> select database(); 
+------------+
| database() |
+------------+
| mydb1      |
+------------+
1 row in set (0.00 sec)

#在當(dāng)前數(shù)據(jù)庫下創(chuàng)建新的表
mysql> create table worker(           
    -> id int(11),
    -> name varchar(20),
    -> gender varchar(10),
    -> birthday date,
    -> entry_date date,
    -> job varchar(20),
    -> salary double,
    -> resume blob
    -> );
Query OK, 0 rows affected (0.02 sec)

#顯示當(dāng)前數(shù)據(jù)庫中的所有表
mysql> show tables;           
+-----------------+
| Tables_in_mydb1 |
+-----------------+
| worker          |
+-----------------+
1 row in set (0.00 sec)

#顯示指定表中的所有字段    describe
mysql> desc worker;           
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| id         | int(11)     | YES  |     | NULL    |       |
| name       | varchar(20) | YES  |     | NULL    |       |
| gender     | varchar(10) | YES  |     | NULL    |       |
| brithday   | date        | YES  |     | NULL    |       |
| entry_date | date        | YES  |     | NULL    |       |
| job        | varchar(20) | YES  |     | NULL    |       |
| salary     | double      | YES  |     | NULL    |       |
| resume     | blob        | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
8 rows in set (0.01 sec)

#增加字段image
mysql> alter table worker add image blob;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc worker;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| id         | int(11)     | YES  |     | NULL    |       |
| name       | varchar(20) | YES  |     | NULL    |       |
| gender     | varchar(10) | YES  |     | NULL    |       |
| brithday   | date        | YES  |     | NULL    |       |
| entry_date | date        | YES  |     | NULL    |       |
| job        | varchar(20) | YES  |     | NULL    |       |
| salary     | double      | YES  |     | NULL    |       |
| resume     | blob        | YES  |     | NULL    |       |
| image      | blob        | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
9 rows in set (0.00 sec)

#修改job的長(zhǎng)度為60
mysql> alter table worker modify job varchar(60);
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc worker;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| id         | int(11)     | YES  |     | NULL    |       |
| name       | varchar(20) | YES  |     | NULL    |       |
| gender     | varchar(10) | YES  |     | NULL    |       |
| brithday   | date        | YES  |     | NULL    |       |
| entry_date | date        | YES  |     | NULL    |       |
| job        | varchar(60) | YES  |     | NULL    |       |
| salary     | double      | YES  |     | NULL    |       |
| resume     | blob        | YES  |     | NULL    |       |
| image      | blob        | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
9 rows in set (0.00 sec)

#刪除image字段
mysql> alter table worker drop image;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc worker;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| id         | int(11)     | YES  |     | NULL    |       |
| name       | varchar(20) | YES  |     | NULL    |       |
| gender     | varchar(10) | YES  |     | NULL    |       |
| brithday   | date        | YES  |     | NULL    |       |
| entry_date | date        | YES  |     | NULL    |       |
| job        | varchar(60) | YES  |     | NULL    |       |
| salary     | double      | YES  |     | NULL    |       |
| resume     | blob        | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
8 rows in set (0.00 sec)

#對(duì)表名重新命名
#方式一
mysql> rename table worker to user;
Query OK, 0 rows affected (0.00 sec)
#方式二
mysql> alter table  worker rename to user;
Query OK, 0 rows affected (0.00 sec)

#查看表格的創(chuàng)建細(xì)節(jié)
mysql> desc worker;
ERROR 1146 (42S02): Table 'mydb1.worker' doesn't exist     #報(bào)錯(cuò):worker表不存在,說明重命名成功

#查看表的信息
mysql> desc user;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| id         | int(11)     | YES  |     | NULL    |       |
| name       | varchar(20) | YES  |     | NULL    |       |
| gender     | varchar(10) | YES  |     | NULL    |       |
| brithday   | date        | YES  |     | NULL    |       |
| entry_date | date        | YES  |     | NULL    |       |
| job        | varchar(60) | YES  |     | NULL    |       |
| salary     | double      | YES  |     | NULL    |       |
| resume     | blob        | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
8 rows in set (0.00 sec)


#查看創(chuàng)建表的詳細(xì)信息
mysql> show create table user;
| Table | Create Table                                                                                                   
| user  | CREATE TABLE `user` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL,
  `gender` varchar(10) DEFAULT NULL,
  `brithday` date DEFAULT NULL,
  `entry_date` date DEFAULT NULL,
  `job` varchar(60) DEFAULT NULL,
  `salary` double DEFAULT NULL,
  `resume` blob
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |

1 row in set (0.00 sec)


#修改表的字符集為gbk
#修改某個(gè)字段支持utf8:   alter table user modify name varchar(20) character set utf8;
mysql> alter table user character set gbk;    
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show create table user;            #查看信息,已經(jīng)改為gbk

| Table | Create Table                                       
| user  | CREATE TABLE `user` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(20) CHARACTER SET latin1 DEFAULT NULL,
  `gender` varchar(10) CHARACTER SET latin1 DEFAULT NULL,
  `brithday` date DEFAULT NULL,
  `entry_date` date DEFAULT NULL,
  `job` varchar(60) CHARACTER SET latin1 DEFAULT NULL,
  `salary` double DEFAULT NULL,
  `resume` blob
) ENGINE=InnoDB DEFAULT CHARSET=gbk |

1 row in set (0.00 sec)

將列名name修改為username
mysql> alter table user change name username varchar(100);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc user;
+------------+--------------+------+-----+---------+-------+
| Field      | Type         | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| id         | int(11)      | YES  |     | NULL    |       |
| username   | varchar(100) | YES  |     | NULL    |       |
| gender     | varchar(10)  | YES  |     | NULL    |       |
| brithday   | date         | YES  |     | NULL    |       |
| entry_date | date         | YES  |     | NULL    |       |
| job        | varchar(60)  | YES  |     | NULL    |       |
| salary     | double       | YES  |     | NULL    |       |
| resume     | blob         | YES  |     | NULL    |       |
+------------+--------------+------+-----+---------+-------+
8 rows in set (0.00 sec)

1.3drop刪除

語法:

DROP DATABASE database_name

演示:

mysql> drop table user;
Query OK, 0 rows affected (0.00 sec)

mysql> show tables;
Empty set (0.00 sec)

2.DML

2.1insert插入

語法:

#單行插入
INSERT INTO table_name (field1, field2,...fieldN) VALUES(value1, value2,...valueN);
                       
#多行插入[批量插入]
INSERT INTO table_name (field1, field2,...fieldN)
                       VALUES
                       (value1, value2,...valueN),
                       (value12, value22,...valueNN)...;
                       
注意:
  a.列名和列值的類型、個(gè)數(shù)以及順序一一對(duì)應(yīng)
  b.可以把列名當(dāng)做Python中的形參,把列值當(dāng)做實(shí)參
  c.值不能超出列定義的長(zhǎng)度
  d.如果插入的是空值,寫null
  e.插入的是日期,和字符串一樣,使用引號(hào)括起來

演示:

mysql> use mydb1;
Database changed
mysql> show tables;
Empty set (0.00 sec)

mysql> create table worker(
    -> id int(11),
    -> name varchar(20),
    -> gender varchar(10),
    -> salary double
    -> );
Query OK, 0 rows affected (0.01 sec)

mysql> show tables;                                                             +-----------------+
| Tables_in_mydb1 |
+-----------------+
| worker          |
+-----------------+
1 row in set (0.00 sec)

mysql> desc worker;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(11)     | YES  |     | NULL    |       |
| name   | varchar(20) | YES  |     | NULL    |       |
| gender | varchar(10) | YES  |     | NULL    |       |
| salary | double      | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

#插入單條數(shù)據(jù)
mysql> insert into worker(id,name,gender,salary) values(1,'tom','b',4000);
Query OK, 1 row affected (0.02 sec)

mysql> insert into worker(id,name,gender,salary) values(2,'jack','b',6000);
Query OK, 1 row affected (0.01 sec)

#如果給每個(gè)字段都賦值,就可以省略掉字段的書寫
mysql> insert into worker values(3,'rose','g',6000);
Query OK, 1 row affected (0.01 sec)

mysql> desc worker;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(11)     | YES  |     | NULL    |       |
| name   | varchar(20) | YES  |     | NULL    |       |
| gender | varchar(10) | YES  |     | NULL    |       |
| salary | double      | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> select * from worker;
+------+------+--------+--------+
| id   | name | gender | salary |
+------+------+--------+--------+
|    1 | tom  | b      |   4000 |
|    2 | jack | b      |   6000 |
|    3 | rose | g      |   6000 |
+------+------+--------+--------+
3 rows in set (0.00 sec)

#一次性插入多條數(shù)據(jù)【批量插入】
mysql> insert into worker(id,name,gender,salary) values(4,'bob','b',1500),(5,'hello','g',5500),(6,'abc','b',6600);
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from worker;                                                    +------+-------+--------+--------+
| id   | name  | gender | salary |
+------+-------+--------+--------+
|    1 | tom   | b      |   4000 |
|    2 | jack  | b      |   6000 |
|    3 | rose  | g      |   6000 |
|    4 | bob   | b      |   1500 |
|    5 | hello | g      |   5500 |
|    6 | abc   | b      |   6600 |
+------+-------+--------+--------+
6 rows in set (0.00 sec)
2.2update更新

語法:

UPDATE table_name SET field1=new-value1, field2=new-value2  [WHERE Clause]

注意:
  a.完全可以更新一個(gè)字段或者多個(gè)字段
  b.where相當(dāng)于Python中的if語句
  c.可以指定任何條件到where子句中
  d.如果沒有where子句,則默認(rèn)所有的行都被同時(shí)更新為指定的操作

演示:

#1.將所有員工的薪水修改為5000
mysql> update worker set salary=5000;
Query OK, 6 rows affected (0.01 sec)
Rows matched: 6  Changed: 6  Warnings: 0

mysql> select * from worker;
+------+-------+--------+--------+
| id   | name  | gender | salary |
+------+-------+--------+--------+
|    1 | tom   | b      |   5000 |
|    2 | jack  | b      |   5000 |
|    3 | rose  | g      |   5000 |
|    4 | bob   | b      |   5000 |
|    5 | hello | g      |   5000 |
|    6 | abc   | b      |   5000 |
+------+-------+--------+--------+
6 rows in set (0.00 sec)

#2.將tom的薪水改為3000元
mysql> update worker set salary=3000 where name='tom';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from worker;
+------+-------+--------+--------+
| id   | name  | gender | salary |
+------+-------+--------+--------+
|    1 | tom   | b      |   3000 |
|    2 | jack  | b      |   5000 |
|    3 | rose  | g      |   5000 |
|    4 | bob   | b      |   5000 |
|    5 | hello | g      |   5000 |
|    6 | abc   | b      |   5000 |
+------+-------+--------+--------+
6 rows in set (0.00 sec)

#3.將jack的薪水改為10000,并將性別改為g
mysql> update worker set salary=10000,gender='g' where name='jack';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from worker;
+------+-------+--------+--------+
| id   | name  | gender | salary |
+------+-------+--------+--------+
|    1 | tom   | b      |   3000 |
|    2 | jack  | g      |  10000 |
|    3 | rose  | g      |   5000 |
|    4 | bob   | b      |   5000 |
|    5 | hello | g      |   5000 |
|    6 | abc   | b      |   5000 |
+------+-------+--------+--------+
6 rows in set (0.00 sec)

#4.將rose的薪水在原來的基礎(chǔ)上增加1000
mysql> update worker set salary=salary+1000 where name='rose';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from worker;
+------+-------+--------+--------+
| id   | name  | gender | salary |
+------+-------+--------+--------+
|    1 | tom   | b      |   3000 |
|    2 | jack  | g      |  10000 |
|    3 | rose  | g      |   6000 |
|    4 | bob   | b      |   5000 |
|    5 | hello | g      |   5000 |
|    6 | abc   | b      |   5000 |
+------+-------+--------+--------+
6 rows in set (0.01 sec)

#5.將abc的薪水改為6000
update worker set salary=6000 where name='abc';
#6.將bob的性別改為b
update worker set gender='b' where name='bob';
1>where子句

語法:

注意:where子句其實(shí)就是一個(gè)操作符,類似于Python中的if語句,可以做數(shù)據(jù)的篩選

操作符 說明
= 相等
<> / != 不相等
< 小于
<= 小于等于
> 大于
>= 大于等于
IN(A,B) A 和 B 之間
between and 位于兩值之間
AND 連接多個(gè)表達(dá)式 并且的關(guān)系
2.3delete刪除

語法:

DELETE FROM table_name [WHERE Clause]

注意:
  a.如果where子句沒有指定,則默認(rèn)將表中的數(shù)據(jù)全部刪除
  b.可以指定任何條件在where子句中

演示:

#1.刪除表中tom的全部數(shù)據(jù)
mysql> delete from worker where name='tom';
Query OK, 1 row affected (0.01 sec)

mysql> select * from worker;
+------+-------+--------+--------+
| id   | name  | gender | salary |
+------+-------+--------+--------+
|    2 | jack  | g      |  10000 |
|    3 | rose  | g      |   6000 |
|    4 | bob   | b      |   5000 |
|    5 | hello | g      |   5000 |
|    6 | abc   | b      |   5000 |
+------+-------+--------+--------+
5 rows in set (0.00 sec)

#2.刪除表中的所有數(shù)據(jù)
mysql> delete from worker;
Query OK, 5 rows affected (0.01 sec)

mysql> select * from worker;
Empty set (0.00 sec)

mysql> truncate table worker;
Query OK, 0 rows affected (0.02 sec)

#3.刪除表
mysql> drop table worker;
Query OK, 0 rows affected (0.01 sec)

mysql> show tables;
Empty set (0.00 sec)

注意:
delete:刪除表中的數(shù)據(jù),表結(jié)構(gòu)還在,刪除之后的數(shù)據(jù)可以找回
truncate:不但刪除表中的數(shù)據(jù),還drop掉了表結(jié)構(gòu),刪除的數(shù)據(jù)是不能找回的,執(zhí)行速度比delete快

練習(xí):
創(chuàng)建一張學(xué)生表.學(xué)號(hào),姓名,年齡,分?jǐn)?shù)
1.往表中插入五條數(shù)據(jù)
2.將學(xué)號(hào)為1的學(xué)生,分?jǐn)?shù)改為100
3.將學(xué)號(hào)為2的學(xué)生,分?jǐn)?shù)改為80,年齡改為18
4.將學(xué)號(hào)為4的學(xué)生這條記錄刪除
5.將學(xué)生表清空
6.將學(xué)生表刪除

增加  insert into
修改  update
刪除  delete
查詢  select

3.DQL

數(shù)據(jù)庫執(zhí)行DQL語言不會(huì)對(duì)數(shù)據(jù)庫中的數(shù)據(jù)發(fā)生任何改變,而是讓數(shù)據(jù)庫發(fā)送查詢結(jié)果到客戶端

查詢返回的結(jié)果其實(shí)是一張?zhí)摂M表

語法:

SELECT 列名 FROM 表名【W(wǎng)HERE --> GROUP BY -->HAVING--> ORDER BY】
3.1基礎(chǔ)查詢

演示:

#1.查詢所有列
mysql> select * from student;
+------+----------+------+--------+
| id   | name     | age  | gender |
+------+----------+------+--------+
| 1    | aaaa     |   19 | female |
| 2    | bbbbbbbb |   20 | male   |
| 3    | cc       |   15 | male   |
| 4    | ddd      |   16 | female |
| 5    | eee      |   20 | female |
+------+----------+------+--------+
5 rows in set (0.00 sec)


#2.查詢指定列
mysql> select id,name,gender from student;
+------+----------+--------+
| id   | name     | gender |
+------+----------+--------+
| 1    | aaaa     | female |
| 2    | bbbbbbbb | male   |
| 3    | cc       | male   |
| 4    | ddd      | female |
| 5    | eee      | female |
+------+----------+--------+
5 rows in set (0.00 sec)
3.2條件查詢

主要結(jié)合where的使用

between...and:介于。。和。。。之間

and:邏輯與

or:邏輯或

in:類似于Python中的成員運(yùn)算符

not in:

is:類似于Python中的身份運(yùn)算符

is not:

演示:

#1.查詢性別為女,并且年齡為20的記錄
mysql> select * from student where gender='female' and age=20;
+------+------+------+--------+
| id   | name | age  | gender |
+------+------+------+--------+
| 5    | eee  |   20 | female |
+------+------+------+--------+
1 row in set (0.00 sec)

#2.查詢編號(hào)為1或者姓名為ddd的記錄
mysql> select * from student where id='1' or name='ddd';
+------+------+------+--------+
| id   | name | age  | gender |
+------+------+------+--------+
| 1    | aaaa |   19 | female |
| 4    | ddd  |   16 | female |
+------+------+------+--------+
2 rows in set (0.00 sec)

#3.查詢編號(hào)分別為1,2,3的記錄
mysql> select * from student where id='1' or id='2' or id='3';
+------+----------+------+--------+
| id   | name     | age  | gender |
+------+----------+------+--------+
| 1    | aaaa     |   19 | female |
| 2    | bbbbbbbb |   20 | male   |
| 3    | cc       |   15 | male   |
+------+----------+------+--------+
3 rows in set (0.00 sec)
#簡(jiǎn)寫形式
mysql> select * from student where id in('1','2','3');
+------+----------+------+--------+
| id   | name     | age  | gender |
+------+----------+------+--------+
| 1    | aaaa     |   19 | female |
| 2    | bbbbbbbb |   20 | male   |
| 3    | cc       |   15 | male   |
+------+----------+------+--------+
3 rows in set (0.00 sec)

#4.查詢編號(hào)不為1,2,3的記錄
mysql> select * from student where id not in('1','2','3');
+------+------+------+--------+
| id   | name | age  | gender |
+------+------+------+--------+
| 4    | ddd  |   16 | female |
| 5    | eee  |   20 | female |
+------+------+------+--------+
2 rows in set (0.00 sec)


#5.查詢年齡為null的記錄
mysql> select * from student where age is null;
Empty set (0.00 sec)

#6.查詢年齡在15~20之間的記錄
mysql> select * from student where age>=15 and age<=20;
+------+----------+------+--------+
| id   | name     | age  | gender |
+------+----------+------+--------+
| 1    | aaaa     |   19 | female |
| 2    | bbbbbbbb |   20 | male   |
| 3    | cc       |   15 | male   |
| 4    | ddd      |   16 | female |
| 5    | eee      |   20 | female |
+------+----------+------+--------+
5 rows in set (0.00 sec)
#簡(jiǎn)寫形式
                                   #age>=15   and age<=20
mysql> select * from student where age between 15 and 20;
+------+----------+------+--------+
| id   | name     | age  | gender |
+------+----------+------+--------+
| 1    | aaaa     |   19 | female |
| 2    | bbbbbbbb |   20 | male   |
| 3    | cc       |   15 | male   |
| 4    | ddd      |   16 | female |
| 5    | eee      |   20 | female |
+------+----------+------+--------+
5 rows in set (0.00 sec)

#7.查詢性別非男的記錄
#方式一
mysql> select * from student where gender='female';
+------+------+------+--------+
| id   | name | age  | gender |
+------+------+------+--------+
| 1    | aaaa |   19 | female |
| 4    | ddd  |   16 | female |
| 5    | eee  |   20 | female |
+------+------+------+--------+
3 rows in set (0.00 sec)
#方式二
mysql> select * from student where gender!='male';
+------+------+------+--------+
| id   | name | age  | gender |
+------+------+------+--------+
| 1    | aaaa |   19 | female |
| 4    | ddd  |   16 | female |
| 5    | eee  |   20 | female |
+------+------+------+--------+
3 rows in set (0.00 sec)
#方式三
mysql> select * from student where gender<>'male';
+------+------+------+--------+
| id   | name | age  | gender |
+------+------+------+--------+
| 1    | aaaa |   19 | female |
| 4    | ddd  |   16 | female |
| 5    | eee  |   20 | female |
+------+------+------+--------+
3 rows in set (0.00 sec)
3.3模糊查詢

where子句中=表示精準(zhǔn)查詢

like:一般情況下結(jié)合where子句使用

通配符:

? _:匹配任意一個(gè)字符

? %:匹配0~n個(gè)字符【n大于等于1】

演示:

#1.查詢姓名由4個(gè)字符組成的記錄
mysql> select * from student where name like '____';
+------+------+------+--------+
| id   | name | age  | gender |
+------+------+------+--------+
| 1    | aaaa |   19 | female |
+------+------+------+--------+
1 row in set (0.00 sec)

#2.查詢姓名由3個(gè)字符組成的記錄,并且最后一個(gè)字母為c的記錄
mysql> select * from student where name like '__c';
Empty set (0.00 sec)

#3.查詢以a開頭的記錄
mysql> select * from student where name like 'a%';
+------+------+------+--------+
| id   | name | age  | gender |
+------+------+------+--------+
| 1    | aaaa |   19 | female |
+------+------+------+--------+
1 row in set (0.01 sec)

#4.查詢姓名中包含b的記錄
mysql> select * from student where name like '%b%';
+------+----------+------+--------+
| id   | name     | age  | gender |
+------+----------+------+--------+
| 2    | bbbbbbbb |   20 | male   |
+------+----------+------+--------+
1 row in set (0.00 sec)

#5.查詢姓名中第2個(gè)字母為c的記錄
mysql> select * from student where name like '_c%';
+------+------+------+--------+
| id   | name | age  | gender |
+------+------+------+--------+
| 3    | cc   |   15 | male   |
+------+------+------+--------+
1 row in set (0.00 sec)
3.4字段控制查詢

as:起別名,用法 :select 字段 as 別名

ifnull:將null轉(zhuǎn)換為其他數(shù)據(jù),用法,ifnull(字段名,其他數(shù)據(jù))

distinct:去除重復(fù)記錄

演示;

#1.去除重復(fù)記錄
mysql> select id from student;
+------+
| id   |
+------+
| 1    |
| 2    |
| 3    |
| 4    |
| 5    |
| 1    |
+------+
6 rows in set (0.00 sec)

mysql> select distinct id from student;
+------+
| id   |
+------+
| 1    |
| 2    |
| 3    |
| 4    |
| 5    |
+------+
5 rows in set (0.01 sec)

#2.給列名起別名
mysql> select name,gender  from student;
+----------+--------+
| name     | gender |
+----------+--------+
| aaaa     | female |
| bbbbbbbb | male   |
| cc       | male   |
| ddd      | female |
| eee      | female |
| ffff     | male   |
+----------+--------+
6 rows in set (0.00 sec)


mysql> select name as 姓名,gender as 性別  from student;
+----------+--------+
| 姓名     | 性別   |
+----------+--------+
| aaaa     | female |
| bbbbbbbb | male   |
| cc       | male   |
| ddd      | female |
| eee      | female |
| ffff     | male   |
+----------+--------+
6 rows in set (0.00 sec)

mysql> select name  姓名1,gender  性別1  from student;
+----------+---------+
| 姓名1    | 性別1   |
+----------+---------+
| aaaa     | female  |
| bbbbbbbb | male    |
| cc       | male    |
| ddd      | female  |
| eee      | female  |
| ffff     | male    |
+----------+---------+
6 rows in set (0.00 sec)


#3.將null轉(zhuǎn)化
#查看學(xué)生的年齡和學(xué)號(hào)之和
mysql> select id+age  from student;
+--------+
| id+age |
+--------+
|     20 |
|     22 |
|     18 |
|     20 |
|     25 |
|     31 |
+--------+
6 rows in set (0.01 sec)

#ifnull(id,0) 如果id不為空則返回id.為空返回0
mysql> select age+ifnull(id,0)  from student;
+------------------+
| age+ifnull(id,0) |
+------------------+
|               20 |
|               22 |
|               18 |
|               20 |
|               25 |
|               31 |
+------------------+
6 rows in set (0.00 sec)

3.5排序

order by:指定數(shù)據(jù)返回的順序

? asc:ascending,升序

? desc:descending,降序

用法:select from 表 order by xxx

演示:

#1.查詢所有的記錄,按照年齡升序排序
mysql> select * from student order by age asc;
+------+----------+------+--------+
| id   | name     | age  | gender |
+------+----------+------+--------+
| 3    | cc       |   15 | male   |
| 4    | ddd      |   16 | female |
| 1    | aaaa     |   19 | female |
| 2    | bbbbbbbb |   20 | male   |
| 5    | eee      |   20 | female |
| 1    | ffff     |   30 | male   |
+------+----------+------+--------+
6 rows in set (0.00 sec)

#2.查詢所有學(xué)生記錄,按照年齡降序排序,如果年齡相等,則按照編號(hào)進(jìn)行升序排序
mysql> select * from student order by age desc,id asc;
+------+----------+------+--------+
| id   | name     | age  | gender |
+------+----------+------+--------+
| 1    | ffff     |   30 | male   |
| 2    | bbbbbbbb |   20 | male   |
| 5    | eee      |   20 | female |
| 1    | aaaa     |   19 | female |
| 4    | ddd      |   16 | female |
| 3    | cc       |   15 | male   |
+------+----------+------+--------+
6 rows in set (0.00 sec)

3.5聚合函數(shù)

聚合函數(shù)主要用來做縱向運(yùn)算

1》count():統(tǒng)計(jì)指定列不為null的記錄行數(shù)

#1.查詢年齡大于20的人數(shù)
mysql> select count(*)  from student where age>20;
+----------+
| count(*) |
+----------+
|        1 |
+----------+
1 row in set (0.00 sec)


#2.查詢年齡和編號(hào)之和大于20的條數(shù)
mysql> select count(*) from student where age+ifnull(id,0)>20;
+----------+
| count(*) |
+----------+
|        3 |
+----------+
1 row in set (0.00 sec)

2>sum():計(jì)算指定列的數(shù)值和

#1.查詢所有學(xué)生的年齡和
mysql> select sum(age) from student;
+----------+
| sum(age) |
+----------+
|      120 |
+----------+
1 row in set (0.01 sec)

#2.查詢所有學(xué)生的年齡和,以及所有學(xué)生的編號(hào)和
mysql> select sum(age),sum(id) from student;
+----------+---------+
| sum(age) | sum(id) |
+----------+---------+
|      120 |      16 |
+----------+---------+
1 row in set (0.00 sec)

3>求指定列中的最大值和最小值

max():

min():

#求最大年齡和最小年齡
mysql> select max(age),min(age) from student;
+----------+----------+
| max(age) | min(age) |
+----------+----------+
|       30 |       15 |
+----------+----------+
1 row in set (0.00 sec)

4>avg()

average:平均數(shù),

#查詢所有學(xué)生的平均年齡
mysql> select avg(age) from student;
+----------+
| avg(age) |
+----------+
|  20.0000 |
+----------+
1 row in set (0.00 sec)

總結(jié):

查詢關(guān)鍵字的書寫順序:select 聚合函數(shù) from where order by

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容