mysql的ps.setmaxrows,MySQL數據類型與操作數據表

MySQL常用數據類型

整數:tinyint,smallint,int,bight

浮點數:float(p(所占總位數)、s(小數點所占位數))4字節

double(p、s)8字節

定點數:decimal(p、s)

日期/時間:data、time、datatime

文本:char、varchar、text

二進制:bit

1.整形

MYSQL數據類型-整型

TINYINT------1個字節---負128~127 ,無符號0到255

SMALLINT- --2個字節----負32768到32767, 0到65535

MEDIUMINT----3個字節---負8388608到8388607, 0到16777215

INT----------4個字節---負2147483648到2147483647 0到4294967295

BIGINT-------8個字節----2的63次方~2的63次方-1;無符號:0~2的64次方-1;

2浮點型:

@MySQL——(二)數據類型與操作數據表——浮點型

1、浮點型

FLOAT[(M,D)]:這里M指總位數,D指小數點后位數。如FLOAT(7,2)則能表示的最大值為:99999.99

DOUBLE[(M,D)]

2、一般情況下使用FLOAT足夠

1.float[M,D],4個字節

2.double[M,D],8個字節

(M-總位數,D-小數位數)

時間和日期

1、YEAR:1970至2069

2、TIME:-838:59:59至838:59:59

3、DATE:1000-1-1至9999-12-31

4、DATETIME: 1000-1-1 00:00:00至9999-12-31 23:59:59

5、TIMESTAMP存儲范圍:1970-1-1 00:00:00到2037-12-31 23:59:59

MySQL數據類型(4):字符型

1、CHAR(M):定長類型,比如CHAR(5),如果我們只賦值abc,那么系統會自動在后面補兩個空格0——255

2、VARCHAR(M):變長類型,L+1個字節,其中L<=M且0<=M0——65535

3、ENUM('value1','value2'...)枚舉值,提供幾個選項,選擇其中一個,如:性別('男','女','保密')

4、SET('value1','value2'...) 最多64個成員,可以任選里面其中幾個,任意排列組合

MEDIUMTEXT -L+3字節, L<2^24

LONGTEXT -L+4字節, L<2^32

ENUM('value1','value2'...) -1或2個字節,取決於枚舉值的個數(最多65535個值)

SET('value1','value2'...) -1、2、3、4或8個字節,取決於set成員的數目(最多64個成員)

比如char(M)的說明,官方說的是:會占用M × w個字節, 0 <= M <= 255, where w is the number of bytes required for the maximum-length character in the character set。w的意思是某種字符編碼中占用的最大空間。所以實際上這里M的意思就是實際的字符個數的意思, 即使這個這種編碼下每個字符占用2個字節、3個字節,也能存儲最大255個字符。並不是如ppt中所說的最大M個字節。

還有關於varchar(M)的說法,官方說的是:L + 1 bytes if column values require 0 − 255 bytes, L + 2 bytes if values may require more than 255 bytes。所以這里不一定是L+1,還可能是L+2。ppt中所說的最長是65535個字節,但是又是L+1,1個字節明顯是不夠存儲那么大的長度的,所以ppt還是有些出入的。

還有其他的tinytext,text,mediumtext,longtext,這些類型最大長度就是2^8-1個字節,2^16-1字節,2^24-1個字節,2^32-1個字節,如果某種字符編碼中,每個字符占用2個字節,那么總的可以存儲的字符數就要打折。

@MySQL——(二)數據類型與操作數據表——創建數據表

一、數據表

1、數據表(或表)是數據庫最重要的組成部分之一,是其他對象的基礎

2、表是一個二維表,行稱為【記錄】,列稱為【字段】

二、創建數據表

1、首先打開數據庫(數據庫要存在): USE 數據庫名稱

2、創建數據表:CREATE TABLE [IF NOT EXISTS] table_name(

column_name(列名稱) data_type(列類型),

.... )

舉例——

CREATE TABLE tb1(

username VARCHAR(20),

userage TINYINT UNSIGNED,

salary FLOAT(8,2) UNSIGNED,

);

UNSIGNED 無符號

--------------------

查看數據

