11-Mysql数据库—-单表查询

发布时间:2019-11-21  栏目:MySQL  评论:0 Comments

四、创建表

语法:

图片 1

create table 表名(
字段名1 类型[(宽度) 约束条件],
字段名2 类型[(宽度) 约束条件],
字段名3 类型[(宽度) 约束条件]
);

#注意:
1. 在同一张表中,字段名是不能相同
2. 宽度和约束条件可选
3. 字段名和类型是必须的

图片 2

1.创造数据库

create database db2 charset utf8;

2.使用数据库

use db2;

3.创建a1表

create table a1(
  id int,
  name varchar(50),
  age int(3)
);

4.插入表的记录

insert into a1 values
(1,'mjj',18),
(2,'wusir',28);

ps:以;作为mysql的甘休语

5.查询表的数据和组织

(1卡塔 尔(英语:State of Qatar)查询a1表中的存储数据

图片 3

mysql> select * from a1;
+——+——-+——+
| id | name | age |
+——+——-+——+
| 1 | mjj   | 18  |
| 2 | wusir | 28  |
+——+——-+——+
2 rows in set (0.02 sec)

mysql>

图片 4

 

(2卡塔尔查看a1表的组织

图片 5

mysql> desc a1;
+-------+-------------+------+-----+---------+-------+
| Field     | Type           | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id        | int(11)        | YES  |      | NULL    |       |
| name      | varchar(50)    | YES  |      | NULL    |       |
| age       | int(3)         | YES  |      | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.16 sec)

图片 6

(3卡塔 尔(阿拉伯语:قطر‎查看表的详细结构

图片 7

mysql> show create table a1\G;
*************************** 1. row ***************************
       Table: a1
Create Table: CREATE TABLE `a1` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(50) DEFAULT NULL,
  `age` int(3) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

图片 8

6.复制表

(1卡塔 尔(英语:State of Qatar)新创立二个数据库db3

mysql> create database db3 charset utf8;
Query OK, 1 row affected (0.00 sec)

(2)使用db3

mysql> use db3;
Database changed

图片 9

#这是上个创建的db2数据库中的a1表
mysql> select * from db2.a1;
+------+-------+------+
| id   | name  | age  |
+------+-------+------+
|    1 | mjj   |   18 |
|    2 | wusir |   28 |
+------+-------+------+

图片 10

(3卡塔 尔(阿拉伯语:قطر‎复制db2.a1的表结商谈著录

# 这就是复制表的操作(既复制了表结构,又复制了记录)
mysql> create table b1 select * from db2.a1;
Query OK, 2 rows affected (0.03 sec)

(4卡塔 尔(阿拉伯语:قطر‎查看db3.b第11中学的数据和表结构

图片 11

#再去查看db3文件夹下的b1表发现 跟db2文件下的a1表数据一样
mysql> select * from db3.b1;
+------+-------+------+
| id   | name  | age  |
+------+-------+------+
|    1 | mjj   |   18 |
|    2 | wusir |   28 |
+------+-------+------+
2 rows in set (0.00 sec)

图片 12

 

ps1:固然只要表结构,不要记录

#在db2数据库下新创建一个b2表,给一个where条件,条件要求不成立,条件为false,只拷贝表结构
mysql> create table b2 select * from db2.a1 where 1>5;
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

查看表结构:

图片 13

# 查看表结构
mysql> desc b2;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(50) | YES  |     | NULL    |       |
| age   | int(3)      | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.02 sec)

#查看表结构中的数据,发现是空数据
mysql> select * from b2;
Empty set (0.00 sec)

图片 14

 

ps2:还会有后生可畏种做法,使用like(只拷贝表结构,不拷贝记录)

图片 15

mysql> create table b3 like db2.a1;
Query OK, 0 rows affected (0.01 sec)

mysql> desc b3;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(50) | YES  |     | NULL    |       |
| age   | int(3)      | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.02 sec)

mysql> select * from db3.b3;
Empty set (0.00 sec)

图片 16

 

7.删除表:

drop table 表名;
验证多列排序:
SELECT * from employee ORDER BY age ASC,id DESC;
mysql> SELECT * from employee ORDER BY age ASC,id DESC;
+----+------------+--------+-----+------------+-----------------------------------------+--------------+------------+--------+-----------+
| id | name       | sex    | age | hire_date  | post                                    | post_comment | salary     | office | depart_id |
+----+------------+--------+-----+------------+-----------------------------------------+--------------+------------+--------+-----------+
| 18 | 程咬铁     | female |  18 | 2014-05-12 | operation                               | NULL         |   17000.00 |    403 |         3 |
| 17 | 程咬铜     | male   |  18 | 2015-04-11 | operation                               | NULL         |   18000.00 |    403 |         3 |
| 16 | 程咬银     | female |  18 | 2013-03-11 | operation                               | NULL         |   19000.00 |    403 |         3 |
| 15 | 程咬金     | male   |  18 | 1997-03-12 | operation                               | NULL         |   20000.00 |    403 |         3 |
| 12 | 星星       | female |  18 | 2016-05-13 | sale                                    | NULL         |    3000.29 |    402 |         2 |
| 11 | 丁丁       | female |  18 | 2011-03-12 | sale                                    | NULL         |    1000.37 |    402 |         2 |
|  7 | jinxin     | male   |  18 | 1900-03-01 | teacher                                 | NULL         |   30000.00 |    401 |         1 |
|  6 | jingliyang | female |  18 | 2011-02-11 | teacher                                 | NULL         |    9000.00 |    401 |         1 |
|  1 | egon       | male   |  18 | 2017-03-01 | 老男孩驻沙河办事处外交大使              | NULL         |    7300.33 |    401 |         1 |
| 14 | 张野       | male   |  28 | 2016-03-11 | operation                               | NULL         |   10000.13 |    403 |         3 |
| 13 | 格格       | female |  28 | 2017-01-27 | sale                                    | NULL         |    4000.33 |    402 |         2 |
|  5 | liwenzhou  | male   |  28 | 2012-11-01 | teacher                                 | NULL         |    2100.00 |    401 |         1 |
| 10 | 丫丫       | female |  38 | 2010-11-01 | sale                                    | NULL         |    2000.35 |    402 |         2 |
|  9 | 歪歪       | female |  48 | 2015-03-11 | sale                                    | NULL         |    3000.13 |    402 |         2 |
|  8 | xiaomage   | male   |  48 | 2010-11-11 | teacher                                 | NULL         |   10000.00 |    401 |         1 |
|  4 | yuanhao    | male   |  73 | 2014-07-01 | teacher                                 | NULL         |    3500.00 |    401 |         1 |
|  2 | alex       | male   |  78 | 2015-03-02 | teacher                                 |              | 1000000.31 |    401 |         1 |
|  3 | wupeiqi    | male   |  81 | 2013-03-05 | teacher                                 | NULL         |    8300.00 |    401 |         1 |
+----+------------+--------+-----+------------+-----------------------------------------+--------------+------------+--------+-----------+
18 rows in set (0.01 sec)

mysql>

黄金年代、存款和储蓄引擎(驾驭卡塔 尔(阿拉伯语:قطر‎

前几节我们精通mysql中确立的库===》文件夹,库中的表====》文件

现实生活中我们用来储存数据的文书有两样的花色,每一种文件类型对应各自分化的拍卖体制:比方拍卖公事用txt类型,管理表格用excel,管理图片用png等

数据库中的表也相应有例外的项目,表的项目不一致,会对应mysql不相同的存取机制,表类型又称作存款和储蓄引擎。

ps:
存款和储蓄引擎说白了就是何等存款和储蓄数据、怎样为存款和储蓄的数码创设目录和什么立异、查询数据等技能的得以达成方式。因为在关周密据库中数量的存款和储蓄是以表的款型储存的,所以存款和储蓄引擎也足以叫做表类型(即存款和储蓄和操作此表的类别卡塔尔

在Oracle 和SQL
Server等数据库中独有生机勃勃种存款和储蓄引擎,全部数据存款和储蓄管理机制未有不一样的。而MySql
数据库提供了两种仓库储存引擎。客户能够依靠区别的必要为数据表选拔区别的仓库储存引擎,顾客也能够依附
团结的必要编写制定本人的贮存引擎

图片 17

SQL 分析器、SQL
优化器、缓冲池、存款和储蓄引擎等零部件在种种数据库中都设有,但不是种种数据库都有那样多存款和储蓄引擎。MySQL
的插件式存款和储蓄引擎能够让存款和储蓄引擎层的开垦职员设
计他们期待的存款和储蓄层,比如,有的利用需求满足职业的供给,有的利用则无需对作业有这
么强的要求;有的盼望多少能坚持存款和储蓄,有的只愿意放在内部存款和储蓄器中,有时并飞速地提供对数据
的询问。

 

 

本节调整

  • 仓库储存引擎介绍(驾驭卡塔尔国
  • 表的增加和删除改查

 

 

8.范围结果的体现条数

06-表的操作

语法:

三、表介绍

表也就是文件,表中的一条记下就一定于文件的风流倜傥行内容,差别的是,表中的一条记下有关照的标题,称为表的字段

图片 18

id,name,sex,age,birth称为字段,其他的,生龙活虎行内容称为一条记下

 

图片 19图片 20

二、mysql协理的寄放引擎

mysql> show engines\G;# 查看所有支持的引擎
mysql> show variables like 'storage_engine%'; # 查看正在使用的存储引擎

 

1、InnoDB 存款和储蓄引擎—-常用

支撑职业,其安排指标关键面向联机事务管理(OLTP)的应用。其

特征是行锁设计、扶持外键,并扶持相符 Oracle
的非锁定读,即暗中同意读取操作不会发生锁。 从 MySQL 5.5.8
版本领头是暗中认可的储存引擎。

InnoDB 存款和储蓄引擎将数据放在多个逻辑的表空间中,这么些表空间仿佛黑盒相通由
InnoDB 存款和储蓄引擎本身来保管。从 MySQL 4.1(富含 4.1)版本以前,能够将种种InnoDB 存款和储蓄引擎的 表单独存放到三个独立的 ibd 文件中。别的,InnoDB
存款和储蓄引擎援助将裸设备(row disk)用 于创立其表空间。

InnoDB 通过选用多版本现身调整(MVCC)来获得高并发性,何况达成了 SQL 标准 的
4 种隔开等第,默感觉 REPEATABLE 品级,同一时间接选举拔大器晚成种叫做 netx-key locking
的国策来 防止幻读(phantom)现象的爆发。除外,InnoDB
存款和储蓄引擎还提供了插入缓冲(insert buffer)、贰遍写(double
write)、自适应哈希索引(adaptive hash index)、预读(read ahead)
等高质量和高可用的效应。

对此表中数据的蕴藏,InnoDB
存款和储蓄引擎接纳了汇聚(clustered)的艺术,每张表都以按
主键的相继举办仓库储存的,若无显式地在表定义时内定主键,InnoDB
存款和储蓄引擎会为每意气风发 行生成两个 6 字节的 ROWID,并以此作为主键。

InnoDB 存款和储蓄引擎是 MySQL 数据库最为常用的生龙活虎种引擎,Instagram、谷歌、Yahoo
等 集团的中标应用已经认证了 InnoDB
存款和储蓄引擎具有高可用性、高品质以致高可增加性。对其
底层达成的主宰和精通也亟需时刻和能力的积存。借使想深切领会 InnoDB
存款和储蓄引擎的干活 原理、完成和平运动用,能够参照《MySQL 本领内部原因:InnoDB
存款和储蓄引擎》生机勃勃书。

2、MyISAM 存款和储蓄引擎—-常用

不帮助专门的职业、表锁设计、援救全文索引,重要面向一些 OLAP 数 据库应用,在
MySQL 5.5.8 版本以前是私下认可的存储引擎(除 Windows 版本外)。数据库系统
与文件系统一个十分的大的不等在于对专门的工作的扶持,MyISAM
存款和储蓄引擎是不扶持专门的工作的。究其根
本,这也并轻便明白。顾客在具有的选取中是还是不是都亟待专门的学问呢?在数据商旅中,若无ETL 那一个操作,只是简短地因而报表查询还须要专业的扶植吧?此外,MyISAM
存储引擎的
另四个特种的地点是,它的缓冲池只缓存(cache)索引文件,而不缓存数据文件,那与
大大多的数据库都不平等。

3、NDB 存款和储蓄引擎

年,MySQL AB 公司从 索尼 Ericsson 集团收购了 NDB 存款和储蓄引擎。 NDB
存款和储蓄引擎是叁个集群存款和储蓄引擎,相近于 Oracle 的 RAC 集群,不过与 Oracle RAC
的 share everything 结构不一致的是,其结构是 share nothing
的集群架构,因而能提供更加高端别的 高可用性。NDB
存款和储蓄引擎的特征是数额总体放在内部存款和储蓄器中(从 5.1 版本初叶,能够将非索引数
据放在磁盘上),因而主键查找(primary key
lookups)的快慢十分的快,何况能够在线增多 NDB 数据存储节点(data
node)以便线性地抓好数据库品质。说来讲去,NDB 存款和储蓄引擎是高可用、
高品质、高可扩张性的数据库集群系统,其面向的也是 OLTP 的数据库应用类型。

4、Memory 存款和储蓄引擎—-常用

正如其名,Memory 存款和储蓄引擎中的数据都贮存在内部存储器中,数据库重
启或发生崩溃,表中的数据都将半途而废。它非常符合于储存 OLTP
数据库应用中一时数据的有时表,也足以用作 OLAP
数据库应用中数据饭馆的维度表。Memory 存款和储蓄引擎暗许使用哈希
索引,并非平日纯熟的 B+ 树索引。

5、Infobright 存款和储蓄引擎

其三方的囤积引擎。其特色是积攒是依据列而非洲开发银行的,因此特别 切合 OLAP
的数据库应用。其官网是 http://www.infobright.org/,上边有成都百货上千打响的数码 宾馆案例可供深入分析。

6、NTSE 存款和储蓄引擎

博客园集团开拓的面向其内部使用的存款和储蓄引擎。近期的本子不支持专业,
但提供压缩、行级缓存等特征,不久的明天会兑现面向内部存款和储蓄器的作业帮衬。

7、BLACKHOLE—-常用

黑洞存款和储蓄引擎,可以行使于主备复制中的分发主库。

MySQL 数据库还会有众多别样存款和储蓄引擎,上述只是列举了有加无己常用的片段外燃机。若是你喜欢,完全能够编写制定专门项目于本身的引擎,那就是开源给予我们的手艺,也是开源的魔力所在。

 

点名表类型/存款和储蓄引擎

create table t1(id int)engine=innodb;# 默认不写就是innodb

 

小练习:

成立四张表,分别采纳innodb,myisam,memory,blackhole存储引擎,举行扦插数据测验 

create table t1(id int)engine=innodb;
create table t2(id int)engine=myisam;
create table t3(id int)engine=memory;
create table t4(id int)engine=blackhole;

查看data文件下db1数据库中的文件:

图片 21

图片 22

#.frm是存储数据表的框架结构

# .ibd是mysql数据文件 

#.MYD是MyISAM表的数据文件的扩展名

#.MYI是MyISAM表的索引的扩展名

#发现后两种存储引擎只有表结构,无数据

#memory,在重启mysql或者重启机器后,表内数据清空
#blackhole,往表内插入任何数据,都相当于丢入黑洞,表内永远不存记录

图片 23

 

按单列排序
    SELECT * FROM employee ORDER BY age;
    SELECT * FROM employee ORDER BY age ASC;
    SELECT * FROM employee ORDER BY age DESC;
按多列排序:先按照age升序排序,如果年纪相同,则按照id降序
    SELECT * from employee
        ORDER BY age ASC,
        id DESC;
# 题1:
mysql> select post,group_concat(name),count(id) from employee group by post;
+-----------------------------------------+-----------------------------------------------------------+-----------+
| post                                    | group_concat(name)                                        | count(id) |
+-----------------------------------------+-----------------------------------------------------------+-----------+
| operation                               | 程咬铁,程咬铜,程咬银,程咬金,张野                          |         5 |
| sale                                    | 格格,星星,丁丁,丫丫,歪歪                                  |         5 |
| teacher                                 | xiaomage,jinxin,jingliyang,liwenzhou,yuanhao,wupeiqi,alex |         7 |
| 老男孩驻沙河办事处外交大使              | egon                                                      |         1 |
+-----------------------------------------+-----------------------------------------------------------+-----------+
4 rows in set (0.00 sec)

mysql> select post,group_concat(name),count(id) from employee group by post having count(id)<2;
+-----------------------------------------+--------------------+-----------+
| post                                    | group_concat(name) | count(id) |
+-----------------------------------------+--------------------+-----------+
| 老男孩驻沙河办事处外交大使              | egon               |         1 |
+-----------------------------------------+--------------------+-----------+
1 row in set (0.00 sec)


#题2:
mysql> select post,avg(salary) from employee group by post having avg(salary) > 10000;
+-----------+---------------+
| post      | avg(salary)   |
+-----------+---------------+
| operation |  16800.026000 |
| teacher   | 151842.901429 |
+-----------+---------------+
2 rows in set (0.00 sec)

#题3:
mysql> select post,avg(salary) from employee group by post having avg(salary) > 10000 and avg(salary) <20000;
+-----------+--------------+
| post      | avg(salary)  |
+-----------+--------------+
| operation | 16800.026000 |
+-----------+--------------+
1 row in set (0.00 sec)

 

大浪涛沙注明通过group
by分组之后,只好查看当前字段,假使想查看组内新闻,需求依赖聚合函数

小练习:

图片 24图片 25

1. 查询各岗位内包含的员工个数小于2的岗位名、岗位内包含员工名字、个数
2. 查询各岗位平均薪资大于10000的岗位名、平均工资
3. 查询各岗位平均薪资大于10000且小于20000的岗位名、平均工资

 

图片 26图片 27

图片 28

 

mysql> select * from emp group by post;# 报错
ERROR 1054 (42S22): Unknown column 'post' in 'group statement'



mysql>  select post from employee group by post;
+-----------------------------------------+
| post                                    |
+-----------------------------------------+
| operation                               |
| sale                                    |
| teacher                                 |
| 老男孩驻沙河办事处外交大使              |
+-----------------------------------------+
4 rows in set (0.00 sec)

小练习:
分页显示,每页5条

View Code

# 题目1
select * from employee ORDER BY age asc,hire_date desc;

# 题目2
mysql> select post,avg(salary) from employee group by post having avg(salary) > 10000 order by avg(salary) asc;
+-----------+---------------+
| post      | avg(salary)   |
+-----------+---------------+
| operation |  16800.026000 |
| teacher   | 151842.901429 |
+-----------+---------------+
2 rows in set (0.00 sec)

# 题目3
mysql> select post,avg(salary) from employee group by post having avg(salary) > 10000 order by avg(salary) desc;
+-----------+---------------+
| post      | avg(salary)   |
+-----------+---------------+
| teacher   | 151842.901429 |
| operation |  16800.026000 |
+-----------+---------------+
2 rows in set (0.00 sec)

mysql>

 

  单表查询

图片 29图片 30

 

 

 

图片 31

图片 32

图片 33

#创建表,设置字段的约束条件
create table employee(
    id int primary key auto_increment,
    name  varchar(20) not null,
    sex enum('male','female') not null default 'male', #大部分是男的
    age int(3) unsigned not null default 28,
    hire_date date not null,
    post varchar(50),
    post_comment varchar(100),
    salary  double(15,2),
    office int,#一个部门一个屋
    depart_id int
);
# 查看表结构
mysql> desc employee;
+--------------+-----------------------+------+-----+---------+----------------+
| Field                | Type                              | Null | Key     | Default | Extra          |
+--------------+-----------------------+------+-----+---------+----------------+
| id                      | int(11)                            | NO   | PRI     | NULL    | auto_increment |
| emp_name             | varchar(20)                   | NO   |             | NULL    |                |
| sex                  | enum('male','female')   | NO   |             | male    |                |
| age                  | int(3) unsigned               | NO   |             | 28         |                |
| hire_date        | date                              | NO   |             | NULL    |                |
| post                 | varchar(50)                   | YES  |         | NULL    |                |
| post_comment     | varchar(100)                  | YES  |         | NULL    |                |
| salart               | double(15,2)                  | YES  |         | NULL    |                |
| office              | int(11)                           | YES  |         | NULL    |                |
| depart_id        | int(11)                           | YES  |         | NULL    |                |
+--------------+-----------------------+------+-----+---------+----------------+
10 rows in set (0.08 sec)

#插入记录
#三个部门:教学,销售,运营
insert into employee(name ,sex,age,hire_date,post,salary,office,depart_id) values
('egon','male',18,'20170301','老男孩驻沙河办事处外交大使',7300.33,401,1), #以下是教学部
('alex','male',78,'20150302','teacher',1000000.31,401,1),
('wupeiqi','male',81,'20130305','teacher',8300,401,1),
('yuanhao','male',73,'20140701','teacher',3500,401,1),
('liwenzhou','male',28,'20121101','teacher',2100,401,1),
('jingliyang','female',18,'20110211','teacher',9000,401,1),
('jinxin','male',18,'19000301','teacher',30000,401,1),
('xiaomage','male',48,'20101111','teacher',10000,401,1),

('歪歪','female',48,'20150311','sale',3000.13,402,2),#以下是销售部门
('丫丫','female',38,'20101101','sale',2000.35,402,2),
('丁丁','female',18,'20110312','sale',1000.37,402,2),
('星星','female',18,'20160513','sale',3000.29,402,2),
('格格','female',28,'20170127','sale',4000.33,402,2),

('张野','male',28,'20160311','operation',10000.13,403,3), #以下是运营部门
('程咬金','male',18,'19970312','operation',20000,403,3),
('程咬银','female',18,'20130311','operation',19000,403,3),
('程咬铜','male',18,'20150411','operation',18000,403,3),
('程咬铁','female',18,'20140512','operation',17000,403,3)
;

证实结果:

 

 

图片 34

 

  

# 第1页数据
  mysql> select * from  employee limit 0,5;
+----+-----------+------+-----+------------+-----------------------------------------+--------------+------------+--------+-----------+
| id | name      | sex  | age | hire_date  | post                                    | post_comment | salary     | office | depart_id |
+----+-----------+------+-----+------------+-----------------------------------------+--------------+------------+--------+-----------+
|  1 | egon      | male |  18 | 2017-03-01 | 老男孩驻沙河办事处外交大使              | NULL         |    7300.33 |    401 |         1 |
|  2 | alex      | male |  78 | 2015-03-02 | teacher                                 |              | 1000000.31 |    401 |         1 |
|  3 | wupeiqi   | male |  81 | 2013-03-05 | teacher                                 | NULL         |    8300.00 |    401 |         1 |
|  4 | yuanhao   | male |  73 | 2014-07-01 | teacher                                 | NULL         |    3500.00 |    401 |         1 |
|  5 | liwenzhou | male |  28 | 2012-11-01 | teacher                                 | NULL         |    2100.00 |    401 |         1 |
+----+-----------+------+-----+------------+-----------------------------------------+--------------+------------+--------+-----------+
5 rows in set (0.00 sec)
# 第2页数据
mysql> select * from  employee limit 5,5;
+----+------------+--------+-----+------------+---------+--------------+----------+--------+-----------+
| id | name       | sex    | age | hire_date  | post    | post_comment | salary   | office | depart_id |
+----+------------+--------+-----+------------+---------+--------------+----------+--------+-----------+
|  6 | jingliyang | female |  18 | 2011-02-11 | teacher | NULL         |  9000.00 |    401 |         1 |
|  7 | jinxin     | male   |  18 | 1900-03-01 | teacher | NULL         | 30000.00 |    401 |         1 |
|  8 | xiaomage   | male   |  48 | 2010-11-11 | teacher | NULL         | 10000.00 |    401 |         1 |
|  9 | 歪歪       | female |  48 | 2015-03-11 | sale    | NULL         |  3000.13 |    402 |         2 |
| 10 | 丫丫       | female |  38 | 2010-11-01 | sale    | NULL         |  2000.35 |    402 |         2 |
+----+------------+--------+-----+------------+---------+--------------+----------+--------+-----------+
5 rows in set (0.00 sec)
# 第3页数据
mysql> select * from  employee limit 10,5;
+----+-----------+--------+-----+------------+-----------+--------------+----------+--------+-----------+
| id | name      | sex    | age | hire_date  | post      | post_comment | salary   | office | depart_id |
+----+-----------+--------+-----+------------+-----------+--------------+----------+--------+-----------+
| 11 | 丁丁      | female |  18 | 2011-03-12 | sale      | NULL         |  1000.37 |    402 |         2 |
| 12 | 星星      | female |  18 | 2016-05-13 | sale      | NULL         |  3000.29 |    402 |         2 |
| 13 | 格格      | female |  28 | 2017-01-27 | sale      | NULL         |  4000.33 |    402 |         2 |
| 14 | 张野      | male   |  28 | 2016-03-11 | operation | NULL         | 10000.13 |    403 |         3 |
| 15 | 程咬金    | male   |  18 | 1997-03-12 | operation | NULL         | 20000.00 |    403 |         3 |
+----+-----------+--------+-----+------------+-----------+--------------+----------+--------+-----------+
5 rows in set (0.00 sec)

图片 35

图片 36

where约束

 

图片 37

图片 38

4.将分组的结果开展having过滤

HAVING与WHERE不一样的地方在于

#!!!执行优先级从高到低:where > group by > having 
#1. Where 发生在分组group by之前,因而Where中可以有任意字段,但是绝对不能使用聚合函数。

#2. Having发生在分组group by之后,因而Having中可以使用分组的字段,无法直接取到其他字段,可以使用聚合函数

图片 39

图片 40

7.将结果按准则排序:order by

图片 41

 

图片 42

图片 43图片 44

图片 45

  

 

验证:

小练习答案

图片 46图片 47

一、单表查询的语法
   SELECT 字段1,字段2... FROM 表名
                  WHERE 条件
                  GROUP BY field
                  HAVING 筛选
                  ORDER BY field
                  LIMIT 限制条数
二、关键字的执行优先级(重点)

重点中的重点:关键字的执行优先级
from
where
group by
having
select
distinct
order by
limit

(5卡塔尔国limit  约束查询的记录数:

 

图片 48

图片 49图片 50

 

图片 51

6.去重

本节重大:

小演习答案

 

小演练答案:

max()求最大值
min()求最小值
avg()求平均值
sum() 求和
count() 求总个数

#强调:聚合函数聚合的是组的内容,若是没有分组,则默认一组
# 每个部门有多少个员工
select post,count(id) from employee group by post;
# 每个部门的最高薪水
select post,max(salary) from employee group by post;
# 每个部门的最低薪水
select post,min(salary) from employee group by post;
# 每个部门的平均薪水
select post,avg(salary) from employee group by post;
# 每个部门的所有薪水
select post,sum(age) from employee group by post;

(3卡塔尔聚合函数

#1 :单条件查询
mysql> select id,emp_name from employee where id > 5;
+----+------------+
| id | emp_name   |
+----+------------+
|  6 | jingliyang |
|  7 | jinxin     |
|  8 | xiaomage   |
|  9 | 歪歪       |
| 10 | 丫丫       |
| 11 | 丁丁       |
| 12 | 星星       |
| 13 | 格格       |
| 14 | 张野       |
| 15 | 程咬金     |
| 16 | 程咬银     |
| 17 | 程咬铜     |
| 18 | 程咬铁     |

#2 多条件查询
mysql> select emp_name from employee where post='teacher' and salary>10000;
+----------+
| emp_name |
+----------+
| alex         |
| jinxin     |
+----------+

#3.关键字BETWEEN AND
 SELECT name,salary FROM employee 
        WHERE salary BETWEEN 10000 AND 20000;

 SELECT name,salary FROM employee 
        WHERE salary NOT BETWEEN 10000 AND 20000;

#注意''是空字符串,不是null
 SELECT name,post_comment FROM employee WHERE post_comment='';
 ps:
        执行
        update employee set post_comment='' where id=2;
        再用上条查看,就会有结果了
#5:关键字IN集合查询
mysql>  SELECT name,salary FROM employee WHERE salary=3000 OR salary=3500 OR salary=4000 OR salary=9000 ;
+------------+---------+
| name       | salary  |
+------------+---------+
| yuanhao    | 3500.00 |
| jingliyang | 9000.00 |
+------------+---------+
2 rows in set (0.00 sec)

mysql>  SELECT name,salary FROM employee  WHERE salary IN (3000,3500,4000,9000) ;
+------------+---------+
| name       | salary  |
+------------+---------+
| yuanhao    | 3500.00 |
| jingliyang | 9000.00 |
+------------+---------+
mysql>  SELECT name,salary FROM employee  WHERE salary NOT IN (3000,3500,4000,9000) ;
+-----------+------------+
| name      | salary     |
+-----------+------------+
| egon      |    7300.33 |
| alex      | 1000000.31 |
| wupeiqi   |    8300.00 |
| liwenzhou |    2100.00 |
| jinxin    |   30000.00 |
| xiaomage  |   10000.00 |
| 歪歪      |    3000.13 |
| 丫丫      |    2000.35 |
| 丁丁      |    1000.37 |
| 星星      |    3000.29 |
| 格格      |    4000.33 |
| 张野      |   10000.13 |
| 程咬金    |   20000.00 |
| 程咬银    |   19000.00 |
| 程咬铜    |   18000.00 |
| 程咬铁    |   17000.00 |
+-----------+------------+
16 rows in set (0.00 sec)

#6:关键字LIKE模糊查询
通配符’%’
mysql> SELECT * FROM employee WHERE name LIKE 'jin%';
+----+------------+--------+-----+------------+---------+--------------+----------+--------+-----------+
| id | name       | sex    | age | hire_date  | post    | post_comment | salary   | office | depart_id |
+----+------------+--------+-----+------------+---------+--------------+----------+--------+-----------+
|  6 | jingliyang | female |  18 | 2011-02-11 | teacher | NULL         |  9000.00 |    401 |         1 |
|  7 | jinxin     | male   |  18 | 1900-03-01 | teacher | NULL         | 30000.00 |    401 |         1 |
+----+------------+--------+-----+------------+---------+--------------+----------+--------+-----------+
2 rows in set (0.00 sec)


通配符'_'

mysql> SELECT  age FROM employee WHERE name LIKE 'ale_';
+-----+
| age |
+-----+
|  78 |
+-----+
1 row in set (0.00 sec)

练习:
1. 查看岗位是teacher的员工姓名、年龄
2. 查看岗位是teacher且年龄大于30岁的员工姓名、年龄
3. 查看岗位是teacher且薪资在9000-1000范围内的员工姓名、年龄、薪资
4. 查看岗位描述不为NULL的员工信息
5. 查看岗位是teacher且薪资是10000或9000或30000的员工姓名、年龄、薪资
6. 查看岗位是teacher且薪资不是10000或9000或30000的员工姓名、年龄、薪资
7. 查看岗位是teacher且名字是jin开头的员工姓名、年薪

#对应的sql语句
select name,age from employee where post = 'teacher';
select name,age from employee where post='teacher' and age > 30; 
select name,age,salary from employee where post='teacher' and salary between 9000 and 10000;
select * from employee where post_comment is not null;
select name,age,salary from employee where post='teacher' and salary in (10000,9000,30000);
select name,age,salary from employee where post='teacher' and salary not in (10000,9000,30000);
select name,salary*12 from employee where post='teacher' and name like 'jin%';
company.employee
    员工id          id                          int                  
    姓名            name                        varchar                                                             
    性别            sex                         enum                                                                  
    年龄            age                         int
    入职日期         hire_date                   date
    岗位            post                        varchar
    职位描述         post_comment             varchar
    薪水            salary                    double
    办公室           office                     int
    部门编号         depart_id                   int
验证:
mysql> select * from employee where salary>1000000;
+----+------+------+-----+------------+---------+--------------+------------+--------+-----------+
| id | name | sex  | age | hire_date  | post    | post_comment | salary     | office | depart_id |
+----+------+------+-----+------------+---------+--------------+------------+--------+-----------+
|  2 | alex | male |  78 | 2015-03-02 | teacher |              | 1000000.31 |    401 |         1 |
+----+------+------+-----+------------+---------+--------------+------------+--------+-----------+
1 row in set (0.00 sec)

mysql> select * from employee having salary>1000000;
ERROR 1463 (42000): Non-grouping field 'salary' is used in HAVING clause

# 必须使用group by才能使用group_concat()函数,将所有的name值连接
mysql> select post,group_concat(name) from emp group by post having salary > 10000; ##错误,分组后无法直接取到salary字段
ERROR 1054 (42S22): Unknown column 'post' in 'field list'

图片 52图片 53

mysql> select * from employee group by post;
+----+--------+--------+-----+------------+-----------------------------------------+--------------+------------+--------+-----------+
| id | name   | sex    | age | hire_date  | post                                    | post_comment | salary     | office | depart_id |
+----+--------+--------+-----+------------+-----------------------------------------+--------------+------------+--------+-----------+
| 14 | 张野   | male   |  28 | 2016-03-11 | operation                               | NULL         |   10000.13 |    403 |         3 |
|  9 | 歪歪   | female |  48 | 2015-03-11 | sale                                    | NULL         |    3000.13 |    402 |         2 |
|  2 | alex   | male   |  78 | 2015-03-02 | teacher                                 |              | 1000000.31 |    401 |         1 |
|  1 | egon   | male   |  18 | 2017-03-01 | 老男孩驻沙河办事处外交大使              | NULL         |    7300.33 |    401 |         1 |
+----+--------+--------+-----+------------+-----------------------------------------+--------------+------------+--------+-----------+
4 rows in set (0.00 sec)

#由于没有设置ONLY_FULL_GROUP_BY,于是也可以有结果,默认都是组内的第一条记录,但其实这是没有意义的
如果想分组,则必须要设置全局的sql的模式为ONLY_FULL_GROUP_BY
mysql> set global sql_mode='ONLY_FULL_GROUP_BY';
Query OK, 0 rows affected (0.00 sec)

#查看MySQL 5.7默认的sql_mode如下:
mysql> select @@global.sql_mode;
+--------------------+
| @@global.sql_mode  |
+--------------------+
| ONLY_FULL_GROUP_BY |
+--------------------+
1 row in set (0.00 sec)

mysql> exit;#设置成功后,一定要退出,然后重新登录方可生效
Bye

 

图片 54

表达多列排序

2.拿着where内定的羁绊标准,去文件/表中抽出一条条记录

View Code

(5卡塔 尔(英语:State of Qatar)order by 查询排序

小练习:

 

小练习

5.执行select

当推行以下sql语句的时候,是以post字段查询了组中的第一条数据,没有别的意义,因为我们前几天想获悉当前组的多条记下。

#1、首先明确一点:分组发生在where之后,即分组是基于where之后得到的记录而进行的

#2、分组指的是:将所有记录按照某个相同字段进行归类,比如针对员工信息表的职位分组,或者按照性别进行分组等

#3、为何要分组呢?
    取每个部门的最高工资
    取每个部门的员工数
    取男人数和女人数

小窍门:‘每’这个字后面的字段,就是我们分组的依据

#4、大前提:
    可以按照任意字段分组,但是分组完毕后,比如group by post,只能查看post字段,如果想查看组内信息,需要借助于聚合函数

 

where子句中可以使用
1.比较运算符:>、<、>=、<=、<>、!=
2.between 80 and 100 :值在80到100之间
3.in(80,90,100)值是10或20或30
4.like 'xiaomagepattern': pattern可以是%或者_。%小时任意多字符,_表示一个字符
5.逻辑运算符:在多个条件直接可以使用逻辑运算符 and or not

(2卡塔 尔(阿拉伯语:قطر‎group by 分组查询

图片 55

1.找到表:from

 

示例:
    SELECT * FROM employee ORDER BY salary DESC 
     LIMIT 3;                    #默认初始位置为0 

    SELECT * FROM employee ORDER BY salary DESC
        LIMIT 0,5; #从第0开始,即先查询出第一条,然后包含这一条在内往后查5条

    SELECT * FROM employee ORDER BY salary DESC
        LIMIT 5,5; #从第5开始,即先查询出第6条,然后包含这一条在内往后查5条

 

图片 56

1. 查询所有员工信息,先按照age升序排序,如果age相同则按照hire_date降序排序
2. 查询各岗位平均薪资大于10000的岗位名、平均工资,结果按平均薪资升序排列
3. 查询各岗位平均薪资大于10000的岗位名、平均工资,结果按平均薪资降序排列 
1. 查询岗位名以及岗位包含的所有员工名字
2. 查询岗位名以及各岗位内包含的员工个数
3. 查询公司内男员工和女员工的个数
4. 查询岗位名以及各岗位的平均薪资
5. 查询岗位名以及各岗位的最高薪资
6. 查询岗位名以及各岗位的最低薪资
7. 查询男员工与男员工的平均薪资,女员工与女员工的平均薪资

 

(1)where 约束 

图片 57

(4)HAVING过滤

3.将抽取的一条条记下举办分组group by,若无group by,则完全作为意气风发组

始建公司工作者表,表的字段和数据类型

 

创制职员和工人表,并插入记录

留下评论

网站地图xml地图