数据库的入门学习

  • 一、数据库概述
    • 1.什么是数据库?
    • 2.什么是数据库管理系统?
    • 3.什么是sql?
    • 4.三者之间的关系
  • 二、安装MySQL
    • 1.端口号
    • 2.用户名
  • 三、登录MySQL(这里特指用cmd窗口来登录)
  • 四、MySQL常用命令
  • 五、表的理解
    • 1.什么是表?
    • 2.为什么使用表?
  • 六、SQL的分类(记)
    • 1.DQL(重要)
    • 2.DML
    • 3.DDL
    • 4.TCL
    • 5.DCL
  • 七、导入sql数据
  • 八、查看表的结构
  • 九、SQL语句的注意事项
  • 十、简单查询
    • 1.查询一个字段
    • 2.查询两个及两个以上的字段
    • 3.查询所有字段
    • 4.给查询字段起别名
  • 十一、列参与数学运算
  • 十二、条件查询
  • 十三、排序
    • 1.指定降序
    • 2.指定升序
    • 3.按照多个字段排序
    • 4.根据字段的位置排序
  • 十四、单行处理函数
    • 1.相关概念
    • 2..常见的单行处理函数
  • 十五、多行处理函数(分组函数)
  • 十六、分组查询(很重要)
    • 关键字优先级
    • having的使用
  • 十七、单表查询总结

一、数据库概述

1.什么是数据库?

数据库是按照一定格式存储数据的一些文件的组合。即存储数据的仓库(实际上就是一堆文件,这些文件中存储了具有特定格式的数据)

2.什么是数据库管理系统?

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

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

3.什么是sql?

SQL就是结构化查询语句。
程序员需要学习并编写SQL语句,数据库管理系统负责执行SQL语句,最终来完成数据库中数据的增删查改操作。

SQL语句是一种通用的、标准的语言(在哪里用都行)

4.三者之间的关系

数据库管理系统-----执行---->SQL----操作---->数据库

二、安装MySQL

具体的安装步骤省略,下面介绍一些注意事项:

1.端口号

端口号port是任何一个软件/应用都会有的,端口号是应用的唯一标识。
端口号通常和IP地址配套:IP地址是用来定位计算机的,端口号是用来定位计算机上某个服务或某个应用的
例如:华南农业大学在广州市天河区五山街道__号,这个就是IP地址
华南农业大学第四教学楼,这个就是端口号
在同一台计算机上,端口号不能重复,具有唯一性。

MySQL数据库启动时,这个服务占有的端口号是3306

2.用户名

MySQL超级管理员用户名不能改,一定是root
在设置密码(密码一般设置为123456或admin123)的同时,可以激活root账户远程访问。
若激活:表示root账号可以外地登录
不激活:表示root账号只能在本机上使用

三、登录MySQL(这里特指用cmd窗口来登录)

输入命令行 mysql -uroot -p(这里写密码)
如出现mysql>,则登录成功

若想在登录时隐藏密码,则输入命令行 mysql -uroot -p(这里不用写密码)
回车之后就会显示出一个“Enter password”,在这里输入密码即可

四、MySQL常用命令

(1)退出:exit
(2)查看mysql中有哪些数据库:show databases;(注意分号结尾,这里的分号是英文的分号)

MySQL默认自带了4个数据库
(3)使用某个数据库:use 数据库名;(显示的Database changed表示正在使用一个名字为__的数据库)
(4)创建数据库:create datadbase 数据库名;
(5)查看某个数据库下的表:show tables;
(6)查看数据库的版本号:select version();
(7)查看当前使用的是哪个数据库:select database();


表的命令行和数据库的命令行很像
以上命令不区分大小写
不见分号不执行,分号表示结束
\c用来终止一条命令的输入
oracle的语法比mysql的语法严格

五、表的理解

数据库中最基本的单元是表:table(即以表格的形式表示数据)

1.什么是表?

任何一张表都有行和列:
行:被称为数据/记录
列:被称为字段
每一个字段都有字段名、数据类型、约束等属性
数据类型:字符串、数字、日期等
约束:约束有很多种,其中有唯一约束,该约束添加之后,该字段中数据不能重复

2.为什么使用表?

表表示的数据比较直观

六、SQL的分类(记)

1.DQL(重要)

