Mysql之简单查询select与条件查询,排序以及分组查询,mysql单行函数和分组函数_mysql哪个几个函数可以直接用as后当赛选条件

15.2、怎么降序?

15.3、可以两个字段排序吗?或者说按照多个字段排序?

15.4、了解:根据字段的位置也可以排序

16、综合一点的案例:

17、数据处理函数

17.1、数据处理函数又被称为单行处理函数

17.2、单行处理函数常见的有哪些?

18、分组函数(多行处理函数)

19、分组查询(非常重要:五颗星*****)

19.1、什么是分组查询?

19.2、将之前的关键字全部组合在一起,来看一下他们的执行顺序?

19.3、找出每个工作岗位的工资和?

19.4、找出每个部门的最高薪资

19.5、找出“每个部门,不同工作岗位”的最高薪资?

19.6、使用having可以对分完组之后的数据进一步过滤。

19.7、where没办法的????

20、大总结(单表的查询学完了)

1、前言

大家好,最近在复习sql,所以记录了笔记日后方便复习回顾,大家如果发现有错误的点,还请多多指点!

本文所需sql脚本自取:

链接:https://pan.baidu.com/s/1hSIvSU8PDDt471AOTNIZrA 
提取码:8888

什么是数据库?什么是数据库管理系统?什么是SQL?他们之间的关系是什么?

数据库:

英文单词DataBase,简称DB。按照一定格式存储数据的一些文件的组合。

顾名思义:存储数据的仓库,实际上就是一堆文件。这些文件中存储了

具有特定格式的数据。

数据库管理系统:

DataBaseManagement,简称DBMS。

数据库管理系统是专门用来管理数据库中数据的,数据库管理系统可以

对数据库当中的数据进行增删改查。

常见的数据库管理系统:MySQL、Oracle、MS SqlServer、DB2、sybase等…

SQL:结构化查询语言

程序员需要学习SQL语句,程序员通过编写SQL语句,然后DBMS负责执行SQL

语句,最终来完成数据库中数据的增删改查操作。

SQL是一套标准,程序员主要学习的就是SQL语句,这个SQL在mysql中可以使用,

同时在Oracle中也可以使用,在DB2中也可以使用。

三者之间的关系?

DBMS–执行–> SQL --操作–> DB

先安装数据库管理系统MySQL,然后学习SQL语句怎么写,编写SQL语句之后,DBMS

对SQL语句进行执行,最终来完成数据库的数据管理。

2、mysql的基本特点

需要注意的事项?

端口号:

端口号port是任何一个软件/应用都会有的,端口号是应用的唯一代表。

端口号通常和IP地址在一块,IP地址用来定位计算机的,端口号port是用来定位计算机上某个服务的某个应用的!

在同一台计算机上,端口号不能重复。具有唯一性。

mysql数据库启动的时候,这个服务占有的默认端口号是3306

这是大家都知道的事儿。记住。

字符编码方式?

设置mysql数据库的字符编码方式为 UTF8

一定要注意:先选中第3个单选按钮,然后再选择utf8字符集。

服务名称?

默认是:MySQL

不用改。

选择配置环境变量path:

如果没有选择怎么办?你可以手动配置

path=其它路径;C:\Program Files (x86)\MySQL\MySQL Server 5.5\bin

mysql超级管理员用户名不能改,一定是:root

你需要设置mysql数据库超级管理员的密码。

设置密码的同时,可以激活root账户远程访问。

激活:表示root账号可以在外地登录。

不激活:表示root账号只能在本机上使用。

3、MySQL数据库的完美卸载!

第一步:双击安装包进行卸载删除。

第二步:删除目录:

把C:\ProgramData下面的MySQL目录干掉。

把C:\Program Files (x86)下面的MySQL目录干掉。

这样就卸载结束了!

4、看一下计算机上的服务,找一找MySQL的服务在哪里?

计算机–>右键–>管理–>服务和应用程序–>服务–>找mysql服务

MySQL的服务,默认是“启动”的状态,只有启动了mysql才能用。

默认情况下是“自动”启动,自动启动表示下一次重启操作系统的时候自动启动该服务。

5、启动和关闭mysql服务

语法:

net stop 服务名称;

net start 服务名称;

其它服务的启停都可以采用以上的命令。

