数据库(MySQL):使用命令从零开始在Navicat创建一个数据库及其数据表(三),单表查询

前言

Navicat Premium 17 数据表需要经常清缓存,不然之前的自增的数据可能会一直存在,所以把之前的表删除重新创建是对练习数据库最简单的办法。新建数据库的命令如下:

sql 复制代码
/* 创建有 自增主键的属性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);
 

创建数据表结果如下:

一. 查询一列数据或几列数据

1.1 查询一列数据

SELECT `name` FROM student;

在数据表 student 中查询 'name' 属性

命令原型:SELECT 属性名 FROM 表名;

反引号:它是为了区分MYSQL的保留字与普通字符而引入的符号,一般不影响正常使用。

1.2 查询多列数据

SELECT tel,sex FROM student;

在数据表 student 中查询 tel,sex 属性

命令原型:SELECT 属性名,属性名··· FROM 表名;

1.3 查看全部列数据

SELECT * FROM 表名;

查看表中所有的数据

1.4 查询经过计算的值

SELECT age+10 FROM student;

查询结果是 年龄+10,是一个表达式

命令原型:SELECT 表达式1,表达式2 FROM 表名;

普通的表达式可以理解为 属性乘1

二. 查询某一列重复数据

2.1 单属性数据去重

SELECT DISTINCT `name` FROM student;

对数据表 student 的 name 属性进行去重

命令原型:SELECT DISTINCT 属性名 FROM 表名;

2.2 多属性数据去重

sql 复制代码
INSERT INTO student (name,tel,sex,age) VALUES ('李华','1516676777','男',19);

/* 插入一条数据,与第十三条数据性别不同,电话号码也不同,电话号码是禁止重复*/

SELECT DISTINCT `name`,sex FROM student;

对数据表 student 的 name 属性进行去重,当两条数据都重复的时候才会去重

命令原型:SELECT DISTINCT 属性名1,属性名2,属性名3... FROM 表名;

应用在多个字段时,只有当多个字段重复才会去重

2.3 去重保留全部数据

SELECT DISTINCT * FROM student;

对 student 数据表的 全部属性进行去重,这种情况必须要全部的数据相同才能去重

SELECT DISTINCT * FROM 数据表;

这个 * 代表全部的属性

三. 查询满足条件的元组

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 等于条件;

3.3 小于查询

SELECT name,age FROM student WHERE age<=20;

查询年龄小于等于20岁的人,并且展示name和age属性

命令原型:SELECT 属性名 FROM 表名 WHERE 小于条件;

3.4 NOT查询

SELECT DISTINCT `name`,age FROM student WHERE NOT age<20;

查询年龄不小于20岁的人,并且展示name和age属性

命令原型:SELECT 属性名 FROM 表名 WHERE NOT 判断条件;

3.5 范围查询

SELECT * FROM student WHERE age BETWEEN 19 AND 22;

查询年龄在19到22岁之间的人,包括19岁和22岁,并且展示全部的属性

命令原型:SELECT 属性名 FROM 表名 WHERE 属性名 BETWEEN 包含AND的范围区间;

下图的只有一条语句的时候没有分号系统也会默认结束,但是不建议大家这样写,养成好习惯很重要

* 代表的是全部的属性

3.6 范围之外查询

SELECT * FROM student WHERE age BETWEEN NOT 19 AND 22;

查询年龄在19到22岁之外的人,不包括19岁和22岁,并且展示全部的属性

命令原型:SELECT 属性名 FROM 表名 WHERE 属性名 BETWEEN NOT 包含AND的范围区间;

3.7 集合查询

SELECT * FROM `student` WHERE name IN ('张三','李华','小明');

查询name 属性 中有张三,李华,小明的数据,并且展示全部的属性

命令原型:SELECT 属性名 FROM 表名 WHERE IN 数据集合;

3.8 集合之外查询

SELECT * FROM `student` WHERE name NOT IN ('张三','李华','小明');

查询name 属性中不包含张三,李华,小明任何一个的数据,并且展示全部的属性

命令原型:SELECT 属性名 FROM 表名 WHERE NOT IN 数据集合;

3.9 字符匹配

SELECT * FROM student WHERE name LIKE '张三';

查询数据表 student 中 name 属性等于张三的数据,并且展示他们的 name 属性

字符匹配的命令原型:SELECT 属性名 FROM 表名 WHERE 属性名 LIKE 数据;

禁止字符匹配的命令原型:SELECT 属性名 FROM 表名 WHERE 属性名 NOT LIKE 数据;

sql 复制代码
SELECT * FROM student WHERE name LIKE '张三';

/* 两者是等价关系 */

SELECT `name` FROM student WHERE `name`='张三'

3.10 空值查询

sql 复制代码
/* 插入含有空值的数据 */
INSERT INTO student (name,tel,sex) VALUES ('张三','1516456777','男');
INSERT INTO student (name,tel,age) VALUES ('空值','1516123777',18);

插入两条含有空值的数据之后现在有十七条数据(当时电脑可能卡了,所以顺序有些错误,其他无碍)

SELECT id,sex,name FROM student WHERE sex IS NULL;

查询数据表 student 中 sex 属性中为空的数据,并且展示他们的 name 属性

命令原型:SELECT 属性名 FROM 表名 WHERE 属性名 IS NULL;

注意:查询的表格中属性的顺序由查询命令中属性的顺序决定的,如下图所示

3.11 数据非空查询

SELECT id,sex,name FROM student WHERE sex IS NOT NULL;

查询数据表 student 中 sex 属性中为非空的数据,并且展示他们的 id,sex,name 属性

命令原型:SELECT 属性名 FROM 表名 WHERE 属性名 IS NOT NULL;

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;

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;

四. 基于LIKE的模糊查询

基于LIKE的模糊查询一般伴随着两个符号:

百分号(%):代表任意长度的字符,长度可以为0,也可以是长度为字符串上限的长度。例如:张%,表示查询姓张的字符串;张%三,表示查询张某三的字符串,张一三,张一二三等。

下划线(_):代表任意单个字符。例如:张_三表示以张开头,以三结尾的长度为3的任意字符串。张一三、张二三等。

4.1 百分号查询

SELECT * FROM `student` WHERE name LIKE '张%';

查询数据表 student 中 姓张的数据,并且展示他们的 全部属性

命令原型:SELECT 属性名 FROM 表名 WHERE 属性名 LIKE 含有百分号的条件;

注意:这个时候不能用等于查询

4.2 下划线查询

sql 复制代码
/* 插入一条数据,作为 下划线查询 的对比 */
INSERT INTO student (name,tel,sex) VALUES ('李明明','1526456777','女');

插入一条含有空值的数据之后现在有十八条数据

SELECT * FROM `student` WHERE name LIKE '李_';

查询数据表 student 中 姓李且名字只有两个字 的数据,并且展示他们的 全部属性

命令原型:SELECT 属性名 FROM 表名 WHERE 属性名 LIKE 含有下划线条件;

注意:这个时候不能用等于查询

4.3 混合查询

SELECT * FROM `student` WHERE name LIKE '_明%';

查询数据表 student 中 名字第二个字是明 的数据,并且展示他们的 全部属性

命令原型:SELECT 属性名 FROM 表名 WHERE 属性名 LIKE 含有百分号和下划线的条件;

注意:这个时候不能用等于查询

五. 升序降序排序

用户可以用ORDER BY子句对查询结果按照一个或多个属性列的升序(ASC)或降序(DESC)排列,默认值为升序。

5.1 降序排序

SELECT * FROM student ORDER BY age DESC;

将数据表按照年龄的降序进行排序

命令原型:SELECT 属性名 FROM 数据表 ORDER BY 属性名 DESC;

5.2 升序排序

SELECT * FROM student ORDER BY `name` ASC;

将数据表按照姓名的升序进行排序

命令原型:SELECT 属性名 FROM 数据表 ORDER BY 属性名 ASC;

首字母大写的顺序排序

5.3 条件排序

SELECT * FROM student WHERE `name`='张三' ORDER BY `name` ASC;

将数据表中名字为张三的按照年龄的升序进行排序

命令原型:SELECT 属性名 FROM 数据表 WHERE 条件 ORDER BY 属性名 ASC;

六. 统计查询

6.1 统计有多少行

SELECT COUNT(*) FROM student;

查询有多少行

命令原型:SELECT COUNT(*) FROM 表名;;

6.2 统计属性值的种类

SELECT COUNT(DISTINCT age) FROM student;

查询年龄有几种

命令原型:SELECT COUNT(DISTINCT 属性名) FROM 表名;

PS:空值不计数

6.3 计算一列数据的和

SELECT SUM(age) FROM student;

计算所有age岁数的和

命令原型:SELECT SUM(属性名) FROM 表名;

PS:空值不能加入,并且必须是数值型

6.4 计算平均值

SELECT AVG(age) FROM student;

计算所有age岁数的平均

命令原型:SELECT AVG(属性名) FROM 表名;

PS:空值不能加入,并且必须是数值型

6.5 最大值

SELECT MAX(age) FROM student;

计算所有age岁数的最大值

命令原型:SELECT MAX(属性名) FROM 表名;

6.6 最小值

SELECT MIN(age) FROM student;

计算所有age岁数的最小值

命令原型:SELECT MIN(属性名) FROM 表名;

6.7 分组查询

分组查询将查询结果按某一列或多列的值分组,值相等的为一组。

SELECT name,COUNT(id) FROM student GROUP BY `name`;

查询 name 属性种类的个数,以及对应 id 的个数

命令原型:SELECT 属性名1,COUNT(属性名2) FROM 表名 GROUP BY 属性名1;

PS:空值不能计入


好好吃饭

好好睡觉

相关推荐
小码的头发丝、43 分钟前
Django中ListView 和 DetailView类的区别
数据库·python·django
小兜全糖(xdqt)1 小时前
mysql数据同步到sql server
mysql·adb
Karoku0661 小时前
【企业级分布式系统】Zabbix监控系统与部署安装
运维·服务器·数据库·redis·mysql·zabbix
周全全1 小时前
MySQL报错解决:The user specified as a definer (‘root‘@‘%‘) does not exist
android·数据库·mysql
白云如幻2 小时前
MySQL的分组函数
数据库·mysql
荒川之神2 小时前
ORACLE 闪回技术简介
数据库·oracle
时差9533 小时前
【面试题】Hive 查询:如何查找用户连续三天登录的记录
大数据·数据库·hive·sql·面试·database
让学习成为一种生活方式3 小时前
R包下载太慢安装中止的解决策略-R语言003
java·数据库·r语言
Mephisto.java3 小时前
【大数据学习 | kafka高级部分】kafka的优化参数整理
大数据·sql·oracle·kafka·json·database
秋意钟4 小时前
MySQL日期类型选择建议
数据库·mysql