马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
媒介
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);
-
复制代码 创建数据表结果如下:
一. 查询一列数据或几列数据
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 多属性数据去重
- 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 数据;
- SELECT * FROM student WHERE name LIKE '张三';
- /* 两者是等价关系 */
- SELECT `name` FROM student WHERE `name`='张三'
复制代码
3.10 空值查询
- /* 插入含有空值的数据 */
- 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 下划线查询
- /* 插入一条数据,作为 下划线查询 的对比 */
- 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:空值不能计入
好好吃饭
好好睡觉
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |