网站设计销售好做吗,做网站用什么做,无人机网站建设,网络热词2023文章目录 #x1f4c2; Create(创建/新增)#x1f4cc;全列插入与指定列插入#x1f4cc;#x1f4cc;单行数据插入与多行数据插入#x1f4cc;#x1f4cc;插入数据否则更新#x1f4cc;#x1f4cc;数据的替换#x1f4cc; #x1f4c2; Retrieve(查询)#x1f4c… 文章目录 Create(创建/新增)全列插入与指定列插入单行数据插入与多行数据插入插入数据否则更新数据的替换 Retrieve(查询)SELECT语句全列查询 指定列查询 查询字段为表达式 查询结果取别名 去重 where条件比较运算符逻辑运算符结果排序筛选分页结果 Create(创建/新增)
对于表内数据的创建无非就是对数据的插入;
INSERT [INTO] table_name
[(column [, column] ...)]
VALUES (value_list) [, (value_list)] ...
value_list: value, [, value] ...存在一张表为:
mysql create table if not exists stu(- id int(2) unsigned zerofill primary key commentid并设置主键约束,- sn int(5) unsigned zerofill not null unique comment学号,- name varchar(20) not null comment姓名,- email varchar(32) null comment邮箱- );
Query OK, 0 rows affected (0.00 sec)mysql desc stu;
------------------------------------------------------------
| Field | Type | Null | Key | Default | Extra |
------------------------------------------------------------
| id | int(2) unsigned zerofill | NO | PRI | NULL | |
| sn | int(5) unsigned zerofill | NO | UNI | NULL | |
| name | varchar(20) | NO | | NULL | |
| email | varchar(32) | YES | | NULL | |
------------------------------------------------------------ 全列插入与指定列插入
以该表为例,若是需要为该表插入数据,插入数据的方式分为全列插入与指定列插入; 全列插入 全列插入指的是在插入数据时需要插入表中所有的字段; 即表中有几个字段就需要根据字段个数与字段要求插入对应的数据; mysql insert into stu values(1,1,Lihua,123456xx.com); #全列插入
Query OK, 1 row affected (0.00 sec)mysql select * from stu;
---------------------------------
| id | sn | name | email |
---------------------------------
| 01 | 00001 | Lihua | 123456xx.com |
---------------------------------
1 row in set (0.00 sec)在默认的插入中使用的即为全列插入,在全列插入时values前不需要使用()来指明需要插入 的字段,只需要在values后使用()按照字段顺序插入对应数据即可; 语法: insert [into] table_name values (value_list) [, (value_list)] ...其中带[]的为可省略; 指定列插入 指定列插入,顾名思义是需要指定所插入的字段进行插入; mysql insert into stu (id,name,sn)value(2,Zhangqian,2);#指定列插入
Query OK, 1 row affected (0.00 sec)mysql select * from stu;
-------------------------------------
| id | sn | name | email |
-------------------------------------
| 01 | 00001 | Lihua | 123456xx.com |
| 02 | 00002 | Zhangqian | NULL |
-------------------------------------
2 rows in set (0.00 sec)如该段代码所示,这段代码演示了如何使用指定列插入,插入数据时在values前使用()指定了需要插入数据的字段,在插入数据时根据所指定字段的顺序以及对应的要求对表进行数据的插入; 语法: insert [into] table_name [(column [, column] ...)/*指定列*/]values (value_list) [, (value_list)] ...单行数据插入与多行数据插入
无论是全列插入还是指定列插入都能进行对应的单行数据与多行数据插入; 这表示在MySQL中对于各种条件的混用是十分灵活的; 单行数据插入 单行数据插入即在解释全列插入与指定列插入所使用的数据插入; mysql insert into stu values(1,1,Lihua,123456xx.com); #单行数据插入 这个代码中为什么叫做单行数据插入? 在MySQL中我们将字段称之为列,对应的行即为对应的一组数据; 这里的values(1,1,Lihua,123456xx.com)即为插入一行数据,该行数据根据对应的字段如上; 多行数据插入 而要进行多行数据插入则可以直接使用,(value_list)来对数据进行追加; 示例:(这里以全列插入为例,指定列插入不再作示范) mysql insert into stu values(3,3,Liqiang,112233),(4,4,Zhangwu,223344),(5,5,Liuba,445566);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0mysql select * from stu;
-------------------------------------
| id | sn | name | email |
-------------------------------------
| 01 | 00001 | Lihua | 123456xx.com |
| 02 | 00002 | Zhangqian | NULL |
| 03 | 00003 | Liqiang | 112233 |
| 04 | 00004 | Zhangwu | 223344 |
| 05 | 00005 | Liuba | 445566 |
-------------------------------------
5 rows in set (0.00 sec)插入数据否则更新
INSERT ... ON DUPLICATE KEY UPDATE
column value [, column value] ...插入数据否则更新这个是为了应对当在插入数据时发生的主键冲突或者唯一键冲突 当插入数据时发生主键冲突或者唯一键冲突时使用这个语法时将会将原本的数据删除并以新的数据进行插入并替换该数据; 以该表为例:
-------------------------------------
| id | sn | name | email |
-------------------------------------
| 01 | 00001 | Lihua | 123456xx.com |
| 02 | 00002 | Zhangqian | NULL |
| 03 | 00003 | Liqiang | 112233 |
| 04 | 00004 | Zhangwu | 223344 |
| 05 | 00005 | Liuba | 445566 |
-------------------------------------
mysql show create table stu\G
*************************** 1. row ***************************Table: stu
Create Table: CREATE TABLE stu (id int(2) unsigned zerofill NOT NULL COMMENT id并设置主键约束,sn int(5) unsigned zerofill NOT NULL COMMENT 学号,name varchar(20) NOT NULL COMMENT 姓名,email varchar(32) DEFAULT NULL COMMENT 邮箱,PRIMARY KEY (id),UNIQUE KEY sn (sn)
) ENGINEMyISAM DEFAULT CHARSETutf8从上面的代码可以看出其中id字段设有主键约束,sn字段设有唯一键约束; 在不使用替换的语法前对其进行插入数据,且人为的触发其中一个约束冲突;
#主键冲突
mysql insert into stu values(5,6,Lianhua,22222);
ERROR 1062 (23000): Duplicate entry 05 for key PRIMARY#唯一键冲突
mysql insert into stu values(6,5,Lianhua,22222);
ERROR 1062 (23000): Duplicate entry 00005 for key sn当发生冲突时使用语法使其完成当发生键值冲突进行替换;
mysql insert into stu values(5,6,Lianhua,22222) - on duplicate key update id 6,sn 6,name LIANHUA,email22222;
Query OK, 2 rows affected (0.00 sec)mysql select * from stu;
-------------------------------------
| id | sn | name | email |
-------------------------------------
| 01 | 00001 | Lihua | 123456xx.com |
| 02 | 00002 | Zhangqian | NULL |
| 03 | 00003 | Liqiang | 112233 |
| 04 | 00004 | Zhangwu | 223344 |
| 06 | 00006 | LIANHUA | 22222 | #-已经发生了替换
-------------------------------------从上面的操作可以看出原来的其中一个字段为: | 05 | 00005 | Liuba | 445566 | 在这次插入失败后进行了替换,替换为了: | 06 | 00006 | LIANHUA | 22222 | 不仅如此,在替换成功时也有对应的提示: Query OK, 2 rows affected (0.00 sec) 在MySQL中以该方式进行数据插入时,会有对应提示:
-- 0 row affected: 表中有冲突数据但冲突数据的值和 update 的值相等
-- 1 row affected: 表中没有冲突数据数据被插入
-- 2 row affected: 表中有冲突数据并且数据已经被更新数据的替换
数据的替换类比于上一个插入数据否则更新; 数据的替换真正的意义上是:
若是发生主键冲突或者唯一键冲突,则删除原数据再进行插入;若是未发生主键冲突也未发生唯一键冲突,则直接插入数据; 对应的语法即为INSERT INTO变为REPLACE INTO;
mysql replace into stu values(5,6,Lianhua,22222);
Query OK, 2 rows affected (0.00 sec)Retrieve(查询)
在数据库中查询是一个非常频繁的工作,需要根据不同的场合以及不同的条件进行查找;
-------------------------------------
| id | name | chinese | math | english |
-------------------------------------
| 1 | Lihua | 67 | 88 | 90 |
| 2 | Liming | 57 | 58 | 70 |
| 3 | Zhaolao | 66 | 80 | 47 |
| 4 | Wu | 76 | 70 | 47 |
| 5 | Wuqi | 88 | 43 | 80 |
| 6 | Liqiang | 89 | 92 | 90 |
| 7 | Qinsu | 90 | 74 | 67 |
| 8 | Zhaoli | 54 | 74 | 100 |
-------------------------------------SELECT语句
在MySQL中SELECT语句是一个高频语句; 其功能可以根据条件对表数据进行查询; 其查询不单单能对数据,还能对表达式、函数等等…
mysql select 11;
-----
| 11 |
-----
| 2 |
-----
1 row in set (0.00 sec)全列查询
在MySQL中*符号代表通配符; SELECT * FROM table_name; 该句指令即表示查询表中所有字段(列); 以该中方式即可以打印出表中的所有字段的数据;
mysql select * from Point;
-------------------------------------
| id | name | chinese | math | english |
-------------------------------------
| 1 | Lihua | 67 | 88 | 90 |
| 2 | Liming | 57 | 58 | 70 |
| 3 | Zhaolao | 66 | 80 | 47 |
| 4 | Wu | 76 | 70 | 47 |
| 5 | Wuqi | 88 | 43 | 80 |
| 6 | Liqiang | 89 | 92 | 90 |
| 7 | Qinsu | 90 | 74 | 67 |
| 8 | Zhaoli | 54 | 74 | 100 |
-------------------------------------指定列查询
指定列查询,顾名思义就是指定对应的字段进行查询; 语句:SELECT 字段1,字段2... FROM table_name; 示例:
mysql select name,chinese from Point;
------------------
| name | chinese |
------------------
| Lihua | 67 |
| Liming | 57 |
| Zhaolao | 66 |
| Wu | 76 |
| Wuqi | 88 |
| Liqiang | 89 |
| Qinsu | 90 |
| Zhaoli | 54 |
------------------查询字段为表达式
SELECT不仅能查询表中的字段,也能查询表达式; 示例:
mysql select name,chinese,6 from Point;
---------------------
| name | chinese | 6 |
---------------------
| Lihua | 67 | 6 |
| Liming | 57 | 6 |
| Zhaolao | 66 | 6 |
| Wu | 76 | 6 |
| Wuqi | 88 | 6 |
| Liqiang | 89 | 6 |
| Qinsu | 90 | 6 |
| Zhaoli | 54 | 6 |
---------------------在该次查询中查询的除了字段以外还查询了一个常量表达式; 查询结果取别名
当一个查询的字段由一个较为复杂的表达式合成时,可以将该表达式使用as将其改名; 需要注意的是,在SELECT查询为结果的字段进行改名时,这个操作一般是靠后的,即将数据处理完后将其打印时才能将其进行改名,所以不能先进行改名再将其进行其他操作; 示例:
mysql select name,chinesemathenglish as 总分 from Point;
-----------------
| name | 总分 |
-----------------
| Lihua | 245 |
| Liming | 185 |
| Zhaolao | 193 |
| Wu | 193 |
| Wuqi | 211 |
| Liqiang | 271 |
| Qinsu | 231 |
| Zhaoli | 228 |
-----------------其中这里的as可以省略不写; 去重
这里的去重指的是对最终的结果在显示前进行去重; 其语法即为SELECT DISTINCT 字段 FROM table_name;
mysql select math from Point; # 未使用去重
------
| math |
------
| 88 |
| 58 |
| 80 |
| 70 |
| 43 |
| 92 |
| 74 |
| 74 |
------mysql select distinct math from Point; # 结果去重
------
| math |
------
| 88 |
| 58 |
| 80 |
| 70 |
| 43 |
| 92 |
| 74 |
------where条件
在大部分的情况下,SELECT在查询数据时应该配合着行的限制与列的限制从而达到筛选数据的效果; 若是不对数据进行筛选而是无脑选择SELECT * FROM table_name;来将数据进行全部显示的话可能会因为数据量过于庞大不便于观察且并没有筛选出需要条件的数据而做出的无用查看; 在MySQL中可以使用where条件来为SELECT查看的数据做出对应的条件限制从而达到能够查看到对应的数据; 同样的接下来的操作将基于上表进行; 比较运算符 , , , 若是满足条件则显示1,否则显示0; mysql select 12;
-----
| 12 |
-----
| 0 |
-----
1 row in set (0.00 sec)mysql select 12;
-----
| 12 |
-----
| 1 |
-----
1 row in set (0.00 sec)示例: 显示出math大于90的人的名字与成绩 mysql select name,math from Point where math90;
---------------
| name | math |
---------------
| Liqiang | 92 |
---------------与 在MySQL中的等于有两种,分别为以上两种; 两种的等于在实质性的使用层面并没有太多的区别; 唯一的区别只是对NULL进行判断; #--------------------------------------
mysql select 1 1;
-------
| 1 1 |
-------
| 1 |
-------mysql select 1 2;
-------
| 1 2 |
-------
| 0 |
-------mysql select NULL NULL;
-------------
| NULL NULL |
-------------
| NULL |
-------------
#--------------------------------------
mysql select 11;
-------
| 11 |
-------
| 1 |
-------mysql select 12;
-------
| 12 |
-------
| 0 |
-------mysql select NULLNULL;
-------------
| NULLNULL |
-------------
| 1 |
-------------
#--------------------------------------不等于 !、 在MySQL中的不等于为以上两种,但是无论哪种不等于都无法对NULL做比较; mysql select NULL NULL;
--------------
| NULL NULL |
--------------
| NULL |
--------------
1 row in set (0.00 sec)mysql select NULL NULL;
-------------
| NULL NULL |
-------------
| NULL |
-------------
1 row in set (0.00 sec)范围匹配BETWEEN a0 AND a1 范围匹配一般用来判断一个数是否属于该范围内,且该范围属于左闭右闭区间([a0,a1]); mysql select 5 between 0 and 10;
--------------------
| 5 between 0 and 10 |
--------------------
| 1 |
--------------------
1 row in set (0.00 sec)示例:找出math区间为[70,75]的数据: mysql select name,math from Point where math between 70 and 75;
--------------
| name | math |
--------------
| Wu | 70 |
| Qinsu | 74 |
| Zhaoli | 74 |
--------------该数据是否为一组数据中的其中一个IN (option,...) 该运算符一般判断一个数据是否存在于一组数据中; mysql select 12 in (10,12,14);
------------------
| 12 in (10,12,14) |
------------------
| 1 |
------------------
1 row in set (0.00 sec)示例:分别找出english为(70,80,90,100)的数据; mysql select name,english from Point where english in (70,80,90,100);
------------------
| name | english |
------------------
| Lihua | 90 |
| Liming | 70 |
| Wuqi | 80 |
| Liqiang | 90 |
| Zhaoli | 100 |
------------------
5 rows in set (0.00 sec)是NULL IS NULL 与 非NULL IS NOT NULL 该运算符一般用来判断一个字段是否为NULL; mysql select NULL IS NULL;
--------------
| NULL IS NULL |
--------------
| 1 |
--------------
1 row in set (0.00 sec)mysql select NULL IS NOT NULL;
-------------------
| NULL IS NOT NULL |
-------------------
| 0 |
-------------------
1 row in set (0.00 sec)模糊匹配LIKE 该运算符一般用来模糊匹配,其中%表示多个(包括0)个任意字符,_表示任意一个字符; 示例:分别找出name为W的字段与W_ 的字段; mysql select * from Point where name like W%;
----------------------------------
| id | name | chinese | math | english |
----------------------------------
| 4 | Wu | 76 | 70 | 47 |
| 5 | Wuqi | 88 | 43 | 80 |
----------------------------------mysql select * from Point where name like W_;
----------------------------------
| id | name | chinese | math | english |
----------------------------------
| 4 | Wu | 76 | 70 | 47 |
----------------------------------逻辑运算符
运算符说明AND多个条件为TRUE(1)时结果为TRUE(1);OR任意一个条件为TRUE(1)时结果为TRUE(1);NOT条件为TRUE(1)时结果为FALSE(0); 结果排序
结果排序可以将数据再处理完时对其进行排序处理(一般该操作的顺序为最后的操作); 且没有进行ORDER BY子句的查询所返回的结果顺序一般都是未定义的,即不可靠的; 语法:
SELECT ... FROM table_name [ WHERE ... ]ORDER BY column [ASC|DESC],[...];#其中:#ASC为升序,DESC为降序;#默认为ASC升序;示例: 显示name与math的字段且math为升序的条件显示;
mysql select name,math from Point order by math ASC;
---------------
| name | math |
---------------
| Wuqi | 43 |
| Liming | 58 |
| Wu | 70 |
| Qinsu | 74 |
| Zhaoli | 74 |
| Zhaolao | 80 |
| Lihua | 88 |
| Liqiang | 92 |
---------------
8 rows in set (0.00 sec)筛选分页结果
在MySQL中经常会因为数据量过大而导致不便于数据的观察; 而在MySQL中有这么一条语句可以便于结果的观察,即为筛选分页结果; 语法:
#分页时的起始下标为0;SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
-- 从起始下标开始筛选n条结果;SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s,n;
-- 从s开始,筛选n条结果SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;
-- 从s开始,筛选n条结果(该方法的表达更为明确)示例: 查看name与math字段并使用order by以降序的方式进行排序最终结果每页显示3条;
mysql SELECT name,math from Point order by math desc limit 3 offset 0;
---------------
| name | math |
---------------
| Liqiang | 92 |
| Lihua | 88 |
| Zhaolao | 80 |
---------------
3 rows in set (0.01 sec)mysql SELECT name,math from Point order by math desc limit 3 offset 3;
--------------
| name | math |
--------------
| Qinsu | 74 |
| Zhaoli | 74 |
| Wu | 70 |
--------------
3 rows in set (0.00 sec)mysql SELECT name,math from Point order by math desc limit 3 offset 6;
--------------
| name | math |
--------------
| Liming | 58 |
| Wuqi | 43 |
--------------
2 rows in set (0.00 sec)