乐趣区

关于java:MySQL夯实基础篇一

1. SQL 概述

因为查问语句应用的十分的频繁,所以很多人把查问语句单拎进去一类:DQL(数据查询语言)。
还有独自将 COMMITROLLBACK 取出来称为 TCL(Transaction Control Language,事务管制语言)。

  • DDL(Data Definition Languages、数据定义语言),这些语句定义了不同的数据库、表、视图、索引等数据库对象,还能够用来创立、删除、批改数据库和数据表的构造。

    • 次要的语句关键字包含 CREATEDROPALTER等。
  • DML(Data Manipulation Language、数据操作语言),用于增加、删除、更新和查询数据库记录,并查看数据完整性。

    • 次要的语句关键字包含 INSERTDELETEUPDATESELECT等。
    • SELECT 是 SQL 语言的根底,最为重要。
  • DCL(Data Control Language、数据管制语言),用于定义数据库、表、字段、用户的拜访权限和安全级别。

    • 次要的语句关键字包含 GRANTREVOKECOMMITROLLBACKSAVEPOINT等。

2. SQL 语言的规定与标准

2.1 根本规定

  • SQL 能够写在一行或者多行。为了进步可读性,各子句分行写,必要时应用缩进
  • 每条命令以 ; 或 \g 或 \G 完结
  • 关键字不能被缩写也不能分行
  • 对于标点符号

    • 必须保障所有的()、单引号、双引号是成对完结的
    • 必须应用英文状态下的半角输出形式
    • 字符串型和日期工夫类型的数据能够应用单引号(’ ‘)示意
    • 列的别名,尽量应用双引号(” “),而且不倡议省略 as

2.2 SQL 大小写标准(倡议恪守)

  • MySQL 在 Windows 环境下是大小写不敏感的
  • MySQL 在 Linux 环境下是大小写敏感的

    • 数据库名、表名、表的别名、变量名是严格辨别大小写的
    • 关键字、函数名、列名(或字段名)、列的别名(字段的别名) 是疏忽大小写的。
  • 举荐采纳对立的书写标准:

    • 数据库名、表名、表别名、字段名、字段别名等都小写
    • SQL 关键字、函数名、绑定变量等都大写