查看數據表:(查看選擇的數據庫的表)

SHOW TABLES [FROM db_name] [LIKE 'pattern' | WHERE expr];(可以用來查看其他數據庫的表列表)

例:

SHOW TABLES;//查看當前選擇的數據庫的所有表

SHOW TABLES FROM TEST;//查看TEST數據庫中的所有表,當前選擇數據庫位置不變。

SELECT DATABASE();//查看當前選擇的數據庫

SHOW TABLES [FROM db_name]

[LIKE 'pattern' | WHERE expr]

既可以查看當前數據庫中的數據表,也可查看其他數據庫中的數據表

mysql> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| bookstore |

| mysql |

| yggl |

+--------------------+

4 rows in set

mysql> use bookstore;

Database changed

mysql> show tables;

+---------------------+

| Tables_in_bookstore |

+---------------------+

| book |

+---------------------+

1 row in set

mysql> show tables from bookstore;

+---------------------+

| Tables_in_bookstore |

+---------------------+

| book |

+---------------------+

1 row in set

.查看數據表列表

1.查看數據表列表

SHOW TABLES [FROM db_name] [LIKE 'pattern' | WHERE expr]

SHOW TABLES; //查看當前數據庫中的表

SHOW TABLES FROM mysql;

FROM之后,當前數據庫不會發生改變

SHOW COLUMNS FROM tb1; 查看tb1中的數據表結構

記錄查找

查看數據表

SHOW table-name;

插入記錄

INSERT [INTO] table-name [(column-name,......)] VALUES(val,....); \\字符要加''號。

\\table-name后面沒有標明插入列的情況下,每一列的值都要按順序插入才行。

記錄查找

SELECT expr,...FROM table-name;

SELECT * FROM test; \\*號是現實全部字段。

SELECT 查找關鍵字 expr 字段 *表示全部

FROM tb1_name哪個數據表

空值與非空

一、數據表(或表)是數據庫最重要的組成部分之一,是其他對象的基礎。

數據表是一個二維表,行稱為【記錄】,列稱為【字段】

二、創建數據表

1、首先打開數據庫(數據庫要存在): USE 數據庫名稱

2、創建數據表:CREATE TABLE [IF NOT EXISTS] table_name(

column_name(列名稱) data_type(列類型),

.... )

舉例:

CREATE TABLE tb1(

username VARCHAR(20),

userage TINYINT UNSIGNED,

salary FLOAT(8,2) UNSIGNED,

);

UNSIGNED 無符號

空值與非空:NULL,字段值可以為空 NOT NULL,字段值禁止為空,不賦值會報錯

三、查看數據表列表

1、查看數據表是否存在:SHOW TABLES [FROM db_name] [LIKE 'pattern' | WHERE expr ]

2、查看某個表中所有列的信息:SHOW COLUMNS FROM tbl_name;

四、記錄的插入

1、插入記錄 INSERT [INTO] tbl_name [(col_name,...) ] VALUES(val1,val2,....)

2、部分字段賦值使用(col_name1,col_name2,...)

3、插入列col_name可以省略,但必須為所有字段輸入信息,否則報錯

五、記錄的查找

1、查找記錄:SELECT expr,... FROM tbl_name;

SELECT * FROM tbl_name;

自動編號

1.自動編號 AUTO_INCREMENT

自動編號,且必須與主鍵配合使用

2.自動編號AUTO_INCREMENT作用

1、自動編號:保證記錄的唯一性

2、類型必須為整型(可以是FLOAT(5,0)等,小數點后必須為0),必須和主鍵PRIMARY KEY組合使用

3、默認情況下,起始值為1,每次的增量為1

默認情況下,起始值為1, 每次增量為1.

CREATE TABLE tb3(

id SMALLINT UNSIGNED AUTO_INCREMENT,

username VARCHAR(30) NOT NULL); //報錯,自動增量字段必須設置成主鍵

主鍵約束

主鍵可以寫為PRIMARY KEY,也可以寫成KEY

每張數據表只能存在一個主鍵

主鍵保證記錄的唯一性

