MySQL
1. sql、DB、DBMS分别是什么,他们之间的关系
- DB:
- DataBase(数据库,数据库实际上在硬盘上以文件的形式存在)
- DBMS:
- DataBase Management System(数据库管理系统,常见的有:MySQL Oracle DB2 Sybase SqlServer…)
- SQL:
- 结构化查询语言,是一门标准通用的语言。标准的sql适合于所有的数据库产品
- SQL属于高级语言。只要能看懂英语单词的,写出来的sql语句,可以读懂什么意思
- SQL语句在执行的时候,实际上内部也会先进行编译,然后再执行sql(sql语句的编译由DBMS完成)
- DBMS负责执行sql语句,通过执行sql语句来操作DB当中的数据
- DBMS -(执行)-> SQL -(操作)-> DB
2、什么是表
- 表:table是数据库的基本组成单元,所有的数据都以表格的形式组织,目的是可读性强。
- 一个表包括行和列:
- 行:被称为数据/记录(data)
- 列:被称为字段(column)
- 每一个字段应该包括哪些属性
- 字段名、数据类型、相关的约束
3、学习MySQL主要还是学习通用的SQL语句,那么SQL语句包括增删改查,SQL语句怎么分类呢?
- DQL(数据查询语言): 查询语句,凡是select语句都是DQL
- DML(数据操作语言):insert delete update,对表当中的数据进行增删改
- DDL(数据定义语言):create drop alter,对表结构的增删改
- TCL(事务控制语言):commit提交事务,rollback回滚事务(TCL中的T是Transaction)
- DCL(数据控制语言): grant授权、revoke撤销权限等
4、导入数据
- 第一步:登录mysql数据库管理系统
- mysql -uroot -pxxx;(这里的xxx是设置的密码)
- 第二步:查看有哪些数据库
- show databases; (这个不是SQL语句,属于MySQL的命令)
- 第三步:创建属于我们自己的数据库
- create database xxx; (这个不是SQL语句,属于MySQL的命令)
- 第四步:使用数据
- use bjpowernode; (这个不是SQL语句,属于MySQL的命令)
- 第五步:查看当前使用的数据库中有哪些表
- show tables; (这个不是SQL语句,属于MySQL的命令)
- 第六步:初始化数据
- source xxx.sql;(这里的xxx是以.sql结尾的文件)
5、xxx.sql,这个文件以sql结尾,这样的文件被称为“sql脚本”
- 当一个文件的扩展名是.sql,并且该文件中编写了大量的sql语句,我们称这样的文件为sql脚本。
- 注意:直接使用source命令可以执行sql脚本
- sql脚本中的数据量太大的时候,无法打开,请使用source命令完成初始化。
6、删除数据库:drop database xxx;
- 此操作极其危险,不要轻易操作
7、查看表结构
- desc 表名;
8、表中的数据
- select * from 表名;
9、常用命令
- select database(); 查看当前使用的是哪个数据库
- select version(); 查看mysql的版本号
- \c 命令,结束一条语句
- exit 命令,退出mysql
10、查看创建表的语句
- show create table 表名;
11、简单的查询语句(DQL)
- 语法格式:
- select
- 字段名1,字段名2,字段名3,…
- from
- 表名;
- select
- 注意:
- 1、任何一条sql语句以“;”结尾
- 2、sql语句不区分大小写
- 3、字段可以参与数学运算
- 给查询结果的列重命名
- select 字段名 as 新字段名 from 表名;(新字段名可以是中文但是如果是中文的话必须以这样的形式写 ‘新字段名’ )
- as关键字可以省略
- 注意:标准sql语句中要求字符串使用单引号括起来。虽然mysql支持双引号,尽量别用
- 查询所有字段
- 语法:select * from 表名; 实际开发中不建议使用 * 因为 * 代表全部,效率低
12、条件查询
- 语法格式:
- select
- 字段1,字段2,字段3…
- from
- 表名
- where
- 条件;
- 执行顺序from—>where—>select
- 区间查询
- select 字段1,字段2… from 表名 where 条件 between 条件小边界 and 条件大边界;
- between and在使用的时候必须左小右大
- between and除了可以使用在数字方面之外,还可以使用在字符串方面
- 使用between and时如果是数字那么左右全部是闭区间,如果是字符串,则是左闭右开原则
- 在数据库当中NULL不是一个值,代表什么也没有,为空
- 空不是一个值,不能用等号衡量。
- 必须使用 is null或者is not null
- select 字段1,字段2,字段3… from 表名 where 查询条件 is null;
- 注意:当运算符的优先级不确定的时候加小括号
- 注意:and和or是和、或的意思,但有时,和要的是or,或要的是and(in等同于or)
- select 字段1,字段2,字段3… from 表名 where 字段 = ‘查询条件’ or 字段 = ‘查询条件’;
- select 字段1,字段2,字段3… from 表名 where 字段 in(‘查询条件’, ‘查询条件’);
- in后面的值不是区间,是具体的值
- 模糊查询like
- 在模糊查询当中,必须掌握两个特殊的符号,一个是%,一个是 _
- %代表任意多个字符, _ 代表任意1个字符
- select 字段1,字段2… from 表名 where 字段 like ‘%条件%’;
- 意为:找出(xxx表)中(xxx字段)含有(xxx条件)的(xxx信息)
- select 字段1,字段2… from 表名 where 字段 like ’ _ A%’;
- 意为:找出(xxx表)中(xxx字段)中(第二个字符为a或A)的(xxx信息)
- select 字段1,字段2… from 表名 where 字段 like ‘%T’;
-
- 意为:找出(xxx表)中(xxx字段)中(最后一个字符为t或T)的(xxx信息)
- select
13、排序(升序、降序)
- 语法:
- select
- 字段1,字段2…
- from
- 表名
- order by
- 字段
- asc(desc);
- 注意:默认是升序。怎么指定升序或者降序呢?asc表示升序,desc表示降序
- 注意:越靠前的字段越能起到主导作用。只有当前面的字段无法完成排序的时候,才会启用后面的字段
- 执行顺序from—>where—>select—>order by
- select
14、分组函数
- count 计数
- sum 求和
- avg 平均值
- max 最大值
- min 最小值
- 记住:所有的分组函数都是对“某一组”数据进行操作的
- 语法:
- select count( * ) from 表名;(求总数)
- select sum( * ) from 表名;(求总和)
- 分组函数一共5个
- 分组函数还有另一个名字:多行处理函数
- 多行处理函数的特点:输入多行,最终输出的结果是1行
- 分组函数也能组合起来用
- 分组函数自动忽略NULL
- SQL语句当中有一个语法规则,分组函数不可直接使用在where子句当中
- selec
- …
- from
- …
- where
- …
- group by
- …
- having
- …
- order by
- …
- 执行顺序from—>where—>group bu—>having—>select—>order by
- count( * )和count(具体的某个字段),他们有什么区别
- count( * ):不是统计某个字段中数据的个数,而是统计总记录条数(和某个字段无关)
- count(xxx): 表示统计xxx字段中不为NULL的数据总数量
- selec
15、单行处理函数
- 输入一行,输出一行
- 重点:所有数据库都是这样规定的,只要有NULL参与的运算结果一定是NULL
- 使用ifnull函数
- select 字段,(字段+ifnull(字段,0)) * 12 as 新字段名 from 表名;
- ifnull() 空处理函数
- ifnull(可能为NULL的数据,被当做什么处理) : 属于单行处理函数
- 使用ifnull函数
16、group by 和 having
- group by : 按照某个字段或者某些字段进行分组
- having : having是对分组之后的数据进行再次过滤
- 注意:分组函数一般都会和group by联合使用,这也是为什么它被称为分组函数的原因
- 并且任何一个分组函数(count sum avg max min)都是在group by语句执行结束之后才会执行
- 当一条sql语句没有group by的话,整张表的数据会自成一组
- 记住一个规则:当一条语句中有group by的话,select后面只能跟分组函数和参与分组的字段
17、总结一个完整的DQL语句怎么写
- select
- …
- from
- …
- where
- …
- group by
- …
- having
- …
- order by
- …
- 执行顺序:from—>where—>group by—>having—>select—>order by