2.3 命名规定(临时理解)

  • 数据库、表名不得超过 30 个字符,变量名限度为 29 个
  • 必须只能蕴含 A–Z, a–z, 0–9, _共 63 个字符
  • 数据库名、表名、字段名等对象名两头不要蕴含空格
  • 同一个 MySQL 软件中,数据库不能同名;同一个库中,表不能重名;同一个表中,字段不能重名
  • 必须保障你的字段没有和保留字、数据库系统或罕用办法抵触。如果保持应用,请在 SQL 语句中应用 `(着重号)引起来
  • 放弃字段名和类型的一致性,在命名字段并为其指定数据类型的时候肯定要保障一致性。如果数据类型在一个表里是整数,那在另一个表里可就别变成字符型了

2.5 数据导入指令

在命令行客户端登录 mysql,应用 source 指令导入

  • 例如:mysql> source d:\mysqldb.sql

3. 显示表构造

应用 DESCRIBE 或 DESC 命令,示意表构造。

  • 例如:DESCRIBE employees; 或 DESC employees;

4. 多表查问

4.1 SQL99 语法实现多表查问的根本语法

  • 应用 JOIN…ON 子句创立连贯的语法结构:

    SELECT table1.column, table2.column,table3.column
    FROM table1
        JOIN table2 ON table1 和 table2 的连贯条件
            JOIN table3 ON table2 和 table3 的连贯条件

    SQL99 采纳的这种嵌套构造十分清新、层次性更强、可读性更强,即便再多的表进行连贯也都清晰可见。如果你采纳 SQL92,可读性就会大打折扣。

  • 语法阐明:

    • 能够应用 ON 子句指定额定的连贯条件
    • 这个连贯条件是与其它条件离开的。
    • ON子句使语句具备更高的易读性
    • 关键字 JOIN、INNER JOIN、CROSS JOIN 的含意是一样的,都示意内连贯

4.2 内连贯 (INNER JOIN) 的实现

  • 语法:

    SELECT 字段列表
    FROM A 表 INNER JOIN B 表
    ON 关联条件
    WHERE 等其余子句;

4.3 外连贯 (OUTER JOIN) 的实现

4.3.1 左外连贯(LEFT OUTER JOIN)

  • 语法:

    # 实现查问后果是 A
    SELECT 字段列表
    FROM A 表 LEFT JOIN B 表
    ON 关联条件
    WHERE 等其余子句;

4.3.2 右外连贯(RIGHT OUTER JOIN)

  • 语法:

    # 实现查问后果是 B
    SELECT 字段列表
    FROM A 表 RIGHT JOIN B 表
    ON 关联条件
    WHERE 等其余子句;

4.3.3 满外连贯(FULL OUTER JOIN)

  • 满外连贯的后果 = 左右表匹配的数据 + 左表没有匹配到的数据 + 右表没有匹配到的数据。
  • SQL99 是反对满外连贯的。应用 FULL JOIN 或 FULL OUTER JOIN 来实现。
  • 须要留神的是,MySQL 不反对 FULL JOIN,然而能够用 LEFT JOIN UNION RIGHT join 代替。

5. UNION 的应用

  • 合并查问后果

    利用 UNION 关键字,能够给出多条 SELECT 语句,并将它们的后果组合成单个后果集。合并时,两个表对应的列数和数据类型必须雷同,并且互相对应。各个 SELECT 语句之间应用 UNION 或 UNION ALL 关键字分隔。

    语法格局:

    SELECT column,... FROM table1
    UNION [ALL]
    SELECT column,... FROM table2
  • UNION 操作符

    UNION 操作符返回两个查问的后果集的并集,去除重复记录。
  • UNION ALL 操作符

    UNION ALL 操作符返回两个查问的后果集的并集。对于两个后果集的重复部分,不去重。

    留神:执行 UNION ALL 语句时所须要的资源比 UNION 语句少。如果明确晓得合并数据后的后果数据不存在反复数据,或者不须要去除反复的数据,则尽量应用 UNION ALL 语句,以进步数据查问的效率。

6. SELECT 的执行过程

6.1 查问的构造

# 形式 1:SELECT ...,....,...
FROM ...,...,....
WHERE 多表的连贯条件
AND 不蕴含组函数的过滤条件
GROUP BY ...,...
HAVING 蕴含组函数的过滤条件
ORDER BY ... ASC/DESC
LIMIT ...,...

#形式 2:SELECT ...,....,...
FROM ... JOIN ... 
ON 多表的连贯条件
JOIN ...
ON ...
WHERE 不蕴含组函数的过滤条件
AND/OR 不蕴含组函数的过滤条件
GROUP BY ...,...
HAVING 蕴含组函数的过滤条件
ORDER BY ... ASC/DESC
LIMIT ...,...

#其中:#(1)from:从哪些表中筛选
#(2)on:关联多表查问时,去除笛卡尔积
#(3)where:从表中筛选的条件
#(4)group by:分组根据
#(5)having:在统计后果中再次筛选
#(6)order by:排序
#(7)limit:分页

6.2 SELECT 执行程序

  • 1. 关键字的程序是不能颠倒的

    SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ... LIMIT...
  • 2.SELECT 语句的执行程序(在 MySQL 和 Oracle 中,SELECT 执行程序基本相同)

    FROM -> WHERE -> GROUP BY -> HAVING -> SELECT 的字段 -> DISTINCT -> ORDER BY -> LIMIT


    比方你写了一个 SQL 语句,那么它的关键字程序和执行程序是上面这样的:

    SELECT DISTINCT player_id, player_name, count(*) as num # 程序 5
    FROM player JOIN team ON player.team_id = team.team_id # 程序 1
    WHERE height > 1.80 # 程序 2
    GROUP BY player.team_id # 程序 3
    HAVING num > 2 # 程序 4
    ORDER BY num DESC # 程序 6
    LIMIT 2 # 程序 7

    在 SELECT 语句执行这些步骤的时候,每个步骤都会产生一个 虚构表,而后将这个虚构表传入下一个步骤中作为输出。须要留神的是,这些步骤隐含在 SQL 的执行过程中,对于咱们来说是不可见的。

6.3 SQL 的执行原理

  • SELECT 是先执行 FROM 这一步的。在这个阶段,如果是多张表联查,还会经验上面的几个步骤:
  1. 首先先通过 CROSS JOIN 求笛卡尔积,相当于失去虚构表 vt(virtual table)1-1;
  2. 通过 ON 进行筛选,在虚构表 vt1-1 的根底上进行筛选,失去虚构表 vt1-2;
  3. 增加内部行。如果咱们应用的是左连贯、右链接或者全连贯,就会波及到内部行,也就是在虚构表 vt1-2 的根底上减少内部行,失去虚构表 vt1-3。
退出移动版