MySQL数据库的基础语法总结(1)
MySql
- 一.数据库,数据表的基本操作
- 1.数据库的基本操作
- 2. 数据表的基本操作
- 2.1 数据库的数据类型
- 2.1.1 整数类型
- 2.1.2 浮点数类型和定点数类型
- 2.1.3 字符串类型
- 2.1.4 日期与时间类型
- 2.2 数据表的基本操作
- 2.2.1 创建一个数据表
- 2.2.2 查看数据表
- 2.2.3 查看表的基本信息的MySQL指令
- 2.2.4 查看数据表结构的MySQL指令
- 2.2.5 修改数据表(不做重点)
- 2.2.6 删除数据表
- 2.3 数据表的插入
- 2.3.1 为表中所有字段插入数据
- 2.3.2 为表中指定字段插入数据
- 2.3.3 同时插入多条记录
- 2.4 数据表的约束
- 2.4.1 主键约束
- (1) 第一种主键约束(常用)
- (2) 第二种主键约束
- (3) 自增主键
- 2.4.2 非空约束
- 2.4.3 默认值约束
- 2.4.4 唯一性约束
- 2.4.5 外键约束
- 2.4 更新(修改)数据
- 2.4.1 UPDATE基本语法
- 2.4.2 UPDATE更新部分数据
- 2.4.3 UPDATE更新全部数据
- 2.5 删除数据
- 2.5.1 DELETE基本语法
- 2.5.2 DELETE删除部分数据
- 2.5.3 DELETE删除全部数据
- 2.5.4 TRUNCATE和DETELE的区别
- 3. MySQL数据表的简单查询.
- 3.1 全列查询
- 3.2 指定列查询
- 3.3 查询字段为表达式
- 3.4 别名
- 3.5 去重:DISTINCT
- 3.6 排序:ORDER BY
- 3.7 条件查询:WHERE
- 1. 基本查询
- 2. 逻辑查询
- 3. 范围查询
- 4.模糊查询:LIKE
- 5.NULL 的查询:IS [NOT] NULL
- 3.8 分页查询:LIMIT
- 4. 函数
- 1.聚合函数
- 1.1 count()
- 1.2 max()
- 1.3 min()
- 1.4 sum()
- 1.5 avg()
一.数据库,数据表的基本操作
1.数据库的基本操作
MySQL安装完成后,要想将数据存储到数据库的表中,首先要创建一个数据库。创 建数据库就是在数据库系统中划分一块空间存储数据,语法如下:
create database 数据库名称;
创建一个名为Demo1的数据库:
create database Demo1;
创建结果:
说明:
如果数据库中已经有了这个库,则不进行创建!
创建数据库后查看该数据库基本信息MySQL命令:
show create database Demo1;
运行后的结果为:
此时数据库默认的字符集编码为latinl
,但是由于这个字符集编码不支持中文,所以我们可以通过下面的指令修改该数据据库的字符集:
将数据库的字符集修改为 utf8 MySQL命令:
alter database Demo1 character set utf8;
此时如果我们想要插入的是中文字符串也是不会报错的!(后面讲到)
- 说明:MySQL的utf8编码不是真正的utf8,没有包含某些复杂的中文字符。MySQL真正的utf8是使用utf8mb4,建议大家都使用utf8mb4
运行结果:
查询出MySQL中所有的数据库MySQL命令:
show databases;
运行结果:
此时左下角的14就说明我们的数据库有14个.
切换数据库 MySQL命令:
use 数据库名;
我们选中刚才创建的Demo1数据库.
use Demo1;
运行结果:
查看当前使用的数据库 MySQL命令:
select database();
运行结果:
数据库的删除操作:
drop database 数据库名;
运行结果展示:
此时数据库表中已经没有Demo1这个数据库了,并且下面的数字也由14变为了13.
数据库删除以后,内部看不到对应的数据库,里边的表和数据全部被删除
总结一下数据库基本操作的注意事项:
(1) 每个sqL语句都需要用 ’ ; ’ 结尾.
(2) show databases; sql语句之间,每个关键字需要用空格隔开.
(3) 注意!在查看数据库时,用的是databases
而不是 database
切记最后的 s 不要弄混!
(4) 在创建数据库时可以直接指定字符集,此时需要的操作就是create database 数据库名 charset 字符集名称
通过关键字 charset 来实现!
(5) 数据库的命名规则: 数字,下划线,字母构成,名字不能是 SQL 关键字,并且数据库名字不能只包含数字!!!
(6) 对于删除数据库的操作一定要谨慎谨慎再谨慎, 除了谨慎还是TM的谨慎!!
2. 数据表的基本操作
2.1 数据库的数据类型
由于我们创建数据表需要指定类型,所以我们这里优先讲解一下类型:
2.1.1 整数类型
根据数值取值范围的不同MySQL 中的常见的整数类型可分为4种,分别是TINYINT、SMALLINT、INT和 BIGINT。下图列举了 MySQL不同整数类型所对应的字节大小和取值范围而最常用的为INT类型的,
数据类型 | 大小 | 无符号取值范围 | 有符号取值范围 | 对应java类型 |
---|---|---|---|---|
TINYINT | 1 | 0~255 | -128~127 | Byte |
SMALLINT | 2 | ~65535 | -32768~32768 | Short |
INT | 4 | 0~4294967295 | -2147483648~ 2147483648 | Integer |
BIGINT | 8 | 0~18446744073709551615 | -9223372036854775808~9223372036854775808 | Long |
2.1.2 浮点数类型和定点数类型
在MySQL数据库中使用浮点数和定点数来存储小数。浮点数的类型有两种:单精度浮点数类型(FLOAT)和双精度浮点数类型(DOUBLE)。而定点数类型只有一种即DECIMAL类型。下图列举了 MySQL中浮点数和定点数类型所对应的字节大小及其取值范围:
数据类型 | 大小 | 说明 | 对应java类型 |
---|---|---|---|
FLOAT(M,D) | 4字节 | 单精度,M指定长度,D指定小数位数。会发生精度丢失 | Float |
DOUBLE | 8个字节 | Double | |
DECIMAL(M,D) | M/D最大值+2 | 双精度,M指定长度,D表示小数点位数。精确数值 | BigDecimal |
NUMERIC(M,D) | M/D最大值+2 | 和DECIMAL一样 | BigDecimal |
从上图可以看出DECIMAL类型的取值范围与DOUBLE类型相同。但是,请注意:DECIMAL类型的有效取值范围是由M和D决定的。其中,M表示的是数据的长 度,D表示的是小数点后的长度。比如,将数据类型为DECIMAL(3,1)的数据10.12 插人数据库后显示的结果为10.1.
声明:
decimal 是使用了类似于字符串的方式保存的,更精准存储,单存储空间更大,计算速度更慢了.
总结:DECIMAL(精度高,占用内存大效率慢)
2.1.3 字符串类型
在MySQL中常用CHAR 和 VARCHAR 表示字符串。两者不同的是:VARCHAR存储可变长度的字符串。
当数据为CHAR(M)类型时,不管插入值的长度是实际是多少它所占用的存储空间都是M个字节;而VARCHAR(M)所对应的数据所占用的字节数为实际长度加1
插入值 | CHAR(3) | 存储需求 | VARCHAR(3) | 存储需求 |
---|---|---|---|---|
‘’ | ‘’ | 3个字节 | ‘’ | 1个字节 |
‘a’ | ‘a’ | 3个字节 | ‘a’ | 2个字节 |
‘ab’ | ‘ab’ | 3个字节 | ‘ab’ | 3个字节 |
‘abc’ | ‘abc’ | 3个字节 | ‘abc’ | 4个字节 |
‘abcd’ | ERROR | ERROR | ERROR | ERROR |
如下图:
只能最多插入三个字符,且占用内存一直是3个字节.
当我插入"abcd"时就会报错,所以不管时CHAR 或者 VARCHAR 都不能超过指定的字符个数,但是他们的区别就是CHAR始终占用的内存为指定的字节个数,但是VARCHAR是变长字节,会根据你输入的字符串大小自动分配字节个数(字符串长度不超过指定长度)
所以以后我们如果涉及到字符串这个类型,常使用varchar就好!
2.1.4 日期与时间类型
MySQL提供的表示日期和时间的数据类型分别是 :YEAR、DATE、TIME、DATETIME 和 TIMESTAMP。下图列举了日期和时间数据类型所对应的字节数、取值范围、日期格式以及零值:
数据类型 | 字节数 | 取值范围 | 日期格式 | 零值 |
---|---|---|---|---|
YEAR | 1 | 1901~2155 | YYYY | 0000 |
DATE | 4 | 1000-01-01~9999-12-31 | YYYY-MM-DD | 0000-00-00 |
TIME | 3 | -838:59:59~ 838:59:59 | HH:MM:SS | 00:00:00 |
DATETIME | 8 | 1000-01-01 00:00:00~9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 0000-00-00 00:00:00 |
TIMESTAMP | 4 | 1970-01-01 00:00:01~2038-01-19 03:14:07 | YYYY-MM-DD HH:MM:SS | 0000-00-00 00:00:00 |
2.2 数据表的基本操作
在我们创建好数据库之后,如果想要对该数据库进行操作,需要先选中该数据库,因为我们的数据表是在数据库的里面执行的!
选择数据库的语句则是;
USE 数据库名字;
今天时间是3_11,那么我创建的数据库名字就为3_11 , 接下来对该数据库进行操作,所以我们需要选择该数据库,也就是 use 3_11;
2.2.1 创建一个数据表
使用MySQL语句创建一个名为Student的表,该表由学生名字,年纪,班级,构成.
我们先了解一下创建一个数据表的基本语法:
create table 表名(字段1 字段数据类型,字段2 字段数据类型....)
切记:这个和我们经常写的java 和 c 不太一样,这个是名字在前,类型在后的,可能大家在写函数的时候习惯了例如 swap(int a,int b)这种写法,但是在数据库中就需要 swap(a int ,b int)这样的写法了.
那我们开始实现上面的任务;
我们先要了解学生的名字什么类型,年龄,班级都分别是什么类型,再去根据这些类型来建表.
我们可以大概了解到,名字是由字符串构成的,所以我们可以将类型设置为varchar(10),因为一般的名字都不会超过10个字,记住!在数据库中(一个汉字 = 一个字符!!!) 那么年龄我们可以设置为int,因为年龄都是整数的,班级的话我们也可以设置为字符串类型,例如(“高三四班”),此时类型确认了,我们上手实践!
create table student (name varchar(10),age int,class varchar(20));
此时我们就创建成功一个Student的表,接下来我们可以查看这个数据表.
2.2.2 查看数据表
MySQL语法如下:
show tables;
运行结果如下:
此时在我们的数据库中就有一个student的表了.
2.2.3 查看表的基本信息的MySQL指令
show create table student;
运行结果,此时他会将表的基本类型都列出来
2.2.4 查看数据表结构的MySQL指令
desc student;
运行结果:
2.2.5 修改数据表(不做重点)
有时,希望对表中的某些信息进行修改,例如:修改表名、修改字段名、修改字段 数据类型…等等。在MySQL中使用alter table修改数据表.
MySQL语句为:
alter table student rename to stu;
修改字段名(列名)的MySQL指令:
alter table stu change name sname varchar(10);
运行结果:
修改字段数据类型 MySQL命令:
alter table stu modify sname int;
运行结果:
增加字段 MySQL命令:
alter table stu add address varchar(50);
运行结果:
总结:这些操作在真正的数据库中很少遇见,几乎都是在创建数据表时都已经指定了这些类型,不会再进行修改了,如果非要修改的话,切记三思!!!危险系数很大很大!!!
2.2.6 删除数据表
删除数据表的MySQL语句:
drop table 表名;
我们删除stu这个表举例:
drop table stu;
运行结果:
2.3 数据表的插入
由于后续会需要打印数据表中的数据来判断插入是否成功,所以我们先记住这个sql语句:
select * from 表名;
这样就可以将表中的数据全部打印出来了.
在MySQL通过INSERT语句向数据表中插入数据。在此,我们先准备一张学生表,该学生表具备的字段有(学生ID,姓名,年龄)代码如下:
create student (Student_ID int,name varchar(20),age int);
运行结果(此时我们创建好了一个表):
2.3.1 为表中所有字段插入数据
每个字段与其值是严格一一对应的。也就是说:每个值、值的顺序、值的类型必须与对应的字段相匹配。但是,各字段也无须与其在表中定义的顺序一致,它们只要与 VALUES中值的顺序一致即可。
语法如下:
INSERT INTO VALUES (值 1,值 2,...);
示例: 用MySQL语句向学生表插入一个学生的数据;
insert into student values(666666,'李四',22);
但是需要注意的是,此时插入的数据的类型的顺序一定是和你在创建这个表的字段类型的顺序一致的.如下图:
需要注意的事项:
2.3.2 为表中指定字段插入数据
INSERT INTO 表名(字段名1,字段名2,...) VALUES (值 1,值 2,...);
插入数据的方法基本和给表中所有字段插入数据一样,只是需要插入的字段由你自己指定,例如我们有的学生还不清楚自己的准确年龄,所以我们可以通过指定字段先插入它的学生ID和他的名字:
insert into student (student_ID ,name) values(123456,"雅雅");
运行结果:
2.3.3 同时插入多条记录
语法如下:
INSERT INTO 表名 [(字段名1,字段名2,...)]VALUES (值 1,值 2,…),(值 1,值 2,…),...;
在该方式中:(字段名1,字段名2,…)是可选的,它用于指定插人的字段名;(值 1,值 2,…),(值 1,值 2,…)表示要插人的记录,该记录可有多条并且每条记录之间用逗号隔开。
示例:对学生表进行学生信息的多组插入
insert into student (student_ID ,name ,age) values(123123,'张三',18),(666666,'李四',22),(456789,'王五',23);
2.4 数据表的约束
为防止错误的数据被插入到数据表,MySQL中定义了一些维护数据库完整性的规则;这些规则常称为表的约束。常见约束如下:
约束条件 | 说明 |
---|---|
PRIMARY KEY | 主键约束,用于唯一标识对应的记录 |
FOREIGE KEY | 外键约束 |
NOT NULL | 非空约束 |
UNIQUE | 唯一性约束 |
DEFAULT | 默认值约束,用于设置字段的默认值 |
以上五种约束条件针对表中字段进行限制从而保证数据表中数据的正确性和唯一性。换句话说,表的约束实际上就是表中数据的限制条件。
2.4.1 主键约束
主键约束用于唯一的表示表中的每一行,被标识为主键的数据在表中是唯一的且值不能为空,这点类似于我们每个人都有一个身份证号,并且这个身份证号唯一!
(1) 第一种主键约束(常用)
我们想要创建一个年级表,该表只有两个属性,一个是表示年级的ID,一个是表示该ID对应的年级是几年级.
主键约束的MySQL语句如下:
字段名 字段类型 primary key;
我们通过第一个主键约束的方法创建一个年级表:
我们的年级ID是唯一的,所以年级ID我们可以设置为主键.
(2) 第二种主键约束
MySQL语句:
(字段名 字段类型,字段名 字段类型...,primary key(需要主键约束的字段名))
下面用插入数据给大家证明一下什么是被主键约束后的效果:
还有一个小细节:就是被主键约束后的字段是不能为空的,上述图片没有画出来,但是大家可以自己查看.
我们再进行一个对比,对比一个没有被主键约束的年纪表是什么样的:
总结:被主键约束后的字段,只能出现一次,一定不能重复出现.
(3) 自增主键
对于整数类型的主键,常配搭自增长auto_increment
来使用。插入数据对应字段不给值时,使用最大值+1
MySQL 语法:
-- 主键是 NOT NULL 和 UNIQUE 的结合,可以不用 NOT NULL
字段名 字段类型 PRIMARY KEY auto_increment;
我们再来对比一下没有被自增主键约束的学生表.
2.4.2 非空约束
非空约束即 NOT NULL指的是字段的值不能为空,基本的语法格式如下所示:
字段名 数据类型 NOT NULL;
示例:
依旧是上面的年级表举例:
这个是name字段被非空约束的.
对比没有被非空约束的:
2.4.3 默认值约束
默认值约束即DEFAULT用于给数据表中的字段指定默认值,即当在表中插入一条新记录时若未给该字段赋值,那么,数据库系统会自动为这个字段插人默认值;其基本的语法格式如下所示:
字段名 数据类型 DEFAULT 默认值;
此时我们还是按照上面的年级表举例;
2.4.4 唯一性约束
唯一性约束即UNIQUE用于保证数据表中字段的唯一性,即表中字段的值不能重复出现,其基本的语法格式如下所示
字段名 数据类型 UNIQUE;
示例:
create table grade(ID int UNIQUE,name varchar(20));
结果展示:
有人可能会问: 这个主键和这个唯一性约束有什么区别:
PRIMARY KEY | UNIQUE | |
---|---|---|
可以为空 | NO | YES |
只能存在一个 | YES | NO |
我们也可以理解为:
一个表只能有一个主键,但是可以有好多个UNIQUE,而且UNIQUE可以为NULL
值,如员工的电话号码一般就用UNIQUE,因为电话号码肯定是唯一的,但是有的员工可能没有电话。
主键肯定是唯一的,但唯一的不一定是主键;
不要总把UNIQUE索引和UNIQUE约束混为一谈
1、primary key = unique + not null
2、唯一约束和主键一样都是约束的范畴,而且都可以作为外键的参考,不同的是,一张表只能有一个主键
3、主键和唯一约束的创建需要依靠索引,如果在创建主键或唯一约束的时候没有已经建好的索引可以使用的话,MySQL会自动建立一个唯一的索引。
2.4.5 外键约束
外键用于关联其他表的主键或唯一键,语法:
foreign key (字段名) references 主表(列)
我们来形容一下什么是外键约束,我们创建一个年级表:
我们再来思考一下:如果我有一个学生类,我这个学生类可不可以通过某些东西和这个年级关联.
前提讲过了,我们可以通过外键约束,使两个表产生关联,但是外键约束的前提是,外键用于关联其他表的主键或唯一键,那么我们可以和年级表的ID关联一起.代码如下:
下面图片是两个表的结构:
外键约束需要注意的事项:
1.子表添加元素时,如果父表没有匹配的项则添加失败.
2.父表删除时如果子表有匹配的项删除失败
总结:
借鉴别人的
外键的使用需要满足下列的条件:1. 两张表必须都是InnoDB表,并且它们没有临时表。2. 建立外键关系的对应列必须具有相似的InnoDB内部数据类型。3. 建立外键关系的对应列必须建立了索引。4. 假如显式的给出了CONSTRAINT symbol,那symbol在数据库中必须是唯一的。假如没有显式的给出,InnoDB会自动的创建。如果子表试图创建一个在父表中不存在的外键值,InnoDB会拒绝任何INSERT或UPDATE操作。如果父表试图UPDATE或者DELETE任何子表中存在或匹配的外键值,最终动作取决于外键约束定义中的ON UPDATE和ON DELETE选项。InnoDB支持5种不同的动作,如果没有指定ON DELETE或者ON UPDATE,默认的动作为RESTRICT:1. CASCADE: 从父表中删除或更新对应的行,同时自动的删除或更新自表中匹配的行。ON DELETE CANSCADE和ON UPDATE CANSCADE都被InnoDB所支持。2. SET NULL: 从父表中删除或更新对应的行,同时将子表中的外键列设为空。注意,这些在外键列没有被设为NOT NULL时才有效。ON DELETE SET NULL和ON UPDATE SET SET NULL都被InnoDB所支持。3. NO ACTION: InnoDB拒绝删除或者更新父表。4. RESTRICT: 拒绝删除或者更新父表。指定RESTRICT(或者NO ACTION)和忽略ON DELETE或者ON UPDATE选项的效果是一样的。5. SET DEFAULT: InnoDB目前不支持。外键约束使用最多的两种情况无外乎:1)父表更新时子表也更新,父表删除时如果子表有匹配的项,删除失败;2)父表更新时子表也更新,父表删除时子表匹配的项也删除。
————————————————
版权声明:本文为CSDN博主「空白_回忆」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_26291823/article/details/51940487
2.4 更新(修改)数据
在MySQL通过UPDATE语句更新数据表中的数据。在此,我们将就用上面中的student学生表.
2.4.1 UPDATE基本语法
UPDATE 表名 SET 字段名1=值1[,字段名2 =值2,…] [WHERE 条件表达式];
在该语法中:字段名1、字段名2…用于指定要更新的字段名称;值1、值 2…用于表示字段的新数据;WHERE 条件表达式 是可选的,它用于指定更新数据需要满足的条件
2.4.2 UPDATE更新部分数据
update student set name = '雅雅' where name = '小明';
2.4.3 UPDATE更新全部数据
update student set name = "猪猪侠";(单引号双引号都可以)
运行结果:
2.5 删除数据
我们依旧是通过上面的student举例.
2.5.1 DELETE基本语法
在该语法中:表名用于指定要执行删除操作的表. [WHERE 条件表达式]为可选参数用于指定删除的条件。
DELETE FROM 表名 [WHERE 条件表达式];
2.5.2 DELETE删除部分数据
示例:删除ID为4的学生的信息
测试结果:
2.5.3 DELETE删除全部数据
删除student表中的所有记录 MySQL命令:
delete from student;
运行结果:
2.5.4 TRUNCATE和DETELE的区别
TRUNCATE和DETELE都能实现删除表中的所有数据的功能,但两者也是有区别的:
1、DELETE
语句后可跟WHERE
子句,可通过指定WHERE
子句中的条件表达式只删除满足条件的部分记录;但是,TRUNCATE语句只能用于删除表中的所有记录。
2、使用TRUNCATE语句删除表中的数据后,再次向表中添加记录时自动增加字段的默认初始值重新由1开始;使用DELETE语句删除表中所有记录后,再次向表中添加记录时自动增加字段的值为删除时该字段的最大值加1
3、DELETE
语句是DML
语句,TRUNCATE
语句通常被认为是DDL
语句
3. MySQL数据表的简单查询.
3.1 全列查询
--- 通常不建议使用全列查询
--- 1.查询的列越多,意味着需要传输的数据量越大
--- 2.可能会影响到索引的使用select * from 表名;
我们用全列查询,对student这个表进行查询.
3.2 指定列查询
--- 指定列的顺序不需要按定义表的顺序来
SELECT id, name, english FROM exam_result;
还是通过student表实验;
3.3 查询字段为表达式
-- 表达式不包含字段
SELECT id, name, 10 FROM exam_result;
-- 表达式包含一个字段
SELECT id, name, english + 10 FROM exam_result;
-- 表达式包含多个字段
SELECT id, name, chinese + math + english FROM exam_result;
(1) 表达式不包含字段
(2) 表达式包含一个字段
(3)表达式包含多个字段
3.4 别名
为查询结果中的列指定别名,表示返回的结果集中,以别名作为该列的名称,语法:
select 字段(可以是表达式) as 别名 from 表名;
-- 结果集中,表头的列名=别名
SELECT id, name, chinese + math + english as 别名 FROM exam_result
运行结果:
3.5 去重:DISTINCT
使用DISTINCT关键字对某列数据进行去重.
3.6 排序:ORDER BY
-- ASC 为升序(从小到大)
-- DESC 为降序(从大到小)
-- 默认为 ASC
select * from 表名 order by 字段名 desc(降序);
我们对数学成绩进行排序.
1. 没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序
2. NULL 数据排序,视为比任何值都小,升序出现在最上面,降序出现在最下面.
3. 使用表达式及别名排序:
小练习:查询同学的总成绩排序.
需要注意的是:
这个写法也是允许的.
4. 可以对多个字段进行排序,排序优先级随书写顺序
我们看下图:
代码如下;
select * from 表名 order by 字段名 升序(降序),字段名(升序)降序...
---注意逗号隔开就行.
3.7 条件查询:WHERE
比较运算符:
运算符 | 说明 |
---|---|
>,>=,<,<= | 大于,大于等于,小于,小于等于 |
= | 等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL |
<=> | 等于,NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1) |
!=,<> | 不等于 |
BETWEEN a0 AND a1 | 范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1) |
IN (option, …) | 如果是 option 中的任意一个,返回 TRUE(1) |
IS NULL | 是 NULL |
IS NOT NULL | 不是 NULL |
LIKE | 模糊匹配。% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符 |
逻辑运算符:
运算符 | 说明 |
---|---|
AND | 多个条件必须都为 TRUE(1),结果才是 TRUE(1) |
OR | 任意一个条件为 TRUE(1), 结果为 TRUE(1) |
NOT | 条件为 TRUE(1),结果为 FALSE(0) |
注:
- WHERE条件可以使用表达式,但不能使用别名。
- AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分
1. 基本查询
– 查询英语不及格的同学及英语成绩 ( < 60 )
select name, english from exam_result where english<60;
– 查询语文成绩好于英语成绩的同学
select * from exam_result where english<chinese;
– 查询总分在 200 分以下的同学
mysql> select name, chinese+math+english as sum from exam_result where english+chinese+math<200;
2. 逻辑查询
– 查询语文成绩大于80分,且英语成绩大于80分的同学
mysql> select * from exam_result where chinese>80 and english>80;
– 查询语文成绩大于80分,或英语成绩大于80分的同学
mysql> select * from exam_result where chinese>80 or english>80;
–观察and和or的优先级
3. 范围查询
1. BETWEEN…and…
查询语文成绩在[70,90]之间的学生.
注意:这个关键字的查询是闭区间查询,如上,查找的是>=70 && <=90的值
select chinese,name from
我们也可以用用逻辑语句实现.
mysql> select chinese,name from exam_result where chinese >= 70 and chinese <=90;
2.IN
查询数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩
SELECT name, math FROM exam_result WHERE math IN (58, 59, 98, 99);
使用 OR 也可以实现
SELECT name, math FROM exam_result WHERE math = 58 OR math = 59 OR math = 98 OR math = 99;
4.模糊查询:LIKE
% 匹配任意多个(包括 0 个)字符
SELECT name FROM exam_result WHERE name LIKE '孙%';-- 匹配到孙悟空、孙权
这里我们在插入一个孙大娘,看看上述代码能不能查询到.
由此我们可以知道,%这个符号代表0个或多个字符.
所以我们如果想要查找名字中包含’孙’这个字的同学,可以直接用’%孙%’
如果想要找’孙’字结尾的同学的名字,便可以通过’%孙’来查找.
'_'匹配严格的一个任意字符
mysql> SELECT name FROM exam_result WHERE name LIKE '孙_';
5.NULL 的查询:IS [NOT] NULL
在MySQL中,使用 IS NULL关键字判断字段的值是否为空值。请注意:空值NULL不同于0,也不同于空字符串.
我们可以看到这里有很多NULL,那么我们将这些值为NULL的名字查找出来.
-- 查找语文成绩为NULL的同学
mysql> select name from exam_result where chinese is NULL;
-- 查找语文成绩不为NULL的同学
mysql> select name from exam_result where chinese is not NULL;
3.8 分页查询:LIMIT
大家平时接触到的书,都是一页一页的,比如一页多少行,如果满足这个行数之后就将后续的内容写在下一页.其实我们的分页查询也是这个意思,我们可以指定一页有多少组数据,
MySQL分页查询语法:
-- 起始下标为 0
-- 从 0 开始,筛选 n 条结果
SELECT ... FROM 表名 [WHERE ...] [ORDER BY ...] LIMIT n;
-- 从 s 开始,筛选 n 条结果
SELECT ... FROM 表名 [WHERE ...] [ORDER BY ...] LIMIT s, n;
-- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
SELECT ... FROM 表名 [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;
小知识:关键字LIMIT和我们学的极限符号lim特别相似,所以我们可以通过lim联想到分页查询的limit.
练习:我们通过每组3数据为1页,分别显示1,2,3,页.
我们需要注意的是,分页查询的offset
是从0开始计数的,就和我们数组的下标一样,从0开始.(即使该页不足指定的数据个数也不会有影响)
小练习: 查找总分排名第三的同学
MySQL语法如下:
select * from exam_result order by chinese+math+english desc limit 1 offset 2;
4. 函数
1.聚合函数
在开发中,我们常常有类似的需求:统计某个字段的最大值、最小值、 平均值等等。为此,MySQL中提供了聚合函数来实现这些功能。所谓聚合,就是将多行汇总成一行;其实,所有的聚合函数均如此——输入多行,输出一行。聚合函数具有自动滤空的功能,若某一个值为NULL,那么会自动将其过滤使其不参与运算。
聚合函数使用规则:
只有SELECT子句和HAVING子句、ORDER BY子句中能够使用聚合函数。例如,在WHERE子句中使用聚合函数是错误的。
接下来,我们学习常用聚合函数。
1.1 count()
统计表中数据的行数或者统计指定列其值不为NULL的数据个数
查询有多少该表中有多少人.
代码如下:
select count(*) from 表名 [where 条件];
我们用刚才的成绩表举例:
mysql> select count(*) from exam_result;
当然,我们的NULL是不进行计数的,如下:
1.2 max()
计算指定列的最大值,如果指定列是字符串类型则使用字符串排序运算.
查询该表中语文成绩最好的学生.
MySQL语句:
mysql> select max(chinese) from exam_result ;
1.3 min()
计算指定列的最小值,如果指定列是字符串类型则使用字符串排序运算.
查询该表中语文成绩最差的学生.
MySQL语句:
mysql> select min(chinese) from exam_result ;
1.4 sum()
计算指定列的数值和,如果指定列类型不是数值类型则计算结果为0.
查找所有同学的语文成绩之和.
select sum(chinese) from exam_result ;
运行结果如下:
1.5 avg()
计算指定列的平均值,如果指定列类型不是数值类型则计算结果为
查询该成绩表中语文成绩的平均数 MySQL命令:
select avg(chinese) from exam_result;
运行结果如下;
相关文章:

MySQL数据库的基础语法总结(1)
MySql一.数据库,数据表的基本操作1.数据库的基本操作2. 数据表的基本操作2.1 数据库的数据类型2.1.1 整数类型2.1.2 浮点数类型和定点数类型2.1.3 字符串类型2.1.4 日期与时间类型2.2 数据表的基本操作2.2.1 创建一个数据表2.2.2 查看数据表2.2.3 查看表的基本信息的MySQL指令2…...

Linux之进程创建
本节目录1.fork函数初识2.fork函数返回值3.写时拷贝1.fork函数初识 在Linux中,fork函数是一个非常重要的函数,它从已存在的进程中创建一个新进程。新进程叫做子进程,而原进程叫做父进程。 #include <unistd.h> pid_t fork(void); 返回…...

DCL 管理用户与权限控制
目录 DCL 查询用户 案例 权限控制 案例 DCL DCL英文全称是Data Control Language(数据控制语言),用来管理数据库用户、控制数据库的访问权限。 查询用户 1、查询用户 select * from mysql.user; 2、创建用户 CREATE USER 用户名主机名 IDENTIFIED BY 密码;…...

如何使用 Python 检测和识别车牌(附 Python 代码)
文章目录创建Python环境如何在您的计算机上安装Tesseract OCR?技术提升磨砺您的Python技能车牌检测与识别技术用途广泛,可以用于道路系统、无票停车场、车辆门禁等。这项技术结合了计算机视觉和人工智能。 本文将使用Python创建一个车牌检测和识别程序。…...

[Python题解] CodeForces 1804 D. Accommodation
✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心&…...

【设计模式】访问者模式
访问者模式 访问者模式被称为是最复杂的设计模式,比较难理解并且使用频率不高。 在 GoF 的《设计模式》⼀书中,访问者者模式(Visitor Design Pattern)是这么定义的: Allows for one or more operation to be applied to a set o…...

蓝桥杯刷题冲刺 | 倒计时27天
作者:指针不指南吗 专栏:蓝桥杯倒计时冲刺 🐾马上就要蓝桥杯了,最后的这几天尤为重要,不可懈怠哦🐾 文章目录1.递增序列2.等差素数列3.七段码4.亲戚5.连通块中点的数量1.递增序列 题目 链接:&am…...
RV1126_python人脸识别Retinaface+MobilefaceNet
RV1126_python人脸识别Retinaface+MobilefaceNet RV1126 具备RKNN 模块支持大部分如Pytorch、MXNet、Caffe、tensorflow、keras、onnx等常见框架,而且量化部署使用RKNN-toolkit非常方便。以下介绍通过RV1126实现的人脸识别过程。 首先人脸识别需要先做人脸检测>>人脸校正…...

HBase---HBase基础语法
HBase基础语法 文章目录HBase基础语法基本操作进入 HBase 客户端命令行查看命名空间查看命名空间下的表创建命名空间创建表查看表描述禁用/启用删除表新增列族删除列族更改列族存储版本的限制put 增加数据get 查看数据get条件查询删除指定列族下的指定列删除指定行全表扫描全表…...

2023年,PMP有多少含金量呢?
其实围绕以PMP含金量为中心的这个类似的小问题我好像也已经写了不少文章了。首先我肯定PMP的含金量,不管有多少质疑,这的确是事实。因为就是看中了他的价值考的,并且在项目的执行上收获了很多。 具体的可以看我接下来谈的PMP的价值&#x…...
vue动态路由
import Vue from vue import Router from vue-router import layout from ../components/layout Vue.use(Router) // 动态路由 export const asyncRouterMap = [ { path: /home, component: layout, name: home, meta: { title: 首页, icon: el-ic…...

被骗进一个很隐蔽的外包公司,入职一个月才发现,已经有了社保记录,简历污了,以后面试有影响吗?...
职场的套路防不胜防,一不留神就会掉坑,一位网友就被“骗”进了外包公司,他说公司非常隐蔽,入职一个月才发现是外包,但已经有了社保记录,简历污了,不知道对以后面试有影响吗?楼主说&a…...
华为OD机试 -租车骑绿岛(Java) | 机试题+算法思路+考点+代码解析 【2023】
租车骑绿岛 题目 部门组织绿岛骑行团建活动。租用公共双人自行车骑行,每辆自行车最多坐两人、做大载重M。 给出部门每个人的体重,请问最多需要租用多少双人自行车。 输入 第一行两个数字m、n,自行车限重m,代表部门总人数n。 第二行,n个数字,代表每个人的体重。体重都…...

【Java|基础篇】用思维导图理解逻辑控制
文章目录顺序结构分支结构if单分支语句if else双分支语句if else if else多分支语句switch语句循环语句for循环while循环do while循环continuebreak总结顺序结构 顺序结构是指代码按照从上往下的顺序依次执行 分支结构 选择语句是条件成立时,才会执行的语句.共有三种.分为是if…...

Go单元测试基础
Go单元测试基础1.go test工具2.单元测试函数3.go test -v/go test -run4.跳过某些测试用例5.子测试6.表格驱动测试7.并行测试8.使用工具生成测试代码9.测试覆盖率1.go test工具 Go语言中的测试依赖go test命令。编写测试代码和编写普通的Go代码过程是类似的,并不需…...
华为OD机试 -执行时长(Java) | 机试题+算法思路+考点+代码解析 【2023】
执行时长 题目 为了充分发挥GPU算力,需要尽可能多的将任务交给GPU执行,现在有一个任务数组,数组元素表示在这1秒内新增的任务个数且每秒都有新增任务,假设GPU最多一次执行n个任务,一次执行耗时1秒,在保证GPU不空闲情况下,最少需要多长时间执行完成 输入描述: 第一个…...

互联网检测服务器
互联网检测服务器 1. 题目要求2. 试题解析1. 题目要求 题目: 为了模拟 Internet 访问测试,请搭建网卡互联网检测服务。 2. 试题解析 根据windows的官方文档,互联网检测服务有专门的域名,通过注册表可以找到检测域名字符串的写法(字符串为www.msftconnecttest.com),具体位…...
YOLO系列模型改进指南
YOLO系列模型改进指南 目前包含yolov5,yolov7,yolov8模型的众多改进方案,效果因数据集和参数而定,仅供参考。 如果需要改进模型,建议baseline和改进模型也不要载入预训练权重,不然的话,他们的起…...
QML- 在QML定义JavaScript资源
在QML定义JavaScript资源一、概述二、后台代码实现文件三、共享JavaScript资源(库)一、概述 QML应用程序的一部分程序逻辑可以用 JavaScript 定义。JavaScript代码可以在QML文档中内联定义,也可以分离到单独的 JavaScript 文件中(在QML中称为JavaScript资源)。 QML…...

php(tp框架)使用七牛云对象存储
图片文件存服务器非常占用存储带宽资源,且用户访问体验也不佳,因此使用一些第三方oss存储就很有必要了。之前lz发布了一篇tp使用阿里云oss的博文。不过阿里oss是收费的。而七牛云提供了一些免费使用额度。所以,这里额外补充一篇。 1.前提准备…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...