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还需要学习pg 学mysql要什么基础_mysql


二: 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. 列数与值个数一致

懂mysql还需要学习pg 学mysql要什么基础_mysql_02

2.   修改语句:update 表名 set 列=新值,列2=新值,...... where 筛选条件;

懂mysql还需要学习pg 学mysql要什么基础_懂mysql还需要学习pg_03

3.   删除语句:

  •   delete from 表名 where 筛选条件;

懂mysql还需要学习pg 学mysql要什么基础_mysql_04

  •   truncate table 表名;【删除整个表的数据】

对比 truncate 和 delete 两者区别:

1.   delete 可以加where条件,truncate不能加

2.   使用delete删除,再插入数据,自增长列的值从断点开始,而truncate删除后,再插入数据,自增长列值从1开始。

3.    delete可以回滚,truncate不能回滚

4.    delete有返回值,truncate没有返回值

 


四: DQL查询语言学习

1.   查询表中字段:select 查询列表 from 表名

特点:

  • 查询列表可以是: 字段,常量值,表达式,函数
  • 查询列表用 * 表示所有字段
  • 查询结果是一个虚拟表格

起别名: as

懂mysql还需要学习pg 学mysql要什么基础_表名_05

去重:distinct

懂mysql还需要学习pg 学mysql要什么基础_懂mysql还需要学习pg_06

拼接:concat

懂mysql还需要学习pg 学mysql要什么基础_表名_07

2.    条件查询:select 查询列表 from 表名  where 筛选条件

  •  按条件表达式筛选 【> < = != <> >= <=】
  •  按逻辑表达式筛选 【and (与) or(或) not(非)】
  •  模糊筛选  【between and,like,in,is null】
  •  like一般和通配符搭配使用【%任意多个字符,_任意单个字符

like使用:

懂mysql还需要学习pg 学mysql要什么基础_表名_08

between and使用:

懂mysql还需要学习pg 学mysql要什么基础_子查询_09

is null使用:

懂mysql还需要学习pg 学mysql要什么基础_子查询_10

3.     排序查询:select 查询列表 from 表 【where 筛选条件】order by 排序列表 【asc/desc】

  •  asc 升序; desc  降序

懂mysql还需要学习pg 学mysql要什么基础_表名_11

4.      常见函数

函数概念: 类似java方法,将一组逻辑语句封装到方法体中,对外暴露方法名

优点: 隐藏实现细节; 提高代码重用

调用: select 函数名(实参列表)【from  表】

分类: 单行函数;分组函数

4.1    单行函数【字符函数,数学函数,日期函数,其他函数,流程控制函数】

  • 字符函数

length()  :  获取参数值的字节个数

concat()  :  拼接字符串

upper()   :  大写

lower()    :  小写

replace() : 替换

  • 数学函数

round()    :   四舍五入

mod()      :   取余数【和%用法一样】

datediff() :   求相差数

懂mysql还需要学习pg 学mysql要什么基础_表名_12

  • 日期函数

now(): 返回当前系统时间和日期

curdate(): 返回日期不含时间

curtime(): 返回时间不含日期

  • 其他函数

version(): 查看当前版本

database():查看当前使用数据库

user():    查看当前使用的用户

  • 流程控制函数

if():效果相当于if else

懂mysql还需要学习pg 学mysql要什么基础_mysql_13

case()函数: 类似switch case效果

懂mysql还需要学习pg 学mysql要什么基础_mysql_14

案例:查询员工工资,满足条件增工资

懂mysql还需要学习pg 学mysql要什么基础_mysql_15

4.2     分组函数 【用于统计使用】

  • sum()求和
  • avg() 平均值
  • min() 最小值
  • max() 最大值
  • count()计算个数

5.     分组查询 (group by)

语法:

懂mysql还需要学习pg 学mysql要什么基础_mysql_16

注意: 查询列表必须特殊,要求是分组函数和group by后面出现的字段。

简单使用:

懂mysql还需要学习pg 学mysql要什么基础_mysql_17

分组查询中的筛选条件分为两类:

懂mysql还需要学习pg 学mysql要什么基础_子查询_18

注: 1. 分组函数做条件,一定是放到having子句中。

     2. 能用分组前筛选的,优先选择。

