数据库(MySQL):使用下令从零开始在Navicat创建一个数据库及其数据表(三
媒介Navicat Premium 17 数据表需要经常清缓存,不然之前的自增的数据可能会不停存在,所以把之前的表删除重新创建是对练习数据库最简单的办法。新建数据库的下令如下:
/* 创建有 自增主键的属性id,非空的属性name,唯一的属性tel,代表性别的属性sex,代表年龄的属性age,代表职位的默认为“学生”的属性position */
CREATE TABLE student(
id INT(4) PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
tel INT(11) UNIQUE,
sex char(1),
age int(4),
position VARCHAR(4) DEFAULT('学生'));
/*添加数据,因为id是自增的position是默认的所以不需要填写*/
INSERT INTO student
(name,tel,sex,age)
VALUES
('张三','1516666777','男',18),
('张四','1516666778','男',19),
('李三','1516666779','女',20),
('李五','1516666780','男',22),
('张三','1516666788','男',17),
('赵武','1516666789','女',23),
('不思量','1516666795','女',22),
('自难忘','1516666796','男',21),
('李明','1516666678','男',20),
('小明','1516666679','男',22),
('萧炎','1516666567','男',23),
('孙武','1516666122','男',18),
('李华','1516666123','女',19),
('孙武','1516666124','男',19);
创建数据表结果如下:
https://img-blog.csdnimg.cn/51d00e3f54e34fb8aa4325421636a6fa.png
一. 查询一列数据或几列数据
1.1 查询一列数据
SELECT `name` FROM student;
在数据表 student 中查询 ‘name’ 属性
下令原型:SELECT 属性名 FROM 表名;
反引号:它是为了区分MYSQL的保留字与平凡字符而引入的符号,一般不影响正常使用。
https://img-blog.csdnimg.cn/50b6e0fa78594bae991d90fcb7a17840.png
1.2 查询多列数据
SELECT tel,sex FROM student;
在数据表 student 中查询 tel,sex 属性
下令原型:SELECT 属性名,属性名··· FROM 表名;
https://img-blog.csdnimg.cn/50da4ed925d145fc810fb767541ef6f9.png
1.3 查看全部列数据
SELECT * FROM 表名;
查看表中全部的数据
1.4 查询经过计算的值
SELECT age+10 FROM student;
查询结果是 年事+10,是一个表达式
下令原型:SELECT 表达式1,表达式2 FROM 表名;
平凡的表达式可以理解为 属性乘1
https://i-blog.csdnimg.cn/direct/1bad3a262a1c4078a342533c18347e16.png
二. 查询某一列重复数据
2.1 单属性数据去重
SELECT DISTINCT `name` FROM student;
对数据表 student 的 name 属性进行去重
下令原型:SELECT DISTINCT 属性名 FROM 表名;
https://i-blog.csdnimg.cn/direct/e12b2b23027d4d56956dbf31b6b1f511.png
2.2 多属性数据去重
INSERT INTO student (name,tel,sex,age) VALUES ('李华','1516676777','男',19);
/* 插入一条数据,与第十三条数据性别不同,电话号码也不同,电话号码是禁止重复*/ SELECT DISTINCT `name`,sex FROM student;
对数据表 student 的 name 属性进行去重,当两条数据都重复的时候才会去重
下令原型:SELECT DISTINCT 属性名1,属性名2,属性名3... FROM 表名;
应用在多个字段时,只有当多个字段重复才会去重
https://i-blog.csdnimg.cn/direct/7d5b021009b5468cb82fc220810d7252.png
2.3 去重保留全部数据
SELECT DISTINCT * FROM student;
对 student 数据表的 全部属性进行去重,这种情况必须要全部的数据相同才气去重
SELECT DISTINCT * FROM 数据表;
这个 * 代表全部的属性
https://i-blog.csdnimg.cn/direct/4b4eed3780e1442d91cede98c41f91d0.png
三. 查询满足条件的元组
3.1 查询条件表格
查询条件关键词比力=,>,<,>=,<=,!=,<>,!>,!<; NOT+上述比力运算符范围BETWEEN AND,NOT BETWEEN AND集合IN,NOT IN字符匹配(相当于等号)LIKE,NOT LIKE空值IS NULL,IS NOT NULL多重条件(逻辑运算)AND,OR,NOT
查询满足指定条件的元组可以通过WHERE子句实现。
3.2 等于查询
SELECT `name` FROM student WHERE `name`='张三'
查询数据表 student 中 name 属性等于张三的数据,并且展示他们的 name 属性
下令原型:SELECT 属性名 FROM 表名 WHERE 等于条件;
https://i-blog.csdnimg.cn/direct/7177bf3b4a364bfe8b7083964e65dd02.png
3.3 小于查询
SELECT name,age FROM student WHERE age<=20;
查询年事小于等于20岁的人,并且展示name和age属性
下令原型:SELECT 属性名 FROM 表名 WHERE 小于条件;
https://i-blog.csdnimg.cn/direct/5228163503d54d659aa82ba59a107abb.png
3.4 NOT查询
SELECT DISTINCT `name`,age FROM student WHERE NOT age<20;
查询年事不小于20岁的人,并且展示name和age属性
下令原型:SELECT 属性名 FROM 表名 WHERE NOT 判断条件;
https://i-blog.csdnimg.cn/direct/39ecfe4f33274daba1cc923734a0b5f4.png
3.5 范围查询
SELECT * FROM student WHERE age BETWEEN 19 AND 22;
查询年事在19到22岁之间的人,包括19岁和22岁,并且展示全部的属性
下令原型:SELECT 属性名 FROM 表名 WHERE 属性名 BETWEEN 包罗AND的范围区间;
下图的只有一条语句的时候没有分号系统也会默认结束,但是不发起大家这样写,养成好习惯很紧张
* 代表的是全部的属性
https://i-blog.csdnimg.cn/direct/26cb3960b2ca43edb600e20ec9e4cd31.png
3.6 范围之外查询
SELECT * FROM student WHERE age BETWEEN NOT 19 AND 22;
查询年事在19到22岁之外的人,不包括19岁和22岁,并且展示全部的属性
下令原型:SELECT 属性名 FROM 表名 WHERE 属性名 BETWEEN NOT 包罗AND的范围区间;
https://i-blog.csdnimg.cn/direct/c4ff32ab50b84b62bec0164e5cc1606c.png
3.7 集合查询
SELECT * FROM `student` WHERE name IN ('张三','李华','小明');
查询name 属性 中有张三,李华,小明的数据,并且展示全部的属性
下令原型:SELECT 属性名 FROM 表名 WHERE IN 数据集合;
https://i-blog.csdnimg.cn/direct/49879d60e429431f9b293feaf4183abf.png
3.8 集合之外查询
SELECT * FROM `student` WHERE name NOT IN ('张三','李华','小明');
查询name 属性中不包罗张三,李华,小明任何一个的数据,并且展示全部的属性
下令原型:SELECT 属性名 FROM 表名 WHERE NOT IN 数据集合;
https://i-blog.csdnimg.cn/direct/7e7f691494514a10828bd033213cb752.png
3.9 字符匹配
SELECT * FROM student WHERE name LIKE '张三';
查询数据表 student 中 name 属性等于张三的数据,并且展示他们的 name 属性
字符匹配的下令原型:SELECT 属性名 FROM 表名 WHERE 属性名 LIKE 数据;
禁止字符匹配的下令原型:SELECT 属性名 FROM 表名 WHERE 属性名 NOT LIKE 数据;
SELECT * FROM student WHERE name LIKE '张三';
/* 两者是等价关系 */
SELECT `name` FROM student WHERE `name`='张三' https://i-blog.csdnimg.cn/direct/195f74fc23054b4f857b2e60b51e59c3.png
3.10 空值查询
/* 插入含有空值的数据 */
INSERT INTO student (name,tel,sex) VALUES ('张三','1516456777','男');
INSERT INTO student (name,tel,age) VALUES ('空值','1516123777',18); 插入两条含有空值的数据之后现在有十七条数据(其时电脑可能卡了,所以顺序有些错误,其他无碍)
https://i-blog.csdnimg.cn/direct/fe87acbf9a984dddabebe3049989b7ac.png
SELECT id,sex,name FROM student WHERE sex IS NULL;
查询数据表 student 中 sex 属性中为空的数据,并且展示他们的 name 属性
下令原型:SELECT 属性名 FROM 表名 WHERE 属性名 IS NULL;
注意:查询的表格中属性的顺序由查询下令中属性的顺序决定的,如下图所示
https://i-blog.csdnimg.cn/direct/926dfe3456ed4ae78c7342377bf7ba2c.png
3.11 数据非空查询
SELECT id,sex,name FROM student WHERE sex IS NOT NULL;
查询数据表 student 中 sex 属性中为非空的数据,并且展示他们的 id,sex,name 属性
下令原型:SELECT 属性名 FROM 表名 WHERE 属性名 IS NOT NULL;
https://i-blog.csdnimg.cn/direct/a346486386cd44d3b684ec0b3a8ee11a.png
3.12 AND查询
SELECT name,age,sex FROM student WHERE age<=20 AND sex='男';
查询数据表 student 中 年事小于20且性别为男 的数据,并且展示他们的 name,age,sex三个属性
下令原型:SELECT 属性名 FROM 表名 WHERE 判断条件1 AND 判断条件2;
https://i-blog.csdnimg.cn/direct/88485e39d68241828dd6e98f3a1eb7c6.png
3.13 OR查询
SELECT name,age,sex FROM student WHERE age<=20 OR sex='男';
查询数据表 student 中 年事小于20 大概 性别为男 的数据,并且展示他们的 name,age,sex三个属性
下令原型:SELECT 属性名 FROM 表名 WHERE 判断条件1 OR 判断条件2;
https://i-blog.csdnimg.cn/direct/aff1fe9f21a348339ab4f6d85e33806f.png
四. 基于LIKE的模糊查询
基于LIKE的模糊查询一般陪同着两个符号:
百分号(%):代表恣意长度的字符,长度可以为0,也可以是长度为字符串上限的长度。例如:张%,表现查询姓张的字符串;张%三,表现查询张某三的字符串,张一三,张一二三等。
下划线(_):代表恣意单个字符。例如:张_三表现以张开头,以三末端的长度为3的恣意字符串。张一三、张二三等。
4.1 百分号查询
SELECT * FROM `student` WHERE name LIKE '张%';
查询数据表 student 中 姓张的数据,并且展示他们的 全部属性
下令原型:SELECT 属性名 FROM 表名 WHERE 属性名 LIKE 含有百分号的条件;
注意:这个时候不能用等于查询
https://i-blog.csdnimg.cn/direct/ea940ba540464ed48fc8f142a4a79719.png
4.2 下划线查询
/* 插入一条数据,作为 下划线查询 的对比 */
INSERT INTO student (name,tel,sex) VALUES ('李明明','1526456777','女'); 插入一条含有空值的数据之后现在有十八条数据
SELECT * FROM `student` WHERE name LIKE '李_';
查询数据表 student 中 姓李且名字只有两个字 的数据,并且展示他们的 全部属性
下令原型:SELECT 属性名 FROM 表名 WHERE 属性名 LIKE 含有下划线条件;
注意:这个时候不能用等于查询
https://i-blog.csdnimg.cn/direct/ea035ef2c95b4b39837e16b8f4bbf7fa.png 4.3 混合查询
SELECT * FROM `student` WHERE name LIKE '_明%';
查询数据表 student 中 名字第二个字是明 的数据,并且展示他们的 全部属性
下令原型:SELECT 属性名 FROM 表名 WHERE 属性名 LIKE 含有百分号和下划线的条件;
注意:这个时候不能用等于查询
https://i-blog.csdnimg.cn/direct/5aaf9d305ad449739820c8adfe1354e8.png
五. 升序降序排序
用户可以用ORDER BY子句对查询结果按照一个或多个属性列的升序(ASC)或降序(DESC)排列,默认值为升序。
5.1 降序排序
SELECT * FROM student ORDER BY age DESC;
将数据表按照年事的降序进行排序
下令原型:SELECT 属性名 FROM 数据表 ORDER BY 属性名 DESC;
https://i-blog.csdnimg.cn/direct/9a1c0759939041ddb51f3bdedaf1b834.png
5.2 升序排序
SELECT * FROM student ORDER BY `name` ASC;
将数据表按照姓名的升序进行排序
下令原型:SELECT 属性名 FROM 数据表 ORDER BY 属性名 ASC;
首字母大写的顺序排序
https://i-blog.csdnimg.cn/direct/4b0418578da94195ad8c7e0075e3b8b4.png
5.3 条件排序
SELECT * FROM student WHERE `name`='张三' ORDER BY `name` ASC;
将数据表中名字为张三的按照年事的升序进行排序
下令原型:SELECT 属性名 FROM 数据表 WHERE 条件 ORDER BY 属性名 ASC;
https://i-blog.csdnimg.cn/direct/07f621643c774839a722929836f09ac1.png
六. 统计查询
6.1 统计有多少行
SELECT COUNT(*) FROM student;
查询有多少行
下令原型:SELECT COUNT(*) FROM 表名;;
https://i-blog.csdnimg.cn/direct/5c91e15635e34d8384bf45e390cd7dd2.png
6.2 统计属性值的种类
SELECT COUNT(DISTINCT age) FROM student;
查询年事有几种
下令原型:SELECT COUNT(DISTINCT 属性名) FROM 表名;
PS:空值不计数
https://i-blog.csdnimg.cn/direct/ca2622160abf463caa6a89a548cae456.png
6.3 计算一列数据的和
SELECT SUM(age) FROM student;
计算全部age年龄的和
下令原型:SELECT SUM(属性名) FROM 表名;
PS:空值不能加入,并且必须是数值型
https://i-blog.csdnimg.cn/direct/1d3ff47eb94f49f0b9921c62ffb720fa.png
6.4 计算平均值
SELECT AVG(age) FROM student;
计算全部age年龄的平均
下令原型:SELECT AVG(属性名) FROM 表名;
PS:空值不能加入,并且必须是数值型
https://i-blog.csdnimg.cn/direct/ef1e647d9ddb4823bbf614454372064f.png
6.5 最大值
SELECT MAX(age) FROM student;
计算全部age年龄的最大值
下令原型:SELECT MAX(属性名) FROM 表名;
https://i-blog.csdnimg.cn/direct/b9489d02574c4e4b9250a220230a5f14.png
6.6 最小值
SELECT MIN(age) FROM student;
计算全部age年龄的最小值
下令原型:SELECT MIN(属性名) FROM 表名;
https://i-blog.csdnimg.cn/direct/bc64a0c297254abe83028fb6d01ec1cd.png
6.7 分组查询
分组查询将查询结果按某一列或多列的值分组,值相等的为一组。
SELECT name,COUNT(id) FROM student GROUP BY `name`;
查询 name 属性种类的个数,以及对应 id 的个数
下令原型:SELECT 属性名1,COUNT(属性名2) FROM 表名 GROUP BY 属性名1;
PS:空值不能计入
https://i-blog.csdnimg.cn/direct/ee68225a9d8f4af9bdd4e1ef579f9642.png
好好吃饭
好好睡觉
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]