带你走进MySQL数据库(MySQL入门详细总结一)

文章目录

  • 1.MySQL

  • 2.MySQL的使用

  • 3.MySQL概述

  • 4.导入数据

  • 5.sql语句

    • 1.查询

    • 2.排序(升序,降序)

    • 3.分组函数

    • 4.group by和having


1.MySQL

MySQL开源免费,MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。。MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。

1.免安装版MySQL的安装
2.安装版MySQL的安装

2.MySQL的使用

MySQL的登录:
1.在doc窗口下输入:mysql -uroot -p加密码。(也可以敲回车后输入密码,这样密码不可见)。
2.MySQL服务默认端口号:3306。
3.修改root密码:


4.卸载MySQL

  • 双击原来的安装包,然后点击remove。卸载。

  • 手动删除Program File中的MySQL目录。

  • 手动删除 ProgramDate目录(一般为隐藏)中的MySQL目录。

3.MySQL概述

1.sql,DB,DBMS分别是什么?他们之间是什么关系?

  • DB:DataBase(数据库,数据库实际上在硬盘上以文件的形式存在)

  • 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。
    2.什么是表?

  • 表:table

  • 表是数据库的基本组成单元,所有的数据都以表格的形式组织,目的是可读性强。

  • 一个表包括行和列:
    行:被称为数据/记录(data)
    列:被称为字段。(column)

  • 每个字段应该包括哪些属性?
    字段名,数据类型,相关的约束。
    如:学号(int) 姓名(varchar)

  • RDBMS 即关系数据库管理系统(Relational Database Management System)的特点:
    1.数据以表格的形式出现
    2.每行为各种记录名称
    3.每列为记录名称所对应的数据域
    4.许多的行和列组成一张表单
    5.若干的表单组成database

    RDBMS 术语


    在我们开始学习MySQL 数据库前,让我们先了解下RDBMS的一些术语:

  • 数据库: 数据库是一些关联表的集合。

  • 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。

  • 列: 一列(数据元素) 包含了相同类型的数据, 例如邮政编码的数据。

  • 行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。

  • 冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。

  • 主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。

  • 外键:外键用于关联两个表。

  • 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。

  • 索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。

  • 参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。
    3.MySQL主要学习SQL语句,SQL语句怎么分类呢?

  • DQL(数据查询语言):查询语句,凡是select语句都是DQL.

  • DML(数据操作语言):insert delete update,对表当中的数据进行增删改。

  • DDL(数据定义语言):create drop(删除) alte(修改),对表结构的增删改。

  • TCL(事物控制语言):commit提交事务,rollback回滚事务。

  • DCL(数据控制语言):qrant授权,revoke撤销权限。

4.导入数据

第一步:登录mysql数据库管理系统。(mysql -uroot -p)
第二步:查看有哪些数据库
show databases;命令。(不是SQL语句,属于MySQL命令)
±-------------------+
| Database |
±-------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
±-------------------+
第三步:创建属于我们自己的数据库
create database xingkong;(这个是mysql命令)
第四步:使用xingkong数据库
use xingkong;(mysql命令)
第五步:查看当前使用的数据库有哪些表格(mysql命令)
show tables;(查看exam数据库中的表:show tables from exam;)
第六步:初始化数据
source 路径和文件名称;(这里自定义了一个数据库,以下出现的代码都是基于此)
5.xingkong.sql,这个文件以sql结尾,这样的文件被称为“sql脚本”。
什么是sql脚本?

  • 当一个文件的扩展名为.sql,并且该文件中编写了大量的sql语句,我们称这样的为sql脚本。

  • 注意:直接使用source命令可以执行sql脚本。

  • sql脚本中的数据量太大的时候,无法打开,请使用source命令完成初始化。
    6.删除数据库:
    drop database xingkong;
    7.查看表结构:
    desc dept;部门表(自定义表)
    desc emp;员工表(自定义表)
    desc salgrade;工资等级表(自定义表)
    8.表中的数据:
    select * from emp;
    select *from dept;
    9. 查看当前用的数据库:
    select database();
    select version();版本
    10.常用命令

  • \c 命令 结束一条语句。

  • exit 命令,退出mysql;
    11.查看创建表的语句:
    show create table emp;

