133 MySQL单表查询

时间:2019-09-26 00:33:07   收藏:0   阅读:111

一、单表查询

1.1 语法

select ditinct 字段1 as 别名1,字段2 as 别名2,···· from 表名
                                where 条件
                                group by 字段名
                                having 筛选
                                order by 字段名
                                limit 限制条数

1.2 关键字优先级

from : 找到表
where : 拿着where 后面的约束的条件,去表/文件中取出一些记录
group by : 将取出的某些记录进行分组,如果没有group by,则整体作为一组
select : 执行select
distinct : 对去取出的重复数据进行去重
having : 将分组的结果进行having过滤
order by : 将结果按条件排序
limit : 限制显示的记录条数

1.3 注意(重点)

1.4 测试一个单表的distinct去重

# 创建一个表
create table t1(
    id int,
    x int,
    y int
);
1.插入几条数据
insert into t1 values(1, 1, 1), (2, 1, 2), (3, 2, 2), (4, 2, 2);
############################cmd 图示
mysql> select * from t1;
+------+------+------+
| id   | x    | y    |
+------+------+------+
|    1 |    1 |    1 |
|    2 |    1 |    2 |
|    3 |    2 |    2 |
|    4 |    2 |    2 |
+------+------+------+

2.查询全部数据
select distinct * from t1; 
############################cmd 图示
mysql> select distinct * from t1;
+------+------+------+
| id   | x    | y    |
+------+------+------+
|    1 |    1 |    1 |
|    2 |    1 |    2 |
|    3 |    2 |    2 |
|    4 |    2 |    2 |
+------+------+------+
4 rows in set (0.00 sec)

3.查询结果中,把重复的数据去掉
select distinct x, y from t1
############################cmd 图示
mysql> select distinct x,y from t1;
+------+------+
| x    | y    |
+------+------+
|    1 |    1 |
|    1 |    2 |
|    2 |    2 |
+------+------+
3 rows in set (0.00 sec)

4.查询字段y,把y字段的重复值去掉
select distinct y from t1;  # 结果 1  2
############################cmd 图示
mysql> select distinct y from t1;
+------+
| y    |
+------+
|    1 |
|    2 |
+------+
2 rows in set (0.00 sec)

二、表记录查询测试

在此之前,先提几个常用函数

2.1常用函数

2.2 数据准备

我们以员工表(emp)为例:

员工id :id :int

员工姓名 : name : varchar

员工性别 :gender :enum

员工年龄 :age : int

员工工资 : salary : float

员工所在城市 :area :varcahr

员工所在地址 :addr : varchar

员工部门 :dep :varchar

1.先创建员工表(emp)
create table emp(
    id int primary key auto_increment,
    name varchar(10) not null,
    sex enum('男','女') default '女',
    age int unsigned default 25,
    salary float default 0,
    area varchar(20) null default '中国',
    addr varchar(20) null default '上海',
    dep varchar(20) null default '咨询部'
);
########查看表结构
mysql> desc emp;
+--------+-------------------+------+-----+-----------+----------------+
| Field  | Type              | Null | Key | Default   | Extra          |
+--------+-------------------+------+-----+-----------+----------------+
| id     | int(11)           | NO   | PRI | NULL      | auto_increment |
| name   | varchar(10)       | NO   |     | NULL      |                |
| sex    | enum('男','女')   | YES  |     | 女        |                |
| age    | int(10) unsigned  | YES  |     | 25        |                |
| salary | float             | YES  |     | 0         |                |
| area   | varchar(20)       | YES  |     | 中国      |                |
| addr   | varchar(20)       | YES  |     | 上海      |                |
| dep    | varchar(20)       | YES  |     | 咨询部    |                |
+--------+-------------------+------+-----+-----------+----------------+