数据查询语言(凡是带有select关键字的都是DQL
select * from 表名;

2.DML

数据操作语言(凡是对表当中的数据进行增删改的都是DML
insert 增
delete 删
update 改
这个增删改和DML不同,这个主要是对表结构进行操作

3.DDL

数据定义语言(凡是对表的结构进行操作的都是DDL
create 新建,等同于增
drop 删除
alter 修改

4.TCL

事务控制语言
commit 事务提交
rollback 事务回滚

5.DCL

数据控制语言
grant 授权
revoke 撤销权限

七、导入sql数据

输入命令行 source sql文件的路径
注意:路径中不要有中文

八、查看表的结构

命令行 desc 表名;

以下是SQL语句的正式学习

九、SQL语句的注意事项

  1. 对于SQL语句来说,是通用的
  2. 所有的SQL语句一分号结尾
  3. SQL语句不区分大小写
  4. select语句永远都不会进行修改操作的(只负责查询
  5. 语句的执行顺序必须按照这样的顺序 ①from ②where ③select ④order by(排序总是在最后面)

十、简单查询

1.查询一个字段

select 字段名 from 表名;
其中要注意的是:select、from都是关键字
字段名和表名都是标识符

2.查询两个及两个以上的字段

point:用逗号隔开
select 字段名,字段名,字段名 from 表名;

3.查询所有字段

(1)可以把所有字段都写上 select 字段名,字段名,字段名 … from 表名;
(2)可以使用*(就像java导入包那样) select * from 表名;

用(2)方法的缺点: 在实际开发中不建议
可读性差
效率低
想快速看一下全表数据可以采用这种方式

4.给查询字段起别名

point:使用as关键字起别名(as可以省略但是不能加逗号 )
只是将显示的查询结果列名显示为别名,原列表名还是之前的名字
select 字段名 as 别名 from 表名;
注意:如果别名中有空格或是中文,则用单引号(双引号也可以)括起来 否则会报错,因为没办法识别
在所有的数据库中,字符串统一使用单引号括起来,单引号是标准的,双引号在oracle数据库中用不了,但是在MySQL中可以使用

十一、列参与数学运算

可以计算的前提为字段为int类型

十二、条件查询

条件查询不是将表中所有数据都查出来,而是查询出来符合条件的
select … from… where 条件;

条件:

  1. = 等于

  2. <>或!= 不等于

  3. < 小于

  4. <=小于等于

  5. 大于>

  6. 大于等于>=

  7. …between … and … 两个值之间 (…>=…and…<=…) 必须遵循 左小右大,between and包括两端的值

  8. …is null 为空(…is not null 不为空)(在数据库中null不能使用等号衡量,需要使用is null,因为数据库中的null表示什么都没有,它不是一个值,所以不能使用等号进行衡量)

  9. … and… 并且

  10. …or… 或者 and和or同时出现有优先级问题:and优先级比or高 解决这个有优先级问题,用小括号

  11. in 包含(相当于多个or)(in不是一个区间,in后面跟着的是一个具体的值) (not in 不在这个范围)

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

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

  14. %匹配任意个字符
    若要查找下划线,则需对下划线进行转义,即’%_%’

  15. 下划线 一个下划线只匹配任意一个字符


  16. %和下划线都是特殊的符号

十三、排序

1.指定降序

select … from … order by desc;

2.指定升序

select … from … order by asc;

3.按照多个字段排序

select … from … order by a1 asc,a2 asc;
a1在前,起主导作用,只有a1相等时,才会考虑启用a2

4.根据字段的位置排序

select … , …from … order by 2;
2表示第二列
按照查询结果的第2列排序
不建议在开发中这样写,因为不健壮。因为列的顺序很容易改变,列顺序改变后,就无法正确生效

十四、单行处理函数

1.相关概念

数据处理函数又称单行处理函数
特点:一个输入对应一个输出
和单行处理函数相对的是:多行处理函数(特点:多个输入对应一个输出)

2…常见的单行处理函数

函数 功能
lower 转换小写
upper 转换大写
substr 取子串
contact 进行字符串的拼接
length 取长度
trim 去空格
str_to_date 将字符串转换成日期
date_format 格式化日期
format 设置千分位
round 四舍五入
rand() 生成随机数
ifnull 可以将null转换成一个具体的数

lower:select lower(?) from …
upper:转换大写 同上

substr 取子串(substr(被截取的字符串,起始下标,截取长度)) select substr(…)from …
注意:起始下标从1开始,没有0
找出a第一个字母是A的b?
第一种方法可以是模糊查询:select a from b where a like ‘A%’;
第二种处理方式是substr函数:select a from b where substr(a,1,1)=‘A’ ;

round:四舍五入 首先补充一些知识: select ‘字面量/字面值’
from…(会将那一列都变成单引号中的东西)(如果不使用单引号,那么就会把该名字当成字段名,会导致由于找不到二报错) 不过select
1000 as num from …;//1000也会便当成一个字面量/字面值
结论:select后面可以跟某个表的字段名(即变量名),也可以跟字面量/字面值(即数据) round(?,0)表示四舍五入到个位
round(?,-1)表示四舍五入到十位 round(?,1)表示四舍五入到小数点后一位

case…when…then…when…then…else…end (不修改数据库,只是将查询结果做改变)
例如:当员工的工作岗位是MANAGER的时候,工资上调10%,当工作岗位是SALESMAN的时候,工资上调50%,其他正常 select
enames,job,(case job when ‘MANAGER’ then sal1.1 when ‘SALESMAN’ then
sal
1.5 else sal end) as newsal from emp;

rand()生成随机数 这个跟java的取随机数很像,产生的随机数是0-1的范围,想要别的范围通过数学方式处理就好了

ifnull可以将null转换成一个具体的数 在所有数据库中,只要有null参与的数学运算,最终结果就是null
为了避免这个现象,需要使用ifnull函数: 如果“数据”为null的时候,把这个数据结构当作哪个值 select ifnull(a,0)
from b;(即:当a为null时,把a当作0)

十五、多行处理函数(分组函数)

多行处理函数的特点:输入多行,最终输出一行
5个:

函数 作用
count 计数
sum 求和
avg 平均值
max 最大值
min 最小值

注意:
(1)分组函数在使用的时候必须先进分组,然后才能用。如果你没有对数据进行分组,整张表默认为一组。
(2)分组函数自动忽略null(从计算结果不为null以及统计个数时没有null可知),我们不需要提前对null进行处理
(3)分组函数中count(*)和count(具体字段)的区别:
前者表示统计表当中的总行数(只要有一行,就count++)因为每一行记录不可能都为null,一行数据有一列不为null,则这行数据就是有效的
后者表示统计该字段下所有不为null的元素的总数
(4)分组函数不能够直接使用在while子句中
例如:select ename,sal from emp where sal >min(sal);
这样子输出来是有问题的
(5)所有的分组函数可以组合起来一起用
例如:select sum(sal),min(sal),max(sal),avg(sal),count() from emp;

例如:计算平均工资(有14个工资)
select avg(sal) from emp; 14个工资全部加起来,然后除以14

计算员工数量 select count(ename) from emp; …

十六、分组查询(很重要)

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

将之前的关键字全部组合在一起,试看执行顺序
select

from

where

group by

order by

关键字优先级

以上关键字的顺序不能颠倒,需要记忆

(1)from
(2)where
(3)group by(分组)
(4)select
(5)order by

为什么分组函数不能直接使用在where后面? 其实也是为什么select ename,sal from emp where sal

min(sal);报错 因为分组函数在使用的时候必须先分组才能使用 where执行的时候,还没有分组,所以where后面不能出现分组函数 但是select sum(sal) from emp;可以执行
是因为select在group by之后执行,那么就是以及分好组了(只不过是把整张表分成一组)

例如:找出每个工作岗位的工资和
实现思路:按照工作岗位分组,然后对工资求和 select job,sum(sal) from emp group by job;
该语句的执行顺序是 先从emp表中查询数据 根据iob字段进行分组 然后对每一组的数据进行sum(sal)

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

例如:找出 每个部门,不同工作岗位 的最高薪资 技巧:两个字段联合成一个字段看(两个字段联合分组) select
deptno,job,max(sal) from emp group by deptno,job;

having的使用

使用having可以对分完组之后的数据进一步过滤
having不能单独使用,having不能代替where,having必须和group by联合使用

例如:找出每个部门最高薪资,要求显示最高薪资大于3000的?
实现:
首先找出每个部门的最高薪资(按照部门编号分组,求每一组的最大值)
select deptno,max(sal) feom emp grooup by deptno;

第二,要求显示最高薪资大于3000
select deptno,max(sal) from emp group by deptno having max(sal)>3000;

但以上的sql语句执行效率比较低(若某些部门又可能没有大于3000的所以就会使得按部门分组是在做无用功),所以可以先将大于3000的都找出来,然后再分组
select deptno,max(sal) from emp where sal>3000 group by deptno;

优化策略:having和where,优先选择where,where实在完成不了,再选择having where无法使用的例子:
找出每个部门平均薪资,要求显示平均薪资高于2500的。
第一步:找出每个部门平均薪资
select deptno,avg(sal) from emp group by deptno;
第二步:要求显示平均薪资大于2500
select deptno,avg(sal) from emp where avg(sal)>2500 group by deptno; 显然这样是不行的因为还没分组不能使用分组函数
改正:select deptno,avg(sal) from emp group by deptno havingavg(sal)>2500;

十七、单表查询总结

从某张表中查询数据,先经过where条件筛选出有价值的数据。
对这些有价值的数据进行分组,分组之后可以使用having继续筛选。
select查询出来,最后排序输出。

练习:找出每个岗位的平均薪资,要求显示平均薪资大于1500的,除MANAGER岗位之外,要求按照平均薪资降序排
select job,avg(sal) as avgsal from emp where job <> ‘MANAGER’ group by job having avg(sal)>1500 order by avgsal desc;

数据库入门级学习(1)相关推荐

  1. 数据库入门级学习(4)

    接数据库入门级学习(3) 文章目录 一.约束(非常重要) 1.什么是约束 2.约束包括哪些? 插入一个小知识点(用于批量执行) 2.1非空约束:not null 2.2唯一性约束:unique 2.3 ...

  2. 01 | Java入门级学习指南

    01 | Java入门级学习指南 前言 第一部分:JAVA 设计和编程基础 1.1Java 语言基础 1.2Java 面向对象 1.3Java 核心类库 1.4Java SE实战项目 第二部分:数据库 ...

  3. 数据科学 怎样进行大数据的入门级学习?

    转:数据科学 怎样进行大数据的入门级学习? 数据科学并没有一个独立的学科体系,统计学,机器学习,数据挖掘,数据库,分布式计算,云计算,信息可视化等技术或方法来对付数据. 但从狭义上来看,我认为数据科学 ...

  4. B站《一天学会 MySQL 数据库》学习笔记

    B站<一天学会 MySQL 数据库>学习笔记 老司机带我飞 职场十字诀:思考.计划.行动.总结.反思 ​关注他 4 人赞同了该文章 登录和退出MySQL服务器 # 登录MySQL $ my ...

  5. 数据库MYSQL学习系列三

    数据库MYSQL学习系列三 三.MYSQL事务与存储引擎 3.1-数据库事务 什么是事务 一系列有序的数据库操作: o要么全部成功 o要么全部回退到操作前的状态 o中间状态对其他连接不可见 事务的 ...

  6. (转载)机器学习知识点(二十九)LDA入门级学习笔记

    入门级学习笔记 1.1文本建模相关 统计文本建模的目的其实很简单:就是估算一组参数,这组参数使得整个语料库出现的概率最大.这是很简单的极大似然的思想了,就是认为观测到的样本的概率是最大的. 建模的目标 ...

  7. 数据库MYSQL学习系列一

    数据库MYSQL学习系列一 一.MYSQL数据库基础 1.1-认识MYSQL 什么是数据库 计算机处理和存储的一切信息都是数据 计算机系统中一种用于存取数据的程序 一种: 计算机系统中有很多种能够存取 ...

  8. Python精简入门级学习(二)

    ### Python 精简入门级学习之数据类型 -变量 *变量是什么? +可以将变量比作为一个存放东西的盒子,里面存放的东西取决于你想放如什么,当你放如苹果的时候它装的就是苹果,你往里面放的是梨子它装 ...

  9. Python 精简入门级学习(一)

    ### Python 精简入门级学习 一.简介 -Python的发展历程 -Python的优点 -Python的缺点 -Python应用领域 -Python的安装 -第一个python(注意代码的标点 ...

  10. 关注丨数据库在线学习实训平台即将发布,长江鲲鹏-墨天轮联合实验室取得重大突破...

    日前,墨天轮数据库社区平台正式全面搬迁到华为鲲鹏云,于5月27日成立的长江鲲鹏-墨天轮联合实验室当前已取得第一步重大成果. 为加速技术成果转化落地,长江鲲鹏与墨天轮携手共建联合实验室,并达成两步走战略 ...

最新文章

  1. 用户输入与while循环
  2. LaTeX参考文献中遇到错误:Missing $ inserted. [\printbibliography[heading=bibintoc]]
  3. IIS识别Json文件
  4. UILable和UITextField的详细讲解
  5. Direct2D教程(十二)图层
  6. SAP License:SAP MM中的几个概念
  7. execve系统调用_Linux操作系统中的namespace是个什么鬼
  8. Hibernate检索方式简单总结
  9. c语言函数库入门,C语言库函数
  10. libtorrent java_关于libtorrent库的安装
  11. 移动手机号神州行去香港购买境外流量包方法和注意事项
  12. 互联网时代架构师的职责与思考
  13. KVM虚拟化,云平台
  14. 怎么抓取计算机窗口,又学会了一种黑别人电脑的方法——如何在登录界面获取shell...
  15. 笔记12(36-40)域名重定向,用户认证,nginx访问日志,日志切割
  16. 食品如何寄国际快递到美国
  17. 测试从Mathon插件发表
  18. go语言基础-gozero
  19. 蛋壳公寓信息/信息网爬取/小猪短租/豆瓣/拉钩/人民邮电报/百度电视剧/加载更多-获取字符串中间任意内容
  20. JavaScript奇淫技巧(一)

热门文章

  1. Flash制作空战游戏
  2. java实现贪吃蛇小游戏(源码+注释)
  3. 用Notepad2替换Windows自带记事本
  4. Vissim安装及配置详解
  5. python机器学习实战_Python机器学习实战案例
  6. qt txt快速转excel
  7. 谭浩强C语言(第三版)习题9.10
  8. 韩顺平 零基础30天学会Java 学习笔记
  9. 《硅谷》大结局 :关上 AI 的潘多拉魔盒
  10. Fortan中读取数据到text文件