6、登录mysql

本地登录(显示编写密码的形式):

C:\Users\Administrator>mysql -uroot -p123456

本地登录(隐藏密码的形式):

C:\Users\Administrator>mysql -uroot -p

Enter password: ******

7、mysql常用命令:

退出mysql :exit

1查看mysql中有哪些数据库?

show databases;

注意:以分号结尾,分号是英文的分号。

mysql> show databases;

mysql默认自带了4个数据库。

2怎么选择使用某个数据库呢?

mysql> use test;

Database changed

表示正在使用一个名字叫做test的数据库。

3怎么创建数据库呢?

mysql> create database bjpowernode;

Query OK, 1 row affected (0.00 sec)

mysql> show databases;

4查看某个数据库下有哪些表?

mysql> show tables;

注意:以上的命令不区分大小写,都行。

5查看mysql数据库的版本号:

mysql> select version();

6查看当前使用的是哪个数据库?

mysql> select database();

mysql> show

-> databases

-> ;

7注意:mysql是不见“;”不执行,“;”表示结束!

mysql> show

->

-> \c

mysql>

\c用来终止一条命令的输入。

8、数据库当中最基本的单元是表:table

什么是表table?为什么用表来存储数据呢?

数据库当中是以表格的形式表示数据的。

因为表比较直观。

任何一张表都有行和列:

行(row):被称为数据/记录。

列(column):被称为字段。

姓名字段、性别字段、年龄字段。

了解一下:

每一个字段都有:字段名、数据类型、约束等属性。

字段名可以理解,是一个普通的名字,见名知意就行。

数据类型:字符串,数字,日期等,后期讲。

约束:约束也有很多,其中一个叫做唯一性约束,

这种约束添加之后,该字段中的数据不能重复。

9、关于SQL语句的分类?

SQL语句有很多,最好进行分门别类,这样更容易记忆。

分为:

DQL:

数据查询语言(凡是带有select关键字的都是查询语句)

select…

DML:

数据操作语言(凡是对表当中的数据进行增删改的都是DML)

insert delete update

insert 增

delete 删

update 改

这个主要是操作表中的数据data。

DDL:

数据定义语言

凡是带有create、drop、alter的都是DDL。

DDL主要操作的是表的结构。不是表中的数据。

create:新建,等同于增

drop:删除

alter:修改

这个增删改和DML不同,这个主要是对表结构进行操作。

TCL:

是事务控制语言

包括:

事务提交:commit;

事务回滚:rollback;

DCL:

是数据控制语言。

例如:授权grant、撤销权限revoke…

10、导入一下提前准备好的数据:

bjpowernode.sql 这个文件中是我提前准备的数据库表。

怎么将sql文件中的数据导入呢?

mysql> source D:\course\03-MySQL\document\bjpowernod

根据你自己的路径来!

注意:路径中不要有中文!!!!

11、关于导入的这几张表?

dept是部门表

emp是员工表

salgrade 是工资等级表

怎么查看表中的数据呢?

select * from 表名; //统一执行这个SQL语句。

mysql> select * from emp; // 从emp表查询所有数据。

mysql> select * from dept; mysql> select * from salgrade;

12、只看结构的命令

desc 表名

13、简单查询

13.1、查询一个字段?

select 字段名 from 表名;

其中要注意:

select和from都是关键字。

字段名和表名都是标识符。

强调:

对于SQL语句来说,是通用的,

所有的SQL语句以“;”结尾。

另外SQL语句不区分大小写,都行。

查询部门名字?

mysql> select dname from dept;

mysql> SELECT DNAME FROM DEPT;

13.2、查询两个字段,或者多个字段怎么办?

使用逗号隔开“,”

查询部门编号和部门名?

select deptno,dname from dept;

13.3、查询所有字段怎么办?

第一种方式:可以把每个字段都写上

select a,b,c,d,e,f… from tablename;

第二种方式:可以使用*

select * from dept;

这种方式的缺点:

1、效率低

2、可读性差。

在实际开发中不建议,可以自己玩没问题。

你可以在DOS命令窗口中想快速的看一看全表数据可以采用这种方式。

13.4、给查询的列起别名?

mysql> select deptno,dname as deptname from dept;

使用as关键字起别名。

注意:只是将显示的查询结果列名显示为deptname,原表列名还是叫:dname

