MySQL笔记

数据库表、查询、排序、数据处理函数

1 数据库

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

数据库:

顾名思义:存储数据的仓库,实际上就是一堆文件,这些文件中存储了具有特定格式的数据;
Database,简称DB,按照一定格式存储数据的一些文件的组合。

数据库管理系统:

DataBaseManagement,简称DBMS
数据库管理系统是专门用来管理数据库中数据的,数据库管理系统可以对数据库当中的数据进行增删改查。

常见的数据库管理系统:

MySQL、Oracle、MS SqlServer、DB2等

2 SQL

结构化查询语言

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

DBMS—>执行—>SQL—>操作—>DB

先安装数据库管理系统MySQL,然后学习SQL语句怎么写,编写SQL语句之后,DBMS对SQL语句进行执行,最终来完成数据库的数据管理。

2.1 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**....

2.2 sql语句书写规范

  • 关键字大写,保持统一。
  • 保持良好的换行,便于理清楚逻辑。
  • and,or,逗号等放在行首,这样的好处是增加删除条件时比较方便,否则删除最后一个条件时还要去上一行末删除关联词。
  • 不用保证符号对齐, where条件field对齐即可。
  • 尽量查询的field前加上表的简称,提高代码可读性,一目了然。

3 MySQL常用命令

  • 退出mysql
exit;
  • 查看mysql中有哪些数据库
show databases;
  • 选择使用某个数据库
use db_name;
  • 创建数据库
create database db_name;
  • 查看数据库下存在哪些表
show tables;
  • 查看mysql数据库的版本号
select version();
  • 查看当前使用的是哪个数据库
select database();
  • 导入数据文件xxx.sql
source D:\xxx\xxx.sql  //路径中不能有中文吖!!!
  • 查看表结构
desc dept;  // desc:describe缩写

4 数据库表

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

数据库中以表格的形式表示数据,因为表比较直观

任何一张表都有行和列

    行(row):被称为数据/记录。列(column):被称为字段。(姓名字段、性别字段、年龄字段。)
    每一个字段都有:字段名、数据类型、约束等属性。字段名可以理解,是一个普通的名字,见名知意就行。数据类型:字符串,数字,日期等,约束:约束也有很多,其中一个叫做唯一性约束,这种约束添加之后,该字段中的数据不能重复。

5 查询:select

5.1 简单查询

5.1.1 查询一个字段

// 注意:select和from都是关键字。字段名和表名都是标识符。
1)对于SQL语句来说,是通用的,所有的SQL语句以“;”结尾。
2)另外SQL语句不区分大小写,都行。
3)查询两个字段,或者多个字段使用逗号隔开“,”
select 字段名 from 表名;

5.1.2 查询所有字段

法一:将每个字段都写上

select x,xx,xx,xx,xxx... from tablename;

法二:可以用 *

select * from tablename;

缺点:

效率低,可读性差,实际开发中不建议,可以自己玩玩

5.1.3 使用as关键字给查询的列起别名

select sex, name as unique_name from tablename;

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

as关键字可以省略

select sex, name unique_name from tablename;
// 别名中有空格,加单引号
select sex, sage 'student age' from tablename;

注意:在所有的数据库当中,字符串统一使用单引号括起来,单引号是标准,双引号在oracle数据库中用不了。但是在mysql中可以使用。

5.2 条件查询

条件查询:查询出来符合条件的数据。

查询语法格式:select字段1,字段2,字段3....from 表名where条件;
  • = 等于
查询薪资等于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;+-------+--------+---------+| empno | ename  | sal     |+-------+--------+---------+|  7369 | SMITH  |  800.00 ||  7499 | ALLEN  | 1600.00 ||  7521 | WARD   | 1250.00 |+-------+--------+---------+
  • <= 小于等于
查询薪资小于等于3000的员工姓名和编号?select empno,ename,sal from emp where sal <= 3000;
  • 大于