5.sql语句

1.查询

1.简单的查询语句(DQL)

  • 语法格式:select 字段名1,字段名2,字段名3,…from 表名;

  • 提示:任何一个sql语句以“;”结尾。

  • sql语句不区分大小写。(但对表中存储的数据就不一样,mysql语法严格)
    *** 查询的时候字段可以参与数学运算:**
    select ename,sal*12 as (新名字) from emp;(ename,sal 为字段,emp为表)名字如果为中文需要用单引号括起来。(as关键字可以省略)

  • 字符串使用单引号括起来。

  • 查询所有字段?
    select * from emp;(emp为自定义的表),效率较低。
    2.条件查询

  • 语法格式:selcet 字段,字段,… from 表名 where 条件;条件为字符串需要单引号括起来。
    执行顺序为:from,然后where,最后select;
    不等于:<>符合。或!=。

  • select ename ,sal from emp where sal between 11 and 500;
    between …and 使用的时候必须左小右大,也可以使用在字符串方面。数字【左闭右闭】。

    select ename from emp where ename between ‘a’ and ‘c’;首字母【左闭右开】。

  • 在数据库中NULL不是一个值,而是代表什么也没有,不能用等号衡量,只能使用 is null 或者 is not null;(0和null表示的东西不一样)

  • 找出工作岗位是xxx和xxxx的员工:
    用or:select ename,job from emp where job = ‘xxx’ or job=‘xxxx’;可以加小括号来搞定优先级。
    where job in (‘xxx’,‘xxxx’);不是一个区间,直接是一个值。
    not in 表示不在。

  • 模糊查询like?
    找出名字当中含有嘉的?(模糊查询需掌握两个特殊的符号,一个是%,一个是_)
    %代表任意多个字符,_代表任意一个字符。
    如:*查找含A的(ename为自定义字段,emp为自定义表)
    select ename from emp where ename like ‘%O%’;
    *查找名字第二个字母是A的?
    select ename from emp where ename like ‘_A%’;
    *找出名字有下划线的?(用下划线转义)
    selecct ename from emp where ename like ‘%_%’;
    *找出名字中最后一个是T的?
    select ename from emp where like ‘%T’;

2.排序(升序,降序)

1.按照工资升序,找出员工名和薪资?(默认升序)
select
ename,sal
from
emp
order by
sal;
注意:默认为升序,指定升序:asc,指定降序desc
select ename, sal from emp order by sal desc;
2.按照工资的降序排列,当工资相同的时候,按照名字的升序排序。
select ename,sal from emp order by sal desc,ename asc;
多个排序,靠前面的字段更加重要,去主导作用,后面的字段可能都用不上。
3.找出工作岗位是xxxx的员工,并且要求按照薪资的降序排列。
select
ename,job,sal
from
emp
where
job =‘xxxx’
order by
sal desc;
order by是最后执行的。先from,后where,再select,最后order by.

3.分组函数

另称:多行处理函数。

  • 一.那什么是单行处理函数呢?
    输入一行,输出一行。

  • 计算每个员工的年薪?
    select ename ,(8000+NULL)*12 as yearsal from emp;(数据库中数学表达式中有NULL,结果一定是NULL)

  • ifnull()空处理函数怎么用?
    ifnull(可能为null的数据,被当作什么处理):属于单行处理函数。
    select ename ,ifnull(comn,0)as comm from emp;
    二.分组函数(多行处理函数)
    1.count 计数
    2.sum 求和
    3.avg 平均值
    4.max 最大值
    5.min 最小值

    一共就这五个。
    注意:所有的分组函数都是对“某一组”数据操作。

  • 找出工资总和?
    select sum(sal) from emp;

  • 找出最高工资?
    select max(sal) from emp;

  • 找出平均工资?
    select avg(sal) from emp;

  • 找出总人数?
    select count(*) from emp;
    select count(ename) from emp;

  • 输入多行,最终输出为一行。

  • 分组函数自动忽略NULL。(不会统计)
    所以:select sum(sal) from emp where sal is not nul;是没有必要的。
    select count (comm)from emp;(comm自定义字段,含义:津贴)

  • 找出工资高于平均工资的员工?

  • select ename,sal from emp where sal>avg(sal);//这种写法是错误的。
    原因:**SQL语句当中有一个语法规则,分组函数不可以直接使用在where字句当中。**因为 group by是在where之后执行的。所以说还没有分组,不能用分组函数,没有group by 语句也自成一组,即有缺省的group by。
    因此:解决问题的方法为:
    第一步:找出平均工资
    select avg(sal) from emp;
    第二步:找出高于平均工资的员工。
    select ename,sal,from emp where sal >2073.xx
    综合起来:select ename ,sal from emp where sal>(select avg(sal) from emp);
    ±------±--------+
    | ename | sal |
    ±------±--------+
    | JONES | 2975.00 |
    | BLAKE | 2850.00 |
    | CLARK | 2450.00 |
    | SCOTT | 3000.00 |
    | KING | 5000.00 |
    | FORD | 3000.00 |
    ±------±--------+

  • count()和count(具体的某个字段),他们有什么区别。
    count(
    ):不是统计某个字段中数据的个数,而是统计总记录条数。(和某个字段无关)count(comm):表示统计comm字段中不为NULL的数据总数量。