记住:select语句是永远都不会进行修改操作的。(因为只负责查询)

as关键字可以省略吗?可以的

mysql> select deptno,dname deptname from dept;

假设起别名的时候,别名里面有空格,怎么办?

mysql> select deptno,dname dept name from dept;

DBMS看到这样的语句,进行SQL语句的编译,不符合语法,编译报错。

怎么解决?

select deptno,dname ‘dept name’ from dept; //加单引号

select deptno,dname “dept name” from dept; //加双引号

注意:在所有的数据库当中,字符串统一使用单引号括起来,

单引号是标准,双引号在oracle数据库中用不了。但是在mysql中可以使用。

再次强调:数据库中的字符串都是采用单引号括起来。这是标准的。

双引号不标准。

13.5、计算员工年薪?sal * 12

mysql> select ename,sal from emp;

mysql> select ename,sal*12 from emp; // 结论:字段可以使用数学表达式!

mysql> select ename,sal*12 as yearsal from emp; //起别名

mysql> select ename,sal*12 as ‘年薪’ from emp; //别名是中文,用单引号括起来

结论:字段可以使用数学表达式!

14、条件查询where

14.1、什么是条件查询?

不是将表中所有数据都查出来。是查询出来符合条件的。

语法格式:

select字段1,字段2,字段3… from 表名 where条件;

14.2、都有哪些条件?

= 等于

查询薪资等于800的员工姓名和编号?

select empno,ename from emp where sal = 800;

查询SMITH的编号和薪资?

select empno,sal from emp where ename = ‘SMITH’; //字符串使用单引号

<>或!= 不等于

查询薪资不等于800的员工姓名和编号?

select empno,ename from emp where sal != 800;

select empno,ename from emp where sal <> 800; // 小于号和大于号组成的不等号

< 小于

查询薪资小于2000的员工姓名和编号?

mysql> select empno,ename,sal from emp where sal < 2000;

查询薪资小于等于3000的员工姓名和编号?

select empno,ename,sal from emp where sal

大于

查询薪资大于3000的员工姓名和编号?

select empno,ename,sal from emp where sal > 3000;

= 大于等于

查询薪资大于等于3000的员工姓名和编号?

select empno,ename,sal from emp where sal >= 3000;

between … and …. 两个值之间, 等同于 >= and

查询薪资在2450和3000之间的员工信息?包括2450和3000

第一种方式:>= and select empno,ename,sal from emp where sal >= 2450 and sal

第二种方式:between … and …

select empno,ename,sal from emp where sal between 2450 and 3000;

注意:

使用between and的时候,必须遵循左小右大。

between and是闭区间,包括两端的值。

is null 为 null(is not null 不为空)

查询哪些员工的津贴/补助为null?

mysql> select empno,ename,sal,comm from emp where comm = null;

mysql> select empno,ename,sal,comm from emp where comm is null;

注意:

在数据库当中null不能使用等号进行衡量,需要使用is null。

因为数据库中的null代表什么也没有,它不是一个值,所以不能使用等号衡量。

查询哪些员工的津贴/补助不为null?

select empno,ename,sal,comm from emp where comm is not null;

and 并

且查询工作岗位是MANAGER并且工资大于2500的员工信息?

select empno,ename,job,sal from emp where job = ‘MANAGER’ and sal > 2500;

or 或者

查询工作岗位是MANAGER和SALESMAN的员工?

select empno,ename,job from emp where job = ‘MANAGER’ or job = ‘SALESMAN’;

and和or同时出现的话,有优先级问题吗?

查询工资大于2500,并且部门编号为10或20部门的员工?

select * from emp where sal > 2500 and deptno = 10 or deptno = 20;

分析以上语句的问题?

and优先级比or高。

以上语句会先执行and,然后执行or。

以上这个语句表示什么含义?

找出工资大于2500并且部门编号为10的员工,或者20部门所有员工找出来。

select *from emp where sal > 2500 and (deptno = 10 or deptno = 20);

and和or同时出现,and优先级较高。如果想让or先执行,需要加“小括号”

以后在开发中,如果不确定优先级,就加小括号就行了。

in 包含,相当于多个 or (not in 不在这个范围中)

查询工作岗位是MANAGER和SALESMAN的员工?