查询薪资大于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 <= (and是并且的意思。)select empno,ename,sal from emp where sal >= 2450 and sal <= 3000;+-------+-------+---------+| empno | ename | sal     |+-------+-------+---------+|  7566 | JONES | 2975.00 ||  7698 | BLAKE | 2850.00 ||  7782 | CLARK | 2450.00 ||  7788 | SCOTT | 3000.00 ||  7902 | FORD  | 3000.00 |+-------+-------+---------+
第二种方式: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不能使用等号进行衡量。需要使用is null因为数据库中的null代表什么也没有,它不是一个值,所以不能使用等号衡量。

  • and 并且

  • or 或者

and和or同时出现的话,有优先级问题吗?
and和or同时出现,and优先级较高。如果想让or先执行,需要加“小括号”.以后在开发中,如果不确定优先级,就加小括号就行了。
  • in 包含
相当于多个 or (not in 不在这个范围中)
  • not 取非
主要与 is 或 in 连用
  • like 模糊查询

支持%或下划线匹配,%匹配任意多个字符,下划线:任意一个字符。

#(%是一个特殊的符号,_ 也是一个特殊符号)找出名字以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%';

5.3 分组查询

5.3.1 什么是分组查询?

在实际的应用中,可能有这样的需求,需要先进行分组,然后对每一组的数据进行操作,这个时候我们需要使用分组查询。

语法格式:select...from...group by...注意:
select ename,job,sum(sal) from emp group by job;+-------+-----------+----------+| ename | job       | sum(sal) |+-------+-----------+----------+| SCOTT | ANALYST   |  6000.00 || SMITH | CLERK     |  4150.00 || JONES | MANAGER   |  8275.00 || KING  | PRESIDENT |  5000.00 || ALLEN | SALESMAN  |  5600.00 |+-------+-----------+----------+
以上语句在mysql中可以执行,但select后面添加ename字段没有意义。
以上语句在oracle中执行报错。
oracle的语法比mysql的语法严格。(mysql的语法相对来说松散一些!)

重点结论:在一条select语句当中,如果有group by语句的话,select后面只能跟:参加分组的字段,以及分组函数。其它的一律不能跟。

找出“每个部门,不同工作岗位”的最高薪资?
select deptno, job, max(sal)
fromemp
group bydeptno, job;
技巧:两个字段联合成1个字段看。(两个字段联合分组)

5.3.2 having

使用having可以对分完组之后的数据进一步过滤
having不能单独使用,having不能代替where,having必须和group by联合使用
where和having,优先选择where,where实在完成不了了,再选择having

5.3.3 执行顺序

将之前的关键字全部组合在一起,来看一下他们的执行顺序?select...from...where...group by...having...order by...
以上关键字的顺序不能颠倒,需要记忆。
执行顺序是什么?1. from2. where3. group by4. having5. select6. order by

6 排序:order by

语法格式:select ename,salfromemporder bysal; // 默认是升序!!
指定降序: desc
指定升序: asc以两个字段排序吗?或者说按照多个字段排序?
查询员工名字和薪资,要求按照薪资升序,如果薪资一样的话,再按照名字升序排列。
select ename,sal
fromemp
order bysal asc, ename asc; // sal在前,起主导,只有sal相等的时候,才会考虑启用ename排序。

7 数据处理函数

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

7.1 单行处理函数

单行处理函数的特点:一个输入对应一个输出。
单行处理函数常见:

lower 转换小写

mysql> select lower(ename) as ename from emp;

upper 转换大写

mysql> select upper(name) as name from t_student;

substr 取子串

substr(被截取的字符串, 起始下标,截取的长度)

mysql> select substr(ename, 1, 1) as ename from emp;

concat函数进行字符串的拼接

mysql> select concat(empno,ename) from emp;

length 取长度

mysql> select length(ename) enamelength from emp;

trim 去空格

mysql>    select * from emp where ename = trim('   KING');

