MySQL 基础学习:
目录
MySQL 基础学习:
课前学习
一: DDL数据定义语言学习【库和表的管理】
二: MySQL常见数据类型
三: DML数据操作语言学习【增,删,改】
四: DQL查询语言学习
五: 小结
课前学习
1. 有关mysql安装请移步另外两篇博客
mysql在windows上安装: mysql本地安装
mysql在linux上安装: 在linux上安装mysql
2. MySQL 介绍:
MySQL是一种开源的关系型数据库管理系统。数据库是按照数据结构来组织,存储,和管理数据的仓库。
优点:
- 成本低:开放源代码,免费使用
- 性能高:执行快
- 容易安装和使用
3. MySQL分类:
- 关系型数据库 【由二维表及其之间的联系所组成的数据组织,如mysql,oracle等】
- 非关系型数据库 【非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储 方法的集合,可以是文档或者键值对等,如redis,mongdb,hbase等】
4. 启动mysql服务(默认自启),然后进入mysql客户端。
- 通过dos窗口进入: mysql -u root -p
- 通过command line client 进入:输入密码登录
- 通过第三方工具:sqlyog,navicat
5. mysql语法规范
- 不区分大小写【一般关键字大写,表名,列名小写】
- 命令以分号结尾 【命令长可分行写,最后以分号结尾即可】
- 单行注释:#
- 多行注释:/** 注释内容*/
6. mysql 最基本使用
展示所有数据库: show databases;
进入使用某一个数据库:use 数据库名;
展示数据库下所有表格:show tables;
展示表格数据:select * from 表名;
查看表结构: desc 表名
查看当前使用的所在数据库:select database();
查看数据库版本:select version();
一: DDL数据定义语言学习【库和表的管理】
1. 分类
- 数据库的管理 : 创建,修改,删除
- 表的管理 : 创建(create)修改(alter),删除(drop)
2. 数据库的管理
- create database [ if not exists ] 库名;
- 库的修改: 一般不修改名字,可在文件目录下修改
- alter database 库名 character set 字符集;
- drop database 库名;
3. 库中表的管理【表的创建,表的修改,表的删除,表的复制】
3.1 表的创建
create table 表名(
列名 列的类型 【(长度) 约束】,
列名 列的类型 【(长度) 约束】,
......
);
3.2 表的修改
- alter table 表名 rename to 新表名;
- change 旧列名 新列名 新列名类型;
- modify 列名 新类型;
- add 新列 列类型;
- drop 列名;
3.3 表的删除
drop table [ if exists ] 表名;
3.4 表的复制
1. 仅复制表结构 : create table 新表名 like 被复制表名;
2. 复制表结构+数据: create table 新表名 select * from 被复制表名;
3. 复制部分数据: create table 新表名 select 字段名1,字段名2,...... from 被复制表名;
二: MySQL 常见数据类型
- 数字型 【tinyint,smallint,mediumint,int , bigint , float , double】
- 文本型 【char,varchar,text,longtext,mediumtext】
- 日期/时间型 【
date() 格式为:YYYY-MM-DD
datetime() 格式为:YYYY-MM-DD HH:MM:SS
time() 格式为:HH:MM:S
year() 格式为:2位或4位的数字
】
三: DML数据操作语言学习【增,删,改】
数据操作: 增(insert)删(delete)查(select)改(update)
1. 插入语句:
- insert into 表名 (列名,.....)values(值1,值2,.....);
- insert into 表名 set 列名=值,列名2=值2,......;
特点:
1. 可以省略列名,默认所有列。
2. 不可以为null的列必须插入值
3. 列数与值个数一致
2. 修改语句:update 表名 set 列=新值,列2=新值,...... where 筛选条件;
3. 删除语句:
- delete from 表名 where 筛选条件;
- truncate table 表名;【删除整个表的数据】
对比 truncate 和 delete 两者区别:
1. delete 可以加where条件,truncate不能加
2. 使用delete删除,再插入数据,自增长列的值从断点开始,而truncate删除后,再插入数据,自增长列值从1开始。
3. delete可以回滚,truncate不能回滚
4. delete有返回值,truncate没有返回值
四: DQL查询语言学习
1. 查询表中字段:select 查询列表 from 表名
特点:
- 查询列表可以是: 字段,常量值,表达式,函数
- 查询列表用 * 表示所有字段
- 查询结果是一个虚拟表格
起别名: as
去重:distinct
拼接:concat
2. 条件查询:select 查询列表 from 表名 where 筛选条件
- 按条件表达式筛选 【> < = != <> >= <=】
- 按逻辑表达式筛选 【and (与) or(或) not(非)】
- 模糊筛选 【between and,like,in,is null】
- like一般和通配符搭配使用【%任意多个字符,_任意单个字符】
like使用:
between and使用:
is null使用:
3. 排序查询:select 查询列表 from 表 【where 筛选条件】order by 排序列表 【asc/desc】
- asc 升序; desc 降序
4. 常见函数
函数概念: 类似java方法,将一组逻辑语句封装到方法体中,对外暴露方法名
优点: 隐藏实现细节; 提高代码重用
调用: select 函数名(实参列表)【from 表】
分类: 单行函数;分组函数
4.1 单行函数【字符函数,数学函数,日期函数,其他函数,流程控制函数】
- 字符函数
length() : 获取参数值的字节个数
concat() : 拼接字符串
upper() : 大写
lower() : 小写
replace() : 替换
- 数学函数
round() : 四舍五入
mod() : 取余数【和%用法一样】
datediff() : 求相差数
- 日期函数
now(): 返回当前系统时间和日期
curdate(): 返回日期不含时间
curtime(): 返回时间不含日期
- 其他函数
version(): 查看当前版本
database():查看当前使用数据库
user(): 查看当前使用的用户
- 流程控制函数
if():效果相当于if else
case()函数: 类似switch case效果
案例:查询员工工资,满足条件增工资
4.2 分组函数 【用于统计使用】
- sum()求和
- avg() 平均值
- min() 最小值
- max() 最大值
- count()计算个数
5. 分组查询 (group by)
语法:
注意: 查询列表必须特殊,要求是分组函数和group by后面出现的字段。
简单使用:
分组查询中的筛选条件分为两类:
注: 1. 分组函数做条件,一定是放到having子句中。
2. 能用分组前筛选的,优先选择。
特点:1. 分组列表支持函数,多个字段
添加排序
6. 连接查询 :
产生: 当查询的字段来自多个表时,就会用到连接查询,又称为多表查询。
分类: 按年代: sql92标准(仅支持内连接)
sql99标准(支持多种,不支持全外连接)
按功能: 内连接(等值连接,非等值连接,自连接)
外连接(左外连接,右外连接,全外连接)
交叉连接
Sql92语法: Select 查询列表 from 表1 别名,表2 别名 where 连接条件
1, 等值连接:( 连接条件是等号 ‘=’ )
多表连接1的结果为多个表的交集部分
n表连接,至少需要n-1个连接条件
多表顺序没有要求
一般需要给表起别名
可以搭配前面介绍的所有子句使用。
2, 非等值连接:(连接条件不再是等于)
3, 自连接(自己连接自己,分为两个表来对比)
Sql99语法:
分类: (注意就是在连接类型处改即可)
内连接: inner (等值,非等值,自连接)
外连接: 左外: left 右外: right 全外: full
交叉连接:cross
内连接之等值连接:
三表等值连接:
非等值连接:
自连接:
外连接:查询结果为主表中所有记录
- 如果从表中有和它匹配的,则显示匹配值
- 如果从表中没有匹配的,则显示null
- 外连接查询结果=内连接+主表中有从表没有
主从区分:
1> 左外连接,left join左边的是主表
2> 右外连接,right join右边为主表
3> 右外和右外交换顺序,可以实现同样的效果
全外连接:查询结果=内连接+表1有但表2没有的+表2有但表1没有的。
交叉连接:(cross)相当于是笛卡尔乘积两两匹配
7. 子查询
含义:出现在其他语句中的select语句
分类: 按子查询出现位置:
Select后面 from后面 where或having后面
按结构集行列数不同:
标量子查询,列子查询,行子查询,表子查询
7.1 where 或 having后面:
1. 标量子查询(单行子查询)
2. 列子查询(多行子查询)
3. 行子查询(多行多列)
特点:
1》 子查询放在小括号内
2》 子查询一般放在条件右侧
3》 标量子查询,一般搭配单行操作符使用
4》 列子查询,一般搭配多行操作符使用(in,any/some ,all)
案例1: 查询工资比abel高的人的信息
案例2: 查询返回job_id与141号员工相同,salary比143号员工多的员工:姓名,job_id,和工资
案例3. 查询最低工资大于50号部门最低工资的部门id和其最低工资。
8. 列子查询(多行子查询)
案例:返回location_id是1400或1700的部门中的所有员工姓名
9. 分页查询
应用场景: 当要显示的数据,一页显示不全,需要分页提交sql请求。
语法:
select 查询列表 From 表【join type】join 表2【 On 连接条件 Where 筛选条件 Group by 分组字段
Having 分组后的筛选 Order by 排序的字段 】
Limit offset,size;
注意:
1. offset要显示条目的起始索引(索引从0开始),如果offset不屑,表示从0开始。
2. Size表示要显示的条目个数
特点:
- Limit语句反在查询语句的最后
- 公式:要显示的页数page ; 每页的条目数size
Select 查询列表 from 表 limit(page-1)*size ,size;
10. 联合查询:
Union 联合,合并:将多余查询语句的结果合并成一个结果。
语法:
查询语句1 union 查询语句2
使用场景: 要查询的结果来自多个表,且多个表没有直接的连接关系,当查询的信息一致时。
特点:
- 要求多条查询语句的查询个数为一致
- 要求多条查询语句的查询的每一条的类型和顺序最好一致
- Union关键字默认去重,如果使用union all可以包含重复项。
五: 小结
基础学习(一)给出了有关mysql常见数据类型,表数据的增删改查;库的创建,删除;表的创建,修改,删除,复制。后续给出有关MySQL的约束,TCL操作(事务控制)等的学习。只作为日常学习笔记,以后将继续学习补充。