懂mysql还需要学习pg 学mysql要什么基础_表名_19

 

特点:1.  分组列表支持函数,多个字段

添加排序

懂mysql还需要学习pg 学mysql要什么基础_懂mysql还需要学习pg_20

 

6.       连接查询 :

产生: 当查询的字段来自多个表时,就会用到连接查询,又称为多表查询。

分类: 按年代:  sql92标准(仅支持内连接)

                            sql99标准(支持多种,不支持全外连接)

            按功能:      内连接(等值连接,非等值连接,自连接)

                           外连接(左外连接,右外连接,全外连接)

                           交叉连接

Sql92语法:  Select 查询列表 from 表1 别名,表2 别名 where 连接条件

 

1,  等值连接:( 连接条件是等号 ‘=’ )

多表连接1的结果为多个表的交集部分
n表连接,至少需要n-1个连接条件
多表顺序没有要求
一般需要给表起别名
可以搭配前面介绍的所有子句使用。

懂mysql还需要学习pg 学mysql要什么基础_懂mysql还需要学习pg_21

2, 非等值连接:(连接条件不再是等于)

3, 自连接(自己连接自己,分为两个表来对比)

懂mysql还需要学习pg 学mysql要什么基础_mysql_22

 

Sql99语法:

懂mysql还需要学习pg 学mysql要什么基础_子查询_23

分类: (注意就是在连接类型处改即可)

内连接: inner (等值,非等值,自连接)

外连接: 左外: left    右外: right  全外: full

交叉连接:cross

 

内连接之等值连接:

懂mysql还需要学习pg 学mysql要什么基础_表名_24

三表等值连接:

懂mysql还需要学习pg 学mysql要什么基础_懂mysql还需要学习pg_25

非等值连接:

懂mysql还需要学习pg 学mysql要什么基础_懂mysql还需要学习pg_26

自连接:

懂mysql还需要学习pg 学mysql要什么基础_子查询_27

外连接:查询结果为主表中所有记录

  1. 如果从表中有和它匹配的,则显示匹配值
  2. 如果从表中没有匹配的,则显示null
  3. 外连接查询结果=内连接+主表中有从表没有

主从区分:

         1> 左外连接,left join左边的是主表

          2> 右外连接,right join右边为主表

          3> 右外和右外交换顺序,可以实现同样的效果

懂mysql还需要学习pg 学mysql要什么基础_懂mysql还需要学习pg_28

全外连接:查询结果=内连接+表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高的人的信息

懂mysql还需要学习pg 学mysql要什么基础_子查询_29

案例2: 查询返回job_id与141号员工相同,salary比143号员工多的员工:姓名,job_id,和工资

懂mysql还需要学习pg 学mysql要什么基础_mysql_30

案例3.  查询最低工资大于50号部门最低工资的部门id和其最低工资。

懂mysql还需要学习pg 学mysql要什么基础_懂mysql还需要学习pg_31

 

8.        列子查询(多行子查询)

案例:返回location_id是1400或1700的部门中的所有员工姓名

懂mysql还需要学习pg 学mysql要什么基础_懂mysql还需要学习pg_32

 

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表示要显示的条目个数

懂mysql还需要学习pg 学mysql要什么基础_子查询_33

特点:

  1. Limit语句反在查询语句的最后
  2. 公式:要显示的页数page ; 每页的条目数size

Select 查询列表 from 表 limit(page-1)*size ,size;

 

10.       联合查询:

Union 联合,合并:将多余查询语句的结果合并成一个结果。

语法:

查询语句1  union 查询语句2

使用场景: 要查询的结果来自多个表,且多个表没有直接的连接关系,当查询的信息一致时。

特点:

  1. 要求多条查询语句的查询个数为一致
  2. 要求多条查询语句的查询的每一条的类型和顺序最好一致
  3. Union关键字默认去重,如果使用union all可以包含重复项。

 


五: 小结

基础学习(一)给出了有关mysql常见数据类型,表数据的增删改查;库的创建,删除;表的创建,修改,删除,复制。后续给出有关MySQL的约束,TCL操作(事务控制)等的学习。只作为日常学习笔记,以后将继续学习补充。