str_to_date 将字符串转换成日期

date_format 格式化日期

format 设置千分位

case…when…then…when…then…else…end

当员工的工作岗位是MANAGER的时候,工资上调10%,当工作岗位是SALESMAN的时候,工资上调50%,其它正常。    (注意:不修改数据库,只是将查询结果显示为工资上调)
select ename,job, sal as oldsal,(case job when 'MANAGER' then sal*1.1 when 'SALESMAN' then sal*1.5 else sal end) as newsal
from emp;

round 四舍五入

mysql> select round(1236.567, 0) as result from emp; //保留整数位。
mysql> select round(1236.567, 1) as result from emp; //保留1个小数
mysql> select round(1236.567, 2) as result from emp; //保留2个小数
mysql> select round(1236.567, -1) as result from emp; // 保留到十位。

rand() 生成随机数

mysql> select round(rand()*100,0) from emp; // 100以内的随机数

ifnull 可以将 null 转换成一个具体值

Ifnull是空处理函数。专门处理空的。在所有数据库当中,只要有NULL参与的数据运算,最终结果就是NULL
注意:
NULL只要参与运算,最终结果一定是NULL。为了避免这个现象,需要使用ifnull函数
ifnull函数用法:ifnull(数据,xxx)   如果数据为NULL的时候,把这个数据当作xxx

7.2 分组函数(多行处理函数)

多行处理函数特点:多个输入,对应1个输出。

count    # 计数
sum        # 求和
avg        # 平均值
max        # 最大值
min        # 最小值注意:1. 分组函数在使用的时候必须先进行分组,然后才能用。如果你没有对数据进行分组,整张表默认为一组。2. 分组函数自动忽略NULL,你不需要提前对NULL进行处理。3. 分组函数中count(*)和count(具体字段)有什么区别?count(具体字段):表示统计该字段下所有不为NULL的元素的总数。count(*):统计表当中的总行数。(只要有一行数据count则++)因为每一行记录不可能都为NULL,一行数据中有一列不为NULL,则这行数据就是有效的。4. 分组函数不能够直接使用在where子句中。5. 所有的分组函数可以组合起来一起用。

7.3 distinct 去重

把查询结果去除重复记录 distinct

注意:原表数据不会被修改,只是查询结果去重。

// distinct只能出现在所有字段的最前方。
mysql> select distinct job from emp;// distinct出现在job,deptno两个字段之前,表示两个字段联合起来去重。
mysql> select distinct job,deptno from emp;

7.4 窗口函数

什么是窗口函数

排序函数与窗口函数

 row_number() over(partition by 列名 order by 列名 desc)rank() over(partition by 列名 order by 列名 desc)dense_rank() over(partition by 列名 order by 列名 desc)

注意区别:

  • row_number():不考虑数据的重复性,按照顺序一次打上标号,如:1,2,3,4
  • rank():是跳跃排序,如1,2,2,4,会跳过3
  • dense_rank()是连续排序,如:1,2,2,3序号是连续的

7.5 左右连接

 A inner join B : 取交集A left join B : 取A全部,B没有对应的值为nullA right join B: 取B全部,A没有对应的值为nullA full outer join B: 取并集,彼此没有对应的值为null