主鍵自動為NOT NULL,也就是說必須要為主鍵賦值。但如果主鍵選擇了AUTO_INCREMENT,那么不需要手動賦值。

auto_increment必須和主鍵primary key一起使用,但是主鍵primary key不一定要和auto_increment一塊使用

(主鍵的字段是可以賦值的,但不能賦相同的值)

主鍵約束

1、唯一性(可以賦值但是不能給兩個記錄賦一樣的值)每張表只存在一個主鍵

2、非空,插入方式與NOT NULL一樣

3、自動編號(AUTO_INCREMENT)必須與主鍵(PRIMARY KEY)搭配使用,主鍵可以不與自動編號一起使用

創建一個帶主鍵的表:

CREATE TABLE user(

-> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

-> username VARCHAR(20) NOT NULL

-> );

Database changed

接着一次插入數據 便會有編號出現 但是如果刪除了 編號會出現間斷

唯一約束

唯一約束與主鍵約束的區別:

UNIQUE KEY 一張數據表可以有多個,而PRIMARY KEY一張數據表只能有一個

唯一約束的字段可以為空,主鍵約束的字段不能為空

(唯一約束若多個字段為空,看起來似乎不能保證唯一性,但存儲的只有一個‘空’,所以還是保證了字段的唯一性)

UNIQUE KEY

(1)唯一約束

(2)唯一約束可以保證記錄的唯一性

(3)唯一約束的字段可以為空值(NULL)

(4)每張數據表可以存在多個唯一約束

默認約束

1. 主鍵約束 primary key 與Auto_Increment 自動編號配合使用

2. 唯一約束 unique key

3. 默認約束 default

示例:

CREATE TABLE tb6(

id SMALLINT UNSIGED AUTO_INCREMENT PRIMARY KEY,

username VARCHAR(20) NOT NULL UNIQUE KEY,

sex ENUM('1','2','3') DEFAULT '3',)//表示當sex沒有賦值時,默認值為3

總結

數據類型 整型 (tinyint smallint mediumint int bigint)

浮點型 (FLOAT{[M,D]},DOUBLE{[M,D]})M:總位數,D:小數點后位數

日期 (YEAR DATE TIME TIMESTEMP)

字符型 (CHAR VARCHAR TEXT)

DOS 界面連接數據庫 mysql -u用戶名 -p密碼 -hHOST

顯示數據庫 SHOW DATABASES;

顯示表結構 SHOW COLUMNS FROM table;

顯示所有表 SHOW TABLES;

進入數據庫 USE 數據庫;

創建數據庫 CREATE DATABASE 庫名;

創建表 CREATE TABLE 表名(字段及信息);

插入數據 INSERT INTO table []VALUES();[]為空說明插入全部的值

查詢數據 SELECT 字段 FROM table WHERE 條件

自增自動編號 auto_increment

主鍵約束 PRIMARY KEY(有auto_increment的一定是主鍵,主鍵不一定有auto_increment)

唯一約束UNIQUE KEY

默認約束 DEFAULT 當沒有賦值時則自動添加默認值

4.非空約束:NOT NULL

5.外鍵約束:

*CREATE TABLE tb_name(

...,

...

數據表操作:

)//創建數據表(結構)

*SHOW COLUMNS FROM tb_name//查看數據表結構(字段)

*INSERT tb_name[(...)] VALUES(...)//向數據表內插入記錄

*SELECT *FROM tb_name//查看數據表的記錄

--------------------

約束以及修改數據表

外鍵約束:

FOREIGN KEY (子表字段名) REFERENCES 父表 (父表字段名)

要求:保持數據一致性,完整性;實現一對一或一對多關系。

數據表的存儲引擎只能為InnoDB:配置文件中default-storage-engine=INNODB;

父表和子表禁止使用臨時表(子表:具有外鍵列的表;父表:子表參照的表)

外鍵列和參照列必須具有相似的數據類型。數字長度或有無符號必須相同,字符長度可不同

外鍵列和參照列必須創建索引。如果參照列不存在索引的話,MySQL將自動創建索引

SHOW INDEXES FROM 表名 查詢表格中的索引

打開一個數據庫

USE test

創建一個用戶數據表