select empno,ename,job from emp where job = ‘MANAGER’ or job = ‘SALESMAN’;

select empno,ename,job from emp where job in(‘MANAGER’, ‘SALESMAN’);

注意:in不是一个区间。in后面跟的是具体的值。

查询薪资是800和5000的员工信息?

select ename,sal from emp where sal = 800 or sal = 5000;

select ename,sal from emp where sal in(800, 5000); //这个不是表示800到5000都找出来。

select ename,sal from emp where sal in(800, 5000, 3000);

// not in 表示不在这几个值当中的数据。

select ename,sal from emp where sal not in(800, 5000, 3000);

not 可以取非,主要用在 is 或 in 中

is null

is not null

in

not in

like

称为模糊查询,支持%或下划线匹配

%匹配任意多个字符

下划线:任意一个字符。

(%是一个特殊的符号,_ 也是一个特殊符号)

找出名字中含有O的?

mysql> select ename from emp where ename like ‘%O%’;

找出名字以T结尾的?

select ename from emp where ename like ‘%T’;

找出名字以K开始的?

select ename from emp where ename like ‘K%’;

找出第二个字每是A的?

select ename from emp where ename like ‘_A%’;

找出第三个字母是R的?

select ename from emp where ename like ‘__R%’;

找出名字中有“_”的?

select name from t_student where name like ‘%_%’; //这样不行,都找出来了!

mysql> select name from t_student where name like ‘%\_%’; // \转义字符,转成普通下划线。

15、order by排序

15.1、查询所有员工薪资,排序?

select ename,sal from emp order by sal; // 默认是升序!!!

15.2、怎么降序?

指定降序:

select ename,salfrom emp order by sal desc;

指定升序?

select ename,sal from emp order by sal asc;

15.3、可以两个字段排序吗?或者说按照多个字段排序?

查询员工名字和薪资,要求按照薪资升序,如果薪资一样的话,再按照名字升序排列。

select ename,sal from emp order by sal asc, ename asc; // sal在前,起主导,只有sal相等的时候,才会考虑启用ename排序。

15.4、了解:根据字段的位置也可以排序

select ename,sal from emp order by 2; // 2表示第二列。第二列是sal

按照查询结果的第2列sal排序。

了解一下,不建议在开发中这样写,因为不健壮。

因为列的顺序很容易发生改变,列顺序修改之后,2就废了。

16、综合一点的案例:

找出工资在1250到3000之间的员工信息,要求按照薪资降序排列。

select ename,sal from emp where sal between 1250 and 3000 order by sal desc;

关键字顺序不能变:

select

from

where

order by

以上语句的执行顺序必须掌握:

第一步:from

第二步:where

最后

如果觉得本文对你有帮助的话,不妨给我点个赞,关注一下吧!

‘%\_%’; // \转义字符,转成普通下划线。

15、order by排序

15.1、查询所有员工薪资,排序?

select ename,sal from emp order by sal; // 默认是升序!!!

15.2、怎么降序?

指定降序:

select ename,salfrom emp order by sal desc;

指定升序?

select ename,sal from emp order by sal asc;

15.3、可以两个字段排序吗?或者说按照多个字段排序?

查询员工名字和薪资,要求按照薪资升序,如果薪资一样的话,再按照名字升序排列。

select ename,sal from emp order by sal asc, ename asc; // sal在前,起主导,只有sal相等的时候,才会考虑启用ename排序。

15.4、了解:根据字段的位置也可以排序

select ename,sal from emp order by 2; // 2表示第二列。第二列是sal

按照查询结果的第2列sal排序。

了解一下,不建议在开发中这样写,因为不健壮。

因为列的顺序很容易发生改变,列顺序修改之后,2就废了。

16、综合一点的案例:

找出工资在1250到3000之间的员工信息,要求按照薪资降序排列。

select ename,sal from emp where sal between 1250 and 3000 order by sal desc;

关键字顺序不能变:

select

from

where

order by

以上语句的执行顺序必须掌握:

第一步:from

第二步:where

最后

如果觉得本文对你有帮助的话,不妨给我点个赞,关注一下吧!

[外链图片转存中…(img-qv6AcI4v-1714423772785)]

[外链图片转存中…(img-SNxXjd2O-1714423772786)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 29
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值