数据库MySQL(一) 常用查询语句相关推荐

  1. SQL(基于MySQL)—— 常用查询语句

    一.查询数值型数据:   SELECT * FROM tb_name WHERE sum > 100;   查询谓词:>,=,<,<>,!=,!>,!<,=& ...

  2. Mongodb常用查询语句_笔记

    目录 前言 一.Mongodb简介 二.Mongodb常用查询语句 总结 前言 工作中会使用到Mongodb数据库,这是一个非关系型数据库,所以它的一些查询语句跟sql会不太一样,一时半会不能马上写出 ...

  3. SQL常用查询语句汇总

    SQL查询关键字为SELECT,常用查询语句代码及结果如下(本文使用MySQL数据库管理系统): -- 1检索单个列 SELECT prod_name FROM Products;-- 2检索多个列 ...

  4. Oracle 10g数据库基础之基本查询语句-中-函数

    Oracle 10g数据库基础之基本查询语句-中-函数 --资料参考:张烈 张建中<数据库管理员培训讲义> 函数: 使用函数的目的是为了操作数据 将输入的变量处理,返回一个结果. 变量可以 ...

  5. MySQL的基本查询语句

    MySQL的基本查询语句 一.数据准备 CREATE TABLE `customers` (`cust_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '顾客I ...

  6. MongoDB 查询语法与常用查询语句总结

    MongoDB 常用查询语句总结 先来一波查询语句语法的基本解释: 列子: db.mycol.find({"likes": {$gt:10}, $or: [{"by&qu ...

  7. oracle只查询0点数据,Oracle 10g数据库基础之基本查询语句-中-函数

    Oracle 10g数据库基础之基本查询语句-中-函数 --资料参考:张烈 张建中<数据库管理员培训讲义> 函数: 使用函数的目的是为了操作数据 将输入的变量处理,返回一个结果. 变量可以 ...

  8. oracle 10g 连接语句,Oracle 10g数据库基础之基本查询语句-下-连接子查询

    实验18:表的连接查询 该实验的目的是掌握基本的联合查询. 表的连接 我们要从多张表中要得到信息,就得以一定的条件将表连接在一 实验18:表的连接查询 该实验的目的是掌握基本的联合查询. 表的连接 我 ...

  9. mysql联表查询语句示例

    mysql联表查询语句示例 ps:本人亲测,阿里云2核4G5M的服务器性价比很高,新用户一块多一天,老用户三块多一天,最高可以买三年,感兴趣的可以戳一下:阿里云折扣服务器 示例: "sele ...

最新文章

  1. python 时间sleep() 的方法
  2. 1106C程序语法树
  3. ios APP开发简单实例
  4. lte核心网由哪些设备组成_一整套无线智能家居,是由哪些设备组成?这份清单告诉你答案...
  5. Repeater 绑定下拉列表
  6. C++ STL : 模拟实现STL中的容器适配器stack和queue
  7. 你根本不懂rebase-使用rebase打造可读的git graph
  8. python装饰器 廖雪峰_python装饰器的一个妙用
  9. Nginx常用配置和使用详解梳理
  10. mac安装旺旺启动台找不到_如何正确安装和卸载Mac软件?
  11. Leetcode——最长公共子序列 / 最长公共子串
  12. 团队现场编程实战(抽奖系统)
  13. 数据挖掘中所需的概率论与数理统计知识
  14. SRILM文档分析之Prob.h
  15. [NOI2005] 聪聪与可可
  16. react 生命挂钩_秋田+ React挂钩=耸人听闻的国家管理食谱
  17. linux设置管理员身份运行,在Deepin V20系统下添加以管理员身份打开选项的两种方法...
  18. autojs自动滑屏脚本_创造与魔法脚本软件autojs上下滑动
  19. 威力导演(PowerDirector Ultimate) 18中文版
  20. Verilog HDL语法提纲

热门文章

  1. 模拟电影胶片、梦幻系列、喜怒无常的电影胶片、Lightroom预设合集【61】
  2. ultimate grid_Ultimate Kubernetes资源规划指南
  3. MobaXterm 上传文件报错 error #3
  4. Comparator接口实现排序
  5. [Android] 单独编译生成boot.img时mkbootfs: No such file or directory解决方法
  6. flutter 获取当前时分
  7. Codefi基于区块链的开发框架
  8. 做产品开发之前,如何准确的找到意向用户群体的痛点
  9. 计算机主板上的SATA接口是串行接口,sata接口怎么接 小编为您系统整理方法步骤【图文】...
  10. 用友软件T3数据库表结构表名、数据字典