MySQL学习之表查询操作
MySQL学习之表查询操作
准备数据
创建数据表和导入数据
CREATE TABLE user (
id INT COMMENT '编号',
name VARCHAR (10) COMMENT '姓名',
gender CHAR(1) COMMENT '性别',
age TINYINT UNSIGNED COMMENT '年龄',
phone VARCHAR(11) COMMENT '手机号',
idcard CHAR(18) COMMENT '身份证号',
address VARCHAR (50) COMMENT '地址',
brithday DATE COMMENT '生日'
) COMMENT '用户表';
-----
INSERT INTO user
VALUES
(1, '张三', '男', '18', '18186325565', '312321212315464242', '北京', '2000-01-01'),
(2, '雷军', '男', '54', '18136325565', '312321212315464242', '武汉', '1980-01-01'),
(3, '卢伟冰', '男', '45', '18136332565', '312321212315464242', '北京', '1990-01-01'),
(4, '马化腾', '男', '50', '18136332562', '312321212315464242', '深圳', '1974-01-01'),
(5, '张学友', '男', '60', '18136332565', '312321212315464242', '香港', '1955-01-01'),
(6, '郭富城', '男', '65', '18136332564', '312321212315464242', '香港', '1968-01-01'),
(7, '周润发', '男', '66', '18136332567', '312321212315464242', '香港', '1957-01-01'),
(8, '李健', '男', '45', '18136332566', '312321212315464242', '哈尔冰', '1963-01-01'),
(9, '余华', '男', '65', '18136332568', '312321212315464242', '杭州', '1969-01-01'),
(10, '马尔克斯', '男', '85', '18136332165', '312321212315464242', '马来西亚', '1885-01-01'),
(11, '迟子建', '女', '60', '18136332265', '312321212315464242', '哈尔冰', '1974-01-01'),
(12, '莫言', '男', '65', '18136332365', '312321212315464242', '高密', '1964-01-01'),
(13, '毛姆', '男', '85', '18136332465', '312321212315464242', '伦敦', '1884-01-01'),
(14, '刘强东', '男', '50', '18136338565', '312321212315464242', '宿迁', '1976-01-01'),
(15, '高圆圆', '女', '18', '18136334665', '312321212315464242', '北京', '1991-01-01'),
(16, '刘亦菲', '女', '18', '18136333565', '312321212315464242', '上海', '1996-01-01'),
(17, '许三多', '男', '18', '18136330565', '312321212315464242', '上榕树', '1992-01-01');
基础查询
不带任何条件的情况
语法
SELECT 字段1, 字段2, 字段3 ... FROM 表名; //查询要展示的字段
SELECT * FROM 表名; //查询全部字段
mysql> select id,name from user;
+------+----------+
| id | name |
+------+----------+
| 1 | 张三 |
| 2 | 雷军 |
| 3 | 卢伟冰 |
| 4 | 马化腾 |
| 5 | 张学友 |
| 6 | 郭富城 |
| 7 | 周润发 |
| 8 | 李健 |
| 9 | 余华 |
| 10 | 马尔克斯 |
| 11 | 迟子建 |
| 12 | 莫言 |
| 13 | 毛姆 |
| 14 | 刘强东 |
| 15 | 高圆圆 |
| 16 | 刘亦菲 |
| 17 | 许三多 |
+------+----------+
17 rows in set (0.00 sec)
设置别名
mysql> select id as '编号',name as '名字' from user;
+------+----------+
| 编号 | 名字 |
+------+----------+
| 1 | 张三 |
| 2 | 雷军 |
| 3 | 卢伟冰 |
| 4 | 马化腾 |
| 5 | 张学友 |
| 6 | 郭富城 |
| 7 | 周润发 |
| 8 | 李健 |
| 9 | 余华 |
| 10 | 马尔克斯 |
| 11 | 迟子建 |
| 12 | 莫言 |
| 13 | 毛姆 |
| 14 | 刘强东 |
| 15 | 高圆圆 |
| 16 | 刘亦菲 |
| 17 | 许三多 |
+------+----------+
17 rows in set (0.00 sec)
去重
mysql> select distinct address from user;
+----------+
| address |
+----------+
| 成都 |
| 武汉 |
| 北京 |
| 深圳 |
| 香港 |
| 哈尔冰 |
| 杭州 |
| 马来西亚 |
| 高密 |
| 伦敦 |
| 宿迁 |
| 上海 |
| 上榕树 |
+----------+
13 rows in set (0.00 sec)
条件查询
条件分为两种:一种是比较运算符,一种是逻辑运算符
语法
SELECT 字段列表 FROM 表名 WHERE 条件列表;
查询id 大于10的数据
mysql> select * from user where id > 10;
+------+--------+--------+------+-------------+--------------------+---------+------------+
| id | name | gender | age | phone | idcard | address | brithday |
+------+--------+--------+------+-------------+--------------------+---------+------------+
| 11 | 迟子建 | 女 | 60 | 18136332265 | 312321212315464242 | 哈尔冰 | 1974-01-01 |
| 12 | 莫言 | 男 | 65 | 18136332365 | 312321212315464242 | 高密 | 1964-01-01 |
| 13 | 毛姆 | 男 | 85 | 18136332465 | 312321212315464242 | 伦敦 | 1884-01-01 |
| 14 | 刘强东 | 男 | 50 | 18136338565 | 312321212315464242 | 宿迁 | 1976-01-01 |
| 15 | 高圆圆 | 女 | 18 | 18136334665 | 312321212315464242 | 北京 | 1991-01-01 |
| 16 | 刘亦菲 | 女 | 18 | 18136333565 | 312321212315464242 | 上海 | 1996-01-01 |
| 17 | 许三多 | 男 | 18 | 18136330565 | 312321212315464242 | 上榕树 | 1992-01-01 |
+------+--------+--------+------+-------------+--------------------+---------+------------+
查询年龄等于18岁或者年龄为65或者年龄大于80岁的数据
mysql> select * from user where age = 18 or age = 65 or age > 80;
+------+----------+--------+------+-------------+--------------------+----------+------------+
| id | name | gender | age | phone | idcard | address | brithday |
+------+----------+--------+------+-------------+--------------------+----------+------------+
| 1 | 张三 | 男 | 18 | 18136332565 | 312321212315464242 | 成都 | 2000-01-01 |
| 6 | 郭富城 | 男 | 65 | 18136332564 | 312321212315464242 | 香港 | 1968-01-01 |
| 9 | 余华 | 男 | 65 | 18136332568 | 312321212315464242 | 杭州 | 1969-01-01 |
| 10 | 马尔克斯 | 男 | 85 | 18136332165 | 312321212315464242 | 马来西亚 | 1885-01-01 |
| 12 | 莫言 | 男 | 65 | 18136332365 | 312321212315464242 | 高密 | 1964-01-01 |
| 13 | 毛姆 | 男 | 85 | 18136332465 | 312321212315464242 | 伦敦 | 1884-01-01 |
| 15 | 高圆圆 | 女 | 18 | 18136334665 | 312321212315464242 | 北京 | 1991-01-01 |
| 16 | 刘亦菲 | 女 | 18 | 18136333565 | 312321212315464242 | 上海 | 1996-01-01 |
| 17 | 许三多 | 男 | 18 | 18136330565 | 312321212315464242 | 上榕树 | 1992-01-01 |
+------+----------+--------+------+-------------+--------------------+----------+------------+
模糊查询,查询名称为3个字的数据
mysql> select * from user where name like '___';
+------+--------+--------+------+-------------+--------------------+---------+------------+
| id | name | gender | age | phone | idcard | address | brithday |
+------+--------+--------+------+-------------+--------------------+---------+------------+
| 3 | 卢伟冰 | 男 | 45 | 18136332565 | 312321212315464242 | 北京 | 1990-01-01 |
| 4 | 马化腾 | 男 | 50 | 18136332562 | 312321212315464242 | 深圳 | 1974-01-01 |
| 5 | 张学友 | 男 | 60 | 18136332565 | 312321212315464242 | 香港 | 1955-01-01 |
| 6 | 郭富城 | 男 | 65 | 18136332564 | 312321212315464242 | 香港 | 1968-01-01 |
| 7 | 周润发 | 男 | 66 | 18136332567 | 312321212315464242 | 香港 | 1957-01-01 |
| 11 | 迟子建 | 女 | 60 | 18136332265 | 312321212315464242 | 哈尔冰 | 1974-01-01 |
| 14 | 刘强东 | 男 | 50 | 18136338565 | 312321212315464242 | 宿迁 | 1976-01-01 |
| 15 | 高圆圆 | 女 | 18 | 18136334665 | 312321212315464242 | 北京 | 1991-01-01 |
| 16 | 刘亦菲 | 女 | 18 | 18136333565 | 312321212315464242 | 上海 | 1996-01-01 |
| 17 | 许三多 | 男 | 18 | 18136330565 | 312321212315464242 | 上榕树 | 1992-01-01 |
+------+--------+--------+------+-------------+--------------------+---------+------------+
10 rows in set (0.00 sec)
LIKE
关键字用于在 WHERE
子句中搜索列中的指定模式。LIKE
子句可以与通配符一起使用来搜索一个范围的值。其中两个常用的通配符是:
%
:表示任意数量的字符(包括零个字符)。_
:表示单个字符。
当你使用 LIKE '___'
作为一个查询条件时,这里的三个下划线(_
)各自代表一个字符。因此,LIKE '___'
用于匹配那些正好包含三个字符的字符串。
聚合函数
官网聚合函数的使用文档地址如下:
https://dev.mysql.com/doc/refman/8.4/en/aggregate-functions.html
以下是mysql中的所有聚合函数方法
Name | Description |
---|---|
AVG() | Return the average value of the argument |
BIT_AND() | Return bitwise AND |
BIT_OR() | Return bitwise OR |
BIT_XOR() | Return bitwise XOR |
COUNT() | Return a count of the number of rows returned |
COUNT(DISTINCT) | Return the count of a number of different values |
GROUP_CONCAT() | Return a concatenated string |
JSON_ARRAYAGG() | Return result set as a single JSON array |
JSON_OBJECTAGG() | Return result set as a single JSON object |
MAX() | Return the maximum value |
MIN() | Return the minimum value |
STD() | Return the population standard deviation |
STDDEV() | Return the population standard deviation |
STDDEV_POP() | Return the population standard deviation |
STDDEV_SAMP() | Return the sample standard deviation |
SUM() | Return the sum |
VAR_POP() | Return the population standard variance |
VAR_SAMP() | Return the sample variance |
VARIANCE() | Return the population standard variance |
语法如下:
SELECT 聚合函数(字段列表) FROM 表名 ;
null值不参与聚合函数的运算
一些简单示例如下:
#统计香港地区的员工年龄平均值
SELECT AVG(age) as '平均年龄' FROM `user` WHERE address = '香港';
#统计一共有哪几个岁数
select COUNT(DISTINCT age) FROM `user`;