CREATE TABLE users(

-> id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT

-> username VARCHAR(10) NOT NULL

->pid SMALLINT UNSIGNED//pid和表province中id字段類型都要完全一樣

->FOREIGN KEY (pid) REFERENCES provinces (id)

->);

子表是users,父表是province

外鍵列pid,參照列id,

province的id加過主鍵,主鍵在創建的時候會自動創建索引。所以id字段上已經創建過索引,參照列已經有了索引

顯示索引SHOW INDEXES FROM province;

外鍵列上我們沒有為pid指定主鍵,系統自動創建索引

在 MY.ini 文件中編輯默認的存儲引擎:default-storage-engine=INNODB;

顯示創建表的語句:SHOW CREATE TABLE table_name;

查看表是否有索引:SHOW INDEXS FROM table_name;

以網格查看表是否有索引:SHOW INDEXS FROM table_name\G;

Eg:

CREATE TABLE table_name1(

id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

name VARCHAR(20) NOT NULL

)

CREATE TABLE table_name2(

id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

username VARCHAR(20) NOT NULL,

pid SMALLINT UNSIGNED,

FOREIGN KEY (pid) REFERENCES table_name1(id) /* 外鍵 pid 參照 table_name1中的 id 字段 */

)

CASCADE:刪除或更新父表中的數據相應的刪除或更新子表中的相匹配的行;

SHOW CREATE TABLE tb_name;//顯示數據表創建時的命令;

創建子表:users1;

>CREATE TABLE users(

>id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,

>username VARCHAR(10) NOT NULL,

>pid(外鍵) SMALLINT(與參照鍵類型相同) UNSIGNED(與參照鍵有無符號類型也要相同),//外鍵的作用體現在這:如果我們要添加一個省份的字段,需要添加個char型的,現在有了關系型數據庫,我們只需要存儲省份的id即可;

>FOREIGN KEY (pid) PREFERENCES provinces (id) ON DELETE CASCADE,

>);

INSERT provinces(pname) VALUES('A');

INSERT provinces(pname) VALUES('B');

INSERT provinces(pname) VALUES('C');

INSERT users1(username,pid) VALUES('Tom',1);

INSERT users1(username,pid) VALUES('Jerry',2);

INSERT users1(username,pid) VALUES('Lucy',3);

當刪除provinces中的id=3的數據C時,相應的users1中的Lucy也會被刪掉,更新的話同樣如此;

SET NULL://從父表刪除或更新行,會設置子表中的外鍵列為NULL,如果使用該選項,必須保證子表列沒有指定NOT NULL

RESTRICT://拒絕對父表的刪除或更新操作;

NO ACTION://標准的SQL語句,在MYSQL當中與RESTRICT相同

實際開發中,我們很少使用物理的外鍵約束,而是使用邏輯約束;無理的外鍵約束只有innoDB這種存儲引擎才會支持,MYISAM這種引擎就不支持物理的外鍵約束。反過來說,當我們使用到的引擎為MYISAM時,只能使用邏輯外鍵(即兩個表的設計的邏輯關系)。

外鍵約束的參照操作:

1、CASCADE:從父表刪除或更新且自動刪除或更新子表中匹配的行。

2、SET NULL:從父表刪除或更新行,並設置子表中的外鍵列為NULL。如果使用該選項,必須保證子列表沒有指定NOT NULL。

3、RESTRICT:拒絕對父表的刪除或更新操作。

4、NO ACTION:標准SQL的關鍵字,在MySQL中與RESTRICT相同。

FOREIGN KEY (子表列名) REFERENCES FROM 父表名(父表列名)[ON DELETE|UPDATE CASCADE|SET NULL|RESTRICT|NO ACTION];

在實際開發中,存儲引擎不為INNODB,無法使用FOREIGN KEY,普遍使用邏輯方法。

.表級約束與列級約束

1.表級約束與列級約束

(1)對一個數據列建立的約束,稱為列級約束

(2)對多個數據列建立的約束,稱為表級約束

(3)列級約束既可以在列定義時聲明,也可以在列定以后聲明

(4)表級約束只能在列定義后聲明