4.group by和having

group by:按照某个字段或者某些字段进行分组。
having :having 是对分组之后的数据进行再次过滤。
两者必须联合使用。
案例:找出某个岗位的最高薪资?
1.先进行分组。

  • select max(sal) from emp group by job;
    注意:分组函数一般和group by联合使用,这也是为什么他被称为分组函数的原因。

  • 任何一个分组函数count sum avg max min)都是在group by 语句执行结束之后才会执行的。当一条sql语句没有group by 的话,整张表就会自成一组。

  • 当一条语句中有group by 时,select后面只能跟分组函数,和分组字段。
    案例:找出每个部门,不同工作岗位的最高薪资?(两个字段联合分组)
    select
    deptno,job,max(sal)
    from
    emp
    group by
    deptno,job;

  • 找出每个部门的最高薪资,要求显示薪资大于2500的数据。

第一步:找出每个部门的最高薪资
select max(sal) ,deptno from emp group by deptno;
第二部:找出薪资大于2900
select max(sal) ,deptno from emp group by deptno having max(sal)>2900;//效率较低
第二种方法:
select max(sal) deptno from emp where sal>2900 group by deptno;//效率较高
案例:找出每个部门的平均工资,要求显示薪资大于2000的数据。
第一步:找出每个部门的平均工资。
select deptno ,avg(sal) from emp group by deptno;
第二步:要求显示薪资大于2000的数据。
select deptno,avg(sal) from emp group by deptno having avg(sal) >2000;

  • select语句总结

  • 关于查询结果集的去重?
    在select后加distinct关键字去除重复记录。
    distinct关键字只能出现在所有字段的最前面。(不然不均衡啊)如果有多个字段,联合起来去重。
    如:select distinct deptno ,job from emp;
    结果:
    ±-------±----------+
    | deptno | job |
    ±-------±----------+
    | 20 | CLERK |
    | 30 | SALESMAN |
    | 20 | MANAGER |
    | 30 | MANAGER |
    | 10 | MANAGER |
    | 20 | ANALYST |
    | 10 | PRESIDENT |
    | 30 | CLERK |
    | 10 | CLERK |
    ±-------±----------+

  • 统计岗位的数量?
    select count(distinct job) from emp;


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352

推荐阅读更多精彩内容

  • 5.多表查询 多表查询 目的:从多张表获取数据 前提:进行连接的多张表中有共同的列 等连接 通过两个表具有相同意义...
    乔震阅读 1,223评论 0 0
  • ORACLE自学教程 --create tabletestone ( id number, --序号usernam...
    落叶寂聊阅读 1,074评论 0 0
  • mysql数据库中 :database : 文件夹table : 数据表(数据文件) 进入mysqlmysql -...
    赋闲阅读 561评论 0 0
  • 引出 •请思考如下问题? –查询所有员工的每个月工资总和,平均工资? –查询工资最高和最低的工资是多少? –查询公...
    C_cole阅读 7,286评论 0 3
  • 一、上堂回顾 1.概念​ 数据库管理系统,数据库,表​ SQL的分类:DDL、DML、DQL、DCL2.数据库的使...
    WenErone阅读 417评论 0 0