2.插入数据
insert into emp values
    (1, 'aaa', '男', 42, 10.5, '上海', '浦东', '教职部'),
    (2, 'bbb', '男', 38, 9.4, '山东', '济南', '教学部'),
    (3, 'ccc', '女', 30, 3.0, '江苏', '张家港', '教学部'),
    (4, 'ddd', '女', 28, 2.4, '广州', '广东', '教学部'),
    (5, 'eee', '男', 28, 2.4, '江苏', '苏州', '教学部'),
    (6, 'fff', '男', 18, 8.8, '中国', '黄浦', '咨询部'),
    (7, 'ggg', '男', 18, 8.8, '安徽', '宣城', '教学部'),
    (8, 'hhh', '男', 28, 9.8, '安徽', '巢湖', '教学部'),
    (9, 'iii', '女', 36, 1.2, '安徽', '芜湖', '咨询部'),
    (10, 'jjj', '男', 36, 5.8, '山东', '济南', '教学部'),
    (11, 'kkk', '女', 28, 1.2, '山东', '青岛', '教职部'),
    (12, 'lll', '男', 30, 9.0, '上海', '浦东', '咨询部'),
    (13, 'mmm', '男', 30, 6.0, '上海', '浦东', '咨询部'),
    (14, 'nnn', '男', 30, 6.0, '上海', '浦西', '教学部'),
    (15, 'ooo', '女', 67, 2.501, '上海', '陆家嘴', '教学部');
########查看表记录
mysql> select * from emp;
+----+------+------+------+--------+--------+-----------+-----------+
| id | name | sex  | age  | salary | area   | addr      | dep       |
+----+------+------+------+--------+--------+-----------+-----------+
|  1 | aaa  | 男   |   42 |   10.5 | 上海   | 浦东      | 教职部    |
|  2 | bbb  | 男   |   38 |    9.4 | 山东   | 济南      | 教学部    |
|  3 | ccc  | 女   |   30 |      3 | 江苏   | 张家港    | 教学部    |
|  4 | ddd  | 女   |   28 |    2.4 | 广州   | 广东      | 教学部    |
|  5 | eee  | 男   |   28 |    2.4 | 江苏   | 苏州      | 教学部    |
|  6 | fff  | 男   |   18 |    8.8 | 中国   | 黄浦      | 咨询部    |
|  7 | ggg  | 男   |   18 |    8.8 | 安徽   | 宣城      | 教学部    |
|  8 | hhh  | 男   |   28 |    9.8 | 安徽   | 巢湖      | 教学部    |
|  9 | iii  | 女   |   36 |    1.2 | 安徽   | 芜湖      | 咨询部    |
| 10 | jjj  | 男   |   36 |    5.8 | 山东   | 济南      | 教学部    |
| 11 | kkk  | 女   |   28 |    1.2 | 山东   | 青岛      | 教职部    |
| 12 | lll  | 男   |   30 |      9 | 上海   | 浦东      | 咨询部    |
| 13 | mmm  | 男   |   30 |      6 | 上海   | 浦东      | 咨询部    |
| 14 | nnn  | 男   |   30 |      6 | 上海   | 浦西      | 教学部    |
| 15 | ooo  | 女   |   67 |  2.501 | 上海   | 陆家嘴    | 教学部    |
+----+------+------+------+--------+--------+-----------+-----------+
15 rows in set (0.00 sec)

2.3 表记录测试

2.3.1 where条件查询

2.3.2 group by 分组查询

一、分组查询的问题

二、聚合函数

因为我们有了这个分组限制以后,那么select查询的字段只能是分组的那个字段dep,而表里日他字段的值都获取不到,所以我们这样分组并不是我们想要的结果,所以想要获取组内的其他相关信息,需要借助函数

1.聚合函数分类
最大值  max()
最小值  min()
平均值  avg()
求和    sum()
计数    count()
组内字段拼接,用来查看组内其他字段   group_concat()
2.数据测试(以员工表为例)

2.3.3 having 和 where

2.3.4 排序 order by

一、语法规则

asc : 字段升序排序,默认是升序
desc : 字段降序排序

# 语法
order by 主排序字段 [asc|desc], 次排序字段1 [asc|desc], ...次排序字段n [asc|desc]
#1.先按主排序字段排序,如果出现主排序字段有某两个或多个字段相同,那就再去按次排序字段排序

二、数据测试

2.3.5 limit限制

一、语法

limit 条数 
limit 偏移量,条数 偏移量就是跳过几条数据后开始取

二、数据测试(限制 limit)

原文:https://www.cnblogs.com/xichenHome/p/11588406.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!