2.主鍵、外鍵、非空、唯一、default都是約束條件。主鍵、外鍵、唯一既可以作為表級約束,也可作為列級約束

( not null, default )只有列級約束

添加約束

1.添加主鍵約束

CONSTRAINT_PK主鍵名字為PK

ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...)

e.g:ALTER TABLE users ADD CONSTRAINT PK_users_id PRIMARY KEY (id);

2.添加唯一約束

ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name,...)

e.g:ALTER TABLE users ADD UNIQUE (username);

3.添加外鍵約束

ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name](index_col_name,...) reference_definition

e.g:ALTER TABLE users ADD FOREIGN KEY (pid) REFERENCES provinces (id)

4.添加/刪除默認約束 DEFAULT

ALTER TABLE tbl_name ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}

e.g:

ALTER TABLE users ADD age TINYINT UNSIGNED NULL;

ALTER TABLE users ALTER age SET DEFAULT 15;

ALTER TABLE users ALTER age DROP DEFAULT;

刪除約束

一約束的 index_name 可通過 SHOW INDEX FROM table_name\G; 查詢

刪除主鍵約束:

ALTER TABLE table_name DROP PRIMARY KEY;

刪除唯一約束:

ALTER TABLE table_name DROP INDEX index_name;

刪除外鍵約束:

ALTER TABLE table_name DROP FOREIGN KEY (fk_symbol)通過查詢系統默認給的名字;

外鍵約束的名字 fk_symbol 可通過 SHOW CREATE TABLE table_name; 查詢

刪除外鍵約束,查找CREATE TABLENAME 找到系統為外鍵約束添加的名字

添加/刪除列

1、添加單列:如果指定FIRST,則在整個表的最前方,默認不寫為整個表的最后方;如果指定AFTER col_name,則在col_name的后面。

ALTER TABLE tbl_name ADD [COLUMN] col_name column_definition [FIRST AFTER col_name]

2、添加多列:無法指定FIRST/AFTER、只能默認為最后方。

ALTER TABLE tbl_name ADD [COLUMN] (col_name column_definition,...)

3、刪除單列

ALTER TABLE tbl_name DROP [COLUMN] col_name

4、刪除多列(Ps:刪除一列的同時,新增一列。其間用逗號隔開)

ALTER TABLE tbl_name DROP [COLUMN] col_name, DROP [COLUMN] col_name,DROP [COLUMN] col_name

743dc092fe73350ce83bc2a086794bcd.png

操作數據表中的記錄

INSERT 插入記錄

1、INSERT 插入記錄

語法1:INSERT [INTO] 表名 [(列名1,列名2,...)] VALUES(列值1,列值2,...),(...),...;

對於自動編號的字段,插入“NULL”或“DEFAULT”系統將自動依次遞增編號;

對於有默認約束的字段,可以插入“DEFAULT”表示使用默認值;

列值可傳入數值、表達式或函數,如密碼可以用md5()函數進行加密(如md5('123'));

可同時插入多條記錄,多條記錄括號間用逗號“,”隔開

語法2:INSERT [INTO] 表名 SET 列名1=列值1, 列名2=列值2,...;

這種方法一次只能插入一條記錄;列值中有自動編號、默認值或Boolean類型均可以不賦值(使用子查詢)

語法3:INSERT [INTO] 表名(列名1,...) SELECT 列名1,... FROM 表名 [GROUP BY/HAVING/ORDER BY/LIMIT...];

一般用於將其他表的數據插入到指定表,注意對應

2、單表更新 UPDATE

UPDATE 表名 SET 列名1=列值1 [,列名2=列值2, ...] [WHERE 條件];(如條件為 列名=列值 修改某一字段的值)

省略條件則更新所有記錄該列的值

3、單表刪除 DELETE

DELETE FROM 表名 [WHERE 條件];

省略條件則默認刪除該表所有記錄(僅刪除所有記錄,不刪除數據表);

插入自動編號的字段時,號數為已有的最大號數+1,即使中間有空號數也是如此(如12356,插入記錄后為123567)

INSERT// 插入記錄

第一種:

insert tb_name [column_name]values(...)[,(...),(....)];--比較常用,可以一次性插入多條記錄,並且可以輸入表達式甚至是函數,但是無法進行子查詢。

第二種:

insert tb_name set column_name={exprdefault};--可以進行子查詢,但是只能插入一條記錄的多個字段,但一次只能插入一條記錄(INSERT [INTO] 表名 SET 列名1=列值1, 列名2=列值2,...;)。

第三種:

insert table_name [(colname...)] select語句.....--這種方法就是把查詢到的一個表結果插入到另一個指定數據表中。

單表更新

單表更新:

UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={exp1|DEFAULT}[,col_name2=...][WHERE where_condition] 【一般來說要用WHERE指定位置,不然所有數據都會被更新】

例:

不指定位置:UPDATE users set age = age + 5,sex = 0; 使表里所有記錄的age加5

指定位置: UPDATE users set age = age+ + 10 WHERE id % 2=0; 取id為偶數的位置

update更新數據

update

set =,[,=]...

[where ];

刪除記錄

1、刪除記錄DELETE:分為單表刪除和多表刪除

2、單表刪除:DELETE FROM tbl_name [WHERE where_conditon];

3、若不添加WHERE則刪除【全部記錄】

刪除后再插入,插入的id號從最大的往上加,而不是填補刪除的。

delete from users where id=6;

insert users values (null,'111','222',33,null); 刪除后再插入,插入的id號從最大的往上加,而不是填補刪除的。

查詢表達式

每一個表達式表示想要的一列,必須至少有一個

多個列之間以英文逗號分隔

星號(*)表示所以列 tbl_name.*可以表示命名表的所有列

查詢表達式可以使用[As]alias_name為其賦予別名

別名可用於GROUP BY,ORDRE BY或HAVING子句

SELECT 字段出現順序影響結果集出現順序,字段別名也影響結果集字段別名。

一、查找記錄

1、語法:

SELECT select_expr [,select expr2...] 只查找某一個函數或表達式

[

FROM table_references 查詢表名

[WHERE where_conditon] 查詢條件

[GROUP BY {col_name|position} [ASC|DESC],...] 按某個字段進行分組,相同的只顯示第一個

[HAVING where_conditon] 分組時,給出顯示條件

[ORDER BY {col_name|expr|position} [ASC|DESC],...] 排序

[LIMIT {[offset,]row_count|row_count OFFSET offset}] 限制返回數量

}

2、查詢表達式的順序會影響結果順序

每個表達式表示想要的一列,必須有至少一個

多個列直接以英文逗號分隔

星號*表示所有列

3、使用tbl_name.col_name來表示列記錄,這多表查詢時可以區別開同名的列

4、使用[AS] alias_name為其賦予別名,別名可以用於GROUP BY、ORDER BY或HAVING子句,例如SELECT id AS userId,username AS uname FROM users; 這樣查詢出來的結果會用別名表示

where 條件表達式

where 后各種根據條件(>、=、<=、!=、<>、IS NOT NULL),根據邏輯(and,or),根據結合方式left join、right join等,根據模式匹配(IN、NOT IN、like、not like、regexp),使用各種MySQL函數和表達式,從表集合中篩選記錄。

條件表達式

對記錄進行過濾, 如果沒有指定WHERE子句,則顯示所有記錄。

在WHERE表達式中,可以使用MySQL支持的函數或運算符。

查詢結果分組 GROUP BY

[GROUP BY {col_name|position} [ASC|DESC],...]

ASC:升序,默認

DESC:降序

position:SELECT語句中列的序號

eg. ELECT sex FROM users GROUP BY sex;對users中的sex按sex進行分組

eg. SELECT * FROM users GROUP BY 1;(這里的1表示查詢的第一個字段,這里查詢所有字段信息,第一個字段就是id,所以會按照id字段進行分組) 1表示SELECT語句中第一個出現的字段,即位置。

建議BY后寫列名稱,不寫位置,因為位置還要人為數。

注意:如果存在相同的值(例如上面的age可能有多個相同的值),只會保留一個。但使用ORDER BY 就不會省略。

having 語句分組

having 語句分組,用在group by后面追加條件,判斷式中的字段是必須出現在前面select中的 或者是可以包含沒有出現在前面查詢中的字段的一個聚合函數count(),max()等等

[HAVING when where_condition]

SELECT sex FROM users GROUP BY 1 HAVING age > 35; //有錯

SELECT sex, age FROM users GROUP BY 1 HAVING age > 35;

SELECT sex FROM users GROUP BY 1 HAVING count(id) >= 2;

(這條指令,指按照sex分組,分成了兩組sex=0和sex=NULL,條件id數大於2的留下顯示,顯然sex=0個數有8>2故留下,而sex=NULL個數為1,不滿足條件,故不顯示。如果條件改成count(id)>=1,則會顯示sex為0和NULL兩個分組。)

聚合函數永遠只有一個返回結果

count是記錄個數的,

** HAVING 分組條件 **

沒有 HAVING 時,GROUP BY 是對全體記錄進行分組並顯示結果。

有 HAVING 時,對全體記錄分組后只把符合HAVING條件的記錄顯示出來。

舉例:SELECT username,age FROM users GROUP BY age HAVING count(id)>=2;

這句話的意思是:按照age分組后,把組員數量大於等於2的組顯示出來。

order by對查詢結果進行排序

order by

對查詢結果進行排序,默認是升序

order by{col_name}

select * from users order by id desc; //對一個字段排序

select * from users order by age,id desc; //兩個字段同時排序

desc是降序

1、對查詢結果進行排序:[ORDER BY [col_name | expr | position } [ASC|DESC],...]elect * from user order by id desc;

2、可以同時按多條字段進行排序,規則是先按前面的字段排,在基礎上再按后面字段排。

3、如:SELECT * FROM users ORDER BY age,id DESC; 先按照age排序,如果age有重復的,重復的字段里按id排序

LIMIT:限制查詢結果返回的數量

[LIMIT {[offset,] row_count|row_count OFFSET offset}]

SELECT語句從0開始編號

offset:偏移量

row_count:返回結果的數目 [LIMIT{[offset,]row_countrow_count OFFSET offset}]

eg. SELECT * FROM users LIMIT 2; // 從第一條開始(第一個為0),返回兩條

SELECT * FROM users LIMIT 2,3 ;//從第三條開始(第一個為0),返回三條

第三種insert,數據從一個表插入到另一個表 將查詢結果寫入到另一個數據表中:

INSERT table_name(column_name) SELECT ...

eg:

INSERT test SELECT username FROM users WHERE age >=30; // 字段不匹配提示

INSERT test(username) SELECT username FROM users WHERE age >=30;

{

對比分組:

SELECT sex, age FROM users GROUP BY 1 HAVING age > 35;

分組用的是HAVING要求HAVING后的條件要么是聚合函數,要么字段在前面出現;

而插入用的是WHERE 沒有以上提到的兩個限制

}

總結

記錄操作:增,改,刪,查

INSERT://增加記錄,有三種方法。

INSERT [INTO] tbl_name [(col_name,...)] {VALUES | VALUE} ({expr|DEFAULT},...),(...),...

INSERT [INTO] tbl_name SET col_name={expr|DEFAULT},...

INSERT [INTO] tbl_name [(col_name,...)] SELECT...

UPDATE://更新數據

單表更新

UPDATE [LOW_PRIORITY][IGNORE] table_reference SET col_name1={expr1|DEFAULT},[col_name2={expr2|DEFAULT}]...[WHERE where_condition]

多表更新

DELETE : //刪除數據

單表刪除

DELETE FROM tbl_name [WHERE where_condition}

多表刪除

SELECT: //查詢

SELECT select_expr [,select expr2...] 只查找某一個函數或表達式

[

FROM table_references 查詢表名

[WHERE where_conditon] 查詢條件

[GROUP BY {col_name|position} [ASC|DESC],...] 按某個字段進行分組,相同的只顯示第一個

[HAVING where_conditon] 分組時,給出顯示條件

[ORDER BY {col_name|expr|position} [ASC|DESC],...] 排序

[LIMIT {[offset,]row_count|row_count OFFSET offset}] 限制返回數量

]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值